在51单片机中,用汇编语言,RLC A,为什么左移两位以后,不是两个灯点亮?

在51单片机的汇编程序中,A=0FFH,A左移两位以后变成11111100,为什么不是两个LED点亮,而是只有一个?... 在51单片机的汇编程序中,A=0FFH,A左移两位以后变成11111100,为什么不是两个LED点亮,而是只有一个? 展开
 我来答
意法半导体(中国)投资有限公司 2023-06-12
展开全部
char seg7[10]={0xc0,0xf9,0xa4,0xb0,0x9,0x92,0x82,0xf8,0x80} sbit w1=b2^0; sbit w2=b2^1; sbit k1=b3^0; /=1表示键盘按下 char count; void main(){ char flg=0; count =0; P0=0xf; /P0口接共阳极数码管,则低电平LED亮 w1=0; w2=0; /高电平LED亮 while(1){ P0=seg7[count/10];w1=1;w2=0; /显示十位 if(k1=0 & flg=0) flg=1; /键盘按下 delaymS(20); /延时20mS P0=seg7[count%10];w1=0;w2=1; /显示个位 if(k1=0 & flg=1) flg=2; /键盘按下有效 delaymS(20); /延时20mS if(k1=1 & flg=2) /键盘抬起 { count+; flg=0;} if(count>9)count=0; w1=0; w…
lycdl
高粉答主

推荐于2017-11-26 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:5165万
展开全部
用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
..................
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机是一种集成电路芯片。又称单片微控制器,是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。一块芯片就成了一台计算机。特点是体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。 单... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
zhxiufan
2016-01-02 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38389
国家科技进步奖

向TA提问 私信TA
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaomage_2000
2013-11-14 · TA获得超过3622个赞
知道大有可为答主
回答量:1772
采纳率:100%
帮助的人:882万
展开全部
A=0ffh的话,应该是用低电平点亮的吧,本来用RLC带C寄存器位循环左移就是1位,因为你应该有位移入C寄存器了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w2m1990
2013-11-14
知道答主
回答量:33
采纳率:0%
帮助的人:15.3万
展开全部
  1. 硬件,保证LED是好的。2.用万用表测一下单片机对应的IO口是否是输出低了 3.软件检查下对应IO口是否设为输出状态,如果是输入的话,高阻,是导通不了的。

     

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式