
;!!! skontrolovat casovanie WAIT200uS  zda sa mi zle zpocitane konstanty
; 



      LIST P=16F627
      INCLUDE<P16F627.INC>
      __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<P16F877A.INC>
  __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
