在51单片机中,用汇编语言,RLC A,为什么左移两位以后,不是两个灯点亮?
在51单片机的汇编程序中,A=0FFH,A左移两位以后变成11111100,为什么不是两个LED点亮,而是只有一个?...
在51单片机的汇编程序中,A=0FFH,A左移两位以后变成11111100,为什么不是两个LED点亮,而是只有一个?
展开
4个回答
展开全部
用RLC A左移,其中包括了进位位Cy了,A左移两位以后不一定变成11111100,因为原来Cy的状态未知,所以,不是亮两个LED,当然需要是LED的负极接在I/O脚上,是0有效才能是输出0使LED亮。
要保证变成11111100,需要这么写:
CLR C
RLC A
CLR C
RLC A
如果是循环左移的话,就写一对;
MOV R7,#8 ;循环8次
LOP:CLR C
RLC A
MOV P0,A
DJNZ R7,LOP
..................
要保证变成11111100,需要这么写:
CLR C
RLC A
CLR C
RLC A
如果是循环左移的话,就写一对;
MOV R7,#8 ;循环8次
LOP:CLR C
RLC A
MOV P0,A
DJNZ R7,LOP
..................
展开全部
51单片机中,RLC A是带进位的循环左移,所以执行的结果不是将低位清0,要想将低位清零,实现点亮两个灯可以采取的方法:
1、直接赋值实现:
A: MOV P1,#0FCH
B: MOV A,P1
ANL A,#0FCH
MOV P1,A
2、用循环命令,但每循环一次,需要将C清0
MOV A,P1
CLR C
RLC A
CLR C
RLC A
MOV P1,A
1、直接赋值实现:
A: MOV P1,#0FCH
B: MOV A,P1
ANL A,#0FCH
MOV P1,A
2、用循环命令,但每循环一次,需要将C清0
MOV A,P1
CLR C
RLC A
CLR C
RLC A
MOV P1,A
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
A=0ffh的话,应该是用低电平点亮的吧,本来用RLC带C寄存器位循环左移就是1位,因为你应该有位移入C寄存器了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
硬件,保证LED是好的。2.用万用表测一下单片机对应的IO口是否是输出低了 3.软件检查下对应IO口是否设为输出状态,如果是输入的话,高阻,是导通不了的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询