LM75A és PIC18F45K42 I2C1 program

 LM75A és PIC18F45K42 I2C1 és I2C2 kommunikációs program

LM75A és PIC18F45K42 I2C1 kommunikációs program: itt!
Letölthető I2C1 (asm): itt!

LM75A és PIC18F45K42 I2C2 kommunikációs program: itt!
Letölthető I2C2 (asm): itt!

 

LM75A és PIC18F45K42 I2C1 kommunikációs program

 

  LIST   P=PIC18F45K42 ;  ISO 8859-2   
  #include p18f45k42.inc ;  
 
;
;   MCLR Enable bit:
  ;CONFIG   MCLRE = INTMCLR  ;    If LVP = 0, MCLR pin function is port defined function; If LVP =1, RE3 pin fuction is MCLR
;     MCLRE = EXTMCLR      If LVP = 0, MCLR pin is MCLR; If LVP = 1, RE3 pin function is MCLR 
;
;
;   Extended Instruction Set Enable bit:
;     XINST = ON           Extended Instruction Set and Indexed Addressing Mode enabled
  ;CONFIG   XINST = OFF      ;    Extended Instruction Set and Indexed Addressing Mode disabled
;

;
;   WDT operating mode:
    ;CONFIG    WDTE = OFF  ;         WDT Disabled; SWDTEN is ignored

;
;   Low Voltage Programming Enable bit:
  ;CONFIG     LVP = OFF ;           HV on MCLR/VPP must be used for programming
;     LVP = ON             Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored
;
;
   
   ;CONFIG PPS1WAY = OFF ; OFF- kesobb nem? engedelyezi prgrambol a portmodositasokat
   
   ;----------------------------------------------------------------------------   
   
  ; #include  PIC18LF45K42 
;
;   IMPORTANT: For the PIC18 devices, the __CONFIG directive has been
;              superseded by the CONFIG directive.  The following settings
;              are available for this device.
;
;   External Oscillator Selection:
;     FEXTOSC = LP         LP (crystal oscillator) optimized for 32.768 kHz; PFM set to low power
;     FEXTOSC = XT         XT (crystal oscillator) above 100 kHz, below 8 MHz; PFM set to medium power
;     FEXTOSC = HS         HS (crystal oscillator) above 8 MHz; PFM set to high power
;     FEXTOSC = RESERVED   Reserved (DO NOT USE)
    ;  CONFIG FEXTOSC = OFF   ;     Oscillator not enabled
;     FEXTOSC = ECL        EC (external clock) below 100 kHz; PFM set to low power
   CONFIG   FEXTOSC = ECM ;       EC (external clock) for 500 kHz to 8 MHz; PFM set to medium power
;     FEXTOSC = ECH        EC (external clock) above 8 MHz; PFM set to high power
;
;   Reset Oscillator Selection:
;     RSTOSC = HFINTOSC_64MHZHFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1
;     RSTOSC = RESERVED_1  Reserved
;     RSTOSC = EXTOSC_4PLL EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits
;     RSTOSC = RESERVED_2  Reserved
;     RSTOSC = SOSC        Secondary Oscillator
;     RSTOSC = LFINTOSC    Low-Frequency Oscillator
 ;  CONFIG  RSTOSC = HFINTOSC_1MHZHFINTOSC ; with HFFRQ = 4 MHz and CDIV = 4:1
 
;     RSTOSC = EXTOSC      EXTOSC operating per FEXTOSC bits (device manufacturing default)
;
;   Clock out Enable bit:
;     CLKOUTEN = ON        CLKOUT function is enabled
;     CLKOUTEN = OFF       CLKOUT function is disabled
;
;   PRLOCKED One-Way Set Enable bit:
;     PR1WAY = OFF         PRLOCK bit can be set and cleared repeatedly
 ; CONFIG   PR1WAY = ON ;         PRLOCK bit can be cleared and set only once
;
;   Clock Switch Enable bit:
;     CSWEN = OFF          The NOSC and NDIV bits cannot be changed by user software
;     CSWEN = ON           Writing to NOSC and NDIV is allowed
;
;   Fail-Safe Clock Monitor Enable bit:
;     FCMEN = OFF          Fail-Safe Clock Monitor disabled
;     FCMEN = ON           Fail-Safe Clock Monitor enabled
;
;   MCLR Enable bit:
 ;  CONFIG   MCLRE = INTMCLR  ;    If LVP = 0, MCLR pin function is port defined function; If LVP =1, RE3 pin fuction is MCLR
;     MCLRE = EXTMCLR      If LVP = 0, MCLR pin is MCLR; If LVP = 1, RE3 pin function is MCLR 
;
;   Power-up timer selection bits:
;     PWRTS = PWRT_1       PWRT set at 1ms
;     PWRTS = PWRT_16      PWRT set at 16ms
;     PWRTS = PWRT_64      PWRT set at 64ms
;     PWRTS = PWRT_OFF     PWRT is disabled
;
;   Multi-vector enable bit:
 ;  CONFIG  MVECEN = OFF ;        Interrupt contoller does not use vector table to prioritze interrupts
;     MVECEN = ON          Multi-vector enabled, Vector table used for interrupts
;
;   IVTLOCK bit One-way set enable bit:
;     IVT1WAY = OFF        IVTLOCK bit can be cleared and set repeatedly
 ;  CONFIG  IVT1WAY = ON ;        IVTLOCK bit can be cleared and set only once
;
;   Low Power BOR Enable bit:
;     LPBOREN = ON         ULPBOR enabled
  CONFIG   LPBOREN = OFF ;       ULPBOR disabled
;
;   Brown-out Reset Enable bits:
;     BOREN = OFF          Brown-out Reset disabled
;     BOREN = ON           Brown-out Reset enabled according to SBOREN
;     BOREN = NOSLP        Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored
;     BOREN = SBORDIS      Brown-out Reset enabled , SBOREN bit is ignored
;
;   Brown-out Reset Voltage Selection bits:
;     BORV = VBOR_2P85     Brown-out Reset Voltage (VBOR) set to 2.8V
;     BORV = VBOR_2P7      Brown-out Reset Voltage (VBOR) set to 2.7V
;     BORV = VBOR_245      Brown-out Reset Voltage (VBOR) set to 2.45V
;     BORV = VBOR_190      Brown-out Reset Voltage (VBOR) set to 1.90V
;
;   ZCD Disable bit:
;     ZCD = ON             ZCD always enabled
;     ZCD = OFF            ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON
;
;   PPSLOCK bit One-Way Set Enable bit:
;     PPS1WAY = OFF        PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence)
   CONFIG  PPS1WAY = ON ;        PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle
;
;   Stack Full/Underflow Reset Enable bit:
;     STVREN = OFF         Stack full/underflow will not cause Reset
  CONFIG   STVREN = ON ;         Stack full/underflow will cause Reset
;
;   Debugger Enable bit:
;     DEBUG = ON           Background debugger enabled
;     DEBUG = OFF          Background debugger disabled
;
;   Extended Instruction Set Enable bit:
;     XINST = ON           Extended Instruction Set and Indexed Addressing Mode enabled
  CONFIG   XINST = OFF      ;    Extended Instruction Set and Indexed Addressing Mode disabled
;
;   WDT Period selection bits:
;     WDTCPS = WDTCPS_0    Divider ratio 1:32
;     WDTCPS = WDTCPS_1    Divider ratio 1:64
;     WDTCPS = WDTCPS_2    Divider ratio 1:128
;     WDTCPS = WDTCPS_3    Divider ratio 1:256
;     WDTCPS = WDTCPS_4    Divider ratio 1:512
;     WDTCPS = WDTCPS_5    Divider ratio 1:1024
;     WDTCPS = WDTCPS_6    Divider ratio 1:2048
;     WDTCPS = WDTCPS_7    Divider ratio 1:4096
;     WDTCPS = WDTCPS_8    Divider ratio 1:8192
;     WDTCPS = WDTCPS_9    Divider ratio 1:16384
;     WDTCPS = WDTCPS_10   Divider ratio 1:32768
;     WDTCPS = WDTCPS_11   Divider ratio 1:65536
;     WDTCPS = WDTCPS_12   Divider ratio 1:131072
;     WDTCPS = WDTCPS_13   Divider ratio 1:262144
;     WDTCPS = WDTCPS_14   Divider ratio 1:524299
;     WDTCPS = WDTCPS_15   Divider ratio 1:1048576
;     WDTCPS = WDTCPS_16   Divider ratio 1:2097152
;     WDTCPS = WDTCPS_17   Divider ratio 1:4194304
;     WDTCPS = WDTCPS_18   Divider ratio 1:8388608
;     WDTCPS = WDTCPS_19   Divider ratio 1:32
;     WDTCPS = WDTCPS_20   Divider ratio 1:32
;     WDTCPS = WDTCPS_21   Divider ratio 1:32
;     WDTCPS = WDTCPS_22   Divider ratio 1:32
;     WDTCPS = WDTCPS_23   Divider ratio 1:32
;     WDTCPS = WDTCPS_24   Divider ratio 1:32
;     WDTCPS = WDTCPS_25   Divider ratio 1:32
;     WDTCPS = WDTCPS_26   Divider ratio 1:32
;     WDTCPS = WDTCPS_27   Divider ratio 1:32
;     WDTCPS = WDTCPS_28   Divider ratio 1:32
;     WDTCPS = WDTCPS_29   Divider ratio 1:32
;     WDTCPS = WDTCPS_30   Divider ratio 1:32
;     WDTCPS = WDTCPS_31   Divider ratio 1:65536; software control of WDTPS
;
;   WDT operating mode:
  CONFIG    WDTE = OFF  ;         WDT Disabled; SWDTEN is ignored
