單片機控制時鐘顯示源程序
這是我在大學的時候編的. 記得當時我們開發(fā)小組從下午5點調(diào)試到11點多才成功, 最有成就感的一天!
;=======================================
; Clock programe
; Create date: 2004_05_12
; First Modify: 2004_05_13
; First Modify: 2004_05_13
; Last Modify: 2004_05_20
; Author: Dengjingyue
;=======================================
SDA BIT P0.1 ;定義
SCL BIT P0.0 ;定義
Second_0 EQU 40H ;定義秒個位
Second_1 EQU 41H ;定義秒十位
LED2 EQU 42H ;
Minute_0 EQU 43H ;定義分個位
Minute_1 EQU 44H ;定義分十位
LED5 EQU 45H
Hour_0 EQU 46H ;定義小時個位
Hour_1 EQU 47H ;定義小時十位
SECOND EQU 48H ;定義秒
MINUTE EQU 49H ;定義分
HOUR EQU 50H ;定義小時
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INT_CLOCK ;中斷入口
ORG 0100H
;============主程序開始=======================
MAIN:
MOV R7,#00H ;賦初值
MOV SECOND, #00H ;賦初值
MOV MINUTE, #00H ;賦初值
MOV HOUR, #00H ;賦初值
ACALL Separate ;拆分子程序
ACALL DISPLAY ;顯示子程序
;----------------------------
MOV TMOD,#01H ;設定時器0為定時方式1(16位)
MOV TH0, #0DBH ;定時初值高8位
MOV TL0, #0F0H ;定時初值低8位
SETB EA ;開總中斷允許
SETB ET0 ;開定時器0允許中斷
SETB TR0 ;啟動定時器
AJMP $
;================中斷服務子程序=====================
INT_CLOCK:
MOV TH0, #0DBH ;定時初值高8位
MOV TL0, #0F0H ;定時初值低8位
INC R7
CJNE R7,#100, EXIT ;每次中斷時間是0.1秒, 100次是1秒.
MOV R7,#00 ;到1秒, R7清零
;-----------------------------------
INC SECOND ;秒加1
MOV A,SECOND
CJNE A,#60, LP
MOV SECOND, #00H ;秒清0
INC MINUTE ;分加1
MOV A,MINUTE
CJNE A,#60, LP
MOV MINUTE, #00H ;分清0
INC HOUR ;小時1
MOV A,HOUR
CJNE A,#24, LP
MOV HOUR, #00H ;小時清0
LP: ACALL Separate ;拆分子程序
ACALL DISPLAY ;顯示子程序
; ACALL DELAY_1* ;延時約一秒
**IT: RETI
;===主程序結(jié)束===
評論