急急急啊

2019-03-24 18:08发布

这个交通灯的汇编语言有错误吗?
本人小白,求教
ORG 0000H
MOV P0,#00H 
lJMP MAIN0
ORG 0030H
MAIN0:   MOV 30H,#08H
MOV R6,#00H
MOV R7,#00H
MOV DPTR,#TABLE 
MOV TMOD,#01H 
MOV TL0,#0CDH
MOV TH0,#0BH
SETB TR0
SETB EA
SETB EX0
SETB EX1
CLR IT0   
MAIN:    MOV P0,#0F3H
MOV R6,#1EH
MOV R7,#19H
MAIN1:   CALL DELAY
CJNE R7,#00H,MAIN1
MOV P0,#0F5H
MAIN2:   CALL DELAY
MOV R7,#00H
CPL P0.1
CJNE R6,#00H,MAIN2
MOV P0,#0DEH
          MOV R7,#1EH
MOV R6,#19H
MAIN3:   CALL DELAY
CJNE R6,#00H,MAIN3
MOV P0,#0EEH
MAIN4:   CALL DELAY
MOV R7,#00H
CPL P0.4
CJNE R6,#00H,MAIN4
 JMP MAIN
DELAY:   MOV A,R6
 MOV B,#0AH
DIV AB
MOVC A,@A+DPTR 
MOV P1,A 
MOV R4,#4
LOOP1:   MOV R3,#125
LOOP2:   DJNZ R3,LOOP2
DJNZ R4,LOOP1
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
MOV R4,#4
LOOP3:MOV R3,#125
LOOP4:   DJNZ R3,LOOP4
DJNZ R4,LOOP3
MOV A,R7 
MOV B,#0AH
DIV AB
MOVC A,@A+DPTR
MOV P1,A
MOV R4,#4
LOOP5:   MOV R3,#125
LOOP6:   DJNZ R3,LOOP6
DJNZ R4,LOOP5
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
MOV R4,#4
LOOP7:   MOV R3,#125
LOOP8:   DJNZ R3,LOOP8
DJNZ R4,LOOP7
JBC TF0,LOOP
AJMP DELAY
LOOP:    MOV TL0,#0CDH
MOV TH0,#0BH
MOV A,30H
DEC A
MOV 30H,A
JNZ DELAY
DEC R6
DEC R7
MOV 30H,#08H
RET
TABLE:DB 03FH,06H,05BH,04FH,66H
DB 6DH,7DH,07H,7FH,6FH,00H
END
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
fjjjnk1234
1楼-- · 2019-03-25 03:39
 精彩回答 2  元偷偷看……
ahshmj
2楼-- · 2019-03-25 05:06
“&nbsp”  是什么意思?是不是乱码?

程序本身没有语法错误,但是不是能达到设计目的,就不知道了,因为不知道你的设计目的。
changjiong
3楼-- · 2019-03-25 06:54
ahshmj 发表于 2014-12-4 21:43
“ ”  是什么意思?是不是乱码?

程序本身没有语法错误,但是不是能达到设计目的,就不知道了,因为不知道你的设计目的。
哦哦,那是多余的,还有就是我生成的hex文件加载到仿真上去数码管的倒计时乱跳,这是怎么回事?
changjiong
4楼-- · 2019-03-25 11:13
 精彩回答 2  元偷偷看……
ahshmj
5楼-- · 2019-03-25 16:22
本帖最后由 ahshmj 于 2014-12-14 21:58 编辑

51单片机上电或复位的时候是从0000H开始执行程序。但是从0003H开始安排的是各个中断入口。也就是说,上电或复位时程序入口只有3个字节的空间,3个字节肯定安排不了什么程序,所以一般只有安排一个跳转语句。一般如:

        ORG     0000H
        LJMP    START
         
        ORG     0003H
        LJMP    INT0
         
        ORG     0030H
START:  
        ........
        SETB    EX0         ;INT0允许
        SETB    EA
        ......
INT0:
        ........

如果像你这样:
ORG 0000H
MOV P0,#00H
lJMP MAIN0
外部中断  int0就不能使用或不能正常了。也就是0003H字节处,不能跳转到INT0的中断服务程序。
从程序看,"MOV   P0, #00H " 已经占据了3个字节。而  0003H 处是“  JMP   MAIN0 ”所以外部中断产生后从0003H开始执行“  JMP   MAIN0 ”语句,后果可想而知。

一周热门 更多>