;!!! skontrolovat casovanie WAIT200uS zda sa mi zle zpocitane konstanty ; LIST P=16F627 INCLUDE __CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _HS_OSC TEMP EQU 23H TEMP1 EQU 24H K0L EQU 25H K0H EQU 26H K1L EQU 27H K1H EQU 28H K2L EQU 29H K2H EQU 30H ZNAMENKO EQU 31H TMP0 EQU 32H TMP1 EQU 33H PRIJIMA EQU 34H #DEFINE RXTX PORTB,3 #DEFINE ENABLE PORTB,0 ORG 00H GOTO INIT ;-------------------------------ZACATEK PODPROGRAMU--------------------------------------------------------- PocitadloMinusJedna DECFSZ TMP0,F RETLW 0XFF ;este nepadol cas DECFSZ TMP1,F RETLW 0XFF ; este nepadol RETLW 0 ;je zle padol cas ;-------------------------------------------------------------------- RXTOTX BTFSC RXTX RETURN BSF RXTX CALL WAIT400uS CALL WAIT10mS RETURN ;--------------------------------------------------------------------- TXTORX BSF STATUS,RP0 ;BANKA1 ;CEKA DOKUD TSR NENI PRAZDNY ABYCHOM SI NEUFIKLI ODCHOZI DATA BTFSS TXSTA,TRMT ; -,,- GOTO $-1 ; -,,- BCF STATUS,RP0 ;BANKA0 ; -,,- BCF RCSTA,CREN BCF RXTX CALL WAIT40uS BCF ENABLE CALL WAIT20uS BSF ENABLE CALL WAIT200uS ; CALL WAIT5mS ;takto nie!! cakat sa bude s kontrolou ; BSF RCSTA,CREN ; CREN sa zapne az po detekcii prijimaca nie TU"!! RETURN ;---------------------------------------------------------------------- WAIT20uS MOVLW 0x22 ;34 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 RETURN ;---------------------------------------------------------------------- WAIT40uS MOVLW 0x43 ;67 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 RETURN ;------------------------------------------------------------------------ WAIT200uS MOVLW 0x04 ;4 DEC MOVWF TMP1 MOVLW 0x52 ;82 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 DECFSZ TMP1,F GOTO $-5 RETURN ;---------------------------------------------------------------------- WAIT400uS MOVLW 0x03 ;3 DEC MOVWF TMP1 MOVLW 0x0DD ;221 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 DECFSZ TMP1,F GOTO $-5 RETURN WAIT10mS MOVLW 0x50 ;80 DEC MOVWF TMP1 MOVLW 0x0CF ;207 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 DECFSZ TMP1,F GOTO $-5 RETURN WAIT5mS MOVLW 0x28 ;40 DEC MOVWF TMP1 MOVLW 0x0CF ;207 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 DECFSZ TMP1,F GOTO $-5 RETURN ;-------------------------------KONEC PODPROGRAMU----------------------------------------------------------- INIT MOVLW B'00000111' MOVWF CMCON BSF STATUS,RP0 ;BANKA1 MOVLW B'00000000' ;VYSTUPNI PORT A MOVWF TRISA MOVLW B'00000110' ;REZERVACE PORTU B,1,2 PRO SERIOVY PRENOS MOVWF TRISB MOVLW D'129' ;KONSTANTA PRO VYPOCET BAUD RATE MOVWF SPBRG MOVLW B'00100000' ;zapnuti TXEN MOVWF TXSTA ; CLRF PIE1 ;Vypnout preruseni na periferiich BCF STATUS,RP0 ;BANKA0 BSF RCSTA,SPEN ;POVOLENI SERIOVEHO PORTU BCF RCSTA,CREN ;POVOLENI PRIJMU ....teraz este bez prijmu ;INICIAKZACE BEZDRATOVEHO MODULU BSF ENABLE CALL WAIT20uS BSF RXTX CALL WAIT400uS ;-------------------------------------------------------------------------------------------- MOVF RCREG MOVF RCREG ;---------------------------------SYNCHRONIZACE S DRUHYM PROCESOREM--------------------------- SYNCHRO CALL RXTOTX MOVLW 0x55 ;POSLI 55H, TESTUJ NECHTENE PREPSANI TXREG BTFSS PIR1,TXIF ; -,,- GOTO $-1 ; -,,- MOVWF TXREG ; -,,- CALL TXTORX ZaciatokPrijmu0xAA MOVLW 0x03 ;6 DEC ; cca 13ms? MOVWF TMP1 MOVLW 0x76 ;118 DEC MOVWF TMP0 clrf PRIJIMA ;pomocny reg StartW btfsc PORTB,1 ; je HI na RX? decf PRIJIMA,F ; dekremenruj btfsc STATUS,Z ; je nula goto Vysielac_Ide0xAA ; ano je 256x RX=HI nop ; predlzit cakacku nop-mi nop ; cca 34 instr. x0,5us?? nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop CALL PocitadloMinusJedna ;ODECTI 1 Z INTERVALU ANDLW 0XFF ;test W, NA RETLW BTFSC STATUS,Z GOTO SYNCHRO ;C AS UPLYNUL neprisiel BLANK restartuj GOTO StartW ;CAS NEUPLYNUL Vysielac_Ide0xAA ;dost dlho je signal v stave Hi..t.j. je zapnuty vysielac 627 MOVLW 0x21 ;33 DEC ;CEKEJ 50MS MOVWF TMP1 MOVLW 0x76 ;118 DEC MOVWF TMP0 bsf RCSTA,RCEN ; zapne prijem do RCREG movf RCREG,w CykSynchro BTFSC PIR1,RCIF ; GOTO TestujNa0XAA ;PRISLO ZPET AAH ? CALL PocitadloMinusJedna ;ODECTI 1 Z INTERVALU 50MS ANDLW 0XFF ;test W, NA RETLW BTFSC STATUS,Z GOTO SYNCHRO ;CAS UPLYNUL neprisiel syncro restartuj GOTO CykSynchro ;CAS NEUPLYNUL TestujNa0XAA BTFSC RCSTA,OERR ;TEST CHYBY PRIJMU GOTO RESTARTPRIJMU ;jdi na opravu chyby prijmu BTFSC RCSTA,FERR GOTO CHYBASTOPBITU movf RCREG,0 movwf TEMP movlw 0XAA subwf TEMP,0 btfss STATUS,Z goto SYNCHRO ; call RXTOTX goto PRENOSK0 RESTARTPRIJMU BCF RCSTA,4 ; BSF RCSTA,4 ;zapne sa ked bude treba GOTO SYNCHRO CHYBASTOPBITU MOVF RCREG,W GOTO SYNCHRO ;------------------------------------------------------------------------------------------------------------------------- PRENOSK0 MOVLW B'00000001' ;ve W je ulozena informace a MCU ji odesila pres UART ven (KANAL 0) BTFSS PIR1,TXIF ;TESTOVANI ABYCHOM SI TXREG NEPREPSALI vzdy pred zapisom ! GOTO $-1 ; MOVWF TXREG ;presunout 8-bit hodnotu do registru TXREG (Bank0) => nacteni dat zacina vysilani CALL TXTORX ZaciatokPrenos0 MOVLW 0x03 ;6 DEC ; cca 13ms? MOVWF TMP1 MOVLW 0x76 ;118 DEC MOVWF TMP0 clrf PRIJIMA ;pomocny reg Pre0W btfsc PORTB,1 ; je HI na RX? decf PRIJIMA,F ; dekremenruj btfsc STATUS,Z ; je nula goto Vysielac_Ide0 ; ano je 256x RX=HI nop ; predlzit cakacku nop-mi nop ; cca 34 instr. x0,5us?? nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop CALL PocitadloMinusJedna ;ODECTI 1 Z INTERVALU ANDLW 0XFF ;test W, NA RETLW BTFSC STATUS,Z GOTO SYNCHRO ;CAS UPLYNUL neprisiel BLANK restartuj GOTO Pre0W ;CAS NEUPLYNUL Vysielac_Ide0 MOVLW 0x21 ;33 DEC MOVWF TMP1 MOVLW 0x76 ;118 DEC MOVWF TMP0 bsf RCSTA,RCEN ; zapne prijem do RCREG movf RCREG,w CYKPRIJEM1 BTFSC PIR1,RCIF GOTO PRIJEM1 CALL PocitadloMinusJedna ANDLW 0XFF ;test W BTFSC STATUS,Z GOTO SYNCHRO ; podol cas GOTO CYKPRIJEM1 ; este nepadol PRIJEM1 BTFSC RCSTA,OERR ;TEST CHYBY PRIJMU GOTO RESTARTPRIJMU ;jdi na opravu chyby prijmu BTFSC RCSTA,FERR GOTO CHYBASTOPBITU MOVF RCREG,0 MOVWF K0L ;DAT A JEJICH ULOZENI CYKPRIJEM2 BTFSC PIR1,RCIF GOTO PRIJEM2 CALL PocitadloMinusJedna ANDLW 0XFF ;test W BTFSC STATUS,Z GOTO SYNCHRO ; podol cas GOTO CYKPRIJEM2 ; este nepadol PRIJEM2 BTFSC RCSTA,OERR ;TEST CHYBY PRIJMU GOTO RESTARTPRIJMU ;jdi na opravu chyby prijmu BTFSC RCSTA,FERR GOTO CHYBASTOPBITU MOVF RCREG,0 MOVWF K0H ;DAT A JEJICH ULOZENI CALL RXTOTX ;------------------------------------------------------------------------------------------------------------------------- PRENOSK1 MOVLW B'00000010' ;ve W je ulozena informace a MCU ji odesila pres UART ven (KANAL 0) BTFSS PIR1,TXIF ;TESTOVANI ABYCHOM SI TXREG NEPREPSALI vzdy pred zapisom ! GOTO $-1 ; MOVWF TXREG ;presunout 8-bit hodnotu do registru TXREG (Bank0) => nacteni dat zacina vysilani CALL TXTORX ; tu opravit podla prijmu znaku 0XAA ZaciatokPrenos1 MOVLW 0x03 ;6 DEC ; cca 13ms? MOVWF TMP1 MOVLW 0x76 ;118 DEC MOVWF TMP0 clrf PRIJIMA ;pomocny reg Pre1W btfsc PORTB,1 ; je HI na RX? decf PRIJIMA,F ; dekremenruj btfsc STATUS,Z ; je nula goto Vysielac_Ide1 ; ano je 256x RX=HI nop ; predlzit cakacku nop-mi nop ; cca 34 instr. x0,5us?? nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop CALL PocitadloMinusJedna ;ODECTI 1 Z INTERVALU ANDLW 0XFF ;test W, NA RETLW BTFSC STATUS,Z GOTO SYNCHRO ;CAS UPLYNUL neprisiel BLANK restartuj GOTO StartW ;CAS NEUPLYNUL Vysielac_Ide1 MOVLW 0x21 ;33 DEC MOVWF TMP1 MOVLW 0x76 ;118 DEC MOVWF TMP0 bsf RCSTA,RCEN ; zapne prijem do RCREG movf RCREG,w CYKPRIJEM3 BTFSC PIR1,RCIF GOTO PRIJEM3 CALL PocitadloMinusJedna ANDLW 0XFF ;test W BTFSC STATUS,Z GOTO SYNCHRO ; podol cas GOTO CYKPRIJEM3 ; este nepadol PRIJEM3 BTFSC RCSTA,OERR ;TEST CHYBY PRIJMU GOTO RESTARTPRIJMU ;jdi na opravu chyby prijmu BTFSC RCSTA,FERR GOTO CHYBASTOPBITU MOVF RCREG,0 MOVWF K1L ;DAT A JEJICH ULOZENI CYKPRIJEM4 BTFSC PIR1,RCIF GOTO PRIJEM4 CALL PocitadloMinusJedna ANDLW 0XFF ;test W BTFSC STATUS,Z GOTO SYNCHRO ; podol cas GOTO CYKPRIJEM4 ; este nepadol PRIJEM4 BTFSC RCSTA,OERR ;TEST CHYBY PRIJMU GOTO RESTARTPRIJMU ;jdi na opravu chyby prijmu BTFSC RCSTA,FERR GOTO CHYBASTOPBITU MOVF RCREG,0 MOVWF K1H ;DAT A JEJICH ULOZENI CALL RXTOTX ;------------------------------------------------------------------------------------------------------------------------------- PRENOSK2 MOVLW B'00000100' ;ve W je ulozena informace a MCU ji odesila pres UART ven (KANAL 0) BTFSS PIR1,TXIF ;TESTOVANI ABYCHOM SI TXREG NEPREPSALI vzdy pred zapisom ! GOTO $-1 ; MOVWF TXREG ;presunout 8-bit hodnotu do registru TXREG (Bank0) => nacteni dat zacina vysilani CALL TXTORX ZaciatokPrenos2 MOVLW 0x03 ;6 DEC ; cca 13ms? MOVWF TMP1 MOVLW 0x76 ;118 DEC MOVWF TMP0 clrf PRIJIMA ;pomocny reg Pre2W btfsc PORTB,1 ; je HI na RX? decf PRIJIMA,F ; dekremenruj btfsc STATUS,Z ; je nula goto Vysielac_Ide2 ; ano je 256x RX=HI nop ; predlzit cakacku nop-mi nop ; cca 34 instr. x0,5us?? nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop CALL PocitadloMinusJedna ;ODECTI 1 Z INTERVALU ANDLW 0XFF ;test W, NA RETLW BTFSC STATUS,Z GOTO SYNCHRO ;CAS UPLYNUL neprisiel BLANK restartuj GOTO Pre2W ;CAS NEUPLYNUL Vysielac_Ide2 MOVLW 0x21 ;33 DEC MOVWF TMP1 MOVLW 0x76 ;118 DEC MOVWF TMP0 CYKPRIJEM5 BTFSC PIR1,RCIF GOTO PRIJEM5 CALL PocitadloMinusJedna ANDLW 0XFF ;test W BTFSC STATUS,Z GOTO SYNCHRO ; podol cas GOTO CYKPRIJEM5 ; este nepadol PRIJEM5 BTFSC RCSTA,OERR ;TEST CHYBY PRIJMU GOTO RESTARTPRIJMU ;jdi na opravu chyby prijmu BTFSC RCSTA,FERR GOTO CHYBASTOPBITU MOVF RCREG,0 MOVWF K2L ;DAT A JEJICH ULOZENI CYKPRIJEM6 BTFSC PIR1,RCIF GOTO PRIJEM6 CALL PocitadloMinusJedna ANDLW 0XFF ;test W BTFSC STATUS,Z GOTO SYNCHRO ; podol cas GOTO CYKPRIJEM6 ; este nepadol PRIJEM6 BTFSC RCSTA,OERR ;TEST CHYBY PRIJMU GOTO RESTARTPRIJMU ;jdi na opravu chyby prijmu BTFSC RCSTA,FERR GOTO CHYBASTOPBITU MOVF RCREG,0 MOVWF K2H ;DAT A JEJICH ULOZENI CYKPRIJEM7 BTFSC PIR1,RCIF GOTO PRIJEM7 CALL PocitadloMinusJedna ANDLW 0XFF ;test W BTFSC STATUS,Z GOTO SYNCHRO ; podol cas GOTO CYKPRIJEM7 ; este nepadol PRIJEM7 BTFSC RCSTA,OERR ;TEST CHYBY PRIJMU GOTO RESTARTPRIJMU ;jdi na opravu chyby prijmu BTFSC RCSTA,FERR GOTO CHYBASTOPBITU MOVF RCREG,0 MOVWF ZNAMENKO ;DAT A JEJICH ULOZENI CALL RXTOTX GOTO PRENOSK0 END ;/////////////////////////////////////////////877//////////////////////////////////////////////////////////// ;upravene cakanie na prijem a nastaveny cas nx400uS pri vysielani aby sa pripravil 627 LIST P=16F877A INCLUDE __CONFIG _PWRTE_ON & _WDT_OFF & _BODEN_OFF & _LVP_OFF & _HS_OSC & _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF TMP0 EQU 22H TMP1 EQU 23H VYBER EQU 24H ZNAMENKO EQU 25H #DEFINE ENABLE PORTC,1 #DEFINE RXTX PORTC,2 ORG 00H GOTO INIT ;----------------------------ZACATEK PODPROGRAMU-------------------------------------------------- ADPREVOD MOVLW 0x05 ;CEKANI 750uS PRED ZAHAJENIM PREVODU MOVWF TMP1 MOVLW 0x0DD ; MOVWF TMP0 DECFSZ TMP0,1 ; GOTO $-1 DECFSZ TMP1,1 ; GOTO $-3 BSF ADCON0,2 ;zahejni prevodu BTFSC ADCON0,2 ;zjistovani dokonceni prevodu GOTO $-1 ;... RETURN ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ VYSILEJL BSF STATUS,RP0 ;BANKA1 (ADRESL JE V BANCE 1 !!! ) MOVF ADRESL,W ;do W je ulozena informace a MCU ji nasledne odesila pres UART ven BCF STATUS,RP0 ;BANKA0 BTFSS PIR1,TXIF ;TESTOVANI ABYCHOM SI TXREG NEPREPSALI GOTO $-1 ; MOVWF TXREG ;presunout 8-bit hodnotu do registru TXREG (Bank0) => nacteni dat zacina vysilani RETURN ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ VYSILEJH MOVF ADRESH,W ;do W je ulozena informace a MCU ji nasledne odesila pres UART ven BTFSS PIR1,TXIF ;TESTOVANI ABYCHOM SI TXREG NEPREPSALI vzdy pred zapisom ! GOTO $-1 ; MOVWF TXREG ;presunout 8-bit hodnotu do registru TXREG (Bank0) => nacteni dat zacina vysilani RETURN ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ VYSILEJZNAMENKO MOVF ZNAMENKO,W BTFSS PIR1,TXIF ;TESTOVANI ABYCHOM SI TXREG NEPREPSALI vzdy pred zapisom ! GOTO $-1 ; MOVWF TXREG ;presunout 8-bit hodnotu do registru TXREG (Bank0) => nacteni dat zacina vysilani RETURN ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ RXTOTX BSF RXTX ; druha strana 877 sa pripravi na prijem CALL WAIT400uS ; 627 zacne vysielat BLANK t.j pin RC6 ma uroven HI CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS CALL WAIT400uS RETURN ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ TXTORX BSF STATUS,RP0 ;BANKA1 ;CEKA DOKUD TSR NENI PRAZDNY ABYCHOM SI NEUFIKLI ODCHOZI DATA BTFSS TXSTA,TRMT ; -,,- GOTO $-1 ; -,,- BCF STATUS,RP0 ;BANKA0 ; -,,- CALL WAIT400uS BCF RXTX CALL WAIT40uS BCF ENABLE CALL WAIT20uS BSF ENABLE CALL WAIT200uS RETURN ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WAIT20uS ; (34*3+4)=23us MOVLW 0x22 ;34 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 RETURN ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WAIT40uS ; (67*3+4)0,2=41us MOVLW 0x43 ;67 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 RETURN ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WAIT200uS ;.....511us MOVLW 0x04 ;4 DEC MOVWF TMP1 MOVLW 0x52 ;82 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 DECFSZ TMP1,F GOTO $-5 RETURN ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WAIT400uS ; cas=((256*(Ktemp1-1)+Ktemp0)*3 +6)iTakt=441us MOVLW 0x03 ;3 DEC MOVWF TMP1 MOVLW 0x0DD ;221 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 DECFSZ TMP1,F GOTO $-5 RETURN ;+++++++++++++++++++++++++++++++++++KONEC PODPROGRAMU++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;-----------------------------------INICIALIZACE PERIFERII-------------------------------------------- INIT BCF STATUS,RP0 ;BANKA0 BCF STATUS,RP1 ;BANKA0 CLRF PORTA CLRF PORTE CLRF PORTC CLRF PORTB BSF STATUS,RP0 ;BANKA 1 MOVLW B'00000111' ;INICIALZICAZE PORTU MOVWF CMCON ; MOVLW B'10000000' ;INICIALIZACE AD PREVODNIKU MOVWF ADCON1 ; MOVLW B'00111111' ;INICIALIZACE PORTUA RA0-RA5 AD VSTUPY MOVWF TRISA ; MOVLW B'00000111' ;INICIALIZACE PORTUE RE0-RE2 AD VSTUPY MOVWF TRISE ; MOVLW B'00000000' ;INICIALIZACE PORTUB VSE VYSTUP MOVWF TRISB ; CLRF TRISC ;PortC 7,6 pro USART, 0 pro detekci zaporneho napeti cidla teploty MOVLW B'11000001' ; MOVWF TRISC ; MOVLW D'129' ;konstanta pro vypocet BAUD RATE MOVWF SPBRG ; ; MOVLW B'00100000' ;zapnuti TXEN MOVWF TXSTA ; CLRF PIE1 ;Vypnout preruseni na periferiich BCF STATUS,RP0 ;BANKA0 MOVLW B'10000000' ;***zapnuti UART portu a BEZ prijmu MOVWF RCSTA ;INICIALIZACE BEZDRATOVEHO MODULU BSF ENABLE CALL WAIT20uS BSF RXTX CALL WAIT200uS BCF RXTX CALL WAIT40uS BCF ENABLE CALL WAIT20uS BSF ENABLE CALL WAIT200uS ;------------------------------------------------KONEC INICIALIZACE------------------------------------------------------------------------- START bcf RCSTA,CREN movlw 6 ;Sleduje sa RC7 caka sa na zapnutie vysielaca 627 movwf VYBER ; docasne pouzity StartW btfss PORTC,7 goto START call WAIT400uS : !!!!! skontrolovat tento WAIT ci ma spravne konstanty"!!!! decfsz VYBER goto StartW ;dost dlho je signal v stave Hi..t.j. je zapnuty vysielac 627 bsf RCSTA,CREN ; zapne sa prijem do RCREG BTFSS PIR1,RCIF ;ceka na prichozi data (dokud neni naplnen RCREG) goto $-1 ; BTFSC RCSTA,OERR ;TEST CHYBY PRIJMU GOTO RESTARTPRIJMU ; BTFSC RCSTA,FERR ;TEST CHYBY PRIJMU GOTO CHYBARAMEC ; MOVF RCREG,0 MOVWF VYBER MOVWF PORTB ;zobrazeni prichozich dat na LED GOTO MENU RESTARTPRIJMU BCF RCSTA,4 ; BSF RCSTA,4 ; nastavi sa po START-e GOTO START CHYBARAMEC MOVF RCREG,0 GOTO START MENU MOVLW 0X55 SUBWF VYBER,0 ;porovnaj ak W==VYBER>je zero v STATUS BTFSC STATUS,Z ; Zero indikator GOTO SYNCHRO ; nie call treba odpovedat 0xAA a ide START MOVLW B'00000001' SUBWF VYBER,0 BTFSC STATUS,Z GOTO PRENOSK0 MOVLW B'00000010' SUBWF VYBER,0 BTFSC STATUS,Z GOTO PRENOSK1 MOVLW B'00000100' SUBWF VYBER,0 BTFSC STATUS,Z GOTO PRENOSK2 GOTO START SYNCHRO ;SYNCHRONIZACE (POSLI ZPET 0xAA) (POKUD 0x55 PRIJATO A BEZ CHYB) CALL RXTOTX BTFSS PIR1,TXIF ;TESTOVANI ABYCHOM SI TXREG NEPREPSALI GOTO $-1 ; MOVLW 0xAA ;odpoved MOVWF TXREG CALL TXTORX GOTO START ; bude sa cakat odznova povel alebo synchro PRENOSK0 CALL RXTOTX MOVLW B'11000001' ; vyber vstupniho kanalu (0) , vyber zdroje CLOCK (INTRC), zapnuti AD MOVWF ADCON0 ;... CALL ADPREVOD ;zavolej zahajeni AD prevodu CALL VYSILEJL ;zavolej vysilani LsB CALL VYSILEJH ;zavolej vysilani MsB CALL TXTORX GOTO START PRENOSK1 CALL RXTOTX MOVLW B'11001001' ; vyber vstupniho kanalu (1) , vyber zdroje CLOCK (INTRC), zapnuti AD MOVWF ADCON0 ;... CALL ADPREVOD ;zavolej zahajeni AD prevodu CALL VYSILEJL ;zavolej vysilani LsB CALL VYSILEJH ;zavolej vysilani MsB CALL TXTORX GOTO START PRENOSK2 CALL RXTOTX BTFSC PORTC,0 ;POKUD TEPLOTA KLADNA, TAK PREVOD S NORMALNIM VREF+. POKUD ZAPORNA TAK VREF+ -5V GOTO MINUSHODNOTA MOVLW B'11010001' ; vyber vstupniho kanalu (2) , vyber zdroje CLOCK (INTRC), zapnuti AD MOVWF ADCON0 ;... CALL ADPREVOD ;zavolej zahajeni AD prevodu CALL VYSILEJL ;zavolej vysilani LsB CALL VYSILEJH ;zavolej vysilani MsB BCF ZNAMENKO,0 ;TEPLOTA JE KLADNA CALL VYSILEJZNAMENKO CALL TXTORX GOTO START MINUSHODNOTA BSF STATUS,RP0 ;BANKA1 MOVLW B'10000001' ;NASTAVENI VREF+ RA3 MOVWF ADCON1 BCF STATUS,RP0 MOVLW B'11010001' ; vyber vstupniho kanalu (2) , vyber zdroje CLOCK (INTRC), zapnuti AD MOVWF ADCON0 ;... CALL ADPREVOD ;zavolej zahajeni AD prevodu CALL VYSILEJL ;zavolej vysilani LsB CALL VYSILEJH ;zavolej vysilani MsB BSF ZNAMENKO,0 ;teplota je zaporna CALL VYSILEJZNAMENKO BSF STATUS,RP0 ;BANKA1 BCF ADCON1,0 ;NASTAVENI VREF+ +5V BCF STATUS,RP0 ;BANKA0 CALL TXTORX GOTO START PRENOSK3 PRENOSK4 GOTO START END