1 MOV RO,#01H
2 MOV A,#0FFH
3 LOOP:MOV @RO,A
4 INC RO
5
6 CJNE RO,#80H,LOOP
7 MOV RO,#00H
8 MOV @RO,#OFFH
9 SJMP $
10 END
在8051单片机中,MOV指令可以用来将立即数或者寄存器中的数据移动到另一个寄存器中。在你提供的代码中,MOV R0, #00H将立即数0x00复制到寄存器R0中。MOV R0, #01H将立即数0x01复制到寄存器R0中。
根据你提供的代码,使用MOV R0, #00H指令会导致程序陷入无限循环的问题。这是因为在该指令后,程序会一直执行循环LOOP,这是因为指令MOV @RO,A将地址为0x0000(因为R0的值为0x00)的内存位置上的值设置为0xFF。在下一条指令INC RO后,R0的值增加为0x01。由于该内存位置的值被设置为0xFF,程序会一直执行循环直到R0的值变为0x80时退出循环。因为在8051单片机中,RAM的地址空间只有128字节,所以地址为0x80到0xFF的区域是无法被访问的。
相反,使用MOV R0, #01H指令是正常的,因为在执行指令MOV @RO,A时,地址为0x0100(因为R0的值为0x01)的内存位置上的值被设置为0xFF。在下一条指令INC RO之后,R0的值增加为0x02,这意味着程序不会在访问RAM时陷入无限循环,因为所有的RAM地址都可以被访问。
因此,在你提供的代码中,使用MOV R0, #01H是正确的方式来初始化寄存器R0。