单片机问题

我做了一个小设计,用的是AT89C2051,其中P1口接两位BCD指拨开关(具体接法是公共端接P1.1和P1.2口,8421分别接在P1.3~P1.6口),P3.2接了一个开关,P3.3接了一个继电器,我现在想通过开关控制继电器开合,具体要求是:按开关的次数由BCD开关的十位来决定(即如果BCD开关上显示的是数字3,则按3次P3.2所接的开关,继电器才开始动作,显示的是数字5,则按5次继电器才动作,以此类推),继电器开合时间由BCD开关的个位控制,(同样的,如果BCD开关上显示的是数字3,则继电器开或合3分钟,是5则开或合5分钟,以此类推)请哪位前辈高手帮忙写个程序,让我学习学习。在此万分感谢。
我不知道如何将P1口的个位和十位分开,也就是如何将读入的P1口值分开成两部分,十位用于控制开关数,个位用于继电器时间控制,能不能请留言的前辈们说具体点,最好是能写个程序让我学学。我刚学单片机,比您们想像的要笨!谢谢大家了!!

两个8421拨码开关,设定了按键次数和延时时间(分钟数);
按键输入、继电器输出。
很简单,楼主写的非常清楚。
楼主可以自己编写一些,大家再来帮忙。
----------------------------
读入8421拨码开关:

SETB P1.1 ;屏蔽一组
CLR P1.0 ;P1.0所连接的拨盘有效
MOV A, P1 ;读入,低有效
CPL A ;有效值变高
RR A
RR A
ANL A, #0FH ;留下低四位
MOV R7, A ;存好

SETB P1.0 ;屏蔽另一组
CLR P1.1 ;P1.1所连接的拨盘有效
MOV A, P1 ;读入,低有效
CPL A ;有效值变高
RR A
RR A
ANL A, #0FH ;留下低四位
MOV R6, A ;存好

这样,就将两组BCD码,存到了R6和R7。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-10
将P1口的个位和十位分开,也就是如何将读入的P1口值分开成两部分
和矩阵键盘原理是一样的 反转法就可以~
第2个回答  2009-09-10
ANL ORL这2指令
第3个回答  2019-04-17
这里的第六行和第七行首先要知道TF0的意思:
TF0是定时/计数器
控制寄存器
中的一个标志位
TF0=0:表示定时器0没有溢出,可以正常计时;
当定时器0计时时间到,产生溢出,就会使得TF0=1。
因此第六行用while(!TF0)即当TF0=0时执行循环,如果计时时间到,TF0就会置1,这时跳出循环,执行下面的语句,清除计时结束标志,以便进行下一次延时计数。
第4个回答  2020-08-09
atmel/intel的80c51系列的不能现场编程,需拆下芯片使用专门的脱机编程器。s系列的可以isp在线编程。stc的可串口在线编程。观察芯片的工作状态,只能通过软件设置运行指示或是按照一定的通讯协议对外发送数据,来解析机器工作状态。