;     WDTE = SWDTEN        WDT enabled/disabled by SWDTEN bit
;     WDTE = NSLEEP        WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored
;     WDTE = ON            WDT enabled regardless of sleep
;
;   WDT Window Select bits:
;     WDTCWS = WDTCWS_0    window delay = 87.5; no software control; keyed access required
;     WDTCWS = WDTCWS_1    window delay = 75 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_2    window delay = 62.5 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_3    window delay = 50 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_4    window delay = 37.5 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_5    window delay = 25 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_6    window always open (100%); no software control; keyed access required
;     WDTCWS = WDTCWS_7    window always open (100%); software control; keyed access not required
;
;   WDT input clock selector:
;     WDTCCS = LFINTOSC    WDT reference clock is the 31.0 kHz LFINTOSC
;     WDTCCS = MFINTOSC    WDT reference clock is the 32kHz MFINTOSC output
;     WDTCCS = SOSC        WDT reference clock is SOSC
;     WDTCCS = SC          Software Control
;
;   Boot Block Size selection bits:
;     BBSIZE = BBSIZE_8192 Boot Block size is 8192 words
;     BBSIZE = BBSIZE_4096 Boot Block size is 4096 words
;     BBSIZE = BBSIZE_2048 Boot Block size is 2048 words
;     BBSIZE = BBSIZE_1024 Boot Block size is 1024 words
;     BBSIZE = BBSIZE_512  Boot Block size is 512 words
;
;   Boot Block enable bit:
;     BBEN = ON            Boot block enabled
;     BBEN = OFF           Boot block disabled
;
;   Storage Area Flash enable bit:
;     SAFEN = ON           SAF enabled
;     SAFEN = OFF          SAF disabled
;
;   Application Block write protection bit:
;     WRTAPP = ON          Application Block write protected
;     WRTAPP = OFF         Application Block not write protected
;
;   Configuration Register Write Protection bit:
;     WRTB = ON            Configuration registers (300000-30000Bh) write-protected
;     WRTB = OFF           Configuration registers (300000-30000Bh) not write-protected
;
;   Boot Block Write Protection bit:
;     WRTC = ON            Boot Block (000000-0007FFh) write-protected
;     WRTC = OFF           Boot Block (000000-0007FFh) not write-protected
;
;   Data EEPROM Write Protection bit:
;     WRTD = ON            Data EEPROM write-protected
;     WRTD = OFF           Data EEPROM not write-protected
;
;   SAF Write protection bit:
;     WRTSAF = ON          SAF Write Protected
;     WRTSAF = OFF         SAF not Write Protected
;
;   Low Voltage Programming Enable bit:
  CONFIG     LVP = OFF ;           HV on MCLR/VPP must be used for programming
;     LVP = ON             Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored
;
;   PFM and Data EEPROM Code Protection bit:
;     CP = ON              PFM and Data EEPROM code protection enabled
;     CP = OFF             PFM and Data EEPROM code protection disabled
;   
     
   
   
   
   
   
adat:    UDATA_ACS   ; H'10' ; nincs kezdo memoriacim megadva az ACCESS ramban
W_TEMP         RES   1      ; w register for context saving (ACCESS)
STATUS_TEMP    RES   1      ; status used for context saving
BSR_TEMP       RES   1      ; bank select used for ISR context saving       
   
_wreg1         res 1 ; Altalanos valtozo       
         
_adatbe      res 1 ; I2C-n bejött adat (csak adat) Ez hexa adat! 
_szamjegy    res 1 ; Kijelzo altal megjelenito 1 darab szamjegy    
_kijelzo_jel res 1 ; egy kijelzonek szolo kijelzendo jel  
 
Adat_H      res 1 ;{ LM75-bol kiolvasott <D10:D3> hofok hexadesimalisan
Adat_L      res 1 ;  LM75-bol kiolvasott <D2:D0> hofok hexadesimalisan
                   ;  homerseklet adat osszesen <D10:D0> 11 biten tarolodik}
           
;  
  ; RC3 (18. lab) <--> SCL   ----  TB3159 alapjan
  ; RC4 (23. lab) <--> SDA 
 
    
RES_VECT  CODE    0x0000            ; processor reset vector
  ;  GOTO    START                   ; go to beginning of program


    
    
    ORG 0X0100
    nop ;
    goto start ; 
    
    
;----------------------------------PIC18's--------------------------------------


 

 
 
start:
    banksel 0 ;
  
;FOPROGRAM_KEZDETE_FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
   ; goto $
foprogram:    
    goto config_I2C1_SSP   ;  TB3159 alapjan        
config_I2C1_SSP_:       
   
    goto config_I2C1 ;     
config_I2C1_:   
    
; MELYIKET HAJTSA VÉGRE? VÁLASZTÁS:   
    
    
    
  goto i2c1_lm75a_PRODUCT_R   
  nop
i2c1_lm75a_PRODUCT_R_:   
    nop
    
  goto i2c1_lm75a_PRODUCT_R
    
 clrf Adat_H ; T:
    movlw b'00000100'              ;    d'21' ;
    banksel Adat_H ;
    movwf Adat_H ;
    clrf Adat_L ;
        
    
    
  goto i2c1_lm75a_CONF_W      
i2c1_lm75a_CONF_W_:     
   ; goto i2c1_lm75a_CONF_W
    
    goto $
    
    
    
    goto i2c1_lm75a_CONF_R     
    
i2c1_lm75a_CONF_R_:     
    nop
  ;  goto i2c1_lm75a_CONF_R     
    
    goto $
    
    
    goto i2c1_lm75a_HYS_W     
    nop
i2c1_lm75a_HYS_W_: ;
    nop
  ;  goto i2c1_lm75a_HYS_W     
    
    
    
    
    
    goto i2c1_lm75a_HYS_R     
   nop    
i2c1_lm75a_HYS_R_: 
    nop
  ;  goto i2c1_lm75a_HYS_R     
    
    
    
   clrf Adat_H ; T:
    movlw d'22' ;
    banksel Adat_H ;
    movwf Adat_H ;
    clrf Adat_L ;
    
       
;    goto lm75a_i2c1_hofokolvasas ; LM75A POINTER BEÁLLÍTÁSSAL   
    
   goto  i2c1_lm75a_TOS_W      
i2c1_lm75a_TOS_W_:   
 ;  goto i2c1_lm75a_TOS_W
    
    
   goto i2c_lm75a_TOS_R ;
   nop
i2c1_lm75a_TOS_R_: 
    goto$
    nop
    
   goto i2c_lm75a_TOS_R
    
    
   goto i2c1_lm75a_pointeres_hofok_R 
   nop
i2c1_lm75a_pointeres_hofok_R_:   
   goto i2c1_lm75a_pointeres_hofok_R     
    nop
    
   goto i2c1_lm75a_rovid_hofok_R    
    
i2c1_lm75a_rovid_hofok_R_:  
      goto i2c1_lm75a_rovid_hofok_R 
    
  goto $
  
    
    
  ;  goto lm75a_TEMP_R ;    

        
    
  ;  goto lm75a_TOS_R ;    
;lm75a_TOS_R_: 
        
    
  ;  goto lm75a_HYS_R ;    

            
    
   ; goto lm75a_CONF_R ;    
    
    
    
      
 
 
    
    
  goto $     
    
    
    
    
 
    
    reset
     goto $
 ;  goto lm75a_poiner_olvasas 
 

    

 ;  goto $  ; 

   
  ; goto hofokolvasas_lm75a_i2c1 ;    
    
  

    
    
    goto $  ;   
   
  ;  goto hofoklm75a_THYST   
   
   
  
   
   
 ;  goto hofokolvasas_lm75a_i2c1 ;   
;hofokolvasas_im75a_i2c1:    
    
   nop
   
   goto $       
   

   
   
   
 
   
   goto $
   
   ; ----------------------
   
       
    
    nop
adatfeldolgozas_vissza:    
    
    ; RD2 (21. lab) be-ki kapcsolasaval az
    ; RC4 (23.lab) leset lehet kapcsolgatni
    ;
    
   
;FOPROGRAM_VEGE_FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 
    
 ; --------------------------------------------------------
 ; kb.: 113-165
;-------------------------------------------------------------

;-------------------------------------------------------------
config_I2C1_SSP:  ;  TB3159 alapjan
  ; RC3 (18. lab) <--> SCL    
  ; RC4 (23. lab) <--> SDA
    
; Letiltjuk globalisan a megszakitasokat    
    banksel INTCON0
    BCF     INTCON0,GIE ; letiltjuk globálisan a megszakításokat   
    
; A labalat (RC3 es RC4) digitalissnak konfiguraljuk
    banksel ANSELC ;
    bcf ANSELC,ANSELC3 ;
    bcf ANSELC,ANSELC4 ;   
    
; Letiltjuk globalisan a megszakitasokat    
    banksel INTCON0
    bcf     INTCON0,GIE ; letiltjuk globálisan a megszakításokat       
    
; PPS UNLOCK szekvencia
    banksel PPSLOCK ;
    movlw 0x55 ; 
    movf PPSLOCK ;
    movlw 0xAA ; 
    movf PPSLOCK ;
    bcf PPSLOCK,PPSLOCKED ;
    
