C51程序求大神解惑

hhaiben123 2012-04-15 10:52:20
ORG 0000H
AJMP MAIN
ORG 001BH ;T0中断入口
AJMP IT1P
ORG 0100H
MAIN:MOV SP,#60H
MOV TMOD,#20H
MOV TL0,#0F4H
MOV TH0,#0F4H
MOV R1,#00
MOV R2,#00
SETB ET1
SETB EA
SETB TR1
LOOP:LCALL D05S ;调用延时0.5秒子程序
CPL P1.7
SJMP LOOP
D05S:MOV R7,#8 ;延时0.5秒子程序
D05S2:MOV R6,#200
D05S1:MOV R5,#100
D05S0:NOP
DJNZ R5,D05S0
DJNZ R6,D05S1
DJNZ R7,D05S2
RET
IT1P:PUSH ACC ;T0中断服务子程序
PUSH PSW
LOOP1:INC R1
CJNE R1,#36,LOOP1
MOV R1,#00
LOOP2:INC R2
CJNE R2,#100,LOOP2
MOV R2,#0
CPL P1.5
POP PSW
POP ACC
RETI
END
这本来是要实现P1.5,P1.7秒闪的。这个程序错在哪里,P1,7怎么闪不了,还有P1.5怎么闪得这么快T1定时器哪里弄错了。
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhaiben123 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

发现了几个错点~
1 你使用的是定时器1 但设置的却是TH0,TL0。即使改对了,你的定时时间也是算错的。。
2 中断里面的程序有错误
LOOP1:INC R1
CJNE R1,#36,LOOP1
判断不等后应该跳出中断 而不能继续执行上面的循环,这样会一直在中断里循环
[/Quote]
对你你第二点就是感觉,不相等继续加。要不怎么学
NICF 2012-04-16
  • 打赏
  • 举报
回复
发现了几个错点~
1 你使用的是定时器1 但设置的却是TH0,TL0。即使改对了,你的定时时间也是算错的。。
2 中断里面的程序有错误
LOOP1:INC R1
CJNE R1,#36,LOOP1
判断不等后应该跳出中断 而不能继续执行上面的循环,这样会一直在中断里循环
net_friends 2012-04-16
  • 打赏
  • 举报
回复
定时器不可能到秒 需要多次累加
清洁工 2012-04-16
  • 打赏
  • 举报
回复
汇编看的有点痛苦了...用C吧..只是在学的时候用汇编后面很多编程都用的C...

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