;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 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 上一页 [2] [3] [4] [5] [6] [7] [8] 下一页
Tags:
|