; Engedélyezzuk globalisan a megszakitasokat    
    banksel INTCON0
    bsf     INTCON0,GIE ; engedélyezzük globálisan a megszakításokat       
    
; Az RC4 labat az I2C1 modul SDA (adat) portjahoz rendeljuk     
    movlw 0x22 ;
    banksel RC4PPS ;
    movwf RC4PPS
     
    movlw 0x14 ; 
    banksel I2C1SDAPPS ;
    movwf I2C1SDAPPS ;

 
; Az RC3 labat az I2C1 modul SCL (szinkronjel) portjahoz rendeljuk
    movlw 0x21 ;
    banksel RC3PPS ;
    movwf RC3PPS
    movlw 0x13 ;
    banksel I2C1SCLPPS ;
    movwf I2C1SCLPPS ;    

; Letiltjuk globálisan a megszakításokat       
    bcf     INTCON0,GIE ; letiltjuk globálisan a megszakításokat     
    
; PPS LOCK szekvencia
    banksel PPSLOCK ;
    movlw 0x55 ; 
    movf PPSLOCK ;
    movlw 0xAA ; 
    movf PPSLOCK ;
    bsf PPSLOCK,PPSLOCKED ;    
    
; Engedélyezzuk globálisan a megszakításokat     
    bsf     INTCON0,GIE ; engedélyezzuk globálisan a megszakításokat     
    
; A ket labat nyitott collektoros kimenette konfiguraljuak
    banksel ODCONC ;
    bsf ODCONC,ODCC3 ;
    bsf ODCONC,ODCC4 ;    
    
; Beallitjuk az I2C szinteket   
    banksel RC3I2C
    bsf RC3I2C,TH0 ;
    bsf RC3I2C,TH1 ;
    bsf RC4I2C,TH0 ;  
    bsf RC4I2C,TH1 
    
