📄 data.txt
字号:
目 录
摘要........ I
Abstract II
第1章 绪论 1
1.1 前言 1
1.2 国内外研究现状 2
第2章 系统设计 3
2.1功能要求 3
2.2方案论证 3
2.3系统硬件电路的设计 3
2.3.1单片机简介 4
2.3.2三极管8550 244 共阳七段LED显示器 8
2.4系统程序的设计 10
2.4.1主程序 10
2.4.2显示子程序 10
2.4.3定时器T0中断服务程序 11
2.4.4 T1中断服务程序 11
2.4.5调时功能程序 12
2.4.6时钟/秒表功能程序 12
2.5调试及性能分析 12
2.5.2硬件调试 12
2.5.3软件调试 12
2.5.4性能分析 12
2.6控制源程序清单 12
结论 15
致谢 16
参考文献 17
附录 18
控制源程序清单
以下是秒表/时钟计时器的控制源程序:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
AT89C52秒表/时钟程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;定时器T0、T1溢出周期为50ms(10ms),T0为秒计数用,T1为调整时闪烁用,
;P1.0、P1.1、P1.2为调整按钮,P0口为字符输出口,采用共阳显示管。;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 中断人口程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
ORG 0000H
;程序执行开始地址
LJMP
START ;跳到标号START执行
ORG 0003H
;外中断0中断程序入口
RETI
;外中断0中断返回
ORG 000BH
;定时器T0中断程序入口
LJMP
INTT0
;跳至INTT0执行
ORG 0013H
;外中断1中断程序入口
RETI
;外中断1中断返回
ORG 001BH
;定时器T1中断程序入口
LJMP
INTT1
;跳至INTT1执行
ORG 0023H
;串行中断程序人口地址
RETI
;串行中断程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 主程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
START:
LCALL
ST
;上电显示年月日及班级学号
MOV
R0,#70H
;请70H~7AH共11个内存单元
MOV
R7,#0BH
CLEARDISP:MOV
@R0,#00H
INC
R0
DJNZ
R7,CLEARDISP
MOV
20H,#00H
;请20H(标志用)
MOV
7AH,#0AH
;放入“熄灭符”数据
MOV
TMOD,#11H
;设T0、T1为16位定时器
MOV
TL0,#0B0H
;50ms定时初值(T0计时用)
MOV
TH0,#3CH
;50ms定时初值
MOV
TL1,#0B0H
;50ms定时初值(T1闪烁定时用)
MOV
TH1,#3CH
;50ms定时初值
SETB
EA
;总中断开放
SETB
ET0
;允许T0中断
SETB
TR0
;开启T0定时器
MOV
R4,#14H
;1s定时用初值(50ms*20)
START1:
LCALL
DISPLAY
;调用显示子程序
JNB
P1.0,SETMM1
;P1.0口为0时,转时间调整程序
JNB
P1.1,FRNSS
;秒表功能,P1.1按键调时时作减1操作
JNB
P1.2,FUNPT
;STOP,PUSE,CLR
SJMP
START1
;P1.0口为1时跳回START1
SETMM1:
LJMP
SETMM
;转到时间调整程序SETMM
FUNSS:
LCALL
DS20MS
JB
P1.1,START1
WAIT11:
JNB
P1.1,WAIT11
CPL
03H
MOV
70H,#00H
MOV
71H,#00H
MOV
76H,#00H
MOV
77H,#00H
MOV
78H,#00H
MOV
79H,#00H
AJMP
START1
FUNPT:
LCALL
DS20MS
JB
P1.2,START1
WAIT22:
JNB
P1.2,WAIT21
CLR
ET0
CLR
TR0
WAIT33:
JB
P1.2,WAIT31
LCALL
DS20MS
JB
P1.2,WAIT33
WAIT66:
JNB
P1.2,WAIT61
MOV
R0,#70H
;请70H~79H共10个内存单元
MOV
R7,#0AH
CLEARP:
MOV
@R0,#00H
INC
RO
DJNZ
R7,CLEARP
WAIT44:
JB
P1.2,WAIT41
LCALL
DS20MS
JB
P1.2,WAIT44
WAIT55:
JNB
P1.2,WAIT51
SETB
ET0
SETB
TR0
AJMP
START1
WAIT21:
LCALL
DISPLAY
AJMP
WAIT22
WAIT31:
LCALL
DISPLAY
AJMP
WAIT33
WAIT41:
LCALL
DISPLAY
AJMP
WAIT44
WAIT51:
LCALL
DISPLAY
AJMP
WAIT55
WAIT61:
LCALL
DISPLAY
AJMP
WAIT66
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
1s计时程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中断服务程序
INTT0:
PUSH
ACC
;累加器字入栈保护
PUSH
PSW
;状态字入栈保护
CLR
ET0
;关T0中断允许
CLR
TR0
;关闭定时器T0
JB
03H,FSS
;标志为1转秒表处理程序(10ms定时)
MOV
A,#0B7H
;中断响应时间同步修正
ADD
A,TL0
;低8位初值修正
MOV
TL0,A
;重装初值(低8位修正值)
MOV
A,#3CH
;高8位初值修正
ADDC
A,TH0
MOV
TH0,A
;重装初值(高8位修正值)
SETB
TR0
;开启定时器T0
DJNZ
R4,OUTT0 ;20次中断未到中断退出
ADDSS:
MOV
R4,#14H
;20次中断到(1s)重赋初值
MOV
R0,#71H
;指向秒计时单元(71H~72H)
ACALL
ADD1
;调用加1程序(加1s操作)
MOV
A,R3
;秒数据放入A(R3为2位十进制数组合)
CLR
C
;清进位标志
CJNE
A,#60H,ADDMM
ADDMM:
JC
OUTT0
;短于60s时中断退出
ACALL
CLR0
;长于或等于60s时对秒计时单元清0
MOV
R0,#77H
;指向分时单元(76H~77H)
ACALL
ADD1
;分计时单元加1min
MOV
A,R3
;分数据放入A
CLR
C
;清进位标志
CJNE
A,#60H,ADDHH
ADDHH:
JC
OUTT0
;短于60min时中断退出
ACALL
CLR0
;长于或等于60min时对分计时单元清0
MOV
R0,#79H
;指向小时单元(78H~79H)
ACALL
ADD1
;小计时单元加1h
MOV
A,R3
;时数据放入A
CLR
C
;清进位标志
JB
03H,OUTT0
;秒表时最大数为99
CJNE
A,#24H,HOUR
HOUR:
JC
OUTT0
;短于24h时中断退出
ACALL
CLR0
;长于或等于24h[小]时计时单元清0
OUTT0:
MOV
72H,76H
;中断退出时将分、时计时单元数据移
MOV
73H,77H
;入对应显示单元
MOV
74H,78H
MOV
75H,79H
POP
PSW
;恢复状态字(出栈)
POP
ACC
;恢复累加器
SETB
ET0
;开放T0中断
RETI
;中断返回
;秒表计时程序(10min加1),低2位为0.1、0.01秒,中间2位为秒,最高2位为分。
;最大计数值为99分59.99秒
FSS:
MOV
A,#0F7H
;重装初值(10ms),中断响应时间同步修正
ADD
A,TL0
;低8位初值修正
MOV
TL0,A
;重装初值(低8位修正值)
MOV
A,#0D8H
;高8位初值修正
ADDC
A,TH0
MOV
TH0,A
;重装初值(高8位修正值)
SETB
TR0
;开启定时器T0
MOV
R0,#71H
;指向秒计时单元(71H~72H)
ACALL
ADD1
;调用加1程序(加1s操作)
CLR
C
MOV
A,R3
JZ
FSS1
;加1后为00,C=0
SETB
C
;加1后不为00,C=1
FSS1:
AJMP
ADDMM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 闪动调时程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T1中断服务程序,用作时间调整时调整单元闪烁指示
INTT1:
PUSH
ACC
;中断现场保护
PUSH
PSW
MOV
TL1,#0B0H
;装定时器T1定时初值
MOV
TH1,#3CH
DJNZ
R2,INTT1OUT ;0.3s未到,退出中断(50ms中断6次)
MOV
R2,#06H
;重装0.3s定时用初值
CPL
02H
;0.3s定时到,对闪烁标志取“反”
JB
02H,FLASH1
;0.2H位为1时,显示单元“熄灭”
MOV
72H,76H
;0.2H位为0时,正常显示
MOV
73H,77H
MOV
74H,78H
MOV
75H,79H
INTT1OUT:
POP
PSW
;恢复现场
POP
ACC
RETI
;中断退出
FLASH1:
JB
01H,FLASH2;01H位为1时,转[小]时熄灭控制
MOV
72H,7AH
;01H位为0时,“熄灭符”数据放入分
MOV
73H,7AH
;显示单元(72H~73H),将不显示分数据
MOV
74H,78H
MOV
75H,79H
AJMP
INTT1OUT
;转中断退出
FLASH2:
MOV
72H,76H
;01H位为1时,“熄灭符”数据放入[小]时
MOV
73H,77H
;显示单元(74H~75H),[小]时数据将不显示
MOV
74H,7AH
MOV
75H,7AH
AJMP
INTT1OUT
;转中断退出
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 加1子程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;
ADD1:
MOV
A,@R0
;取当前计时单元数据到A
DEC
R0
;指向前一地址
SWAP
A
;A中数据高四位与低四位交换
ORL
A,@R0
;前一地址中数据放入A中低四位
ADD
A,#01H
;A加1操作
DA
A
;十进制调整
MOV
R3,A
;移入R3寄存器
ANL
A,#0FH
;高四位变0
MOV
@R0,A
;放回前一地址单元
MOV
A,R3
;取回R3中暂存数据
INC
R0
;指向当前地址单元
SWAP
A
;A中数据高四位与低四位交换
ANL
A,#0FH
;高四位变0
MOV
@R0,A
;数据放入当前地址单元中
RET
;子程序返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 分减1子程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
SUB1:MOV
A,@R0
;取当前计时单元数据到A
DEC
R0
;指向前一地址
SWAP
A
;A中数据高四位与低四位交换
ORL
A,@R0
;前一地址中数据放入A中低四位
JZ
SUB11
DEC
A
;A减1操作
SUB111:
MOV
R3,A
;移入R3寄存器
ANL
A,#0FH
;高四位变0
CLR
C
;清进位标志
SUBB
A,#0AH
SUB1111:
JC
SUB1110
MOV
@R0,#09H
;大于等于0AH,为9
SUB110:
MOV
A,R3
;取回R3中暂存数据
INC
R0
;指向当前地址单元
SWAP
A
;A中数据高四位与低四位交换
ANL
A,#0FH
;高四位变0
MOV
@R0,A
;数据放入当前地址单元中
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -