51单片机指令

MOV TMOD,#10H
SETB TR1
LOOP: MOV TH1,#0D8H
MOV TL1,#0F0H
JNB TF1,$
CLR TF1
CPL P1.1
SJMP LOOP
请高手帮我详细的解读一下这个程序,还有这句 JNB TF1,$ 我始终搞不懂什么意思,请各位大侠帮帮忙,尽量说详细点,谢谢了 。

TF1是定时器1溢出标志位,$是取地址。JNB TF1,$ 实现的功能是查询定时器1溢出标志位,如果为0,跳转到本条指令继续执行(即继续查询)直到定时时间到,TF1置位,才执行下一条指令。
给你注释一下:
MOV TMOD,#10H //设置定时器工作方式(定时器1,工作方式2)
SETB TR1 //开启定时器1
LOOP: MOV TH1,#0D8H //装初值D8F0H 即55536,定时10mS(晶振12M)时间随晶振改变
MOV TL1,#0F0H
JNB TF1,$ //查询等待定时器1中断
CLR TF1 //定时器溢出标志位清0(定时时间到后硬件自动给TF1置位,需软件清0)
CPL P1.1 //P1.1取反
SJMP LOOP //跳到LOOP处循环(是个死循环)
该段程序实现的功能是:每隔10mS对P1.1取反一次。(10mS当然是晶振为12M的情况下)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-08
51单片机的指令:
1、数据传送类指令
助记符 功能说明 字节数 振荡周期
MOV A,Rn 寄存器内容送入累加器 1 12
MOV A,direct 直接地址单元中的数据送入累加器 2 12
MOV A,@Ri 间接RAM中的数据送入累加器 1 12
MOV A,#data8 8位立即数送入累加器 2 12
MOV Rn,A 累加器内容送入寄存器 1 12
MOV Rn,direct 直接地址单元中的数据送入寄存器 2 24
MOV Rn,#data8 8位立即数送入寄存器 2 12
MOV direct,A 累加器内容送入直接地址单元 2 12
MOV direct,Rn 寄存器内容送入直接地址单元 2 24
MOV direct,direct 直接地址单元中的数据送入直接地址单元 3 24
MOV direct,@Ri 间接RAM中的数据送入直接地址单元 2 24
MOV direct,#data8 8位立即数送入直接地址单元 3 24
MOV @Ri,A 累加器内容送入间接RAM单元 1 12
MOV @Ri,direct 直接地址单元中的数据送入间接RAM单元 2 24
MOV @Ri,#data8 8位立即数送入间接RAM单元 2 12
2、算术操作类指令

助记符 功能说明 字节数 振荡周期
ADD A,Rn 寄存器内容加到累加器 1 12
ADD A,direct 直接地址单元加到累加器 2 12
ADD A,@Ri 间接RAM内容加到累加器 1 12
ADD A,#data8 8位立即数加到累加器 2 12
3、逻辑操作类指令

助记符 功能说明 字节数 振荡周期
ANL A,Rn 累加器与寄存器相“与” 1 12
ANL A,direct 累加器与直接地址单元相“与” 2 12
ANL A,@Ri 累加器与间接RAM内容相“与” 1 12
ANL A,#data8 累加器与8位立即数相“与” 2 12
ANL direct,A 直接地址单元与累加器相“与” 2 12
ANL direct,#data8 直接地址单元与8位立即数相“与” 3 24
4、控制转移类指令

助记符 功能说明 字节数 振荡周期
ACALL addr11 绝对短调用子程序 2 24
LACLL addr16 长调用子程序 3 24
RET 子程序返回 1 24
RETI 中断返回 1 24
AJMP addr11 绝对短转移 2 24
LJMP addr16 长转移 3 24
SJMP rel 相对转移 2 24
JMP @A+DPTR 相对于DPTR的间接转移 1 24
JZ rel 累加器为零转移 2 24
JNZ rel 累加器非零转移 2 24
CJNE A,direct,rel 累加器与直接地址单元比较,不等则转移 3 24
CJNE A,#data8,rel 累加器与8位立即数比较,不等则转移 3 24
CJNE Rn,#data8,rel 寄存器与8位立即数比较,不等则转移 3 24
(相等则执行本指令的下一条)
5、布尔变量操作类指令

助记符 功能说明 字节数 振荡周期
CLR C 清进位位 1 12
CLR bit 清直接地址位 2 12
SETB C 置进位位 1 12
SETB bit 置直接地址位 2 12
CPL C 进位位求反 1 12
CPL bit 直接地址位求反 2 12
ANL C,bit 进位位和直接地址位相“与” 2 24
ANL C,/bit 进位位和直接地址位的反码相“与” 2 24
ORL C,bit 进位位和直接地址位相“或” 2 24
ORL C,/bit 进位位和直接地址位的反码相“或” 2 24
MOV C,bit 直接地址位送入进位位 2 12
MOV bit,C 进位位送入直接地址位 2 24
JC rel 进位位为1则转移(CY=O不转移,=1转移) 2 24
JNC rel 进位位为0则转移(和上面相反) 2 24
JB bit,rel 直接地址位为1则转移 3 24
JNB bit,rel 直接地址位为0则转移 3 24
JBC bit,rel 直接地址位为1则转移,该位清零 3 24
第2个回答  2010-12-28
JNB ump if no below 如果不小于就跳转

TF1 是定时器的标志吧

JNB TF1,$ 即TF1=0就跳转,$代表地址,我猜一般情况下$即代表当前地址,你可以查下书。

JNB TF1,$ 我猜是用来等待定时时间到来的意思.
定时时间一到,TF1就被置1,导致死循环结束(TF1默认为0,导致这段代码一直死循环)。

如果$代表的是下一个地址,那就解释成,定时时间一到TF1就被置0,程序进入下一步。

我觉得$代表当前的地址可行性高点,TF1默认是多少,你查下书吧.....

我也半桶水....其他的百度一下就可以了嘛。
第3个回答  2019-12-15
不知道你想实现什么功能?
你的意思是不是想说明如果P1=P2,那你的程序就有点问题,If
{p1=p2}这句话的意思是如果P2的值赋给P1,应该写作If
{p1==p2},双等号是测试等于的意思,但等号是赋值的意思。
相似回答