2213|5

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

急急急啊 [复制链接]

这个交通灯的汇编语言有错误吗?
本人小白,求教
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
此帖出自51单片机论坛

最新回复

本帖最后由 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 ”语句,后果可想而知。   详情 回复 发表于 2014-12-14 21:47
点赞 关注
 

回复
举报

496

帖子

18

TA的资源

一粒金砂(高级)

沙发
 
如果仅仅只是想知道程序有错吗,放到编译器里编译一下不就知道了
此帖出自51单片机论坛
 
个人签名相由心生,境随心转,一切法从心想生。
 
 

回复

173

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
“ ”  是什么意思?是不是乱码?

程序本身没有语法错误,但是不是能达到设计目的,就不知道了,因为不知道你的设计目的。
此帖出自51单片机论坛

点评

哦哦,那是多余的,还有就是我生成的hex文件加载到仿真上去数码管的倒计时乱跳,这是怎么回事?  详情 回复 发表于 2014-12-11 21:50
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 
ahshmj 发表于 2014-12-4 21:43
“ ”  是什么意思?是不是乱码?

程序本身没有语法错误,但是不是能达到设计目的,就不知道了,因为不知道你的设计目的。
哦哦,那是多余的,还有就是我生成的hex文件加载到仿真上去数码管的倒计时乱跳,这是怎么回事?
此帖出自51单片机论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

5
 
ahshmj 发表于 2014-12-4 21:43
“ ”  是什么意思?是不是乱码?

程序本身没有语法错误,但是不是能达到设计目的,就不知道了,因为不知道你的设计目的。

此帖出自51单片机论坛
 
 
 

回复

173

帖子

0

TA的资源

纯净的硅(初级)

6
 
本帖最后由 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 ”语句,后果可想而知。
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表