专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

我的第一个单片机程序—简易秒表

作者:fkede125   来源:本站原创   点击数:  更新时间:2010年06月02日   【字体:


          程序做得很粗糙,功能还算齐全,也还没进行优化,所以我只让它保存15个数据,如果能优化一下数据结构,应该可以保存更多数据,分两种模式,0和1模式。也没有计算误差,每次暂停会有少于1MS的误差,开始计时也有少于1MS误差。

           写了好几天,往往都是因为其中一个单词写错,害得我弄上他几个小时,比如就因为我把JC写成了JB,害得我从昨天中午开始一直弄到今天,把程序改来改去,到最后才知道原来也就差一个单词,今天做好了,不想改了,也不用优化了,简易秒表嘛,要求也不是很高的,做出来,交给老师检查,希望过关

        说一下功能吧,最左边复位键复位,中间键开始键,在复位被点后中间键没被点前,右边键改模式(0和1两种模式,0是单人模式,记录启动后开始键点击间隔,就是这次点击减去上次点击记录下来,1模式是多人模式,记录启动后每次点击开始键时间),开始键是启动秒表的按键,在秒表启动后是记录时间的按键。启动后,右边键为暂停键,暂停后可以点中间键继续计时。暂停后也可以再点暂停键查看记录的数据。只能记录15个数据哦!

 

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP DING
ORG 0030H
MAIN: MOV R7,#28H;定时器中断40次,记下一个时间单位1次是250US,
MOV SP,#30H
MOV R0,#40H
MOV R1,#32H
MOV R5,#00H
QING0: MOV @R0,#00H
INC R0
DJNZ R1,QING0
MOV IE,#82H
MOV TMOD,#02H
MOV TH0,#06H;定时器值
MOV TL0,#06H
SETB TR0
CLR IE.7
CLR 00H
CLR 01H
CLR 02H
CLR 03H

XIAN: MOV P1,#0FFH
MOV A,P1
JB ACC.0,JIANGPAN
MOV A,50H
CJNE A,#00H,NONG
LCALL AN1
NONG: MOV 50H,#32H;定义键盘延时,延时时间为显示程序运行一次所需时间*定义数值
JIANGPAN: MOV A,50H
CJNE A,#00H,NONG2
SJMP NONG3
NONG2: DEC 50H
NONG3: MOV A,P1
JB ACC.1,JIANPAN1
MOV A,51H
CJNE A,#00H,NONG1
LCALL AN2
NONG1: MOV 51H,#32H;定义键盘延时,延时时间为显示程序运行一次所需时间*定义数值
JIANPAN1:MOV A,51H
CJNE A,#00H,NONG8
SJMP NONG9
NONG8: DEC 51H

NONG9: MOV R3, #02H
MOV R0,40H
MOV R2,#0FEH
CLR   00H
MOV R4,#00H
XIAN1: MOV A,R0
MOV B,#0AH
DIV AB
MOV R0,A
MOV A,R2
RR A
MOV R2,A
MOV A,B
MOV DPTR,#TAB
JNB 00H,XIAN2
CLR 00H
ADD A,#0AH
XIAN2: MOVC A,@A+DPTR
MOV P0,#0FFH
MOV P2,R2
CPL A
MOV P0,A
INC R4
DJNZ R3,XIAN1

CJNE R4,#06H,XIAN3
MOV R3,#02H
MOV R0,43H
SJMP XIAN4
XIAN3: JNC WEI
MOV R3,#02H
CJNE R4,#04H,XIAN111
MOV R0,42H
SJMP XIAN4
XIAN111: MOV R0,41H
XIAN4: 
SETB 00H
LJMP XIAN1
WEI:LJMP  XIAN

AN1: JB 01H,AN11
SETB 01H
SETB 02H
MOV 40H,45H
MOV 41H,46H
MOV 42H,47H
MOV 43H,48H

SETB IE.7
LJMP AN12
AN11: 
SETB 02H

CLR C
MOV A,#0EH
SUBB A,4AH
JC MEINVA
SJMP MEINVA1
MEINVA: LJMP AN12

MEINVA1: MOV A,4AH
MOV B,#03H
MUL AB
ADD A,#52H
MOV R0,A
MOV @R0,40H
INC R0
MOV @R0,41H
INC  R0
MOV @R0,42H
MOV R1,#48H
CJNE @R1,#01H,MMMMG
LJMP DDDD
MMMMG: MOV A,4AH
CJNE A,#00H,MMMM
LJMP DDDD

MMMM: DEC R0
DEC R0
MOV A,R0
MOV R1,A
MOV R0,#45H
MOV R4,#64H
MOV A,@R0
MOV R3,A
MOV A,@R1
LCALL JIANFA
MOV @R1,A
JNC MMMM1
INC R1
MOV R3,#01H
MOV A,@R1
MOV R4,#3CH
LCALL JIANFA
MOV @R1,A
DEC R1
JNC MMMM1
INC R1
INC R1
MOV R3,#01H
MOV A,@R1
LCALL JIANFA
MOV @R1,A
DEC R1
DEC R1

MMMM1: INC R1
INC R0
MOV R4,#3CH
MOV A,@R0
MOV R3,A
MOV A,@R1
LCALL JIANFA
MOV @R1,A
JNC MMMM18
INC R1
MOV R3,#01H
MOV A,@R1
LCALL JIANFA
MOV @R1,A
DEC R1

MMMM18: INC R1
INC R0
MOV A,@R0
MOV R3,A
MOV A,@R1
LCALL JIANFA
MOV @R1,A

DDDD: 
MOV 45H,40H
MOV 46H,41H
MOV 47H,42H
INC 4AH
AN12: RET


JIANFA: CLR C
MOV 4FH,R3
CJNE A,4FH,JIANDA12
NOP
JIANDA12: JC JIANDA1
SUBB A,R3
SJMP JIANFA2
JIANDA1: ADD A,R4
SUBB A,R3
SETB C
JIANFA2: RET

AN2: JNB 01H,AN21
CLR IE.7
MOV 45H,40H
MOV 46H,41H
MOV 47H,42H
CLR 01H
MOV R5,#01H
LJMP AN22

AN21: JB 02H,AN23
MOV A,#01H
XRL A,43H
MOV 43H,A
MOV 48H,A
LJMP AN22

AN23: MOV 43H,R5
MOV A,R5
MOV B,#03H
MUL AB
ADD A,#4FH
MOV R1,A
MOV 43H,R5
MOV 40H,@R1
INC R1
MOV 41H,@R1
INC R1
MOV 42H,@R1
MOV A,R5
CJNE A,4AH,AN24
MOV R5,#00H
AN24: INC R5
AN22: RET

DING:  
PUSH 00H
PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
DJNZ R7,DINGSHI1
MOV R0,#40H
MOV R7,#28H;定时器中断40次,记下一个时间单位1次是250US,
INC @R0
CJNE @R0,#64H,DINGSHI1
MOV @R0,#00H
INC R0
INC @R0
CJNE @R0,#3CH,DINGSHI1
MOV @R0,#00H
INC R0
INC @R0
CJNE @R0,#3CH,DINGSHI1
MOV @R0,#00H
DINGSHI1: POP DPL
POP DPH
POP PSW
POP ACC
POP 00H
RETI
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
     DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
END


关闭窗口

相关文章