求解释下边这段51单片机汇编程序存在的问题,为什么我不能得到想要的结果

我想实现的功能:循环从p0口的7、8口输出01、01、10 。同时循环从串口输出数字0~9的字符码,用led显示。请指出我的代码中的所有问题,谢谢,有重谢

START: MOV DPTR, #TAB
CLR SCON.6
CLR SCON.7
CLR PSW.4
SETB PSW.3
MOV R0, #00H
MOV R1, #00111111B
;上为初始化,以及给R0、R1赋值。但是为什么实际并没有赋值?
DIS: MOV A, R1
ANL A, P0
ANL A, R1
MOV P0, A
MOV A, R0
MOVC A, @ A+DPTR
MOV SBUF, A
INC R0
MOV A, R1
ADD A, #01000000B
MOV R1, A

CJNE R0, #09H, DIS1
MOV R0, #00H

DIS1: CJNE R1, #0FFH, DIS2
MOV R1, #00111111B

DIS2: AJMP DIS

【1】循环输出到P0,每次将P0口状态和A相‘与’后输出,可能得不到理想结果。意图是取A的高两位和P0口的低6位输出。
MOV A, R1 ANL A,P0 改成:MOV A,P0; ORL A,#0C0H; ANL A,R1;MOV P0,A
【2】串口循环输出,是同步移位方式送LED显示,是吗?需要考虑发送的时间,考虑硬件移位是否需要锁存控制。另外TAB表没给出 TAB:DB 0xxh,0xxh,0xxh,……
【3】整个程序的速度太快,可能你是无法看到变化过程的。因此在每次变化前调用一次延时。编写个1秒左右的延时。在每次DIS前调用一下。或者用定时中断等待一下秒标志。
祝你成功!
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-11

51单片机汇编程序,编程方法应该先都看一下 例程,对学习有帮助

这个供参考,如有需要还可以提供。

求解释下边这段51单片机汇编程序存在的问题,为什么我不能得到想要的结果...
【3】整个程序的速度太快,可能你是无法看到变化过程的。因此在每次变化前调用一次延时。编写个1秒左右的延时。在每次DIS前调用一下。或者用定时中断等待一下秒标志。祝你成功!

51单片机汇编程序问题
MOV TMOD, #01H ;工作方式1 MOV TH0, #3CH ;装入初值 定时50毫秒 MOV TL0, #0B0H SETB ET0 SETB EA SETB TR0 ;定时器0控制位 ; ---此处,缺少循环,自动往下执行到中断程序去了 SJMP $ ;---加上这行,再试试看。INT_T0:MOV TH0, #3...

急求:单片机MS-51,用汇编语言编写程序的问题. 高手的高分,谢谢,
用B方法即可。但是乘以 3.53,还应该研究一下。实际上,不是255对应900,而是256对应900。那么:900 \/ 256 = 3.515 把0.015忽略,由此产生的误差,小于百分之一。那么,全部使用整数的运算,有:(0~255) * 35 = (0~8925)显示的时候,只是显示前3位,即可。--- 用8位的AD转换器,精度就...

51单片机汇编2进制转BCD码,程序有疑问
这段程序是正确的,我已经验证过了 R6=13=0x0d,R7=34=0x22,所以在R6R7中保存的是0x0d22,转换成10进制就是3362,而程序结束时,R2R3R4中保存的就是0x003362。总的思路就是R6R7中16进制数左移,将最高位推入R2R3R4的最低位,然后将R4进行DA,如果超过了99就会有进位,将R3自加倍再加进位...

高分:51单片机汇编程序问题,为什么没调用的程序会对原程序产生影响
seg位置影响了数码管显示 去掉org 0100h 因为程序编译代码会超过0100h,覆盖了seg的数据 使得乱码 而删除show1234段使得程序代码短了,seg段就正常了

51单片机汇编程序如下 为什么一直都是p1.0为低电平啊 我设置的是循环啊...
不改的话你的程序永远跳不出循环,你的P2.0口,永远是低电平,而且不会变,你编的程序也有问题,现在实现的是接P2口的八个灯,低亮,而且只会递亮8次就一直亮着了 如果要实现流水,主程序改为:ORG 00H MOV A, #0FEH START:MOV P2,A RL A 如果想要实现递高主程序改为 ORG 00H MAIN: MOV A...

51单片机汇编程序跳转问题,
不能跳转到子程序或从一个子程序跳转到另一个子程序,这主要是牵涉到子程序的调用有现场保护也就是堆栈的问题,如果跳转到其他子程序,那么返回时就会破坏这个被保护的现场,出现一些未知的结果。

单片机程序,程序没问题,编译不出来怎么回事?
根据提供的单片机程序,无法准确判断编译不通过的具体原因,可能存在以下几种可能性:1. 编译环境配置问题:请确认是否已经正确配置了单片机的编译环境,在编译前需要正确安装并配置相应的开发工具和编译器。2. 语法错误:程序中可能存在语法错误,比如缺少分号、括号不匹配、变量命名错误等。请仔细检查所有语句...

51单片机中的汇编代码延时有点搞不清楚,请详细解释下子这个延时子程序...
程序在执行指令的时候是要占用时间的,DJNZ为双字节指令,晶振为12MHZ的单片机执行这一条指令为24个震荡周期,也就是2微秒,通过不断让它循环来达到延时的目的。

求能人解释或翻译一下下面的51单片机汇编语言程序(2)
这是个中断函数,通过判断不同引脚的电平,令显示部分的高位或低位循环:INTE: PUSH PSW ;进入中断,先保护现场 PUSH ACC JB P1.7,KE3 ;如果P1.7高电平或P1.6低电平则跳转到KE3处 JNB P1.6,KE3 LCALL D10MS ;延时10毫秒 LCALL DISP ;调用显示函数 INC ...

相似回答