📄 clock_v1.dt
字号:
;;----------------------------------------------------------------------------
;; CLOCK/TIMER/ALARM 3 IN 1 PROGARM
;; FILE NAME : CLOCK_N1.DT
;; 30 sec / 1 pules
;;----------------------------------------------------------------------------
;; USE EMC78P447
;;----------------------------------------------------------------------------
INDIRT == 0x00 ; Indirect Register define
TCC == 0x01 ; Timer/Counter Register define
PC == 0x02 ; Pprogra Counter define
STATUS == 0x03 ; Program Status Word define
RSR == 0x04 ; RAM Select register define
PORT_5 == 0x05 ; Port 5 define
PORT_6 == 0x06 ; Port 6 define
PORT_7 == 0X07 ; Port 7 define
INTF == 0x0F ; Interrupt status register define
ISR == 0X3F
IOCE == 0X0E
IOCF == 0X0F
;;----------------------------------------------------------------------------
A_BUFFER == 0x10 ; Accumulator backup
S_BUFFER == 0x11 ; STATUS register buffer
;;
CLOCK_HR_H == 0X12
CLOCK_HR_L == 0X13
CLOCK_MIN_H == 0X14
CLOCK_MIN_L == 0X15
CLOCK_SEC_H == 0X16
CLOCK_SEC_L == 0X17
;;
CLOCK_500mS == 0X18
;;
TIMER_HR_H == 0X19
TIMER_HR_L == 0X1A
TIMER_MIN_H == 0X1B
TIMER_MIN_L == 0X1C
TIMER_SEC_H == 0X1D
TIMER_SEC_L == 0X1E
;;
ALARM_HR_H == 0X20
ALARM_HR_L == 0X21
ALARM_MIN_H == 0X22
ALARM_MIN_L == 0X23
ALARM_SEC_H == 0X24
ALARM_SEC_L == 0X25
;;
DISPLAY1 == 0X26
DISPLAY2 == 0X27
DISPLAY3 == 0X28
DISPLAY4 == 0X29
SCAN_LED_LOOP == 0X2A
DOT_FLASH == 0X2B
KEY_STATUS == 0X2C
KEY_PORT == 0X2D
KEY_PORT_BACKUP == 0X2E
KEY_TIME == 0X2F
;;
MODE_SELECT == 0X30
TIMER_STATUS == 0X31
ALARM_STATUS == 0X31
L_5MIN == 0X32
H_5MIN == 0X33
TEST_LOOP == 0X34
;;
WATCH_HR_H == 0X35
WATCH_HR_L == 0X36
WATCH_MIN_H == 0X37
WATCH_MIN_L == 0X38
WATCH_SEC_H == 0X39
WATCH_SEC_L == 0X3A
;;
CLOCK_3333uS == 0X3B
SEC3_TIMER == 0X3C
SEC30 == 0X3D
;;----------------------------------------------------------------------------
;; CONTROL register define
;;----------------------------------------------------------------------------
PDC == 0xB ; PULL DOWN control register
INTM == 0xF ; Interrupt Mask register
;;----------------------------------------------------------------------------
;; Interrupt mask register bit define
;;----------------------------------------------------------------------------
TCIE == 0 ;
ICIE == 1 ;
EXIE == 2 ;
;;----------------------------------------------------------------------------
;; PSW bit define
;;----------------------------------------------------------------------------
C_FLAG == 0 ;
DC == 1 ;
Z_FLAG == 2 ;
;;----------------------------------------------------------------------------
;; Interrupt status bit define
;;----------------------------------------------------------------------------
TCIF == 0 ;
ICIF == 1 ;
EXIF == 2 ;
;;----------------------------------------------------------------------------
;; FLAG bit define
;;----------------------------------------------------------------------------
TCC_FLG == 0 ;
EXG_FLG == 1 ;
EXG_PAT == 2 ;
;;----------------------------------------------------------------------------
;; Constant number define
;;----------------------------------------------------------------------------
HZ_NUM == 255 ;
LED_NUM == 25 ;
DEC_NUM == 55 ;
;;----------------------------------------------------------------------------
;; KEY STATUS BIT DEFINE
;;----------------------------------------------------------------------------
KEY_RELEASE == 0
H_CHECK_KEY == 1
;;----------------------------------------------------------------------------
;; TIMER STATUS BIT DEFINE
;;----------------------------------------------------------------------------
START_STOP_BIT == 0
ALARM_TIME_ON == 1
UP_TIMER_ON == 2
UP_TIMER_STOP == 3
REACH_ZERO == 7
;;----------------------------------------------------------------------------
;; PROGRAM START !
;;----------------------------------------------------------------------------
ORG 0
JMP INITIAL
;;----------------------------------------------------------------------------
ORG 2
;;----------------------------------------------------------------------------
INTERRUPT: DISI
MOV A_BUFFER,A ;; SAVE A AND STATUS REGISTER
MOV A,STATUS ;;
MOV S_BUFFER,A ;;
;; ;;
JBC ISR,TCIF ;; TEST IF TCC INTERRUPT
JMP TCC_INT ;; THAN GOTO TCC_INT
JBC ISR,EXIF ;; TEST IF EXTERNAL INTERRUPT
JMP EXT_INT ;; THAN GOTO EXT_INT
;;
INTERRUPT_OVER WDTC
;;
SHOW1 MOV A,@0X01
XOR A,SCAN_LED_LOOP
JBS STATUS,Z_FLAG
JMP SHOW2
BC PORT_6,7
BS PORT_6,4
MOV A,DISPLAY1
MOV PORT_7,A
JMP OVER
;;
SHOW2 MOV A,@0X02
XOR A,SCAN_LED_LOOP
JBS STATUS,Z_FLAG
JMP SHOW3
BC PORT_6,4
BS PORT_6,5
MOV A,DISPLAY2
MOV PORT_7,A
JMP OVER
;;
SHOW3 MOV A,@0X03
XOR A,SCAN_LED_LOOP
JBS STATUS,Z_FLAG
JMP SHOW4
BC PORT_6,5
BS PORT_6,6
MOV A,DISPLAY3
MOV PORT_7,A
JMP OVER
;;
SHOW4 MOV A,@0X04
XOR A,SCAN_LED_LOOP
JBS STATUS,Z_FLAG
JMP CHECK_KEY
BC PORT_6,6
BS PORT_6,7
MOV A,DISPLAY4
MOV PORT_7,A
JMP OVER
;;
CHECK_KEY CLR PORT_7
MOV A,@0B00011111
IOW PORT_7
NOP
NOP
MOV A,PORT_7
AND A,@0B00011111
MOV KEY_PORT,A
BS KEY_STATUS,H_CHECK_KEY
CLR SCAN_LED_LOOP
MOV A,@0B00000000
IOW PORT_7
;;
OVER INC SCAN_LED_LOOP
MOV A,S_BUFFER ;;
MOV STATUS,A ;; RESTORE STATUS
MOV A,A_BUFFER ;; RESTORE A
BC STATUS,Z_FLAG ;; RESTORE ORIGINAL Z FLAG
JBC S_BUFFER,Z_FLAG ;;
BS STATUS,Z_FLAG ;;
ENI
RETI
;;----------------------------------------------------------------------------
LED_TABLE: TBL
RETL 0B00111111 ;; "0"
RETL 0B00000110 ;; "1"
RETL 0B01011011 ;; "2"
RETL 0B01001111 ;; "3"
RETL 0B01100110 ;; "4"
RETL 0B01101101 ;; "5"
RETL 0B01111101 ;; "6"
RETL 0B00000111 ;; "7"
RETL 0B01111111 ;; "8"
RETL 0B01101111 ;; "9"
RETL 0B00000000 ;; "MASK"
RETL 0B11110110 ;; "H."
;;----------------------------------------------------------------------------
TCC_INT: WDTC
JBC DOT_FLASH,0
JMP TEST_BUZZER
BS PORT_5,0
BC PORT_5,3
BC PORT_6,1 ;;;;
JMP BUZZER_OVER
;;
TEST_BUZZER JBS PORT_6,0
BC PORT_5,0
;;
GGG JBC ALARM_STATUS,ALARM_TIME_ON
JMP BUZZER_OR_ISD
JBS TIMER_STATUS,START_STOP_BIT
JMP BUZZER_OVER
;;
MOV A,TIMER_HR_L
JBS STATUS,Z_FLAG
JMP BUZZER_OVER
MOV A,TIMER_MIN_H
JBS STATUS,Z_FLAG
JMP BUZZER_OVER
MOV A,TIMER_MIN_L
JBS STATUS,Z_FLAG
JMP BUZZER_OVER
;;
JBC TIMER_SEC_H,2
JMP BUZZER_OVER
JBS TIMER_SEC_H,1
JMP BUZZER_ON_OFF
JBS TIMER_SEC_H,0
JMP BUZZER_ON_OFF
JMP BUZZER_OVER
;;
BUZZER_OR_ISD JBS PORT_6,3
JMP BUZZER_OVER
;;
BUZZER_ON_OFF JBS PORT_5,3
JMP BUZZER_ON
;;
BUZZER_OFF BC PORT_5,3
JMP BUZZER_OVER
;;
BUZZER_ON BS PORT_5,3
;;
BUZZER_OVER BC ISR,TCIF ;; CLEAR TCIF FLAG
DJZ CLOCK_3333uS
JMP SHOW_WHAT
;;
MOV A,@0X10
MOV CLOCK_3333uS,A
;;
;;
DEC_500mS DJZ CLOCK_500mS
JMP SHOW_WHAT
;;
T_500mS MOV A,@0X96
MOV CLOCK_500mS,A
;;
INC DOT_FLASH ;;
JBS DOT_FLASH,0 ;;
JMP SHOW_WHAT ;;
;;
MOV A,L_5MIN
JBS STATUS,Z_FLAG
JMP LL
MOV A,H_5MIN
JBC STATUS,Z_FLAG
JMP PP
;;
LL MOV A,L_5MIN
JBC STATUS,Z_FLAG
JMP B1
DEC L_5MIN
JMP PP
B1 MOV A,H_5MIN
JBC STATUS,Z_FLAG
JMP PP
DEC H_5MIN
MOV A,@0XFF
MOV L_5MIN,A
;;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -