找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2405|回复: 5
收起左侧

求各位大神帮我看看这个汇编语言程序除了什么问题?

[复制链接]
ID:157272 发表于 2016-12-24 01:04 | 显示全部楼层 |阅读模式
H_RED         BIT P2.1      ;定义IO端口
H_GREEN       BIT P2.2
H_YELLOW      BIT P2.3
L_RED         BIT P2.4
L_GREEN       BIT P2.5
L_YELLOW      BIT P2.6
;主程序,选择设置红绿灯时间模式或自动调整模式
ORG   0000H
LJMP MAIN
ORG   0003H       ;中断入口
LJMP  INT0
ORG   0030H
MAIN:   MOV  R3, #20       ;用于嵌套50ms软件方法计时1s
MOV    R0, #20       ;预设值红绿灯时间
MOV    R1, #20
CLR    EX0
K1:     MOV   C, P3.7       ;等待检测何种模式按键按下
ANL    C, P3.2
JB     C, K1
JNB    P3.7, F        ;F键按下为自动模式,进入扫描
K2:     JNB   P3.2, S        ;S键按下并等待计数次数
SJMP   K2
F:      LCALL DELAY
MOV    R0, #30
MOV    R1, #30
SETB   00H
SETB   EA
SETB   EX1
SJMP   START
S:      LCALL DELAY
CJNZ   R0, #40, V1
MOV    R0, #20
V1:     INC   R0
JNB    P0.1, $
JNB    P3.6, J        ;J键按下并等待计数次数
SJMP   K2
J:      LCALL DELAY
CJNZ   R1, #40, V2
MOV    R1, #20
V2:     INC R1
JNB    P3.6, $
JNB    P3.7, START   ;设置完毕为设定时间模式,进入扫描
JNB    P3.6, J
MOV    P2, #0DDH   ;预设信号灯状态,时间和车向
MOV    R4, R0
SETB   01H
SETB   EX0
;程序开始,进行每50ms扫描
START:  MOV   TMOD, #01H
MOV    TH0, #3CH
MOV    TL0, #0B0H
CLR    TF0
SETB   TR0         ;开始50ms计时
DJNZ   R3, Y       ;1s是否计时完毕
MOV    R3, #20
DJNZ   R4, Y       ;本状态是否结束,并进行下一状态设置
MOV    A, P2
CJNZ   A, #0DDH,D1
MOV    P2, #BDH
MOV    R4, #5
D1:     CJNZ  A, BDH,D2
MOV    P2, #EDH
MOV    R4, R1
CLR    01H
D2:     CJNZ  A, #EDH,D3
MOV    P2, #E7H
MOV    R4, #5
JNB    00H, D3
LCALL  DATA
D3:     CJNZ  A, #E7H,Y
MOV    R2, #DDH
MOV    R4, R0
SETB   01H
Y:      MOV   A, R4         ;LED倒计时显示
MOV    B, #10
DIV    A, B
MOB    DPTR,#LEDMAP
MOVC   A,@A+DPTR
MOV    P1, A
MOV    A, B
MOVC   A,@A+DPTR
MOV    P0, A
LEDMAP:   DB    C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H
JNB    00H, WAIT   ;判断是否要计数车流量
JB     P3.3, WAIT   ;判断是否有车经过
WAIT:   JNB   TF0, WAIT    ;50ms一次扫描完毕
SJMP   START
INT1:    JNB    01H, U       ;判断车向
INC    R5
U:      INC   R6
RETI
INT0:   SETB  P3.4         ;中断服务子程序,闯红灯或紧停按键
JB     P3.7, $
LCALL  DELAY
CLR    P3.4
RETI
DATA:   MOV   A, R6         ;车流量数据处理及红绿灯时间调整
MOV    B, R0
MUL    A, B
MOV    R6, A
MOV    A , R5
MOV    B, R1
MUL    A, B
MOV    B, #10
MUL    A, B
MOV    B, R6
DIV    A, B
CJNZ   A, #7 M1
M2:     MOV   R2, #20
MOV    R1, #40
SJMP   OUT
M1:     JB    C, M2
CJNZ   A, #15 N1
N2:     MOV   R0, #30
MOV    R1, #30
SJMP   OUT
N1:     JB    C, N2
MOV    R0, #40
MOV    R1, #20
OUT:    CLR   R5
CLR    R6
RET
DELAY:  MOV    R2, #14H
A1:     MOV   R7, #0FFH
DJNZ   R2, $
DJNZ   R7, A1
RET
END

回复

使用道具 举报

ID:157283 发表于 2016-12-24 09:33 | 显示全部楼层
INT0  可以改改 这个好像是关键字 吧  类似关键字
回复

使用道具 举报

ID:111634 发表于 2016-12-24 11:25 | 显示全部楼层
实例94  模拟电子钟(由80C51定时器产生秒时基):http://www.51hei.com/bbs/dpj-50131-1.html
回复

使用道具 举报

ID:7485 发表于 2016-12-24 19:28 | 显示全部楼层
遇到什么问题?
回复

使用道具 举报

ID:7485 发表于 2016-12-24 20:07 | 显示全部楼层
你这个程序是自己编写的吗?
里面有许许多多的问题。注释符号“;”你用的是中文符号(全角字符)。
JB和JNB指令的跳转长度有一定的限制的,跳不了那么远。
没有CJNZ指令,只有CJNE指令。。。。。
回复

使用道具 举报

ID:7485 发表于 2016-12-24 20:13 | 显示全部楼层
这个程序里面有不少的问题。
注释符“;”应使用半角字符。
JNB指令的跳转跳不了那么远。如果需要可以跳转到近的地方,然后用JMP (不用区分AJMP和LJMP)接力一下。
指令CJNZ是错误的,应为CJNE
等等..........
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表