CPU : 8032FIRMWARE ROM : 64kbSYSTEM RAM : 32kb execute if internal ram 0x26.6 on cpu 8032 clear. if(CPU.IRAM[0x26].6 = 0){ word TIMER_MODE = 0x0000; word TIMER_ADDRESS = 0xEC00; word TIMER_DATA = 0x0000; //-------------------------------------------------------- // timer mode cek // 0x0000 = 10 mSec // 0x1000 = 100 mSec // 0x2000 = 1 Sec // 0x3000 = 10 Sec //-------------------------------------------------------- CPU.R0C++; if(CPU.R0C == 10){ CPU.R0C = 0; TIMER_MODE = 0x1000; CPU.R0D++; if(CPU.R0D == 10){ CPU.R0D = 0; TIMER_MODE = 0x2000; CPU.R0E++; if(CPU.R0E == 10){ CPU.R0E = 0; TIMER_MODE = 0x3000; } } } //-------------------------------------------------------- // timer data update //-------------------------------------------------------- for(int i=0; i<128; i++){ TIMER_DATA = EXTERNAL[TIMER_ADDRESS]; if((TIMER_DATA & 0x8000 == 0x8000)&&(TIMER_DATA & 0x3000 <= TIMER_MODE)){ CPU.EA = false; TIMER_DATA--; if(TIMER_DATA & 0x03FF == $0000){TIMER_DATA &= 0x7FFF} } EXTERNAL[TIMER_ADDRESS] = TIMER_DATA; CPU.EA = true; TIMER_ADDRESS += 2; } //-------------------------------------------------------- // Interval timer for OB13 (multiple of 10 ms) //-------------------------------------------------------- TIMER_DATA = CPU.IRAM[0x3A] << 8 | CPU.IRAM[0x3B]; if(TIMER_DATA == 0){ CPU.IRAM[0x3A] = EXTERNAL[0xEAC2]; CPU.IRAM[0x3B] = EXTERNAL[0xEAC3]; TIMER_DATA = CPU.IRAM[0x3A] << 8 | CPU.IRAM[0x3B]; if(TIMER_DATA != 0){CPU.IRAM[0x2C] |= 0x08;} } TIMER_DATA--; CPU.IRAM[0x3A] = TIMER_DATA >> 8; CPU.IRAM[0x3B] = TIMER_DATA & 0xFF; }////// 8032 CODE///$05C8 | 75 D0 08 | MOV PSW,#$08 $05CB | 20 36 74 | JB $26.6,$0642$05CE | E4 | CLR A $05CF | F5 F0 | MOV B,A $05D1 | 0C | INC R4 $05D2 | BC 0A 12 | CJNE R4,#$0A,$05E7$05D5 | FC | MOV R4,A$05D6 | 0D | INC R5$05D7 | D2 F4 | SET B.4$05D9 | BD 0A 0B | CJNE R5,#$0A,$05E7$05DC | FD | MOV R5,A$05DD | 0E | INC R6$05DE | 75 F0 20 | MOV B,#$20$05E1 | BE 0A 03 | CJNE R6,#$0A,$05E7$05E4 | FE | MOV R6,A$05E5 | D2 F4 | SET B.4$05E7 | 75 48 EC | MOV $0048,#$EC$05EA | 85 48 A0 | MOV P2,$0048$05ED | 78 00 | MOV R0,#$00$05EF | 79 80 | MOV R1,#$80$05F1 | E2 | MOVX A,@R0$05F2 | 30 E7 27 | JNB ACC.7,$061C$05F5 | 54 30 | ANL A,#$30 $05F7 | B5 F0 02 | CJNE A,B,$05FC$05FA | 80 02 | SJMP $05FE$05FC | 50 1E | JNC $061C$05FE | C2 AF | CLR IE.7$0600 | 08 | INC R0 // $0601 | E2 | MOVX A,@R0 // $0602 | C3 | CLR C // $0603 | 94 01 | SUBB A,#$01 //$0605 | F2 | MOVX @R0,A //$0606 | 60 07 | JZ $060F$0608 | 18 | DEC R0 //$0609 | E2 | MOVX A,@R0 //$060A | 94 00 | SUBB A,#$00 // $060C | F2 | MOVX @R0,A //$060D | 80 0D | SJMP $061C //$060F | 18 | DEC R0 //$0610 | E2 | MOVX A,@R0 //$0611 | FA | MOV R2,A //$0612 | 54 03 | ANL A,#$03 //$0614 | 70 04 | JNZ $061A //$0616 | EA | MOV A,R2 // $0617 | C2 E7 | CLR ACC.7 // $0619 | FA | MOV R2,A // $061A | EA | MOV A,R2 // $061B | F2 | MOVX @R0,A // $061C | D2 AF | SET IE.7 //$061E | 08 | INC R0 //$061F | 08 | INC R0 //$0620 | D9 CF | DJNZ R1,$05F1 //$0622 | E5 3A | MOV A,$003A$0624 | 70 14 | JNZ $063A$0626 | E5 3B | MOV A,$003B$0628 | 70 10 | JNZ $063A$062A | 90 EA C2 | MOV DPTR,#$EAC2$062D | E0 | MOVX A,@DPTR$062E | F5 3A | MOV $003A,A$0630 | A3 | INC DPTR$0631 | E0 | MOVX A,@DPTR$0632 | F5 3B | MOV $003B,A$0634 | 45 3A | ORL A,$003A$0636 | 60 0A | JZ $0642$0638 | D2 63 | SET $2C.3$063A | E5 3B | MOV A,$003B$063C | 70 02 | JNZ $0640$063E | 15 3A | DEC $003A$0640 | 15 3B | DEC $003B