; Kimenette konfiguraljuk a ket labat
    banksel TRISC ;
    bcf TRISC,TRISC3 ;
    bcf TRISC,TRISC4 ;    
    
    movlw b'01100001' ; x101xx01 Kat.:271. old
    banksel RC3I2C
    movwf RC3I2C ; { a labak I2C specifikussa tetele
    movwf RC4I2C ;   es felhuro ellenallasok bekapcsolasa (SDA es SCL)     
    
 ;   goto config_I2C1_SSP_  
    
;-----------------------------------------------------------------------    
config_I2C1:    
    
; I2C1 MESTER MOD INICIALIZALASA (7 bites mester címzéssel):     
    
;  ne legyenek megszakitasok az I2C-nel    
    banksel I2C1PIE ;
    clrf I2C1PIE ;
    
; 4-es uzemmos beallitas (mester 7 bites cimzessel)   
    banksel I2C1CON0 ;
    movlw 0x04 ;  Katalogus 577. oldal (<3:0=100 uzemmester mód)
    movwf I2C1CON0 ; Megj.: a 3 bites MODE beallitasavala tobbi bit torlodik
    
; I2C szinkronjel forrása megadasa ( MFINTOSC 500 KHz b'xxxx0011'= 3 )    
    banksel I2C1CLK ;
    movlw 0x3 ; Katalogus 581. old.    
    movwf I2C1CLK  ;
    
; I2C1CON1 regiszter beállítása:
; ACK for every valid byte (ACKDT = 0)
; NACKs to end a Read (ACKCNT = 1)
; 0. bit <CSD> = 0 :
; 1. bit <TXU> = 0 :
; 2. bit <RXOV> = 0 :
; 3. bit <->  = 0 :
; 4. bit <ACKT> = 0 :    
; 5. bit <ACKSTAT> = 0 :
; 6. bit <ACKDT> = 0 :
; 7. bit <ACKCNT> = 1 :         
    movlw b'10000000' ; 0x80  ; 
    movwf I2C1CON1 ;    
    
; I2C1CON2 regiszter beállítása:    
; Auto-count disabled (ACNT = 0)
; General Call disabled (GCEN = 0)
; Fast mode enabled 
; (FME = 1; SCL = I2CCLK/4)
; ADB1 address buffer used (ADB = 0)
; SDA Hold time of 300 ns (SDAHT = 0)
; Bus free time of 16 I2C Clock pulses
; (BFRET = 1)
; 0-1. bit BFRET<1:0> = 01 :
; 2-3. bit SDAHT<3:2> = 00 :
; 4. bit <ADB> = 1 (Megj.: példaprogramban 0, és "S" bittel indul a kommunikáció)
; 5. bit <FME> = 0 : Lassú üzemmód 
                     ;(megj.: példaprogramban = 1, ami gyors üzemmód)
; 6. bit <GCEN> = 0 :  
; 7. bit <ACNT> = 0 :  
    
    movlw b'00010001' ; Példaprogramban 0x21    
    movwf I2C1CON2 ; 0x11 (Példaprogramban 0x21)    
    bcf I2C1CON2,FME ;Va: Atallitottam lassu üzemmodra
  
    bsf I2C1CON0,EN ; Bekapcsolom az I2C1 modult       
      
    goto config_I2C1_ ; visszatérés
     
;-------------------------------------------------------------    
    
; LM75A POINTER regiszterének beolvasásá, megnézésre    
i2c1_lm75a_rovid_hofok_R:   ; EZT TÖRÖLNI MERT ÉRTELMETLEN!!! 
    nop ;
    banksel I2C1STAT0 ;
    btfss I2C1STAT0,BFRE
    goto $-2    
  
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C1CNT ;
    movlw 0x2 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010001'   ;
    banksel I2C1TXB ; T: S kiadása nélkül- <7:1> szolga cime es <0>=R/!W  
    movwf I2C1TXB ;
    
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    banksel I2C1STAT1  
    btfss I2C1STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C1RXB 
    movf I2C1RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;
    
    banksel I2C1STAT1  
    btfss I2C1STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C1RXB 
    movf I2C1RXB,w ; 
    banksel Adat_L ;
    movwf Adat_L ;
    nop
     
    banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2    
    
    goto i2c1_lm75a_rovid_hofok_R_            
    
;------------------------------------------------------

i2c1_lm75a_pointeres_hofok_R:  ; hosszú, TOS-os változat  
    
    banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2    
    
    bsf I2C1CON0,RSEN ; restart engedélyezése
    
; megadni, hogy hany bajt adatot akarok küldeni restartig
    banksel I2C1CNT ;
    movlw 0x1 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000'   ;
 ;   banksel I2C1ADB1 ;    
  ;  movwf I2C1ADB1 ; <7:1> szolga cime es <0>=R/!W         
    banksel I2C1TXB ; T: S kiadása nélkül
    movwf I2C1TXB ;  
       
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    ;   KIKÜLDÜM AZ LM75A POINTER REGISZTERÉNEK A HŐFOK FUNKCIÓVÁLASZTÁST
    ;            --------------------------
        
    movlw  b'00000000'   ;
        
    banksel I2C1TXB ; T: S kiadása nélkül
    movwf I2C1TXB ;     
    
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
  
    ;HA AZ ACK JEL MEGJÖN, RESTRTOT KELL KIADNI A MESTRTŐL A SZOLGÁNAK
        
    btfss I2C1CON0,MDR ;
    goto $-2 ;
    nop
          
; megadni, hogy hany bajt adatot akarok fogadni egymas utan 
    banksel I2C1CNT ;
    movlw 0x2 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010001'   ; 0. bit R/!W=1, 1-7 bit a szolga címe
    banksel I2C1TXB ; T: S kiadása nélkül
    movwf I2C1TXB ;
 
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    banksel I2C1STAT1  
    btfss I2C1STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C1RXB 
    movf I2C1RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;
    
    banksel I2C1CON0 ;
    bcf I2C1CON0,RSEN ; restart tiltasa, STOP legyen
    
    banksel I2C1STAT1  
    btfss I2C1STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C1RXB 
    movf I2C1RXB,w ; 
    banksel Adat_L ;
    movwf Adat_L ;
    nop
     
    banksel I2C1STAT0
    btfss I2C1STAT0,BFRE ; várni, míg szabaddá nem válik az I2C busz
    goto $-2
      
    goto i2c1_lm75a_pointeres_hofok_R_     
       
;-------------------------------------------------------------    
    
i2c_lm75a_TOS_R: ; gyari hőfokbeállítás:80C
; 1 - Szolga címzése írásra 
; 2 - Pointer (LM75A) TOS ításra/olvasásra állítás (b'011'=3)
; 3 - Restart 
; 4 - Szolga cimzese 2 bájt adat olvasására    
; 5 - 2 bajt adat fogadása (egesz + 3  magas helyiértékű biten a tört érték)    
      
    banksel I2C1CON0
    bsf I2C1CON0,RSEN ; restart tiltasa, STOP legyen 
 
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C1CNT ;
    movlw 0x1 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000' ;       
    banksel I2C1TXB ; 
    movwf I2C1TXB ; <7:1> szolga cime es <0>=R/!W --> Elküldés  
       
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
        
    movlw  b'00000011' ;        
    banksel I2C1TXB ; 
    movwf I2C1TXB ;  LM75A TOS-jának funkcióválasztás --> Elküldés   
    
    banksel I2C1STAT1 ;
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
      
    banksel I2C1CON0 ;
    btfss I2C1CON0,MDR ;
    goto $-2 ;
 
; RESTART foga majd következni      
    
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C1CNT ;
    movlw 0x2 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010001'   ;      
    banksel I2C1TXB ;
    movwf I2C1TXB ;  <7:1> szolga cime es <0>=R/!W     
    
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    banksel I2C1STAT1  
    btfss I2C1STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C1RXB 
    movf I2C1RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;

    banksel I2C1CON0;
    bcf I2C1CON0,RSEN ; restart tiltasa, STOP legyen
  
    
    banksel I2C1STAT1  
    btfss I2C1STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C1RXB 
    movf I2C1RXB,w ; 
    banksel Adat_L ;
    movwf Adat_L ;
    nop
        
    banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2    
     
    goto i2c1_lm75a_TOS_R_     
    
;----------------------------------------------------------------
    
    
i2c1_lm75a_TOS_W: ; gyari hőfokbeállítás:80C
; 1 - Szolga cimzese írásra
; 1 - Pointer (LM75A) TOS ításra/olvasásra. Állítás (b'011'=3) 
; 2 - 2 bajt adat elküldese (egesz + 3 biten a tört érték ami többnyire 0)  
    
   banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2        
    
; megadni, hogy hany bajt adatot akarok küldeni egymas utan 
    banksel I2C1CNT ;
    movlw 0x3 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000' ;       
    banksel I2C1TXB ; 
    movwf I2C1TXB ; Szlga címénekelküldése írásra  
       
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
           
    movlw  b'00000011'   ;        
    banksel I2C1TXB ; Kiküldöm az LM75A TOS-jának a funkcióválasztását
    movwf I2C1TXB ;     
    
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
     
    banksel Adat_H ;
    clrf Adat_L ;
    movf Adat_H,w ;        
    banksel I2C1TXB ;
    movwf I2C1TXB ;   Elküldöm a TOS felső bájtját
  
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
  nop 
    banksel Adat_L
    movf Adat_L,w ;        
    banksel I2C1TXB ;  Elküldöm a TOS alsó bájtját
    movwf I2C1TXB ;  
  nop
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
     
    banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2

    goto i2c1_lm75a_TOS_W_     
;------------------------------------------------------------------    
    
i2c1_lm75a_HYS_W: ; gyari hőfokbeállítás:80C
; 1 - Szolga cimzese írásra
; 1 - Pointer (LM75A) TOS ításra/olvasásra. Állítás (b'011'=3) 
; 2 - 2 bajt adat elküldese (egesz + 3 biten a tört érték ami többnyire 0)  
    
   banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2        
    
; megadni, hogy hany bajt adatot akarok küldeni egymas utan 
    banksel I2C1CNT ;
    movlw 0x3 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000' ;       
    banksel I2C1TXB ; 
    movwf I2C1TXB ; Szlga címénekelküldése írásra  
       
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
           
    movlw  b'00000010'   ;        
    banksel I2C1TXB ; Kiküldöm az LM75A TOS-jának a funkcióválasztását
    movwf I2C1TXB ;     
    
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
     
    banksel Adat_H ;
    clrf Adat_L ;
    movf Adat_H,w ;        
    banksel I2C1TXB ;
    movwf I2C1TXB ;   Elküldöm a TOS felső bájtját
  
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
  nop 
    banksel Adat_L
    movf Adat_L,w ;        
    banksel I2C1TXB ;  Elküldöm a TOS alsó bájtját
    movwf I2C1TXB ;  
  nop
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
     
    banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2

    goto i2c1_lm75a_HYS_W_ ;    
           
;-------------------------------------------------------------------    
      
i2c1_lm75a_HYS_R: ; gyari hőfokbeállítás:75C (Alsó érték)
; 1 - Szolga cimzese irasra
; 1 - Pointer (LM75A) TOS ításra/olvasásra állítás (b'011'=3)
; 2 - Cimzes    
; 2 - 2 bajt adat elküldese (egesz + 3 biten a tört érték ami többnyire 0)    
 
    banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2    
    
    banksel I2C1CON0
    bsf I2C1CON0,RSEN ; restart engedélyezése
    
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C1CNT ;
    movlw 0x1 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W = 1    
    movlw  b'10010000' ;
    banksel I2C1TXB ;  <7:1> szolga cime es <0>=R/!W = 0
    movwf I2C1TXB ;  
       
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
        
    ; KIKÜLDÜM AZ LM75A POINTER TOS (ALSÓ KAPCSOLÁSI HŐFOK) FUNKCIÓVÁLASZTÁST
    
    movlw  b'00000010'   ;        
    banksel I2C1TXB ; T: S kiadása nélkül
    movwf I2C1TXB ;     
    
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1 = üres, kiürült, akkor tovabb 
    goto $-2    
   
    btfss I2C1CON0,MDR ;
    goto $-2 ;
    nop
      
; megadni, hogy hany bajt adatot akarok küldeni egymas utan 
    banksel I2C1CNT ;
    movlw 0x2 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=1    
    movlw  b'10010001'   ;      
    banksel I2C1TXB ; T: S kiadása nélkül
    movwf I2C1TXB ; <7:1> szolga cime es <0>=R/!W 
    
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    banksel I2C1STAT1  
    btfss I2C1STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C1RXB 
    movf I2C1RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;
    
    banksel I2C1CON0 ;
    bcf I2C1CON0,RSEN ; restart tiltasa, STOP legyen
    
    banksel I2C1STAT1  
    btfss I2C1STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C1RXB 
    movf I2C1RXB,w ; 
    banksel Adat_L ;
    movwf Adat_L ;
    nop
    
    banksel I2C1STAT0 ;
    btfss I2C1STAT0,BFRE ;
    goto $-2    
    
    goto i2c1_lm75a_HYS_R_ ;    
    
;--------------------------------------------------------------------    

i2c1_lm75a_CONF_W: ; gyari hőfokbeállítás:80C
; 1 - Szolga cimzese írásra
; 1 - Pointer (LM75A) TOS ításra/olvasásra. Állítás (b'001'=1) 
; 2 - 2 bajt adat elküldese (egesz + 3 biten a tört érték ami többnyire 0)  
    
   banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2        
    
; megadni, hogy hany bajt adatot akarok küldeni egymas utan 
    banksel I2C1CNT ;
    movlw 0x2 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000' ;       
    banksel I2C1TXB ; 
    movwf I2C1TXB ; Szlga címénekelküldése írásra  
       
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
           
    movlw  b'00000001'   ;        
    banksel I2C1TXB ; Kiküldöm az LM75A CONF-jának a funkcióválasztását
    movwf I2C1TXB ;     
    
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
     
    banksel Adat_H ;
    clrf Adat_L ;
    movf Adat_H,w ;        
    banksel I2C1TXB ;
    movwf I2C1TXB ;   Elküldöm a TOS felső bájtját
  
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
       
    banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2

    goto i2c1_lm75a_CONF_W_ ;    
           
;-------------------------------------------------------------------        
       
i2c1_lm75a_CONF_R: ; gyari beállítás: minden bit = 0
; 1 - Szolga címzése írásra
; 1 - Pointer (LM75A) CONF olvasásra állítás (b'001'=1)
; 2 - RESTART
; 4 - Szolga címzése olvasásra    
; 2 - 1 bajt adat fogadása    
      
    banksel I2C1STAT0 ;
    btfss I2C1STAT0,BFRE ;
    goto $-2  
    
    bsf I2C1CON0,RSEN ; restart engedélyezése
    
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C1CNT ;
    movlw 0x1 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000'   ;
 ;   banksel I2C1ADB1 ;    
  ;  movwf I2C1ADB1 ;         
    banksel I2C1TXB ; 
    movwf I2C1TXB ; <7:1> szolga cime es <0>=R/!W 
           
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
       
    movlw  b'00000001'   ;
        
    banksel I2C1TXB ; 
    movwf I2C1TXB ; LM75A POINTER beállítása CONF adatok olvasására    
    
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
      
    btfss I2C1CON0,MDR ;
    goto $-2 ;
    nop
         
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C1CNT ;
    movlw 0x1 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010001'   ; 
    banksel I2C1TXB ; 
    movwf I2C1TXB ;  <7:1> szolga cime es <0>=R/!W = 1  
 
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    bcf I2C1CON0,RSEN ; RESTART tiltása, STOP legyen    
    
    banksel I2C1STAT1  
    btfss I2C1STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C1RXB 
    movf I2C1RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;    
    
    banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2        
    
    goto i2c1_lm75a_CONF_R_     
;----------------------------------------------------------------   
  
       
i2c1_lm75a_PRODUCT_R: ; gyari beállítás: minden bit = 0
; 1 - Szolga címzése írásra
; 1 - Pointer (LM75A) PRODUCT ID olvasásra állítás (b'111'=7)
; 2 - RESTART
; 4 - Szolga címzése olvasásra    
; 2 - 1 bajt adat fogadása    
      
    banksel I2C1STAT0 ;
    btfss I2C1STAT0,BFRE ;
    goto $-2  
    
    bsf I2C1CON0,RSEN ; restart engedélyezése
    
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C1CNT ;
    movlw 0x1 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000'   ;
 ;   banksel I2C1ADB1 ;    
  ;  movwf I2C1ADB1 ;         
    banksel I2C1TXB ; 
    movwf I2C1TXB ; <7:1> szolga cime es <0>=R/!W 
           
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
       
    movlw  b'00000001'   ;
        
    banksel I2C1TXB ; 
    movwf I2C1TXB ; LM75A POINTER beállítása CONF adatok olvasására    
    
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
      
    btfss I2C1CON0,MDR ;
    goto $-2 ;
    nop
         
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C1CNT ;
    movlw 0x1 ;
    movwf I2C1CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010001'   ; 
    banksel I2C1TXB ; 
    movwf I2C1TXB ;  <7:1> szolga cime es <0>=R/!W = 1  
 
    banksel I2C1STAT1
    btfss I2C1STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    bcf I2C1CON0,RSEN ; RESTART tiltása, STOP legyen    
    
    banksel I2C1STAT1  
    btfss I2C1STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C1RXB 
    movf I2C1RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;    
    
    banksel I2C1STAT0
    btfss I2C1STAT0,BFRE
    goto $-2        
    
    goto i2c1_lm75a_PRODUCT_R_     
;----------------------------------------------------------------   
             
   end
   

VISSZA AZ OLDAL ELEJÉRE

 

LM75A és PIC18F45K42 I2C2 kommunikációs program

  LIST   P=PIC18F45K42 ;  ISO 8859-2   
  #include p18f45k42.inc ;  
 
  ; #include  PIC18LF45K42 
;
;   IMPORTANT: For the PIC18 devices, the __CONFIG directive has been
;              superseded by the CONFIG directive.  The following settings
;              are available for this device.
;
;   External Oscillator Selection:
;     FEXTOSC = LP         LP (crystal oscillator) optimized for 32.768 kHz; PFM set to low power
;     FEXTOSC = XT         XT (crystal oscillator) above 100 kHz, below 8 MHz; PFM set to medium power
;     FEXTOSC = HS         HS (crystal oscillator) above 8 MHz; PFM set to high power
;     FEXTOSC = RESERVED   Reserved (DO NOT USE)
    ;  CONFIG FEXTOSC = OFF   ;     Oscillator not enabled
;     FEXTOSC = ECL        EC (external clock) below 100 kHz; PFM set to low power
   CONFIG   FEXTOSC = ECM ;       EC (external clock) for 500 kHz to 8 MHz; PFM set to medium power
;     FEXTOSC = ECH        EC (external clock) above 8 MHz; PFM set to high power
;
;   Reset Oscillator Selection:
;     RSTOSC = HFINTOSC_64MHZHFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1
;     RSTOSC = RESERVED_1  Reserved
;     RSTOSC = EXTOSC_4PLL EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits
;     RSTOSC = RESERVED_2  Reserved
;     RSTOSC = SOSC        Secondary Oscillator
;     RSTOSC = LFINTOSC    Low-Frequency Oscillator
 ;  CONFIG  RSTOSC = HFINTOSC_1MHZHFINTOSC ; with HFFRQ = 4 MHz and CDIV = 4:1
 
;     RSTOSC = EXTOSC      EXTOSC operating per FEXTOSC bits (device manufacturing default)
;
;   Clock out Enable bit:
;     CLKOUTEN = ON        CLKOUT function is enabled
;     CLKOUTEN = OFF       CLKOUT function is disabled
;
;   PRLOCKED One-Way Set Enable bit:
;     PR1WAY = OFF         PRLOCK bit can be set and cleared repeatedly
 ; CONFIG   PR1WAY = ON ;         PRLOCK bit can be cleared and set only once
;
;   Clock Switch Enable bit:
;     CSWEN = OFF          The NOSC and NDIV bits cannot be changed by user software
;     CSWEN = ON           Writing to NOSC and NDIV is allowed
;
;   Fail-Safe Clock Monitor Enable bit:
;     FCMEN = OFF          Fail-Safe Clock Monitor disabled
;     FCMEN = ON           Fail-Safe Clock Monitor enabled
;
;   MCLR Enable bit:
 ;  CONFIG   MCLRE = INTMCLR  ;    If LVP = 0, MCLR pin function is port defined function; If LVP =1, RE3 pin fuction is MCLR
;     MCLRE = EXTMCLR      If LVP = 0, MCLR pin is MCLR; If LVP = 1, RE3 pin function is MCLR 
;
;   Power-up timer selection bits:
;     PWRTS = PWRT_1       PWRT set at 1ms
;     PWRTS = PWRT_16      PWRT set at 16ms
;     PWRTS = PWRT_64      PWRT set at 64ms
;     PWRTS = PWRT_OFF     PWRT is disabled
;
;   Multi-vector enable bit:
 ;  CONFIG  MVECEN = OFF ;        Interrupt contoller does not use vector table to prioritze interrupts
;     MVECEN = ON          Multi-vector enabled, Vector table used for interrupts
;
;   IVTLOCK bit One-way set enable bit:
;     IVT1WAY = OFF        IVTLOCK bit can be cleared and set repeatedly
 ;  CONFIG  IVT1WAY = ON ;        IVTLOCK bit can be cleared and set only once
;
;   Low Power BOR Enable bit:
;     LPBOREN = ON         ULPBOR enabled
  CONFIG   LPBOREN = OFF ;       ULPBOR disabled
;
;   Brown-out Reset Enable bits:
;     BOREN = OFF          Brown-out Reset disabled
;     BOREN = ON           Brown-out Reset enabled according to SBOREN
;     BOREN = NOSLP        Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored
;     BOREN = SBORDIS      Brown-out Reset enabled , SBOREN bit is ignored
;
;   Brown-out Reset Voltage Selection bits:
;     BORV = VBOR_2P85     Brown-out Reset Voltage (VBOR) set to 2.8V
;     BORV = VBOR_2P7      Brown-out Reset Voltage (VBOR) set to 2.7V
;     BORV = VBOR_245      Brown-out Reset Voltage (VBOR) set to 2.45V
;     BORV = VBOR_190      Brown-out Reset Voltage (VBOR) set to 1.90V
;
;   ZCD Disable bit:
;     ZCD = ON             ZCD always enabled
;     ZCD = OFF            ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON
;
;   PPSLOCK bit One-Way Set Enable bit:
;     PPS1WAY = OFF        PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence)
   CONFIG  PPS1WAY = ON ;        PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle
