diff options
Diffstat (limited to 'software/ihu/ihu.asm')
-rw-r--r-- | software/ihu/ihu.asm | 299 |
1 files changed, 4 insertions, 295 deletions
diff --git a/software/ihu/ihu.asm b/software/ihu/ihu.asm index 2b33219..48045ce 100644 --- a/software/ihu/ihu.asm +++ b/software/ihu/ihu.asm @@ -220,6 +220,8 @@ init bsf INTCON,GIE clrf TMP + + call rtc_init goto main ;; ------------------------------------- @@ -255,302 +257,11 @@ uart_rx_fe return ;; ------------------------------------- -ttx_send_byte - bsf STATUS,RP0 - bcf TRISD,TTX_SDA - bcf STATUS,RP0 - movwf TTX_BYTE - xorwf TTX_CSUM,f - movlw .8 - movwf TTX_BIT_CNT -ttx_send_next_bit - btfsc TTX_BYTE,7 - bsf PORTD,TTX_SDA - btfss TTX_BYTE,7 - bcf PORTD,TTX_SDA - bsf PORTD,TTX_SCL - nop - nop - nop - bcf PORTD,TTX_SCL - nop - nop - nop - nop - rlf TTX_BYTE,f - decfsz TTX_BIT_CNT,f - goto ttx_send_next_bit - bsf STATUS,RP0 - bsf TRISD,TTX_SDA - bcf STATUS,RP0 - return - - ;; ------------------------------------- -ttx_recv_byte - movlw .8 - movwf TTX_BIT_CNT -ttx_recv_next_bit - bsf PORTD,TTX_SCL - nop - nop - nop - bcf PORTD,TTX_SCL - nop - nop - nop - nop - nop - rlf TTX_BYTE,f - btfsc PORTD,TTX_SDA - bsf TTX_BYTE,0 - btfss PORTD,TTX_SDA - bcf TTX_BYTE,0 - decfsz TTX_BIT_CNT,f - goto ttx_recv_next_bit - return - - ;; ------------------------------------- -ttx_break - movlw .13 - movwf TTX_BIT_CNT -ttx_wait_octet - decfsz TTX_BIT_CNT,f - goto ttx_wait_octet - return - - ;; ------------------------------------- -ttx_send_frame - movwf TTX_BYTE - andlw b'00001111' - movwf TTX_BYTE_CNT - bsf PORTD,TTX_SCL - movlw .3 - bcf PORTD,TTX_SCL - call wait_ms - - clrf TTX_CSUM - movf TTX_BYTE,w - call ttx_send_byte - - movf TTX_BYTE_CNT,f - btfsc STATUS,Z - return - -ttx_next_byte - call ttx_break - movf INDF,w - call ttx_send_byte - - incf FSR,f - decfsz TTX_BYTE_CNT,f - goto ttx_next_byte - - call ttx_break - call ttx_recv_byte - movf TTX_BYTE,w - xorwf TTX_CSUM,w - btfss STATUS,Z - goto ttx_csum_error - movlw '.' - movwf TXREG - return - -ttx_csum_error - movlw 'E' - movwf TXREG - return - - ;; ------------------------------------- -i2c_start - bsf STATUS,RP0 - bcf TRISB,RTC_SDA - nop - bcf TRISB,RTC_SCL - bcf STATUS,RP0 - return - - ;; ------------------ -i2c_restart - bsf STATUS,RP0 - bsf TRISB,RTC_SDA - nop - bsf TRISB,RTC_SCL - nop - nop - nop - bcf TRISB,RTC_SDA - nop - bcf TRISB,RTC_SCL - bcf STATUS,RP0 - return - - ;; ------------------ -i2c_stop - bsf STATUS,RP0 - bsf TRISB,RTC_SCL - nop - bsf TRISB,RTC_SDA - bcf STATUS,RP0 - return - - ;; ------------------ -i2c_send_byte - movwf RTC_BYTE - movlw .8 - movwf RTC_BIT_CNT - bsf STATUS,RP0 -i2c_send_byte_next - btfss RTC_BYTE,7 - bcf TRISB,RTC_SDA - btfsc RTC_BYTE,7 - bsf TRISB,RTC_SDA - bsf TRISB,RTC_SCL - nop - nop - bcf TRISB,RTC_SCL - rlf RTC_BYTE,f - decfsz RTC_BIT_CNT,f - goto i2c_send_byte_next - - nop - nop - bsf TRISB,RTC_SDA - bsf TRISB,RTC_SCL - bcf STATUS,RP0 - movf PORTB,w - bsf STATUS,RP0 - bcf TRISB,RTC_SCL - bcf TRISB,RTC_SDA - bcf STATUS,RP0 - andlw b'00010000' - movwf RTC_BYTE - swapf RTC_BYTE,f - return - - ;; ------------------ -i2c_recv_byte - clrf RTC_BYTE - movlw .8 - movwf RTC_BIT_CNT - bsf STATUS,RP0 - bsf TRISB,RTC_SDA -i2c_recv_byte_loop - bsf TRISB,RTC_SCL - bcf STATUS,RP0 - btfsc PORTB,RTC_SDA - bsf RTC_BYTE,0 - bsf STATUS,RP0 - bcf TRISB,RTC_SCL - decfsz RTC_BIT_CNT,f - goto i2c_recv_byte_next - - bcf TRISB,RTC_SDA - bcf STATUS,RP0 - return - -i2c_recv_byte_next - rlf RTC_BYTE,f - goto i2c_recv_byte_loop - - ;; ------------------ -i2c_ack - bsf STATUS,RP0 - bcf TRISB,RTC_SDA - bsf TRISB,RTC_SCL - nop - nop - bcf TRISB,RTC_SCL - bcf STATUS,RP0 - return - - ;; ------------------ -i2c_nack - bsf STATUS,RP0 - bsf TRISB,RTC_SDA - bsf TRISB,RTC_SCL - nop - nop - bcf TRISB,RTC_SCL - bcf TRISB,RTC_SDA - bcf STATUS,RP0 - return + include "ttx.inc" ;; ------------------------------------- -rtc_init - call i2c_start - - movlw RTC_ADDR_W - call i2c_send_byte - btfsc RTC_BYTE,0 - goto rtc_init_error_ack - - movlw RTC_REG_STAT - call i2c_send_byte - btfsc RTC_BYTE,0 - goto rtc_init_error_ack - - call i2c_restart - - movlw RTC_ADDR_R - call i2c_send_byte - btfsc RTC_BYTE,0 - goto rtc_init_error_ack - - call i2c_recv_byte - call i2c_nack + include "rtc.inc" - btfsc RTC_BYTE,7 - goto rtc_init_after_clock_fail - - call i2c_stop - movlw '.' - movwf TXREG - return - -rtc_init_after_clock_fail - call i2c_restart - - movlw RTC_ADDR_W - call i2c_send_byte - btfsc RTC_BYTE,0 - goto rtc_init_error_ack - - movlw RTC_REG_SEC - call i2c_send_byte - btfsc RTC_BYTE,0 - goto rtc_init_error_ack - - movlw .14 - movwf RTC_BYTE_CNT -rtc_init_clear - clrw - call i2c_send_byte - btfsc RTC_BYTE,0 - goto rtc_init_error_ack - decfsz RTC_BYTE_CNT,f - goto rtc_init_clear - - movlw b'00000001' - call i2c_send_byte - btfsc RTC_BYTE,0 - goto rtc_init_error_ack - - clrw - call i2c_send_byte - btfsc RTC_BYTE,0 - goto rtc_init_error_ack - - call i2c_stop - movlw 'c' - movwf TXREG - return - -rtc_init_error_ack - call i2c_stop - movlw 'E' - movwf TXREG - return - ;; ------------------------------------- ;; MAINLOOP main @@ -558,8 +269,6 @@ main btfsc STATUS,Z goto main - call rtc_init - clrf TMP goto main |