;********************************************************************** ; PIC WS3 - PIC Weather Station V3.0 - PIC16F876 ; Date: 09.01.2018. ; Author: YT2FSG - Stankovic Goran dipl.ing.el. ; web: http://www.qsl.net/ft2fsg/ email: goranstank@gmal.com ;********************************************************************** list p=16f876A ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _XT_OSC & _LVP_OFF & _DEBUG_OFF & _CPD_OFF ; Digit 5 4 3 2 1 ; R 0 1H 1L 2H 2L ORG 0x20 ; Dummy Origin ;------------------------------------- MIN RES 1 SEC RES 1 RH_H RES 1 RH_L RES 1 T_H RES 1 T_L RES 1 P_H RES 1 P_L RES 1 P_X RES 1 T2_H RES 1 T2_L RES 1 T2_X RES 1 RH2_H RES 1 RH2_L RES 1 S0_H RES 1 S0_L RES 1 S1_H RES 1 S1_L RES 1 SUV_H RES 1 SUV_L RES 1 R1h_H RES 1 R1h_L RES 1 R_H RES 1 R_L RES 1 W_H RES 1 W_L RES 1 WX_H RES 1 WX_L RES 1 WY_H RES 1 WY_L RES 1 WZ_H RES 1 WZ_L RES 1 ; - - - - - - - - - - - - - - - SEC_1 RES 1 TMR0_H RES 1 DHT_CRC RES 1 BYTE RES 1 temp RES 1 CHAR RES 1 ;Character storage location count RES 1 D1 RES 1 D2 RES 1 RS_BUFER RES 1 R3 equ 60h R2 equ 61h R1 equ 62h R0 equ 63h A_3 equ 64h A_2 equ 65h A_1 equ 66h A_0 equ 67h B_3 equ 68h B_2 equ 69h B_1 equ 6Ah B_0 equ 6Bh TMP0 equ 6Ch TMP1 equ 6Dh TMP2 equ 6Eh TMP3 equ 6Fh ; Kod PIC16F876 adresa 70h-7Fh ponavlja se u svim BANK-ama FLEG0 equ 7Ch FLEG1 equ 7Dh WBuffer equ 7Eh StatBuffer equ 7Fh #define RES_1H FLEG1,0 #define TIME_F FLEG1,1 OptionReg equ 1 #define _C STATUS,0 #define _Z STATUS,2 BOR equ 0 POR equ 1 #define RS_TEST PORTB,1 #define LED_SEC PORTB,4 #define LED_ERR PORTB,5 #define LED_ERR2 PORTB,6 #define LED_ERR3 PORTB,7 ;------------------------------------------------------------------------- push macro movwf WBuffer ;save w reg in Buffer swapf WBuffer, F ;swap it swapf STATUS,w ;get status movwf StatBuffer ;save it endm ; pop macro swapf StatBuffer,w ;restore status movwf STATUS ; / swapf WBuffer,w ;restore W reg endm ; ;------------------------------------------------------------------------- ; Ukljuciti WDT_ON, POR_ON, BOR_ON org 0 ;Reset vector clrf PCLATH goto MAIN ;------------------------------------------------------------------------- org 4 push bcf STATUS,RP0 ; Bank 0 btfsc PIR1,RCIF ;RCIF interrupt? goto ServiceRCIF ;yes then service Drugi_interupt btfsc PIR1,TMR2IF goto Int_TMR_2 Treci_interupt btfsc INTCON,T0IF goto Int_TMR_0 Cetvrti_interupt btfsc INTCON,INTF goto Int_INT ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ExitInt bsf INTCON,PEIE ; Enable Peripheral Interrupts pop retfie ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Int_TMR_2 bcf PIR1,TMR2IF bsf TIME_F goto Treci_interupt ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Int_TMR_0 bcf INTCON,T0IF incf TMR0_H goto Cetvrti_interupt ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Int_INT bcf INTCON,INTF bsf RES_1H goto ExitInt ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ServiceRCIF ; Prijem komandi sa RS ; '0' A0 = Reset sata movlw 06h ;clr int flag andwf RCSTA,W btfss _Z goto RcvError btfss PIR1,5 goto Drugi_interupt movf RCREG,W movwf RS_BUFER movlw '0' ;Ne salji xorwf RS_BUFER,W btfss _Z goto Skok_RS5 bsf RES_1H Skok_RS5 goto Drugi_interupt RcvError bcf RCSTA,4 ;Clear reciever status bsf RCSTA,4 goto Drugi_interupt ;------------------------------------------------------------------------- ;------------------------------------------------------------------------- ;------------------------------------------------------------------------- ;------------------------------------------------------------------------- ;------------------------------------------------------------------------- MAIN bsf STATUS,RP0 btfsc PCON,POR ; ? Power on reset goto Time_out_WDT Start bsf PCON,POR clrf STATUS clrf INTCON ;Zabrani sve interapte clrf TMR0 clrf TMR0_H clrf TMR0 clrf TMR1L clrf TMR1H clrf TMR1L clrf R_L clrf R_H clrf R1h_L clrf R1h_H call InitPorts clrf SEC_1 clrf SEC clrf MIN clrf FLEG0 clrf FLEG1 goto Nastavi_Start Time_out_WDT bcf STATUS,RP0 call InitPorts Nastavi_Start bcf STATUS,RP0 bsf INTCON,PEIE ; Enable Peripheral Interrupts bsf INTCON,GIE ; Enable all Interrupts bsf T2CON,TMR2ON bsf T1CON,TMR1ON call Init_HCM5883L call Init_TLS2561 call Init_BME280 ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- Loop CLRWDT btfsc RES_1H goto Reset_1h btfsc TIME_F goto Time_50ms goto Loop Time_50ms bcf TIME_F ; - - - - - - - - - - - - - - - - - - - - - - - - - movf SEC_1,W xorlw .2 ;?= 2 btfss _Z ;no then skip goto Vreme_2 btfsc RS_TEST goto Prr_hex_1 call Salji_RS_1 goto Nastavi_vreme Prr_hex_1 call Salji_RS_Heksadecimalno_1 goto Nastavi_vreme Vreme_2 ; - - - - - - - - - - - - - - - - - - - - - - - - - movf SEC_1,W xorlw .3 ;?= 3 btfss _Z ;no then skip goto Vreme_3 btfsc RS_TEST goto Prr_hex_2 call Salji_RS_2 goto Nastavi_vreme Prr_hex_2 call Salji_RS_Heksadecimalno_2 goto Nastavi_vreme Vreme_3 ; - - - - - - - - - - - - - - - - - - - - - - - - - movf SEC_1,W xorlw .5 ;?= 5 btfss _Z ;no then skip goto Vreme_5 call Init_VEML6070 goto Nastavi_vreme Vreme_5 ; - - - - - - - - - - - - - - - - - - - - - - - - - movf SEC_1,W xorlw .10 ;?= 10 btfss _Z ;no then skip goto Vreme_10 ; Ovde je 0.5sec bcf LED_SEC ;Ugasi LED SEC call TLS2561 goto Nastavi_vreme Vreme_10 ; - - - - - - - - - - - - - - - - - - - - - - - - - movf SEC_1,W xorlw .12 ;?= 12 btfss _Z ;no then skip goto Vreme_12 call HCM5883L goto Nastavi_vreme Vreme_12 ; - - - - - - - - - - - - - - - - - - - - - - - - - movf SEC_1,W xorlw .15 ;?= 15 btfss _Z ;no then skip goto Vreme_15 call BME280 goto Nastavi_vreme Vreme_15 ; - - - - - - - - - - - - - - - - - - - - - - - - - movf SEC_1,W xorlw .17 ;?= 17 btfss _Z ;no then skip goto Vreme_17 call VEML6070 ;600ms posle starta goto Nastavi_vreme Vreme_17 ; - - - - - - - - - - - - - - - - - - - - - - - - - Nastavi_vreme incf SEC_1,F movlw .20 subwf SEC_1,W ; W = SEC_1 - 20 btfss _C goto Loop ; < 0 clrf SEC_1 ; >= 0 ;Ovde je 1.sec ; - - - - - - - - - - - - - - - - - - - - - - - ;Meri padavine - kisu (TMR0 - Reading a 16-bit Free-Running Timer) movf TMR0_H,W movwf R_H movf TMR0,W movwf R_L movf TMR0_H,W subwf R_H,W btfsc _Z goto Nastavi_TMR0 movf TMR0_H,W movwf R_H movf TMR0,W movwf R_L Nastavi_TMR0 ; - - - - - - - - - - - - - - - - - - - - - - - incf SEC,F movlw .60 subwf SEC,W ; W = SEC - 60 btfss _C goto Skok_vreme ; < 0 clrf SEC ; >= 0 ;Ovde je 1.min ; - - - - - - - - - - - - - - - - - - - - - - - ;Meri srednju brzinu vetra u 1min(TMR1 - Reading a 16-bit Free-Running Timer) movf TMR1H,W movwf W_H movf TMR1L,W movwf W_L movf TMR1H,W subwf W_H,W btfsc _Z goto Nastavi_TMR1 movf TMR1H,W movwf W_H movf TMR1L,W movwf W_L Nastavi_TMR1 clrf TMR1L clrf TMR1H clrf TMR1L ; - - - - - - - - - - - - - - - - - - - - - - - incf MIN,F movlw .60 subwf MIN,W ; W = MIN - 60 btfss _C goto Skok_vreme ; < 0 clrf MIN ; >= 0 ;Ovde je 1.sat ;--------------------------------------------------- ;Zapamti padavine iz proslog sata, izbrisi brojac TMR1 Reset_padavine movf R_H,W movwf R1h_H movf R_L,W movwf R1h_L clrf R_H clrf R_L clrf TMR0 clrf TMR0_H clrf TMR0 ;--------------------------------------------------- Skok_vreme bcf LED_ERR ;Ugasi LED ERR bsf LED_SEC ;Upali LED SEC goto Loop ; - - - - - - - - - - - - - - - - - - - - - - - Reset_1h bcf RES_1H clrf SEC_1 clrf SEC clrf MIN goto Reset_padavine ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- i2c_send_ bcf STATUS,RP0 movwf SSPBUF ; - - - - - - - - - - - - - - - - - - - - - - - - - - WaitMSSP bcf STATUS,RP0 btfss PIR1,SSPIF goto $-1 bcf PIR1,SSPIF return ;--------------------------------------------------- i2c_send bcf STATUS,RP0 movwf SSPBUF bcf STATUS,RP0 btfss PIR1,SSPIF goto $-1 bcf PIR1,SSPIF bsf STATUS,RP0 btfsc SSPCON2,ACKSTAT goto i2c_error return ; - - - - - - - - - - - - - - - - - - - - - - - - - - i2c_error bsf STATUS,RP0 bsf SSPCON2,PEN ;STOP call WaitMSSP bcf STATUS,RP0 bsf LED_ERR ;Upali LED ERR nop return ;--------------------------------------------------- i2c_start macro bsf STATUS,RP0 bsf SSPCON2,SEN ;Start call WaitMSSP endm i2c_restart macro bsf STATUS,RP0 bsf SSPCON2,RSEN ;ReStart call WaitMSSP endm i2c_stop macro bsf STATUS,RP0 bsf SSPCON2,PEN ;Stop call WaitMSSP endm i2c_send_ACK macro bsf STATUS,RP0 bcf SSPCON2,ACKDT ;send ACK bsf SSPCON2,ACKEN call WaitMSSP endm i2c_send_NACK macro bsf STATUS,RP0 bsf SSPCON2,ACKDT ;send NACK bsf SSPCON2,ACKEN call WaitMSSP endm i2c_receive macro bsf STATUS,RP0 bsf SSPCON2,RCEN ;Receiver Mode call WaitMSSP endm ;--------------------------------------------------- ;- - - - - - - - - - - - - - - - - - - - - - - - ; Inicijalizacija VEML6070 - UV sunca Init_VEML6070 i2c_start movlw 0x70 ;Module address WR COMMAND (0x38) call i2c_send movlw B'00001110' ;4T = 500ms call i2c_send i2c_stop return ;- - - - - - - - - - - - - - - - - - - - - - - - ; Citaj podatke VEML6070 - UV sunca VEML6070 i2c_restart movlw 0x73 ;Module address RD MSB (0x39) call i2c_send i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi MSB movwf SUV_H i2c_stop i2c_restart movlw 0x71 ;Module address RD LSB (0x38) call i2c_send i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi LSB movwf SUV_L i2c_stop return ;--------------------------------------------------------------------- ;- - - - - - - - - - - - - - - - - - - - - - - - ; Inicijalizacija HCM5883L Init_HCM5883L i2c_start movlw 0x3C ;Module address WR (0x1E) call i2c_send movlw 0x00 ;address call i2c_send movlw 0x70 ;value call i2c_send movlw 0xA0 ;value call i2c_send movlw 0x00 ;value call i2c_send i2c_stop return ; - - - - - - - - - - - - - - - - - - - - - - - - - ; Citaj podatke iz HCM5883L - Pravac vetra HCM5883L i2c_restart movlw 0x3D ;Module address WR (0x1E) call i2c_send ;- - - - - - - - - - - - - - - - - - - - - - - - i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 1 movwf WX_H i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 2 movwf WX_L i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 3 movwf WZ_H i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 4 movwf WZ_L i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 5 movwf WY_H i2c_receive i2c_send_NACK movf SSPBUF,W ;uzmi podatak 6 movwf WY_L i2c_stop ;- - - - - - - - - - - - - - - - - - - - - - - - i2c_restart movlw 0x3C ;Module address WR (0x1E) call i2c_send movlw 0x03 ;adress call i2c_send i2c_stop return ;--------------------------------------------------------------------- ;- - - - - - - - - - - - - - - - - - - - - - - - ;Inicijalizacija TLS2561 Init_TLS2561 i2c_start movlw 0x52 ;Module address WR , ADDR=L (0x29) call i2c_send movlw 0x80 ;address call i2c_send movlw 0x03 ;value call i2c_send i2c_stop return ;- - - - - - - - - - - - - - - - - - - - - - - - ; Citaj podatke TLS2561 - Jacina sunca TLS2561 i2c_restart movlw 0x52 ;Module address WR, ADDR=L (0x29) call i2c_send movlw 0xAC ;command call i2c_send i2c_restart movlw 0x53 ;Module address RD, ADDR=L (0x29) call i2c_send i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 1 movwf S0_L i2c_receive i2c_send_NACK movf SSPBUF,W ;uzmi podatak 2 movwf S0_H i2c_stop ;- - - - - - - - - - - - - - - - - - - - - - - - i2c_restart movlw 0x52 ;Module address WR, ADDR=L (0x29) call i2c_send movlw 0xAE ;command call i2c_send i2c_restart movlw 0x53 ;Module address RD, ADDR=L (0x29) call i2c_send i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 3 movwf S1_L i2c_receive i2c_send_NACK movf SSPBUF,W ;uzmi podatak 4 movwf S1_H i2c_stop return ;--------------------------------------------------------------------- ; - - - - - - - - - - - - - - - - - - - - - - - - - ;Inicijalizacija BME280 Init_BME280 i2c_start movlw 0xEC ;Module address WR (0x76) call i2c_send movlw 0xF2 ;ctrl_hum call i2c_send movlw B'00000101' ;osrs_h=16 call i2c_send movlw 0xF4 ;ctrl_meas call i2c_send movlw B'10110111' ;osrs_p=16 ;osrs_t=16; mode=11 merenja se automatski ponavljaju call i2c_send movlw 0xF5 ;config call i2c_send movlw B'10010000' ;t_sb=500ms ;filter=16 ;I2C call i2c_send i2c_stop return ;--------------------------------------------------------------------- ; - - - - - - - - - - - - - - - - - - - - - - - - - ;Citaj podatke iz BME280 BME280 i2c_restart movlw 0xEC ;Module address WR (0x76) call i2c_send movlw 0xF7 ;address call i2c_send ;- - - - - - - - - - - - - - - - - - - - - - - - i2c_restart movlw 0xED ;Module address RD (0x76) call i2c_send ;Citaj podatke iz BME280 - Pritisak i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 1 movwf P_H i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 2 movwf P_L i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 3 movwf P_X ;Citaj podatke iz BME280 - Temperatura i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 4 movwf T2_H i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 5 movwf T2_L i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 6 movwf T2_X ;Citaj podatke iz BME280 - Vlaznost i2c_receive i2c_send_ACK movf SSPBUF,W ;uzmi podatak 7 movwf RH_H i2c_receive i2c_send_NACK movf SSPBUF,W ;uzmi podatak 8 movwf RH_L i2c_stop return ; - - - - - - - - - - - - - - - - - - - - - - - - - ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- BinBCD clrf R0 movwf R1 gtenth movlw .10 subwf R1,W btfss _C goto over movwf R1 incf R0,F goto gtenth over retlw 0 ;---------------------------------------------------------------- BCD_Bin_2 movwf R1 movwf R0 swapf R0,F movlw 0x0F andwf R0,F movlw 0x0F andwf R1,F ;---------------------------------------------------------------- BCD_Bin bcf _C ; *2 rlf R0,W bcf _C ; *2 rlf R0,F bcf _C ; *2 rlf R0,F bcf _C ; *2 rlf R0,F addwf R0,W ;W=R0*2+R0*8=R0*10 addwf R1,W ;W=R0*10+R1 return ;------------------------------------------------------------------------- ;******************************************************************** B1_BCD bcf _C ; clear the carry bit movlw .8 movwf count clrf R0 clrf R1 clrf R2 loop_8_1 rlf A_0, F rlf R1, F rlf R0, F decfsz count, F goto adjDEC_1 RETLW 0 adjDEC_1 movlw R1 movwf FSR call adjBCD movlw R0 movwf FSR call adjBCD goto loop_8_1 ;******************************************************************** B2_BCD bcf _C ; clear the carry bit movlw .16 movwf count clrf R0 clrf R1 clrf R2 loop16 rlf A_1, F rlf A_0, F rlf R2, F rlf R1, F rlf R0, F decfsz count, F goto adjDEC RETLW 0 adjDEC movlw R2 movwf FSR call adjBCD movlw R1 movwf FSR call adjBCD movlw R0 movwf FSR call adjBCD goto loop16 adjBCD movlw 3 addwf 0,W movwf temp btfsc temp,3 ; test if result > 7 movwf 0 movlw 30 addwf 0,W movwf temp btfsc temp,7 ; test if result > 7 movwf 0 ; save as MSD RETLW 0 ;--------------------------------------------------------------------- ;******************************************************************* ; Double Precision Subtraction ( A_ - B_ -> A_ ) ; D_sub call neg_B ; At first negate B_; Then add ; ;******************************************************************* ; Double Precision Addition ( A_ + B_ -> A_ ) ; D_add movf B_1,W addwf A_1, F ;add lsb btfsc _C ;add in carry incf A_0, F movf B_0,W addwf A_0, F ;add msb retlw 0 neg_B comf B_1, F ; negate B_ ( -B_ -> B_ ) incf B_1, F btfsc _Z decf B_0, F comf B_0, F retlw 0 ;********************************************************************************************** ;----------------------------------------------------------------------- ADD16 ; Aarg + Barg -> Aarg movf B_1,W addwf A_1, F ;add lsb movf B_0,W btfsc _C ;add in carry incfsz B_0, W addwf A_0, F ;add mbs RETURN ;----------------------------------------------------------------------- SUB16 ; Aarg - Barg -> Aarg movf B_1,W subwf A_1, F ;sub mid-msb movf B_0,W btfss _C ;sub in carry incfsz B_0, W subwf A_0, F ;add msb RETURN ;------------------------------------------------------------------------- Neg_A comf A_1, F ; negate A_ ( -A_ -> A_ ) incf A_1, F btfsc _Z decf A_0, F comf A_0, F RETURN ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- InitPorts bsf STATUS,RP0 ;Select register page 1 bcf STATUS,RP1 ;Select register page 1 movlw B'00111111' ;Set port_A movwf TRISA movlw B'10011111' ;Set port_C movwf TRISC movlw B'00001111' ;Set port_B movwf TRISB movlw B'00000110' ;ADC all digital movwf ADCON1 bcf STATUS,RP0 ;Select register page 0 ;------------------------------------ movlw B'00101000' ;enable I2C mode movwf SSPCON bsf STATUS,RP0 ;select pg 1 movlw B'10000000' ;SMP=1 I2C movwf SSPSTAT movlw 0x0C ;bit rate = 100kHz@4MHz I2C ; movlw 0x31 ;bit rate = 100kHz@20MHz I2C movwf SSPADD bsf TRISC,3 ;SDA,SCL for input bsf TRISC,4 movlw .0 movwf SSPCON2 movlw B'00101101' ;Pul-up, TMR0 input pin T0CKI, WDT 1:32 oko 0,576sec movwf OptionReg movlw B'00100010' ; RCIE, TMR2IE movwf PIE1 clrf PIE2 movlw .25 ; 9600. baud @4.096MHz ; movlw .212 ; 1201.87 baud @4.096MHz ; movlw .207 ; 1201.92 baud @4.000MHz movwf SPBRG movlw B'00100100' ;Async,TXEN, BRGH=1 movwf TXSTA movlw .255 ; TMR2= 50 Hz, 20ms movwf PR2 bcf STATUS,RP0 ;select pg 0 movlw B'00000011' ;TMR1ON as 16bit COUNTER, input pin T1CKI movwf T1CON ; movlw B'00100011' ; Pr_s=16,Po_s=5 ; movwf T2CON ; TMR2= 50 Hz, 20ms movlw B'01011011' ; Pr_s=16,Po_s=12 movwf T2CON ; TMR2= 20 Hz, 50ms movlw B'10010000' ;Enable continous reception movwf RCSTA clrf PIR1 clrf PIR2 movlw B'01110000' ;PEIE enable, T0IE enable, INTE enable movwf INTCON return ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- Salji_RS_HEX andlw 0x0F iorlw 0x30 movwf CHAR movlw 0x3A subwf CHAR,W ;W=CHAR-3Ah btfss _C goto Send1 ;< .10 movf CHAR,W ;>= .10 addlw .7 goto Salji_RS_B Send1 movf CHAR,W goto Salji_RS_B Salji_RS_B_30 andlw 0x0F iorlw 0x30 Salji_RS_B bsf STATUS,RP0 ; Set BANK1 Nije_Prazan_TX_3 btfss TXSTA,TRMT goto Nije_Prazan_TX_3 bcf STATUS,RP0 ; Set BANK0 movwf TXREG return ;--------------------------------------------------------------------- Salji_RS_Heksadecimalno_1 swapf MIN,W call Salji_RS_HEX movf MIN,W call Salji_RS_HEX swapf SEC,W call Salji_RS_HEX movf SEC,W call Salji_RS_HEX swapf RH_H,W call Salji_RS_HEX movf RH_H,W call Salji_RS_HEX swapf RH_L,W call Salji_RS_HEX movf RH_L,W call Salji_RS_HEX swapf T_H,W call Salji_RS_HEX movf T_H,W call Salji_RS_HEX swapf T_L,W call Salji_RS_HEX movf T_L,W call Salji_RS_HEX swapf P_H,W call Salji_RS_HEX movf P_H,W call Salji_RS_HEX swapf P_L,W call Salji_RS_HEX movf P_L,W call Salji_RS_HEX swapf P_X,W call Salji_RS_HEX movf P_X,W call Salji_RS_HEX swapf T2_H,W call Salji_RS_HEX movf T2_H,W call Salji_RS_HEX swapf T2_L,W call Salji_RS_HEX movf T2_L,W call Salji_RS_HEX swapf T2_X,W call Salji_RS_HEX movf T2_X,W call Salji_RS_HEX swapf RH2_H,W call Salji_RS_HEX movf RH2_H,W call Salji_RS_HEX swapf RH2_L,W call Salji_RS_HEX movf RH2_L,W call Salji_RS_HEX return ;--------------------------------------------------------------------- Salji_RS_Heksadecimalno_2 swapf S0_H,W call Salji_RS_HEX movf S0_H,W call Salji_RS_HEX swapf S0_L,W call Salji_RS_HEX movf S0_L,W call Salji_RS_HEX swapf S1_H,W call Salji_RS_HEX movf S1_H,W call Salji_RS_HEX swapf S1_L,W call Salji_RS_HEX movf S1_L,W call Salji_RS_HEX swapf SUV_H,W call Salji_RS_HEX movf SUV_H,W call Salji_RS_HEX swapf SUV_L,W call Salji_RS_HEX movf SUV_L,W call Salji_RS_HEX swapf R1h_H,W call Salji_RS_HEX movf R1h_H,W call Salji_RS_HEX swapf R1h_L,W call Salji_RS_HEX movf R1h_L,W call Salji_RS_HEX swapf R_H,W call Salji_RS_HEX movf R_H,W call Salji_RS_HEX swapf R_L,W call Salji_RS_HEX movf R_L,W call Salji_RS_HEX swapf W_H,W call Salji_RS_HEX movf W_H,W call Salji_RS_HEX swapf W_L,W call Salji_RS_HEX movf W_L,W call Salji_RS_HEX swapf WX_H,W call Salji_RS_HEX movf WX_H,W call Salji_RS_HEX swapf WX_L,W call Salji_RS_HEX movf WX_L,W call Salji_RS_HEX swapf WY_H,W call Salji_RS_HEX movf WY_H,W call Salji_RS_HEX swapf WY_L,W call Salji_RS_HEX movf WY_L,W call Salji_RS_HEX movlw .13 call Salji_RS_B movlw .10 call Salji_RS_B return ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- Salji_RS_1 movf MIN,W call BinBCD movf R0,W call Salji_RS_B_30 movf R1,W call Salji_RS_B_30 movlw ':' call Salji_RS_B movf SEC,W call BinBCD movf R0,W call Salji_RS_B_30 movf R1,W call Salji_RS_B_30 movlw ' ' call Salji_RS_B movlw 'H' call Salji_RS_B movlw '=' call Salji_RS_B movf RH_H,W movwf A_0 movf RH_L,W movwf A_1 call B2_BCD movf R1,W call Salji_RS_B_30 swapf R2,W call Salji_RS_B_30 movlw '.' call Salji_RS_B movf R2,W call Salji_RS_B_30 movlw ' ' call Salji_RS_B movlw 'T' call Salji_RS_B movlw '=' call Salji_RS_B movf T_H,W movwf A_0 movf T_L,W movwf A_1 call B2_BCD movf R1,W call Salji_RS_B_30 swapf R2,W call Salji_RS_B_30 movlw '.' call Salji_RS_B movf R2,W call Salji_RS_B_30 movlw ' ' call Salji_RS_B movlw 'R' call Salji_RS_B movlw '1' call Salji_RS_B movlw 'h' call Salji_RS_B movlw '=' call Salji_RS_B swapf R1h_H,W call Salji_RS_HEX movf R1h_H,W call Salji_RS_HEX swapf R1h_L,W call Salji_RS_HEX movf R1h_L,W call Salji_RS_HEX movlw ' ' call Salji_RS_B movlw 'R' call Salji_RS_B movlw '=' call Salji_RS_B swapf R_H,W call Salji_RS_HEX movf R_H,W call Salji_RS_HEX swapf R_L,W call Salji_RS_HEX movf R_L,W call Salji_RS_HEX return ;--------------------------------------------------------------------- Salji_RS_2 movlw ' ' call Salji_RS_B movlw 'W' call Salji_RS_B movlw '=' call Salji_RS_B call Salji_RS_B swapf W_H,W call Salji_RS_HEX movf W_H,W call Salji_RS_HEX swapf W_L,W call Salji_RS_HEX movf W_L,W call Salji_RS_HEX movlw ' ' call Salji_RS_B movlw 'W' call Salji_RS_B movlw 'x' call Salji_RS_B movlw '=' call Salji_RS_B call Salji_RS_B swapf WX_H,W call Salji_RS_HEX movf WX_H,W call Salji_RS_HEX swapf WX_L,W call Salji_RS_HEX movf WX_L,W call Salji_RS_HEX movlw ' ' call Salji_RS_B movlw 'W' call Salji_RS_B movlw 'y' call Salji_RS_B movlw '=' call Salji_RS_B call Salji_RS_B swapf WY_H,W call Salji_RS_HEX movf WY_H,W call Salji_RS_HEX swapf WY_L,W call Salji_RS_HEX movf WY_L,W call Salji_RS_HEX movlw .13 call Salji_RS_B movlw .10 call Salji_RS_B return ;--------------------------------------------------------------------- dt " PIC Weather Station v3.0" dt " by: 2018. YT2FSG - Stankovic Goran dipl.ing.el." dt " E-mail: goranstak@gmail.com " end