; TIMER 0 - 10 ms OVERFLOW T0TH0 EQU 0DBH ; 9246dez - 241Ehex T0TL0 EQU 0E1H ; FFFF - 241E = DBE1 ITMOD EQU 21H ;T1-AUTORELOAD,T0-16 BIT TIMER ;TIME 2,5 SEC T25TC EQU 250 ; 250 MAL ;TIME 0,5 SE T05TC EQU 50 ; 50 MAL ;TIME 1,5 SEC T15TC EQU 150 ; 150 MAL ; TIMER 0 OVERFLOW T0OVF: ; Reload Timer CLR TR0 MOV TH0, #T0TH0 MOV TL0, #T0TL0 SETB TR0 ; 6 MC PUSH ACC ; Safe ACC PUSH PSW ; safe PSW ; real time calculation DEC TCOUNT ; DOWN COUNTER - TIME OF CUREENT STATE MOV A, TCOUNT ; Time for current state JNZ IEND ; 14 MC ; JBC CTHALFT,ISTART ; SETB CTHALFT ; SJMP IEND ; IRQ task CLR ES SETB STATEBIT ; TIME IS EXECEEDED- GO TO STATE ; 16 MC IEND: POP PSW ; restore PSW POP ACC ; restore ACC RETI ;MAIN MAIN: ; main task - execute States JBC STATEBIT, STATEM ; check of recieve datagram JBC RECVBIT, JRECV ; check of byte send finished JBC SENDBIT, JSEND SJMP MAIN ; 8 MC ; ; ZUSTAENDE SIND DAS HIER !! NE NE NE :) ! ; STATEM: ; NEXT STATE COMPARE ; NOP - SYNCHRONISATION OF FIRST CYCLE MOV A, STATE CJNE A, #0, NEXT_STATE1 ; 3 MC ISTATE0: ;STATE 0 - SET OUTPUT, WAIT 2,5 s ; USED IN NON STOP CYCLE ; JBC FCEXEC, EXECFC ; FAST CALL - SPECIAL FUNCTION START JBC FCDONE, RESTORE ; FAST CALL - SPECIAL FUNCTION FINISHED ; 2 MC ; SYNCHRONISATION NOP NOP NOP ; SYNCR STATE 3 - 7 MC S0TASK: MOV A, CHBYTE; ; HIGH-BYTE RRC A ; SHIFT RIGHT JNC NO_BIT ; NO BIT SET SETB NUMHB0 ; 5 MC NO_BIT: MOV NUML, CLBYTE ; 8 BITS SET LOW BYTE SETB SIGA ;SIGNAL A SET - SYNC MOV TCOUNT, #T25TC ; TIME FOR STATE 0 ; ; CODE .... ; NEXT_STATE1: ; NEXT STATE COMPARE MOV A, STATE CJNE A, #1, NEXT_STATE2 ; 3 MC ; SYNCRONISATION NOP NOP NOP ; SYNCR STATE 2 NOP NOP NOP ; SYNCR STATE 3 ISTATE1: ;STATE 1 - CLEAR OUTPUT, WAIT 0,5 CLR SIGA ; CLR SIGNAL A - SYNC MOV TCOUNT, #T05TC ; TIME FOR STATE 1 ; ; CODE .... ; NEXT_STATE2: ; NEXT STATE COMPARE MOV A, STATE CJNE A, #2, NEXT_STATE3 ; 3 MC NOP NOP ; SYNCR STATE 3 - 1 MC ISTATE2: ; STATE 2 - WAIT OF SIGNAL B, WAIT 1,5 s CLR IE0 SETB EX0 ;SET INT0 ON - SYNC MOV TCOUNT, #T15TC ; TIME FOR STATE 2 ; ; CODE .... ; NEXT_STATE3: ; NEXT STATE COMPARE MOV A, STATE CJNE A, #3, IERROR ; 3 MC ISTATE3: ; STATE 3 - SEND SIGNALS, WAIT 0,5 s CLR EX0 ; INT0 OFF - SYNC MOV TCOUNT, #T05TC ; TIME FOR STATE 3 ; ; CODE .... ; ISTATEEND: MOV A, STATE ADD A, #1 ; NEXT STATE MOV STATE, A ; 3 MC STMEND: JMP MAIN ; 2 MC