;
;   Stack Full/Underflow Reset Enable bit:
;     STVREN = OFF         Stack full/underflow will not cause Reset
  CONFIG   STVREN = ON ;         Stack full/underflow will cause Reset
;
;   Debugger Enable bit:
;     DEBUG = ON           Background debugger enabled
;     DEBUG = OFF          Background debugger disabled
;
;   Extended Instruction Set Enable bit:
;     XINST = ON           Extended Instruction Set and Indexed Addressing Mode enabled
  CONFIG   XINST = OFF      ;    Extended Instruction Set and Indexed Addressing Mode disabled
;
;   WDT Period selection bits:
;     WDTCPS = WDTCPS_0    Divider ratio 1:32
;     WDTCPS = WDTCPS_1    Divider ratio 1:64
;     WDTCPS = WDTCPS_2    Divider ratio 1:128
;     WDTCPS = WDTCPS_3    Divider ratio 1:256
;     WDTCPS = WDTCPS_4    Divider ratio 1:512
;     WDTCPS = WDTCPS_5    Divider ratio 1:1024
;     WDTCPS = WDTCPS_6    Divider ratio 1:2048
;     WDTCPS = WDTCPS_7    Divider ratio 1:4096
;     WDTCPS = WDTCPS_8    Divider ratio 1:8192
;     WDTCPS = WDTCPS_9    Divider ratio 1:16384
;     WDTCPS = WDTCPS_10   Divider ratio 1:32768
;     WDTCPS = WDTCPS_11   Divider ratio 1:65536
;     WDTCPS = WDTCPS_12   Divider ratio 1:131072
;     WDTCPS = WDTCPS_13   Divider ratio 1:262144
;     WDTCPS = WDTCPS_14   Divider ratio 1:524299
;     WDTCPS = WDTCPS_15   Divider ratio 1:1048576
;     WDTCPS = WDTCPS_16   Divider ratio 1:2097152
;     WDTCPS = WDTCPS_17   Divider ratio 1:4194304
;     WDTCPS = WDTCPS_18   Divider ratio 1:8388608
;     WDTCPS = WDTCPS_19   Divider ratio 1:32
;     WDTCPS = WDTCPS_20   Divider ratio 1:32
;     WDTCPS = WDTCPS_21   Divider ratio 1:32
;     WDTCPS = WDTCPS_22   Divider ratio 1:32
;     WDTCPS = WDTCPS_23   Divider ratio 1:32
;     WDTCPS = WDTCPS_24   Divider ratio 1:32
;     WDTCPS = WDTCPS_25   Divider ratio 1:32
;     WDTCPS = WDTCPS_26   Divider ratio 1:32
;     WDTCPS = WDTCPS_27   Divider ratio 1:32
;     WDTCPS = WDTCPS_28   Divider ratio 1:32
;     WDTCPS = WDTCPS_29   Divider ratio 1:32
;     WDTCPS = WDTCPS_30   Divider ratio 1:32
;     WDTCPS = WDTCPS_31   Divider ratio 1:65536; software control of WDTPS
;
;   WDT operating mode:
  CONFIG    WDTE = OFF  ;         WDT Disabled; SWDTEN is ignored
