大家帮我看看这个51汇编程序

实现8个LED跑马灯1秒闪一个,按键后反向!!!!ORG0000HLJMPMAINORG0003HLJMPINTORG000BHLJMPDELAYORG0040HMAIN... 实现8个LED跑马灯1秒闪一个,按键后反向!!!!
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT
ORG 000BH
LJMP DELAY
ORG 0040H
MAIN: SETB EX0
SETB IT0
SETB EA
SETB ET0
SETB TR0
MOV R7,#20
MOV A,#01H
SETB 28H
START1: MOV P1,A
RL A
ACALL DELAY
CJNE R7,#0,START1
MOV R7,#20
RL A
JNB 28H,START2
SJMP START1
START2: RR A
MOV P1,A
ACALL DELAY
CJNE R7,#20,START2
MOV R7,#20
RR A
JB 28H,START1
SJMP START2
DELAY: MOV TH0,#3CH
MOV TL0,#0B0H
DEC R7
RETI
ORG 0400H
INT: CPL 28H
RETI
END
展开
 我来答
种卿iI
2010-06-08
知道答主
回答量:24
采纳率:0%
帮助的人:0
展开全部
应该下载到板子上运行不正确,问题出在定时器0中断上,在第一次调用delay时给定时器0付初职后立刻给r7减一返回,无法起到延时作用!且每次调用delay都会赋初值!定时器无法正常工作,建议回去在认真学下定时器中断用法!且JB.JNB是布尔指令,只能对直接位寻址使用。把定时器中断去掉,把delay程序换成一个使用DJNZ延时的程序!延时一秒,把r7语句去掉,把第二个rr,rl去掉!28h换成28h.0就可以啦!具体程序如下:ORG 0000H LJMP MAIN ORG 0003H LJMP INT ORG 0040H MAIN: SETB EX0 SETB IT0 SETB EA MOV A,#01H SETB 28H.0 START1:MOV P1,A RL A Sjmp DELAY JNB 28h.0,START2 SJMP START1 START2: RR A MOV P1,A CALL DELAY JB 28H,START1 SJMP START2 INT: CPL 28H.0 RETI DELAY:MOV R3,#10 DEL3:MOV R4,#200 DEL2:MOV R5,#125 DEL1:NOP NOP DJNZ R5,DEL1 DJNZ R4,DEL2 DJNY R3,DEL3 RET END
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2010-06-08 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP X0_INT
ORG 000BH
LJMP T0_INT
MAIN:
SETB EX0
SETB IT0
SETB TR0
SETB ET0
SETB EA
MOV TMOD,#01H
MOV TH0, #3CH
MOV TL0, #0B0H
MOV R7, #20
MOV A, #1
;--------------------------------
LOOP:
JB 28H, _RR
_RL: RL A
SJMP OUT
_RR: RR A
;--------------------
OUT: MOV P1, A
CJNE R7, #0, $
MOV R7, #20
SJMP LOOP
;--------------------------------
T0_INT:
MOV TH0, #3CH
MOV TL0, #0B0H
DEC R7
RETI
;--------------------------------
X0_INT:
CPL 28H
RETI
;--------------------------------
END

上述程序,经过PROTEUS仿真,正确无误。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
47okey
2010-06-08 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5900
采纳率:75%
帮助的人:2389万
展开全部
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT
ORG 000BH
LJMP DELAY
ORG 0040H
MAIN: MOV TMOD,#01H ;定时工作方式1,16位计数器。你的程序无此条,即TMOD=0,O为13位计数。时间太短
SETB EX0
SETB IT0
SETB EA
SETB ET0
SETB TR0
MOV TH0,#3CH ;初值
MOV TL0,#0B0H
MOV R7,#20
MOV A,#01H
SETB 28H
START1: MOV P1,A
;RL A
;ACALL DELAY
CJNE R7,#0,START1 ;反复循环,等待定时中断
MOV R7,#20
RL A
JNB 28H,START2
SJMP START1
START2: ;RR A
MOV P1,A
;ACALL DELAY ;DELAY是定时中断子程序,只能由中断时调用
CJNE R7,#0,START2 ;CJNE R7,#20,START2
MOV R7,#20
RR A
JB 28H,START1
SJMP START2
DELAY: MOV TH0,#3CH
MOV TL0,#0B0H
DEC R7
RETI
ORG 0400H
INT: CPL 28H
RETI
END
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式