4069|18

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

c51程序。。。哪位高手能帮我找出错误?我自己编的三个灯的定时程序,可是只有2个两个闪烁。。。。。 [复制链接]

ORG 0000H ;
AJMP START ;
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 0030H ;
START:MOV P1,#0FFH ;关所有的灯
MOV 30H,#00H ;软件计数器预清0
MOV TMOD,#01H ;定时/计数器0工作于方式1
MOV TH0,#3CH ;
MOV TL0,#0B0H ;立即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行


TIME0:
PUSH ACC ;将ACC推入堆栈保护
PUSH PSW ;将PSW推入堆栈保护
INC 30H ;
INC 31H ;
inc 32h

MOV A,30H ;
CJNE A,#30,TNEXT ;30H单元中的值到了20了吗
CPL P1.0 ;到了取反P1.0
MOV 30H,#0 ;清软件计数器

TNEXT:MOV A,31H ;
CJNE A,#20,TRENT ;31H单元中的值到40了吗
CPL P1.1 ;
MOV 31H,#0 ;到了取反P1.1并清计数器返回

TRENT:MOV A,32H
CJNE A,#20,TRET
CPL P1.2
MOV 32H,#0

TRET:MOV TH0,#15H ;
MOV TL0,#9FH ;重置定时常数
POP PSW ;
POP ACC ;
RETI ;
END

最新回复

C难啊,上学时没学好,出来难学。  详情 回复 发表于 2009-5-22 21:07
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你的程序竟然没跑飞?这里加上一句。
ORG 0000H ;
AJMP START ;
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 0030H ;
START:MOV P1,#0FFH ;关所有的灯
MOV 30H,#00H ;软件计数器预清0
MOV TMOD,#01H ;定时/计数器0工作于方式1
MOV TH0,#3CH ;
MOV TL0,#0B0H ;立即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
SJMP $
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
确实,直接走下去了,没有循环
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

4
 
一楼回答的好
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
汇编编程多麻烦啊,用C好多了
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
汇编没学过!用c编就好多了!更加容易理解!
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

7
 
汇编没学过!用c编就好多了!更加容易理解!
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
MOV A,30H ;
CJNE A,#30,TNEXT ;30H单元中的值到了20了吗 ---------------------
CPL P1.0 ;到了取反P1.0
MOV 30H,#0 ;清软件计数器

TNEXT:MOV A,31H ;
CJNE A,#20,TRENT ;31H单元中的值到40了吗 -------------这两行注释看着有点晕
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
ORG 0000H ;
AJMP START ;
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 0030H ;
START:MOV P1,#0FFH ;关所有的灯
MOV 30H,#00H ;软件计数器预清0
MOV TMOD,#01H ;定时/计数器0工作于方式1
MOV TH0,#3CH ;
MOV TL0,#0B0H ;立即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
此处漏了LOOP:SJMP LOOP

TIME0:
PUSH ACC ;将ACC推入堆栈保护
PUSH PSW ;将PSW推入堆栈保护
INC 30H ;
INC 31H ;
inc 32h

MOV A,30H ;
CJNE A,#30,TNEXT ;30H单元中的值到了20了吗—此处按解释应为CJNE A,#20,TNEXT
CPL P1.0 ;到了取反P1.0
MOV 30H,#0 ;清软件计数器

TNEXT:MOV A,31H ;
CJNE A,#20,TRENT ;31H单元中的值到40了吗—此处按解释应为CJNE A,#40,TNEXT
CPL P1.1 ;
MOV 31H,#0 ;到了取反P1.1并清计数器返回

TRENT:MOV A,32H
CJNE A,#20,TRET
CPL P1.2
MOV 32H,#0

TRET:MOV TH0,#15H ;
MOV TL0,#9FH ;重置定时常数
POP PSW ;
POP ACC ;
RETI ;
END

以上修改仅从语意而言。从实现的角度来说,lz的程序的目的未明。要注意的是(并不是指错误):
1.定时器初始常数与工作常数不一致。
2.只有30h初始化为0,31h,32h可能是随机值(在干扰等因素下更可能发生)。
3.亮灯的三个端口中任意端翻转后继续运行下面的程序,根据检测存储单元值继续判断其他的端是否翻转。
4.未设置SP,应防止堆栈溢出,增强系统稳定性。
只是浏览一下,暂时先这点吧~
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

10
 
上面第三处红字打字有误,应为“此处按解释应为CJNE A,#40,TRENT”,见笑~
 
 
 

回复

93

帖子

0

TA的资源

一粒金砂(中级)

11
 
楼上对
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

12
 
支持C
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 
支持C
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

14
 
支持C
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

15
 
一点都不懂
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

16
 
uping
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

17
 
周工开发网-淘宝店开张,三款周立功99元开发板强烈推荐!

EasyARM1138  (Cortex-M3核arm开发板)(99元)

EasyARM2103  (arm7内核开发板)(99元)

EasyFPGA030  (FPGA开发板)(99元)

网站:www.01zg.com
淘宝:shop37086041.taobao.com
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

18
 
支持
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

19
 
C难啊,上学时没学好,出来难学。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表