;     WDTE = SWDTEN        WDT enabled/disabled by SWDTEN bit
;     WDTE = NSLEEP        WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored
;     WDTE = ON            WDT enabled regardless of sleep
;
;   WDT Window Select bits:
;     WDTCWS = WDTCWS_0    window delay = 87.5; no software control; keyed access required
;     WDTCWS = WDTCWS_1    window delay = 75 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_2    window delay = 62.5 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_3    window delay = 50 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_4    window delay = 37.5 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_5    window delay = 25 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_6    window always open (100%); no software control; keyed access required
;     WDTCWS = WDTCWS_7    window always open (100%); software control; keyed access not required
;
;   WDT input clock selector:
;     WDTCCS = LFINTOSC    WDT reference clock is the 31.0 kHz LFINTOSC
;     WDTCCS = MFINTOSC    WDT reference clock is the 32kHz MFINTOSC output
;     WDTCCS = SOSC        WDT reference clock is SOSC
;     WDTCCS = SC          Software Control
;
;   Boot Block Size selection bits:
;     BBSIZE = BBSIZE_8192 Boot Block size is 8192 words
;     BBSIZE = BBSIZE_4096 Boot Block size is 4096 words
;     BBSIZE = BBSIZE_2048 Boot Block size is 2048 words
;     BBSIZE = BBSIZE_1024 Boot Block size is 1024 words
;     BBSIZE = BBSIZE_512  Boot Block size is 512 words
;
;   Boot Block enable bit:
;     BBEN = ON            Boot block enabled
;     BBEN = OFF           Boot block disabled
;
;   Storage Area Flash enable bit:
;     SAFEN = ON           SAF enabled
;     SAFEN = OFF          SAF disabled
;
;   Application Block write protection bit:
;     WRTAPP = ON          Application Block write protected
;     WRTAPP = OFF         Application Block not write protected
;
;   Configuration Register Write Protection bit:
;     WRTB = ON            Configuration registers (300000-30000Bh) write-protected
;     WRTB = OFF           Configuration registers (300000-30000Bh) not write-protected
;
;   Boot Block Write Protection bit:
;     WRTC = ON            Boot Block (000000-0007FFh) write-protected
;     WRTC = OFF           Boot Block (000000-0007FFh) not write-protected
;
;   Data EEPROM Write Protection bit:
;     WRTD = ON            Data EEPROM write-protected
;     WRTD = OFF           Data EEPROM not write-protected
;
;   SAF Write protection bit:
;     WRTSAF = ON          SAF Write Protected
;     WRTSAF = OFF         SAF not Write Protected
;
;   Low Voltage Programming Enable bit:
  CONFIG     LVP = OFF ;           HV on MCLR/VPP must be used for programming
;     LVP = ON             Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored
;
;   PFM and Data EEPROM Code Protection bit:
;     CP = ON              PFM and Data EEPROM code protection enabled
;     CP = OFF             PFM and Data EEPROM code protection disabled
;   
      
adat:    UDATA_ACS   ; H'10' ; nincs kezdo memoriacim megadva az ACCESS ramban
W_TEMP         RES   1      ; w register for context saving (ACCESS)
STATUS_TEMP    RES   1      ; status used for context saving
BSR_TEMP       RES   1      ; bank select used for ISR context saving       
   
_wreg1         res 1 ; Altalanos valtozo       
         
_adatbe      res 1 ; I2C-n bejött adat (csak adat) Ez hexa adat! 
_szamjegy    res 1 ; Kijelzo altal megjelenito 1 darab szamjegy    
_kijelzo_jel res 1 ; egy kijelzonek szolo kijelzendo jel  
 
Adat_H      res 1 ;{ LM75-bol kiolvasott <D10:D3> hofok hexadesimalisan
Adat_L      res 1 ;  LM75-bol kiolvasott <D2:D0> hofok hexadesimalisan
                   ;  homerseklet adat osszesen <D10:D0> 11 biten tarolodik}
           

  ;  TB3159 alapjan es 278. old.--tol az adatlap alapjan 
  ; RD0 (19. lab) <--> SDA  
  ; RD1 (20. lab) <--> SCL    Katalogus: 6. 
    
    ORG 0X0100
    nop ;
    goto start ; 
    
    
;----------------------------------PIC18's--------------------------------------
; FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF    
start:
    nop
foprogram:
    
    goto config_I2C2_SSP ;
config_I2C2_:
       
    ; ------------------------
    movlw d'23'
    banksel Adat_H ; 
    movwf Adat_H ;
    clrf Adat_L ;
    ; -----------
    
;  goto i2c2_lm75a_pointeres_hofok_R ;    
i2c2_lm75a_pointeres_hofok_R_:    
;  goto $
;  goto i2c2_lm75a_pointeres_hofok_R ;
  
   
 ; goto i2c2_lm75a_rovid_hofok_R    
i2c2_lm75a_rovid_hofok_R_:   
;  goto $ 
 ; goto i2c2_lm75a_rovid_hofok_R    
    
      
  
  goto i2c2_lm75a_TOS_W ;
i2c2_lm75a_TOS_W_:    
 ; goto $      
 ; goto i2c2_lm75a_TOS_W ;  
  
  
  
  goto i2c2_lm75a_TOS_R ;  
i2c2_lm75a_TOS_R_:  
 ; goto $  
 ; goto i2c2_lm75a_TOS_R ;
  
  
  movlw d'22'
  banksel Adat_H ; 
  movwf Adat_H ;
  clrf Adat_L ;  
   
   goto i2c2_lm75a_HYS_W ;
i2c2_lm75a_HYS_W_:    
 ; goto $ 
  goto i2c2_lm75a_HYS_W ; 
    

  goto i2c2_lm75a_HYS_R ;  
i2c2_lm75a_HYS_R_:    
    goto $ 
  goto i2c2_lm75a_HYS_R ;
  
  
  goto i2c2_lm75a_CONF_W ;  
i2c2_lm75a_CONF_W_:  
  goto $
  goto i2c2_lm75a_CONF_W ;
  
     
  goto i2c2_lm75a_CONF_R ;    
i2c2_lm75a_CONF_R_:    
  goto $
  goto i2c2_lm75a_CONF_R ;    
     
    
  goto i2c2_lm75a_PRODUCT_R ;
i2c2_lm75a_PRODUCT_R_:
  goto $
  goto i2c2_lm75a_PRODUCT_R ;       
    
    
   
;FOPROGRAM_VEGE_FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 
    
 ; --------------------------------------------------------
 ; kb.: 113-165
;-------------------------------------------------------------

;-------------------------------------------------------------
config_I2C2_SSP:  ;  TB3159 alapjan
  ;  TB3159 alapjan es 278. old.--tol az adatlap alapjan 
  ; RD0 (19. lab) <--> SDA  
  ; RD1 (20. lab) <--> SCL    Katalogus: 6. 
  
    
; Letiltjuk globalisan a megszakitasokat    
    banksel INTCON0
    BCF     INTCON0,GIE ; letiltjuk globálisan a megszakításokat   
    
; A labalat (RD0 - 19.lab es RD1 - 20.lab) digitalissnak konfiguraljuk
    banksel ANSELD ;
    bcf ANSELD,ANSELD0 ; { Katalógus 12.old. es
    bcf ANSELD,ANSELD1 ;   266. oldal }
    
; Letiltjuk globalisan a megszakitasokat    
    banksel INTCON0
    bcf     INTCON0,GIE ; letiltjuk globálisan a megszakításokat       
    
; PPS UNLOCK szekvencia
    banksel PPSLOCK ;
    movlw 0x55 ; 
    movf PPSLOCK ;
    movlw 0xAA ; 
    movf PPSLOCK ;
    bcf PPSLOCK,PPSLOCKED ;
    
; Engedélyezzuk globalisan a megszakitasokat    
    banksel INTCON0
    bsf     INTCON0,GIE ; engedélyezzük globálisan a megszakításokat       
    
; Az RD0 - 19.labat az I2C2 modul SDA (adat) portjahoz rendeljuk     
    movlw b'100100' ;
    banksel RD0PPS ; 
    movwf RD0PPS ;  Kat.: 280-281. old
     
    movlw b'011000' ; 
    banksel I2C2SDAPPS ; 
    movwf I2C2SDAPPS ;  Kat.: 288. old
 
; Az RD1 labat az I2C2 modul SCL (szinkronjel) portjahoz rendeljuk
    movlw b'100011' ;
    banksel RD1PPS ;  
    movwf RD1PPS ;  Kat.: 280-281. old
    movlw b'011001' ;
    banksel I2C2SCLPPS ; 
    movwf I2C2SCLPPS ;     Kat.: 288. old

; Letiltjuk globálisan a megszakításokat       
    bcf     INTCON0,GIE ; letiltjuk globálisan a megszakításokat     
    
; PPS LOCK szekvencia
    banksel PPSLOCK ;
    movlw 0x55 ; 
    movf PPSLOCK ;
    movlw 0xAA ; 
    movf PPSLOCK ;
    bsf PPSLOCK,PPSLOCKED ;    
    
; Engedélyezzuk globálisan a megszakításokat     
    bsf     INTCON0,GIE ; engedélyezzuk globálisan a megszakításokat     
    
; A ket labat nyitott collektoros kimenette konfiguraljuak
    banksel ODCOND ; Kat.: 268. old.
    bsf ODCOND,ODCD0 ; { Nyitott kollektorossa
    bsf ODCOND,ODCD1 ;   allitjuk a ket labat } 
    
