From 5a62da0ea34e180c2de95c658fc259d90bff922f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Rivi=C3=A8re?= Date: Thu, 8 Mar 2012 21:16:57 +0000 Subject: [PATCH] Upgraded to Fredi's sources from 2012/01/15. --- MLAB/firebee1/firebee1.asm | 373 +++++++++++++++++++++++++++++-------- MLAB/firebee1/firebee1.mcw | Bin 33280 -> 50688 bytes 2 files changed, 294 insertions(+), 79 deletions(-) diff --git a/MLAB/firebee1/firebee1.asm b/MLAB/firebee1/firebee1.asm index cc1d11a..c347365 100644 --- a/MLAB/firebee1/firebee1.asm +++ b/MLAB/firebee1/firebee1.asm @@ -52,7 +52,7 @@ OFF_TIME EQU .20 ;2.5 SEC (EINHEIT IST EIN TICK = 128MS ON_TIME EQU .2 ;0.25 SEC (EINHEIT IST EIN TICK = 128MS TIMER_HB EQU .240 ;256- (32768Hz PRO 1/8SEC = 4096TICKS/256) => 256-16=240 (resp 256-16/4 (wenn osco) = 252) TIME_MAX EQU .160 ;MAXIMALTIME -U_ERR_PW_AUS EQU .5 ;5 SEC +U_ERR_PW_AUS EQU .40 ;5 SEC ;SERIEL SYNC1 EQU 0FFh SYNC1_DATA EQU 'A'; @@ -69,6 +69,7 @@ RTCD_FROM_MCF EQU 82h ;RTC AND NVRAM DATEN HEADER UND STATUS U_MIN_TO_MCF EQU 03h ;UNTERSPANNUNGSMITTEILUNG AN PROCESSOR EXT_SUB_GO EQU 04h ;SERIELL CODE UM SUBROUTINEN/INTERRUPTS ZU AKTIVIEREN EXT_SUB_STOP EQU 05h ;SERIELL CODE UM SUBROUTINEN/INTERRUPTS ZU STOPPEN +CMD_FROM_MCF EQU 0Ch ;3 BYT COMMANDOS FROM MCF = TOTAL 4 BYT CLK_SLEEP EQU B'00010010' ;125kHz intern, SLEEP MODE CLK_ACTIV EQU B'01110010' ;inTernal CLK=8MHz, SLEEP MODE, SLEEP MODE EXT_CODE EQU 0xFB ;CODE FÜR EXTERNE SUBROUTINEN/INTERRUPTS AUSFÜHREN (FireBee!) @@ -78,8 +79,9 @@ EXTERN_SUB_ADR EQU 0x2010 ;HIER MUSS 0xFB STEHEN WENN EXTERNE SUBROUTINES AUS EXTERN_SUBROUTINES EQU 0x2012 ;STARTPUNKT EXTERNE SUBROUTINES REQ_BLOCK EQU 0xA0 ;BLOCK DATEN LESEN -> CODE UND 3 BYTS ADRESSE = TOTAL 4 BYTES READ_BLOCK EQU 0xA1 ;PROGRAMM BLOCK PIC->MCF -> CODE, 3 BYTS ADRESSE UND 64 BYTS DATEN = TOTAL 68 BYTES -WRITE_BLOCK EQU 0xA2 ;PROGRAMM BLOCK MCF->PIC -> CODE, 3 BYTS ADRESSE UND 64 BYTS DATEN = TOTAL 68 BYTES -PRG_OK_PIC EQU 0x22 ;PROGRAMMIERUNG BLOCK FERTIG +WRITE_BLOCK EQU 0xA2 ;PROGRAMM BLOCK MCF->PIC -> CODE, 3 BYTS ADRESSE UND 64 BYTS DATEN UND 1 BYT CHECKSUM = TOTAL 69 BYTES +PRG_OK EQU 0x00 ;PROGRAMMIERUNG BLOCK FERTIG +CHECKSUM_ERROR EQU 0xFE ;**********************************************************************************************""""""""""""" ; Start at the reset vector Reset_Vector code 0x000 @@ -130,9 +132,70 @@ INT_HANDLER CPFSEQ GO_INT ;SKIP WENN JA RETFIE GOTO EXTERN_INTERRUPTS ;REGISTER SICHERN UND STARTEN + +;BLOCK PROGRAMMIEREN **********************************************************************************************""""""""""""" +PB CODE 0x0080 +PROGRAMM_BLOCK + LFSR 1,RX_BUFFER ;BYT COUNTER AUF RX BUFFER + MOVFF POSTINC1,TBLPTRU ;TABLE POINTER SETZEN + MOVFF POSTINC1,TBLPTRH ;TABLE POINTER SETZEN + MOVFF POSTINC1,TBLPTRL ;TABLE POINTER SETZEN +;EREASE BLOCK + BCF INTCON,GIE ; DISABLE INTTERUPT + BSF EECON1,EEPGD ; point to Flash program memory + BCF EECON1,CFGS ; access Flash program memory + BSF EECON1,WREN ; enable write to memory + BSF EECON1,FREE ; enable Row Erase operation + MOVLW 55h + MOVWF EECON2 ; write 55h + MOVLW 0AAh ; write 0AAh + MOVWF EECON2 + BSF EECON1,WR ; start erase (CPU stall) + BSF INTCON,GIE ; ENABLE INTERRUPT + TBLRD*- ; POINTER DUMMY DECREMENT +; BLOCK WRITE 1.HÄLFTE + MOVLW 23h ; 67 BYT 3 BYT ADR + 64 BYT DATEN +WRITE_WORD_TO_HREG1 + MOVFF POSTINC1,TABLAT ; get byte of buffer data + TBLWT+* ; write data, perform a short write to internal TBLWT holding register. + CPFSEQ FSR1L ; SCHON BEI 32 BYTES? + BRA WRITE_WORD_TO_HREG1 ;NEIN->LOOP +; PROGRAMM BLOCK + BSF EECON1,EEPGD ; point to Flash program memory + BCF EECON1,CFGS ; access Flash program memory + BSF EECON1,WREN ; enable write to memory + BCF INTCON,GIE ; DISABLE INTTERUPT + MOVLW 55h + MOVWF EECON2 ; write 55h + MOVLW 0AAh + MOVWF EECON2 ; write 0AAh + BSF EECON1,WR ; start program (CPU stall) + BCF EECON1,WREN ; disable write to memory +; BLOCK WRITE 2. HÄLFTE + MOVLW 43h ; 67 BYT 3 BYT ADR + 64 BYT DATEN +WRITE_WORD_TO_HREG2 + MOVFF POSTINC1,TABLAT ; get byte of buffer data + TBLWT+* ; write data, perform a short write to internal TBLWT holding register. + CPFSEQ FSR1L ; SCHON BEI 64 BYTES? + BRA WRITE_WORD_TO_HREG2 ;NEIN->LOOP +; PROGRAMM BLOCK + BSF EECON1,EEPGD ; point to Flash program memory + BCF EECON1,CFGS ; access Flash program memory + BSF EECON1,WREN ; enable write to memory + MOVLW 55h + MOVWF EECON2 ; write 55h + MOVLW 0AAh + MOVWF EECON2 ; write 0AAh + BSF EECON1,WR ; start program (CPU stall) + BCF EECON1,WREN ; disable write to memory + BSF INTCON,GIE ; ENABLE INTERRUPT + MOVLW PRG_OK ; OK senden + MOVWF TXREG + CLRF RX_STATUS ; FERTIG + RETFIE ;**********************************************************************************************""""""""""""" ; Start application beyond vector area - CODE 0x0100 +STD CODE 0x0100 KALT_START ;RESET MODE CLRF BSR ;BANK 0 @@ -154,8 +217,9 @@ KALT_START MOVWF OSCCON ; div init ;SET PORT A: **7:#master/0.409*5V0 **6:PIC_AMKB_RX **5:PIC_SWTICH **4:HIGH_CHARGE_CURRENT **3:2V5 *2:3V3/2 **1:1V25 **0:POWER_IN/11 - CLRF PORTA ;#master(7)=0, REST=0 - MOVLW B'11111111' ;DIRECTION: alles auf Input + MOVLW B'01000000' ;RA6 auf high + MOVWF PORTA ;#master(7)=0, REST=0 + MOVLW B'11111111' ;alles auf Input MOVWF TRISA ;SET PORT B: **7:PGD **6:PGC **5:PGM **4:PIN_INT,1V5 **3:GAME PORT PIN10 **2:GAME PORT PIN11 **1:GAME PORT PIN6 **0: GAME PORT PIN5 CLRF PORTB ;ALLES AUF 0 @@ -168,9 +232,9 @@ KALT_START CLRF PORTD ;ALLES AUF 0 MOVWF TRISD ;ALLES AUF INPUT ;SET PORT E: **3:#MCLR **2:#PCI_RESET **1:PCI 3V3 **0:PIC LED (0=ON) - MOVLW B'00000001' ;LED OFF CLRF PORTE ;ALLES AUF 0 - MOVWF TRISE ;ALLES AUF INPUT + MOVLW B'00000111' ;tri: PCI RESET; PCI3V3; LED + MOVWF TRISE ;direction setzen ;-------------------------- ; set OVERvoltage detekt MOVLW B'10011011' ;INT WENN ÜBER 3.9V @@ -201,9 +265,17 @@ KALT_START MOVWF MONTHS MOVLW .42 MOVWF YEARS ;MONTAG 19.7.2010 12:00:00 (JAHR-1968) + MOVLW 0x27 ;32kHz TEILER=64 + MOVWF REGA + MOVLW B'00000011' ;24H, SOMMERZEIT + MOVWF REGB + CLRF REGC + CLRF REGD CLRF TASTE_ON_TIME CLRF TASTE_OFF_TIME CLRF POWER_ON_TIME + CLRF RX_STATUS + CLRF TX_STATUS BSF PIE1,TMR1IE ;Enable Timer1 interrupt ;AD WANDLER INITIALISIEREN CLRF AD_KANAL ;BEI 0 BEGINNEN @@ -263,12 +335,14 @@ POWER_EIN BCF TRISD,RD7 ;#RSTI AKTIVIEREN = LOW BCF TRISB,RB4 ;PIC_INT AKTIVIEREN BCF TRISD,RD0 ;POWER ON + BCF TRISA,RA6 ;PIC_AMKB_RX auf output BRA LS_ON_POWER ;LADESTROM EINSTELLEN POWER_AUS ;CLOCK MOVLW CLK_SLEEP MOVWF OSCCON + BSF TRISA,RA6 ;PIC_AMKB_RX auf input BSF TRISD,RD0 ;POWER OFF BSF TRISD,RD7 ;#RSTI DEAKTIVIEREN BSF TRISB,RB4 ;PIC INT DEAKTIVIEREN @@ -360,8 +434,8 @@ TG_END INCF TASTE_ON_TIME ;ERHÖHEN RETURN RESETEN - BCF TRISD,RD7 ;NEIN-> #RSTI AKTIVIEREN =LOW -->>>RESET CALL SERIAL_OFF ;SERIELL DEAKTIVIEREN + BCF TRISD,RD7 ;NEIN-> #RSTI AKTIVIEREN =LOW -->>>RESET BRA TG_ON_POWER3 ;**********************************************************************************************""""""""""""" ;----------------------------------------- INTERRUPTS @@ -388,7 +462,7 @@ TX_ISR1 BRA TX_ISR2 ;NEIN-> MOVFF POSTINC0,TXREG ;BYT SENDEN MOVLW 0xC3 ;SCHON LETZTES BYTS? - CPFSGT FSR0L ;SKIP WENN FERTIG + CPFSEQ FSR0L ;SKIP WENN FERTIG RETFIE ;NEIN WEITERE SENDEN TX_ISR2 BRA TX_ISR_FERTIG @@ -400,28 +474,33 @@ RX_ISR ; BYT RECEIVED MOVLW SYNC4 ;IM SYNC STATUS? CPFSLT RX_STATUS ;SKIP WENN NEIN BRA RX_SYNC_START ;JA -> ZUERST SYNC EMPFANGEN -;--------------- +;RTC DATEN EMPFANGEN? ----------------------------------------------------------------------------------- MOVLW RTCD_FROM_MCF ; DATEN VOM MCF CODE 0x82? CPFSEQ RX_STATUS ; WENN JA-> SKIP BRA RX_ISR1 ; NEIN-> ;64 BYT EMPFANGEN ------------------------------------- MOVFF RX_B,POSTINC1 ;HOLEN -> (CNT+) - MOVLW 0x3F ;64 BYT ÜBERTRAGEN? + MOVLW 0x40 ;64 BYT ÜBERTRAGEN? CPFSLT FSR1L ;NEIN ->SKIP CLRF RX_STATUS ;JA FERTIG RETFIE -;------------------------------------------------------------------------------------- +; SETZEN? --------------------------------------------------- RX_ISR1 + TSTFSZ RX_STATUS ;TASK HÄNGIG? + BRA RX_ISR2 ;JA -> CPFSEQ RX_B ;BLOCK HEADER 0X82? BRA RX_ISR2 ;NEIN-> MOVWF RX_STATUS ;STATUS SETZEN = EMPFANGENES BYT LFSR 1,.0 ;BYT COUNTER AUF O RETFIE +; RTC DATEN SENDEN? ------------------------------------------------------------------------------------- RX_ISR2 MOVLW REQ_RTCD_FROM_PIC ;DATEN SENDEN? + TSTFSZ RX_STATUS ;TASK HÄNGIG? + BRA RX_ISR3 ;JA -> CPFSEQ RX_B ;SKIP WENN JA BRA RX_ISR3 ;SONST NEXT -;BLOCK HEADER UND 64 BYT SENDEN ----------------------------------------- +;BLOCK HEADER UND 64 BYT SENDEN ----------- LFSR 0,.0 BCF PIR1,TXIF ;INTERRUPT FLAG LÖSCHEN BSF PIE1,TXIE ;Enable interrupt @@ -430,9 +509,11 @@ RX_ISR2 MOVWF TXREG ;BLOCK HEADER = 0X81 CLRF RX_STATUS ;STATUS RÜCKSETZEN RETFIE ;UND WEG -;------------------------------------------------------------------------------------- +;EXT SUB INT STARTEN?------------------------------------------------------------------------------------- RX_ISR3 MOVLW EXT_SUB_GO ;EXT SUB FREIGEBEN? + TSTFSZ RX_STATUS ;TASK HÄNGIG? + BRA RX_ISR4 ;JA -> CPFSEQ RX_B BRA RX_ISR4 ;NEIN-> ;EXT SUBS FREIGEBEN -------------------------------------------------------------- @@ -454,9 +535,11 @@ RX_ISR3 MOVFF TABLAT,GO_SUB ;EXTERNE SUBROUTINES AKTIVIEREN WENN OK CLRF RX_STATUS ;STATUS RÜCKSETZEN RETFIE ;UND WEG -;------------------------------------------------------------------------------------- +;EXT SUB INT STOPPEN? ------------------------------------------------------------------------------------- RX_ISR4 MOVLW EXT_SUB_STOP ;EXT SUB STOPPEN? + TSTFSZ RX_STATUS ;TASK HÄNGIG? + BRA RX_ISR5 ;JA -> CPFSEQ RX_B BRA RX_ISR5 ;NEIN-> ;EXT SUBS STOPPEN -------------------------------------------------------------- @@ -464,36 +547,36 @@ RX_ISR4 CLRF GO_SUB ;STOPPEN CLRF RX_STATUS ;STATUS RÜCKSETZEN RETFIE ;UND WEG -;------------------------------------------------------------------------------------- +;REQ BLOCK? ------------------------------------------------------------------------------------- RX_ISR5 MOVLW REQ_BLOCK ;REQ BLOCK? + TSTFSZ RX_STATUS ;TASK HÄNGIG? SKIP NON + BRA RX_ISR6 ;JA -> CPFSEQ RX_B BRA RX_ISR6 ;NEIN-> -;REQ BLOCK ---------------------------------------------------------------- +;REQ BLOCK SETZEN MOVWF RX_STATUS ;STATUS SETZEN = EMPFANGENES BYT LFSR 1,TX_BUFFER ;BYT COUNTER AUF TX_BUFFER -> GLEICH EINTRAGEN RETFIE RX_ISR6 CPFSEQ RX_STATUS ;REQ BLOCK ADRESSE EMPFANGFEN? BRA RX_ISR7 ;NEIN-> -;3 BYT EMPFANGEN ------------------------------------- +;3 BYT EMPFANGEN --------------------------- MOVFF RX_B,POSTINC1 ;HOLEN -> (CNT+) - MOVLW 0x82 ;3 BYT ÜBERTRAGEN? (BUFFER BEGINNT BEI 0x180 - CPFSLT FSR1L ;NEIN ->SKIP - BRA RX_RB3BOK - RETFIE -RX_RB3BOK + MOVLW 0x83 ;3 BYT ÜBERTRAGEN? (BUFFER BEGINNT BEI 0x180 + CPFSEQ FSR1L ;NEIN ->SKIP + RETFIE ;NEXT -> LFSR 1,TX_BUFFER ;BYT RX COUNTER AUF TX_BUFFER MOVFF POSTINC1,TBLPTRU ;ADRESSE EINTRAGEN MOVFF POSTINC1,TBLPTRH MOVFF POSTINC1,TBLPTRL - MOVLW 0xC2 ;67 BYT ÜBERTRAGEN? (BUFFER BEGINNT BEI 0x180 + MOVLW 0xC3 ;67 BYT ÜBERTRAGEN? (BUFFER BEGINNT BEI 0x180 RX_RB3B2 TBLRD *+ ;LESEN UND NEXT MOVFF TABLAT,POSTINC1 ;UND EINTRAGEN CPFSEQ FSR1L ;WENN FERTIG ->SKIP BRA RX_RB3B2 ;SONST LOOP -;BLOCK HEADER 3 BYTS ADRESSE UND 64 BYT SENDEN STARTEN ----------------------------------------- +;BLOCK HEADER 3 BYTS ADRESSE UND 64 BYT SENDEN STARTEN LFSR 0,TX_BUFFER ;TX COUNTER AUF TX_BUFFER BCF PIR1,TXIF ;INTERRUPT FLAG LÖSCHEN BSF PIE1,TXIE ;Enable interrupt @@ -502,66 +585,129 @@ RX_RB3B2 MOVWF TXREG ;BLOCK HEADER = 0XA1 CLRF RX_STATUS ;STATUS RÜCKSETZEN RETFIE ;UND WEG -;------------------------------------------------------------------------------------- +;PROGRAMM BLOCK? ------------------------------------------------------------------------------------- RX_ISR7 MOVLW WRITE_BLOCK ;WRITE BLOCK 0xA2 BYT EMPFANGEN? CPFSEQ RX_STATUS ;WENN JA-> SKIP BRA RX_ISR8 ;NEIN-> -;WRITE BLOCK ---------------------------------------------------------------------------- -;67 BYT EMPFANGEN ------------------------------------- +;WRITE BLOCK ------------------------ +;68 BYT EMPFANGEN: 3 BYT ADRESSE; 64 BYT DATEN; 1 BYT CHECKSUM ------------------- MOVFF RX_B,POSTINC1 ;HOLEN -> (CNT+) - MOVLW 0x42 ;67 BYT ÜBERTRAGEN? - CPFSLT FSR1L ;WENN FERTIG ->SKIP + MOVLW 0x44 ;68 BYT ÜBERTRAGEN? + CPFSEQ FSR1L ;WENN FERTIG ->SKIP RETFIE -; ADRESSE UND DATEN SIND DA -> PROGRAMMING FLASH +; ADRESSE UND DATEN und CHECKSUM SIND DA -> PROGRAMMING FLASH +; TEST CHECKSUM LFSR 1,RX_BUFFER ;BYT COUNTER AUF RX BUFFER - MOVFF POSTINC1,TBLPTRU ;TABLE POINTER SETZEN - MOVLW (EXTERN_INT_ADR & 0xFF0000)>>16 - CPFSLT TBLPTRU ;TEST OB WENIGER ALS ERLAUBT - BRA NO_PROG ;JA-> - MOVFF POSTINC1,TBLPTRH ;TABLE POINTER SETZEN - MOVLW (EXTERN_INT_ADR & 0x00FF00)>>8 - CPFSLT TBLPTRU ;TEST OB WENIGER ALS ERLAUBT - BRA NO_PROG ;JA-> - MOVFF POSTINC1,TBLPTRL ;TABLE POINTER SETZEN -;EREASE BLOCK - BSF EECON1,EEPGD ; point to Flash program memory - BCF EECON1,CFGS ; access Flash program memory - BSF EECON1,WREN ; enable write to memory - BSF EECON1,FREE ; enable Row Erase operation - MOVLW 55h - MOVWF EECON2 ; write 55h - MOVLW 0AAh ; write 0AAh - MOVWF EECON2 - BSF EECON1,WR ; start erase (CPU stall) - MOVLW 0x42 ;67 BYT -WRITE_WORD_TO_HREGS - MOVFF POSTINC1,TABLAT ; get byte of buffer data - TBLWT+* ; write data, perform a short write to internal TBLWT holding register. - CPFSLT FSR1L ;SCHON BEI 67 BYTES? - BRA WRITE_WORD_TO_HREGS ;NEIN->LOOP -PROGRAM_MEMORY - BSF EECON1,EEPGD ; point to Flash program memory - BCF EECON1,CFGS ; access Flash program memory - BSF EECON1,WREN ; enable write to memory - MOVLW 55h - MOVWF EECON2 ; write 55h - MOVLW 0AAh - MOVWF EECON2 ; write 0AAh - BSF EECON1,WR ; start program (CPU stall) - BCF EECON1,WREN ; disable write to memory -NO_PROG - CLRF RX_STATUS ;AUF NORMLA SCHALTEN - RETFIE ;UND FERTIG + MOVLW 43h ;67 BYTES + MOVWF RX_B ;COUNTER + MOVLW 0h ;SUM CLEAR +LOOP_TEST_CHECKSUM + ADDWF POSTINC1,0 ;ADD TO WREG + DECFSZ RX_B ;-1 SKIP WENN 0 + BRA LOOP_TEST_CHECKSUM + CPFSEQ POSTINC1 ;SUM = CHECKESUM? SKIP JA + BRA CHK_ERR ;NEIN CHECKSUM ERROR + BRA PROGRAMM_BLOCK ; OK-> PROGRAMMIEREN +CHK_ERR + MOVLW CHECKSUM_ERROR ; ERROR senden + MOVWF TXREG; + CLRF RX_STATUS ; FERTIG + RETFIE ;WRITE BLOCK SETZEN? RX_ISR8 + TSTFSZ RX_STATUS ;TASK HÄNGIG? + BRA RX_ISR9 ;JA -> CPFSEQ RX_B ;BLOCK HEADER COMMANDOE 0XA2? BRA RX_ISR9 ;NEIN-> MOVWF RX_STATUS ;STATUS SETZEN = EMPFANGENES BYT LFSR 1,RX_BUFFER ;BYT COUNTER AUF RX BUFFER RETFIE -;------------------------------------------------------------------------------------- +;-------------------------------------------------------------------------------------------- RX_ISR9 + MOVLW CMD_FROM_MCF ;CMD HEADER 0x0C EMPFANGEN? + CPFSEQ RX_STATUS ;WENN JA-> SKIP + BRA RX_ISR15 ;NEIN-> +;COMMAND BYT EMPFANGEN +;3 BYT EMPFANGEN ------------------------------------- + MOVFF RX_B,POSTINC1 ;HOLEN -> (CNT+) + MOVLW 0x3 ;3 BYT ÜBERTRAGEN? + CPFSEQ FSR1L ;NEIN ->SKIP + RETFIE +CMD_AUSWERTEN +;RESET? + LFSR 1,RX_BUFFER ;ZEIGER AUF RX BUFFER + MOVLW 'R' + CPFSEQ POSTINC1 ;=? SIKP JA + BRA LC2 ;NEIN-> + MOVLW 'S' + CPFSEQ POSTINC1 ;=? SIKP JA + BRA LC2 ;NEIN-> + MOVLW 'T' + CPFSEQ POSTINC1 ;=? SIKP JA + BRA LC2 ;NEIN-> +;RESET MCF + CALL SERIAL_OFF ;SERIELL DEAKTIVIEREN + BCF TRISD,RD7 ;NEIN-> #RSTI AKTIVIEREN =LOW -->>>RESET + MOVLW 0FFh +LC1_WAIT + NOP + NOP + NOP + DECFSZ WREG + BRA LC1_WAIT + BSF TRISD,RD7 ;JA -> #RSTI DEAKTIVIEREN =HIGH + CALL SERIAL_ON ;SERIELL EINSCHALTEN + CLRF RX_STATUS ;JA FERTIG + RETFIE +LC2: +;POWER AUS? + LFSR 1,RX_BUFFER ;ZEIGER AUF RX BUFFER + MOVLW 'O' + CPFSEQ POSTINC1 ;=? SIKP JA + BRA LC4 ;NEIN-> + MOVLW 'F' + CPFSEQ POSTINC1 ;=? SIKP JA + BRA LC4 ;NEIN-> + MOVLW 'F' + CPFSEQ POSTINC1 ;=? SIKP JA + BRA LC4 ;NEIN-> +;POWER OFF + CALL POWER_AUS + CLRF RX_STATUS ;JA FERTIG + RETFIE +LC4: +;RESET PIC? + LFSR 1,RX_BUFFER ;ZEIGER AUF RX BUFFER + MOVLW 'R' + CPFSEQ POSTINC1 ;=? SIKP JA + BRA LC6 ;NEIN-> + MOVLW 'P' + CPFSEQ POSTINC1 ;=? SIKP JA + BRA LC6 ;NEIN-> + MOVLW 'I' + CPFSEQ POSTINC1 ;=? SIKP JA + BRA LC6 ;NEIN-> +;RESET PIC + RESET +;HIER SOLLTE ER NICHT HINKOMMEN + BRA KALT_START +LC6 +;NO REAL CMA + CLRF RX_STATUS ;JA FERTIG + RETFIE +;END CDM AUSWERTEN +RX_ISR15 + TSTFSZ RX_STATUS ;TASK HÄNGIG? + BRA RX_ISR20 ;JA -> + CPFSEQ RX_B ;CMD? + BRA RX_ISR20 ;NEIN-> +;CMD SETZEN + MOVWF RX_STATUS ;STATUS SETZEN = EMPFANGENES BYT + LFSR 1,RX_BUFFER ;ZEIGER AUF RX BUFFER + RETFIE +RX_ISR20 +RX_ISR_END CLRF RX_STATUS RETFIE ;------------------------------------------------------------------------------------- @@ -612,24 +758,24 @@ RX_WAIT1 BTFSS TXSTA,TRMT BRA RX_WAIT1 MOVLW 'O' ;SENDE OK! - MOVWF TXREG; + MOVWF TXREG RX_WAIT2 BTFSS TXSTA,TRMT BRA RX_WAIT2 MOVLW 'K' ;SENDE OK! - MOVWF TXREG; + MOVWF TXREG RX_WAIT3 BTFSS TXSTA,TRMT BRA RX_WAIT3 MOVLW '!' - MOVWF TXREG; + MOVWF TXREG CLRF RX_STATUS ;OK START NORMAL RETFIE ;**********************************************************************************************""""""""""""" ;SPANNUNGSÜBERWACHUNGS INTERRUPT HLVD_ISR BTFSS U_ERR,1 ;WARTEN AUF GELADEN? - BRA HLVD_LE ;NEIN UNTERSPANNUNG DETEKT-> + BRA HLVD_LE ;NEIN UNTERSPANNUNG DETEKT-> BCF U_ERR,0 ;SPANNUNGSFEHLER AUS BCF U_ERR,1 ;WARTEN AUF GELADEN=AUS MOVLW U_ERR_PW_AUS+2 ;POWER AUS ÜBERSPRINGEN @@ -682,15 +828,15 @@ POWER_OFF_I BNZ PINGS ;NICHT MODULO4 -> MOVLW .7 CPFSEQ TICKS ;7. TICK? - BRA POWER_OFF_I2 ;NEIN-> + BRA POWER_OFF_I2 ;NEIN-> BCF TRISE,RE0 ;JA->LED=ON POWER_OFF_I2 MOVLW .30 ; WENIGER ALS 30 SEC SEIT LETZTEM SPANNUNGSFEHLER? CPFSLT U_ERR_TIME - BRA PINGS ;NEIN-> + BRA PINGS ;NEIN-> MOVLW .5 CPFSEQ TICKS ;5. TICK? - BRA PINGS ;NEIN-> + BRA PINGS ;NEIN-> BCF TRISE,RE0 ;JA->LED=ON PINGS CALL TASTE ;UP TASTE @@ -763,6 +909,20 @@ SEK_3 SEK_4 CLRF TICKS INCF SECS ; Increment seconds + +;????????????????????????????????????????????????????? +;test pic ps2 keyboard +; MOVLW 0f9h ;2 +; CALL send +; nop +; nop +; MOVLW .10 +; CALL send +; nop +; nop +; MOVLW .10 +; CALL send +;-------------------------------------------------------------- MOVLW .59 ; 60 seconds elapsed? CPFSGT SECS RETFIE ;RETURN @@ -840,6 +1000,61 @@ NOT_SEP ; ENDE MAIN ;**********************************************************************************************""""""""""""" ;**********************************************************************************************""""""""""""" -; EXTERN_SUBOUTINES FOGEN AB 0x1000 DIE SPÄTER EINPROGRAMMIERT WERDEN +; EXTERN_SUBOUTINES FOGEN AB 0x2000 DIE SPÄTER EINPROGRAMMIERT WERDEN ;**********************************************************************************************""""""""""""" +EXT_INT CODE 0x2000 +EXT_INT_MAGIC DB 0 +EXT_INT_START + +EXT_SUB CODE 0x2010 +EXT_SUB_MAGIC DB 0 +EXT_SUT_START + +clockrate equ .8000000 ;Xtal value (8Mhz in this case) +fclk equ clockrate/4 +;baudrate equ ((fclk/.7812.5)/3-2) ;7812.5 is the baud rate +baudrate equ .83 ;7812.5 is the baud rate + +txreg equ 10 +delay equ 11 +count equ 12 +txchar equ 13 + +send + movwf txreg + movlw baudrate + movwf delay + movlw .9 + movwf count + bcf PORTA,6 ;send start bit + nop ;even out bit times +next + decfsz delay,f + goto next + movlw baudrate ;rest of program is 9 instructions + movwf delay + decfsz count,f + goto sendnextbit + bcf PORTA,6 ;send stop bit + movlw baudrate ;Delay for line to settle + movwf delay ;Delay for line to settle +p1 + decfsz delay,f ;Delay for line to settle + goto p1 ;Delay for line to settle + bsf PORTA,6 +p2 + decfsz delay,f + goto p2 + return +sendnextbit + rrcf txreg,F + btfss STATUS,C ;check next bit to tx + goto setlo + bsf PORTA,6 ;send a high bit + goto next +setlo + bcf PORTA,6 ;send a low bit + goto next + + end diff --git a/MLAB/firebee1/firebee1.mcw b/MLAB/firebee1/firebee1.mcw index 74deeebf5b6100924ee5ebf2631438d976dfbda0..a546959236d357835fcf3e5b6e35afa180d5ab99 100644 GIT binary patch literal 50688 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