单片机80c51,汇编语言。运行一会就出现错误,请高手指教一下

ORG 0000H

MOV 38H,#01H
MOV 39H,#02H
MOV 3AH,#03H
MOV 3BH,#04H
MOV 3CH,#05H
MOV 3DH,#06H
NEXT: LCALL DISP
LCALL DL1MS
SJMP NEXT
SJMP NEXT

DISP:
MOV R0,#38H
MOV R2,#05H
BOOP:
MOV DPTR,#TAB
MOV A,@R0
MOVC A,@A+DPTR
MOV P2,A
MOV A,R2
MOV P1,A
LCALL DL1MS
MOV R2,A
INC R0
DJNZ R2,BOOP
MOV DPTR,#TAB
MOV A,@R0
MOVC A,@A+DPTR
MOV P2,A
MOV A,R2
MOV P1,A
LCALL DL1MS

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
RET
DL1MS:
MOV R6,#200
TIME1: MOV R7,#248
DJNZ R7,$
DJNZ R6,TIME1
RET

END

第1个回答  2010-04-12
MOV DPTR,#TAB
MOV A,@R0
MOVC A,@A+DPTR
MOV P2,A
MOV A,R2 //你这里把R2的值赋给了寄存器A,其实我感觉R2应该初始化为#06h,你上面直接赋值有六个数

MOV P1,A
LCALL DL1MS
MOV R2,A //你这里A的值没有变,所以上面R2赋值,又重新赋了回来。这样做浪费代码,没有实际意义。

INC R0
DJNZ R2,BOOP
MOV DPTR,#TAB
MOV A,@R0
MOVC A,@A+DPTR //问题有可能出现在这条,你用查表指令,但是会造成溢出,你TAB里面有的值和R0初始值相加要超过0FFH
MOV P2,A
MOV A,R2
MOV P1,A
LCALL DL1MS

你这段代码具体实现什么功能我没看出来,我感觉就是那个查表指令有问题,你把那个指令再看一下。
第2个回答  2010-04-12
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
RET
这两句颠倒一下,也就是
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH

这样应该就可以了。本回答被提问者采纳
第3个回答  2010-04-12
第一次见这样的写法、、、

用汇编语言编写80c51单片机程序,求内部RAM中50H~59H十个单元内容的平均...
MUL AB ;A=溢出部分的平均值,肯定小于0FF MOV 5AH,A ;第一部分的平均值p1给5AH MOV A,#6H MOV B,5BH MUL AB ;值给5BH,最大值是3CH,所以不用考虑溢出。ADD A,5CH ;MOV B,#10 DIV AB ;6B+s1的平均值p2 ADD A,5AH MOV 5AH,A ;p1+p2 MOV 5BH,B SJMP END ...

单片机80c51用汇编语言写让蜂鸣器发出一长三短声的程序
复位用一个电阻和一个电解电容串联后一头接地一头接vcc.如果你的单片机是高电平复位,那电阻大接地,如果是低电平复为,那电阻接vcc.蜂鸣器有两种,一种接地和vcc和就会响.一种是一端接地,在另一端加一个方波脉冲它才会响,调节脉冲占空比可以调节发出的声音.

求助:关于80C51单片机简易计算器设计的程序,要求是汇编语言。谢谢哈
LCALL DELAY1ms ;调延时1ms 子程序 INC R0 ;R0指向下一模块 MOV A,R1 ; JNB ACC.5,LD2 ;判断是否发完6个数 RL A ;指向下一个位 MOV R1,A ;位选信号存回R3 SJMP LD1 ;跳去再显示下一个数LD2:RET ;发完6个数就返回TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,90H,0FFH ...

80c51单片机汇编语言问题(统计内存偶数个数)
如果为偶数,即为能被2整除的数,所以最低位应该为0,放在A中就是ACC.1=0,这样就简单了。MOV 50H,#00H MOV R0,#40H MOV R1,#15 Loop:MOV A,@R0 JB ACC.1,NEXT ;如果ACC.1=1,即为奇数,跳转 INC 50H ;如果为0偶数,50H加1 NEXT:DJNZ R1,Loop ...

一段C语言代码不知道错哪儿了,请高手指教
编译错误,一般是语法有问题,程序在编译是就产生错误不能编译成目标文件,比如包名或内部类名写错误等等。运行错误,就是程序通过编译,却在运行时出错,一般是逻辑上的问题,比如数组越界,空指针等等。比较常见的运行时错误是在做除法运算时所产生的“除数为零”错误。如下列 VB 代码:Dim a As ...

80c51单片机用汇编语言4个独立按键如何分别控制4个数码管从0到9到0...
仿真结果,你要是仿真,就按这个仿真图画,程序就完全适用。如果是实物开发板,就是根据开发板,适当修改程序了。汇编程序如下 S1 BIT P3.4 S2 BIT P3.5 S3 BIT P3.6 S4 BIT P3.7 DISM1 EQU 31H DISM2 EQU 32H DISM3 EQU 33H DISM4 EQU 34H START:MOV R0,#7FH CLEA...

80c51单片机汇编语言问题(统计内存偶数个数)
mov r0,#40h mov b,#15 mov r1,#00h l1: mov a,@r0 rrc a jc l2 inc r1 l2: inc r0 djnz b,l1 mov r0,#50h mov @r0,r1

用Keil软件编写汇编语言,实现80C51单片机的频率测试,输入波形为555电路...
AJMP MAIN ORG 0200H MAIN: MOV TMOD,#09H MOV TH0,#00H MOV TL0,#00H MOV R0,#30H L1: JB P3.2,L1 SETB TR0 L2: JB P3.2,L2 L3: JB P3.2,L3 CLR TR0 MOV @R0,TL0 INC R0 MOV @R0,TH0 SJMP END 此时T0里面的的值就是一个周期的时间长度,剩下的你自己处理吧,...

80c51系列单片机的内部资源有哪些
原因很简单,就是单片机没有家用计算机那样的CPU,也没有像硬盘那样的海量存储设备。一个可视化高级语言编写的小程序里面即使只有一个按钮,也会达到几十K的尺寸!对于家用PC的硬盘来讲没什么,可是对于单片机来讲是不能接受的。 单片机在硬件资源方面的利用率必须很高才行,所以汇编虽然原始却还是在大量使用...

...一般情况下关掉以 个程序就会出现相应的 错误!高手指教,先谢...
你可能插了2根不同的内存!拿掉一根就行了1 还有可能是软件和操作系统不兼容!换个操作系统就行了!最好重新装一下`就知道了~你这个人啊!有不会的给我发消息,说具体情况吗!我帮你解决!

相似回答