; Beallitjuk az I2C szinteket   
    banksel RD0I2C
    bsf RD0I2C,TH0 ; {kat.: 271. oldal
    bsf RD0I2C,TH1 ;   es lentebb
    banksel RD1I2C
    bsf RD1I2C,TH0 ;    van beallitva
    bsf RD1I2C,TH1 ;  <TH1:TH0> = <1:0> bit
    
; Kimenette konfiguraljuk a ket labat
    banksel TRISD ;
    bcf TRISD,TRISD0 ; Kat.: 264. oldal
    bcf TRISD,TRISD1 ;   
    
    
    
    
    movlw b'01100001' ; x101xx01 Kat.:271. old
    banksel RD0I2C
    movwf RD0I2C ; { a labak I2C specifikussa tetele es eros felhuzo
    movwf RD1I2C ;    ellenallasok bekapcsolasa (SDA es SCL)   
    
 ;   goto config_I2C2_SSP_  
    
;-----------------------------------------------------------------------    
config_I2C2:    
    
; I2C2 MESTER MOD INICIALIZALASA (7 bites mester címzéssel):     
    
;  ne legyenek megszakitasok az I2C-nel    
    banksel I2C2PIE ;
    clrf I2C2PIE ;
    
; 4-es uzemmos beallitas (mester 7 bites cimzessel)   
    banksel I2C2CON0 ;
    movlw 0x04 ;  Katalogus 577. oldal (<3:0=100 uzemmester mód)
    movwf I2C2CON0 ; Megj.: a 3 bites MODE beallitasavala tobbi bit torlodik
    
; I2C szinkronjel forrása megadasa ( MFINTOSC 500 KHz b'xxxx0011'= 3 )    
    banksel I2C2CLK ;
    movlw 0x3 ; Katalogus 581. old.    
    movwf I2C2CLK  ;
    
; I2C2CON1 regiszter beállítása:
; ACK for every valid byte (ACKDT = 0)
; NACKs to end a Read (ACKCNT = 1)
; 0. bit <CSD> = 0 :
; 1. bit <TXU> = 0 :
; 2. bit <RXOV> = 0 :
; 3. bit <->  = 0 :
; 4. bit <ACKT> = 0 :    
; 5. bit <ACKSTAT> = 0 :
; 6. bit <ACKDT> = 0 :
; 7. bit <ACKCNT> = 1 :         
    movlw b'10000000' ; 0x80  ; 
    movwf I2C2CON1 ;    
    
; I2C2CON2 regiszter beállítása:    
; Auto-count disabled (ACNT = 0)
; General Call disabled (GCEN = 0)
; Fast mode enabled 
; (FME = 1; SCL = I2CCLK/4)
; ADB1 address buffer used (ADB = 0)
; SDA Hold time of 300 ns (SDAHT = 0)
; Bus free time of 16 I2C Clock pulses
; (BFRET = 1)
; 0-1. bit BFRET<1:0> = 01 :
; 2-3. bit SDAHT<3:2> = 00 :
; 4. bit <ADB> = 1 (Megj.: példaprogramban 0, és "S" bittel indul a kommunikáció)
; 5. bit <FME> = 0 : Lassú üzemmód 
                     ;(megj.: példaprogramban = 1, ami gyors üzemmód)
; 6. bit <GCEN> = 0 :  
; 7. bit <ACNT> = 0 :  
    
    movlw b'00010001' ; Példaprogramban 0x21    
    movwf I2C2CON2 ; 0x11 (Példaprogramban 0x21)    
    bcf I2C2CON2,FME ;Va: Atallitottam lassu üzemmodra
  
    bsf I2C2CON0,EN ; Bekapcsolom az I2C2 modult       
      
    goto config_I2C2_ ; visszatérés
     
;-------------------------------------------------------------    
    
; LM75A POINTER regiszterének beolvasásá, megnézésre    
i2c2_lm75a_rovid_hofok_R:   ; EZT TÖRÖLNI MERT ÉRTELMETLEN!!! 
    nop ;
    banksel I2C2STAT0 ;
    btfss I2C2STAT0,BFRE
    goto $-2    
  
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C2CNT ;
    movlw 0x2 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010001'   ;
    banksel I2C2TXB ; T: S kiadása nélkül- <7:1> szolga cime es <0>=R/!W  
    movwf I2C2TXB ;
    
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    banksel I2C2STAT1  
    btfss I2C2STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C2RXB 
    movf I2C2RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;
    
    banksel I2C2STAT1  
    btfss I2C2STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C2RXB 
    movf I2C2RXB,w ; 
    banksel Adat_L ;
    movwf Adat_L ;
    nop
     
    banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2    
    
    goto i2c2_lm75a_rovid_hofok_R_            
    
;------------------------------------------------------

i2c2_lm75a_pointeres_hofok_R:  ; hosszú, TOS-os változat  
    
    banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2    
    
    bsf I2C2CON0,RSEN ; restart engedélyezése
    
; megadni, hogy hany bajt adatot akarok küldeni restartig
    banksel I2C2CNT ;
    movlw 0x1 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000'   ;
 ;   banksel I2C2ADB1 ;    
  ;  movwf I2C2ADB1 ; <7:1> szolga cime es <0>=R/!W         
    banksel I2C2TXB ; T: S kiadása nélkül
    movwf I2C2TXB ;  
       
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    ;   KIKÜLDÜM AZ LM75A POINTER REGISZTERÉNEK A HŐFOK FUNKCIÓVÁLASZTÁST
    ;            --------------------------
        
    movlw  b'00000000'   ;
        
    banksel I2C2TXB ; T: S kiadása nélkül
    movwf I2C2TXB ;     
    
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
  
    ;HA AZ ACK JEL MEGJÖN, RESTRTOT KELL KIADNI A MESTRTŐL A SZOLGÁNAK
        
    btfss I2C2CON0,MDR ;
    goto $-2 ;
    nop
          
; megadni, hogy hany bajt adatot akarok fogadni egymas utan 
    banksel I2C2CNT ;
    movlw 0x2 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010001'   ; 0. bit R/!W=1, 1-7 bit a szolga címe
    banksel I2C2TXB ; T: S kiadása nélkül
    movwf I2C2TXB ;
 
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    banksel I2C2STAT1  
    btfss I2C2STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C2RXB 
    movf I2C2RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;
    
    banksel I2C2CON0 ;
    bcf I2C2CON0,RSEN ; restart tiltasa, STOP legyen
    
    banksel I2C2STAT1  
    btfss I2C2STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C2RXB 
    movf I2C2RXB,w ; 
    banksel Adat_L ;
    movwf Adat_L ;
    nop
     
    banksel I2C2STAT0
    btfss I2C2STAT0,BFRE ; várni, míg szabaddá nem válik az I2C busz
    goto $-2
      
    goto i2c2_lm75a_pointeres_hofok_R_     
       
;-------------------------------------------------------------------------    
    
i2c2_lm75a_TOS_W: ; gyari hőfokbeállítás:80C
; 1 - Szolga cimzese írásra
; 1 - Pointer (LM75A) TOS ításra/olvasásra. Állítás (b'011'=3) 
; 2 - 2 bajt adat elküldese (egesz + 3 biten a tört érték ami többnyire 0)  
    
   banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2        
    
; megadni, hogy hany bajt adatot akarok küldeni egymas utan 
    banksel I2C2CNT ;
    movlw 0x3 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000' ;       
    banksel I2C2TXB ; 
    movwf I2C2TXB ; Szlga címénekelküldése írásra  
       
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
           
    movlw  b'00000011'   ;        
    banksel I2C2TXB ; Kiküldöm az LM75A TOS-jának a funkcióválasztását
    movwf I2C2TXB ;     
    
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
     
    banksel Adat_H ;
    clrf Adat_L ;
    movf Adat_H,w ;        
    banksel I2C2TXB ;
    movwf I2C2TXB ;   Elküldöm a TOS felső bájtját
  
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
  nop 
    banksel Adat_L
    movf Adat_L,w ;        
    banksel I2C2TXB ;  Elküldöm a TOS alsó bájtját
    movwf I2C2TXB ;  
  nop
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
     
    banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2

    goto i2c2_lm75a_TOS_W_     
   
;-------------------------------------------------------------    
    
i2c2_lm75a_TOS_R: ; gyari hőfokbeállítás:80C
; 1 - Szolga címzése írásra 
; 2 - Pointer (LM75A) TOS ításra/olvasásra állítás (b'011'=3)
; 3 - Restart 
; 4 - Szolga cimzese 2 bájt adat olvasására    
; 5 - 2 bajt adat fogadása (egesz + 3  magas helyiértékű biten a tört érték)    
      
    banksel I2C2CON0
    bsf I2C2CON0,RSEN ; restart tiltasa, STOP legyen 
 
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C2CNT ;
    movlw 0x1 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000' ;       
    banksel I2C2TXB ; 
    movwf I2C2TXB ; <7:1> szolga cime es <0>=R/!W --> Elküldés  
       
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
        
    movlw  b'00000011' ;        
    banksel I2C2TXB ; 
    movwf I2C2TXB ;  LM75A TOS-jának funkcióválasztás --> Elküldés   
    
    banksel I2C2STAT1 ;
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
      
    banksel I2C2CON0 ;
    btfss I2C2CON0,MDR ;
    goto $-2 ;
 
; RESTART foga majd következni      
    
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C2CNT ;
    movlw 0x2 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010001'   ;      
    banksel I2C2TXB ;
    movwf I2C2TXB ;  <7:1> szolga cime es <0>=R/!W     
    
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    banksel I2C2STAT1  
    btfss I2C2STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C2RXB 
    movf I2C2RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;

    banksel I2C2CON0;
    bcf I2C2CON0,RSEN ; restart tiltasa, STOP legyen  
    
    banksel I2C2STAT1  
    btfss I2C2STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C2RXB 
    movf I2C2RXB,w ; 
    banksel Adat_L ;
    movwf Adat_L ;
    nop
        
    banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2    
     
    goto i2c2_lm75a_TOS_R_     
    
;----------------------------------------------------------------
    
  
    
i2c2_lm75a_HYS_W: ; gyari hőfokbeállítás:80C
; 1 - Szolga cimzese írásra
; 1 - Pointer (LM75A) TOS ításra/olvasásra. Állítás (b'011'=3) 
; 2 - 2 bajt adat elküldese (egesz + 3 biten a tört érték ami többnyire 0)  
    
   banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2        
    
; megadni, hogy hany bajt adatot akarok küldeni egymas utan 
    banksel I2C2CNT ;
    movlw 0x3 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000' ;       
    banksel I2C2TXB ; 
    movwf I2C2TXB ; Szlga címénekelküldése írásra  
       
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
           
    movlw  b'00000010'   ;        
    banksel I2C2TXB ; Kiküldöm az LM75A TOS-jának a funkcióválasztását
    movwf I2C2TXB ;     
    
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
     
    banksel Adat_H ;
    clrf Adat_L ;
    movf Adat_H,w ;        
    banksel I2C2TXB ;
    movwf I2C2TXB ;   Elküldöm a TOS felső bájtját
  
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
  nop 
    banksel Adat_L
    movf Adat_L,w ;        
    banksel I2C2TXB ;  Elküldöm a TOS alsó bájtját
    movwf I2C2TXB ;  
  nop
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
     
    banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2

    goto i2c2_lm75a_HYS_W_ ;    
           
;-------------------------------------------------------------------    
      
i2c2_lm75a_HYS_R: ; gyari hőfokbeállítás:75C (Alsó érték)
; 1 - Szolga cimzese irasra
; 1 - Pointer (LM75A) TOS ításra/olvasásra állítás (b'011'=3)
; 2 - Cimzes    
; 2 - 2 bajt adat elküldese (egesz + 3 biten a tört érték ami többnyire 0)    
 
    banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2    
    
    banksel I2C2CON0
    bsf I2C2CON0,RSEN ; restart engedélyezése
    
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C2CNT ;
    movlw 0x1 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W = 1    
    movlw  b'10010000' ;
    banksel I2C2TXB ;  <7:1> szolga cime es <0>=R/!W = 0
    movwf I2C2TXB ;  
       
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
        
    ; KIKÜLDÜM AZ LM75A POINTER TOS (ALSÓ KAPCSOLÁSI HŐFOK) FUNKCIÓVÁLASZTÁST
    
    movlw  b'00000010'   ;        
    banksel I2C2TXB ; T: S kiadása nélkül
    movwf I2C2TXB ;     
    
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1 = üres, kiürült, akkor tovabb 
    goto $-2    
   
    btfss I2C2CON0,MDR ;
    goto $-2 ;
    nop
      
; megadni, hogy hany bajt adatot akarok küldeni egymas utan 
    banksel I2C2CNT ;
    movlw 0x2 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=1    
    movlw  b'10010001'   ;      
    banksel I2C2TXB ; T: S kiadása nélkül
    movwf I2C2TXB ; <7:1> szolga cime es <0>=R/!W 
    
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    banksel I2C2STAT1  
    btfss I2C2STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C2RXB 
    movf I2C2RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;
    
    banksel I2C2CON0 ;
    bcf I2C2CON0,RSEN ; restart tiltasa, STOP legyen
    
    banksel I2C2STAT1  
    btfss I2C2STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C2RXB 
    movf I2C2RXB,w ; 
    banksel Adat_L ;
    movwf Adat_L ;
    nop
    
    banksel I2C2STAT0 ;
    btfss I2C2STAT0,BFRE ;
    goto $-2    
    
    goto i2c2_lm75a_HYS_R_ ;    
    
;--------------------------------------------------------------------    

i2c2_lm75a_CONF_W: ; gyari hőfokbeállítás:80C
; 1 - Szolga cimzese írásra
; 1 - Pointer (LM75A) TOS ításra/olvasásra. Állítás (b'001'=1) 
; 2 - 2 bajt adat elküldese (egesz + 3 biten a tört érték ami többnyire 0)  
    
   banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2        
    
; megadni, hogy hany bajt adatot akarok küldeni egymas utan 
    banksel I2C2CNT ;
    movlw 0x2 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000' ;       
    banksel I2C2TXB ; 
    movwf I2C2TXB ; Szlga címénekelküldése írásra  
       
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
           
    movlw  b'00000001'   ;        
    banksel I2C2TXB ; Kiküldöm az LM75A CONF-jának a funkcióválasztását
    movwf I2C2TXB ;     
    
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
     
    banksel Adat_H ;
    clrf Adat_L ;
    movf Adat_H,w ;        
    banksel I2C2TXB ;
    movwf I2C2TXB ;   Elküldöm a TOS felső bájtját
  
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
       
    banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2

    goto i2c2_lm75a_CONF_W_ ;    
           
;-------------------------------------------------------------------        
       
i2c2_lm75a_CONF_R: ; gyari beállítás: minden bit = 0
; 1 - Szolga címzése írásra
; 1 - Pointer (LM75A) CONF olvasásra állítás (b'001'=1)
; 2 - RESTART
; 4 - Szolga címzése olvasásra    
; 2 - 1 bajt adat fogadása    
      
    banksel I2C2STAT0 ;
    btfss I2C2STAT0,BFRE ;
    goto $-2  
    
    bsf I2C2CON0,RSEN ; restart engedélyezése
    
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C2CNT ;
    movlw 0x1 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000'   ;
 ;   banksel I2C2ADB1 ;    
  ;  movwf I2C2ADB1 ;         
    banksel I2C2TXB ; 
    movwf I2C2TXB ; <7:1> szolga cime es <0>=R/!W 
           
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
       
    movlw  b'00000001'   ;
        
    banksel I2C2TXB ; 
    movwf I2C2TXB ; LM75A POINTER beállítása CONF adatok olvasására    
    
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
      
    btfss I2C2CON0,MDR ;
    goto $-2 ;
    nop
         
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C2CNT ;
    movlw 0x1 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010001'   ; 
    banksel I2C2TXB ; 
    movwf I2C2TXB ;  <7:1> szolga cime es <0>=R/!W = 1  
 
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    bcf I2C2CON0,RSEN ; RESTART tiltása, STOP legyen    
    
    banksel I2C2STAT1  
    btfss I2C2STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C2RXB 
    movf I2C2RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;    
    
    banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2        
    
    goto i2c2_lm75a_CONF_R_     
;----------------------------------------------------------------   
  
       
i2c2_lm75a_PRODUCT_R: ; gyari beállítás: minden bit = 0
; 1 - Szolga címzése írásra
; 1 - Pointer (LM75A) PRODUCT ID olvasásra állítás (b'111'=7)
; 2 - RESTART
; 4 - Szolga címzése olvasásra    
; 2 - 1 bajt adat fogadása    
      
    banksel I2C2STAT0 ;
    btfss I2C2STAT0,BFRE ;
    goto $-2  
    
    bsf I2C2CON0,RSEN ; restart engedélyezése
    
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C2CNT ;
    movlw 0x1 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010000'   ;
 ;   banksel I2C2ADB1 ;    
  ;  movwf I2C2ADB1 ;         
    banksel I2C2TXB ; 
    movwf I2C2TXB ; <7:1> szolga cime es <0>=R/!W 
           
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
       
    movlw  b'00000001'   ;
        
    banksel I2C2TXB ; 
    movwf I2C2TXB ; LM75A POINTER beállítása CONF adatok olvasására    
    
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; Ha 1= üres, kiürült, akkor tovabb 
    goto $-2    
      
    btfss I2C2CON0,MDR ;
    goto $-2 ;
    nop
         
; megadni, hogy hany bajt adatot akarok küldeni vagy fogadni egymas utan 
    banksel I2C2CNT ;
    movlw 0x1 ;
    movwf I2C2CNT ;  
    
;A szolga cime: LM75A cimenek megadasa eszkoz:1001, hardverelem:000 R/!W=x    
    movlw  b'10010001'   ; 
    banksel I2C2TXB ; 
    movwf I2C2TXB ;  <7:1> szolga cime es <0>=R/!W = 1  
 
    banksel I2C2STAT1
    btfss I2C2STAT1,TXBE ; vár míg kimegy az adat ami most csak a cím
    goto $-2 ;
    
    bcf I2C2CON0,RSEN ; RESTART tiltása, STOP legyen    
    
    banksel I2C2STAT1  
    btfss I2C2STAT1,RXBF ; { Ha 1, akkor mar van benne bejott adat, 
    goto $-2 ;               így tovabb kiolvasasra }
    banksel I2C2RXB 
    movf I2C2RXB,w ; 
    banksel Adat_H ;
    movwf Adat_H ;    
    
    banksel I2C2STAT0
    btfss I2C2STAT0,BFRE
    goto $-2        
    
    goto i2c2_lm75a_PRODUCT_R_     
;----------------------------------------------------------------   
              
   end

VISSZA AZ OLDAL ELEJÉRE