免电源的电话使用计时器
DL == 0X10 ;DELAY LOOP
MIN == 0X11 ;MINUTE
SEC == 0X12 ;SECOND
DD == 0X13 ;DISPLAY DIGIT
DG == 0X14 ;DISPLAY DIGIT HIGH DG=DD=DDH
AB == 0X15 ;A BACK_UP
RFB == 0X16 ;RF BACK_UP
FG == 0X17 ;FLAG
ORG 0
0000 JMP INIT ;PROGRAM START
// // // //
0007 JMP INIT ;PROGRAM START
;TCC INTERRUPT-------------------------------------------------------------
TCCI:
0008 MOV AB,A ;AB <- A
0009 SWAP AB ;AB <- BA
000A SWAPA RF
000B MOV RFB,A ;RFB<- FR
000C COM FG
000D INC SEC
CHECK:
000E MOV A,SEC
000F SUB A,@59 ;59-SEC=A
0010 JBC RF,FC
0011 JMP C_MIN
0012 CLR SEC
0013 INC MIN
C_MIN:
0014 MOV A,MIN
0015 SUB A,@99 ;99-MIN=A
0016 JBS RF,FC
0017 CLR MIN
TCCE:
0018 SWAPA RFB
0019 MOV RF,A ;RF<- RFB
001A SWAPA AB ;A <- BA
001B BC 0X0F,0 ;CLEAR TCC_INT
001C RETI
001D JMP INIT ;PROGRAM START
// // // //
0028 JMP INIT ;PROGRAM START
;TABLE 7 SEGEMENT-------------------------------------------------------
T7:
0029 CALL TABLE
002A JBC FG,00
002B XOR A,@0X80
002C RET
002D JMP INIT ;PROGRAM START
// // // //
003B JMP INIT ;PROGRAM START
;TABLE ---------------------------------------------------------------------------
TABLE:
003C ADD PC,A ; GFE DCBA
003D RETL @0B01000000 ;0 0100 0000
003E RETL @0B01111001 ;1 0111 1001
003F RETL @0B00100100 ;2 0010 0100
0040 RETL @0B00110000 ;3 0011 0000
0041 RETL @0B00011001 ;4 0001 1001
0042 RETL @0B00010010 ;5 0001 0010
0043 RETL @0B00000010 ;6 0000 0010
0044 RETL @0B01011000 ;7 0101 1000
0045 RETL @0B00000000 ;8 0000 0000
0046 RETL @0B00010000 ;9 0001 0000
0047 JMP INIT ;PROGRAM START
// // // //
0055 JMP INIT ;PROGRAM START
;DELAY ---------------------------------------------------------------------------
DELAY:
0056 WDTC
0057 MOV P5,A
0058 MOV A,@00
0059 IOW P5
005A MOV A,@0X3F
005B MOV RSR,A
005C MOV A,@0X1F
005D MOV DL,A
005E CLRA
DELAY1:
005F ADD A,IAR
0060 DEC RSR
0061 DJZ DL
0062 JMP DELAY1
0063 OR A,@00
0064 JBS RF,FZ
0065 JMP INIT ;PROGRAM START
0066 MOV A,@0XFF
0067 IOW P6
0068 RET
0069 JMP INIT ;PROGRAM START
// // // //
007F JMP INIT ;PROGRAM START
;INIT -------------------------------------------------------------------------------
INIT:
0080 MOV A,@0X3F
0081 MOV RSR,A
0082 MOV A,@0X2F
0083 MOV DL,A
INIT1:
0084 CLR IAR
0085 DEC RSR
0086 DJZ DL
0087 JMP INIT1
0088 MOV A,@0X00
0089 IOW P5 ;PORT 5 OUTPUT
008A IOW P6 ;PORT 6 OUTPUT
008B MOV A,@0X80
008C IOW 0X0E ;ENABLE WDT
008D MOV A,@0X01
008E IOW 0X0F ;ENABLE TCC_INT
008F MOV A,@0X05 ;1/64
0090 CONTW
0091 ENI
0092 JMP SCAN
0093 JMP INIT ;PROGRAM START
// // // //
00B8 JMP INIT ;PROGRAM START
;SCAN -----------------------------------------------------------------------------
SCAN:
00B9 MOV A,MIN
HTD:
00BA CLR DG
H_H:
00BB ADD A,@246 ;A=A-10
00BC JBS RF,FC
00BD JMP H_L
00BE INC DDH
00BF JMP H_H
H_L:
00C0 ADD A,@10
00C1 CALL T7
00C2 IOW P6
00C3 MOV P6,A
00C4 MOV A,@255 ;DISPLAY DIGIT 0
00C5 CALL DELAY
00C6 MOV A,DG
00C7 CALL T7
00C8 IOW P6
00C9 XOR A,@0XFF
00CA MOV P6,A
00CB MOV A,@00 ;DISPLAY DIGIT 1
00CC CALL DELAY
00CD JMP SCAN
00CE JMP INIT ;PROGRAM START
// // // //
03FF JMP INIT ;PROGRAM START
与TC6.ICE程序的差异之处:
在每个程序的段落「加入JMP INIT」指令。
在程序节结尾以后「加入JMP INIT」指令。
如此一来,不论IC何时死机错乱都会跳到开始来执行了。
加入WATCH DOG TIMER:
来避免程序的错误而造成死LOOP现象。
加入错误侦测能力:
利用剩余的寄存器来做引子,随时去读取这些寄存器,若和不为零则代表错误发生了,应该重新开始。
效果观察:
不论如何故意的去弄死机都会从头开始正常执行程序了,大功告成。可以加上您认为漂亮合适的外壳,投入使用了。
附源程序:dhsyjsq.dt
;
; FILE NAME:dhsyjsq.dt
; DATE :1999,5,5
; BY :HWANG JYN_GUO
;
; FUNCTION DESCRIPTION:
; USING TCC TO GET 1 SEC INTERRUPT
; 32768/(2*64*256)= 1 SEC
; CRYSTAL MODE 32768 Hz
; 2 CYCLE AND 2 CLOCK MODE
;
IAR == 00 ;INDIRECT AR
PC == 02
RF == 03 ;STATUS
RSR == 04 ;RAM SELECTOR
FZ == 02 ;FLAG OF ZERO
FC == 00 ;FLAG OF CARRY
P5 == 0X05 ;PORT 5
P6 == 0X06 ;PORT 6
DL == 0X10 ;DELAY LOOP
MIN == 0X11 ;MINUTE
SEC == 0X12 ;SECOND
DD == 0X13 ;DISPLAY DIGIT
DG == 0X14 ;DISPLAY DIGIT HIGH DG=DD=DDH
AB == 0X15 ;A BACK_UP
RFB == 0X16 ;RF BACK_UP
FG == 0X17 ;FLAG
ORG 0000
JMP INIT ;PROGRAM START
JMP INIT ;PROGRAM START
;TCC INTERRUPT-------------------------------------------------------------
TCCI:
MOV AB,A ;AB <- A
SWAP AB ;AB <- BA
SWAPA RF
MOV RFB,A ;RFB<- FR
COM FG
INC SEC
CHECK:
MOV A,SEC
SUB A,@59 ;59-SEC=A
JBC RF,FC
JMP C_MIN
CLR SEC
INC MIN
C_MIN:
MOV A,MIN
SUB A,@99 ;99-MIN=A
JBS RF,FC
CLR MIN
TCCE:
SWAPA RFB
MOV RF,A ;RF<- RFB
SWAPA AB ;A <- BA
BC 0X0F,0 ;CLEAR TCC_INT
RETI
JMP INIT ;PROGRAM START
JMP INIT ;PROGRAM START
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论