diff options
Diffstat (limited to 'software/ihu')
-rw-r--r-- | software/ihu/ihu.asm | 130 | ||||
-rw-r--r-- | software/ihu/tables.inc | 26 | ||||
-rw-r--r-- | software/ihu/temp.inc | 79 |
3 files changed, 165 insertions, 70 deletions
diff --git a/software/ihu/ihu.asm b/software/ihu/ihu.asm index f81701d..1c2f891 100644 --- a/software/ihu/ihu.asm +++ b/software/ihu/ihu.asm @@ -248,7 +248,7 @@ uart_rx_fe ;; ------------------------------------- include "temp.inc" - + ;; ------------------------------------- ;; MAINLOOP main @@ -256,68 +256,92 @@ main btfsc STATUS,Z goto main - ;; movlw BUF - ;; movwf FSR - ;; call rtc_get_time + movlw BUF + movwf FSR + call rtc_get_time - ;; swapf BUF+2,w - ;; andlw b'00000011' - ;; call digit - ;; movwf TXREG - ;; movlw .1 - ;; call wait_ms + swapf BUF+2,w + andlw b'00000011' + call digit + movwf TXREG + movlw .1 + call wait_ms - ;; movf BUF+2,w - ;; andlw b'00001111' - ;; call digit - ;; movwf TXREG - ;; movlw .1 - ;; call wait_ms + movf BUF+2,w + andlw b'00001111' + call digit + movwf TXREG + movlw .1 + call wait_ms - ;; movlw ':' - ;; movwf TXREG - ;; movlw .1 - ;; call wait_ms + movlw ':' + movwf TXREG + movlw .1 + call wait_ms - ;; swapf BUF+1,w - ;; andlw b'00000111' - ;; call digit - ;; movwf TXREG - ;; movlw .1 - ;; call wait_ms + swapf BUF+1,w + andlw b'00000111' + call digit + movwf TXREG + movlw .1 + call wait_ms - ;; movf BUF+1,w - ;; andlw b'00001111' - ;; call digit - ;; movwf TXREG - ;; movlw .1 - ;; call wait_ms + movf BUF+1,w + andlw b'00001111' + call digit + movwf TXREG + movlw .1 + call wait_ms - ;; movlw ':' - ;; movwf TXREG - ;; movlw .1 - ;; call wait_ms + movlw ':' + movwf TXREG + movlw .1 + call wait_ms - ;; swapf BUF,w - ;; andlw b'00000111' - ;; call digit - ;; movwf TXREG - ;; movlw .1 - ;; call wait_ms + swapf BUF,w + andlw b'00000111' + call digit + movwf TXREG + movlw .1 + call wait_ms - ;; movf BUF,w - ;; andlw b'00001111' - ;; call digit - ;; movwf TXREG - ;; movlw .1 - ;; call wait_ms + movf BUF,w + andlw b'00001111' + call digit + movwf TXREG + movlw .1 + call wait_ms - ;; movlw '\r' - ;; movwf TXREG - ;; movlw .1 - ;; call wait_ms + movlw '\r' + movwf TXREG + movlw .1 + call wait_ms + movlw '\n' + movwf TXREG + movlw .1 + call wait_ms - call temp_init + call temp_read_value + swapf OWIRE_BYTE,w + andlw b'00001111' + call digit + movwf TXREG + movlw .1 + call wait_ms + + movf OWIRE_BYTE,w + andlw b'00001111' + call digit + movwf TXREG + movlw .1 + call wait_ms + + movlw '\r' + movwf TXREG + movlw .1 + call wait_ms + movlw '\n' + movwf TXREG clrf TMP goto main diff --git a/software/ihu/tables.inc b/software/ihu/tables.inc index 69584bf..1050a5e 100644 --- a/software/ihu/tables.inc +++ b/software/ihu/tables.inc @@ -42,5 +42,31 @@ digit retlw '7' retlw '8' retlw '9' + retlw 'A' + retlw 'B' + retlw 'C' + retlw 'D' + retlw 'E' + retlw 'F' + +mul10 + addwf PCL,f + retlw .0 + retlw .10 + retlw .20 + retlw .30 + retlw .40 + retlw .50 + retlw .60 + retlw .70 + retlw .80 + retlw .90 + retlw .100 + retlw .110 + retlw .120 + retlw .130 + retlw .140 + retlw .150 + retlw .160 ;; ------------------------------------- diff --git a/software/ihu/temp.inc b/software/ihu/temp.inc index 63eab26..38b5254 100644 --- a/software/ihu/temp.inc +++ b/software/ihu/temp.inc @@ -113,42 +113,87 @@ owire_write_loop ;; ------------------------------------- owire_readbit + bsf STATUS,RP0 + bcf TRISA,OWIRE + nop + bsf TRISA,OWIRE + bcf STATUS,RP0 + nop + btfss PORTA,OWIRE + bcf OWIRE_BYTE,7 + btfsc PORTA,OWIRE + bsf OWIRE_BYTE,7 + movlw .17 + movwf OWIRE_CNT +owire_readbit_loop + decfsz OWIRE_CNT,f + goto owire_readbit_loop return ;; ------------------------------------- owire_read_byte + movlw .8 + movwf OWIRE_BIT_CNT +owire_read_loop + call owire_readbit + decfsz OWIRE_BIT_CNT,f + goto owire_read_next return +owire_read_next + rrf OWIRE_BYTE,f + goto owire_read_loop + ;; ------------------------------------- temp_init call owire_presence - ;; btfsc OWIRE_BYTE,0 - ;; goto temp_init_error + btfsc OWIRE_BYTE,0 + goto temp_init_error - movlw b'10101010' + movlw TEMP_CMD_W_STAT call owire_write_byte - movlw b'01010101' + movlw b'01000011' call owire_write_byte - movlw b'11001100' - call owire_write_byte - movlw b'00001111' - call owire_write_byte - movlw b'00111100' - call owire_write_byte - - - movlw '.' - movwf TXREG return temp_init_error - movlw 'E' - movwf TXREG + ;; TODO: react to missing device return ;; ------------------------------------- temp_read_value - ;; TODO: implement this + call owire_presence + btfsc OWIRE_BYTE,0 + goto temp_read_value_error + + movlw TEMP_CMD_START + call owire_write_byte + +temp_read_value_loop + movlw .100 + call wait_ms + call owire_presence + btfsc OWIRE_BYTE,0 + goto temp_read_value_error + + movlw TEMP_CMD_R_STAT + call owire_write_byte + call owire_read_byte + btfss OWIRE_BYTE,7 + goto temp_read_value_loop + + + call owire_presence + btfsc OWIRE_BYTE,0 + goto temp_read_value_error + + movlw TEMP_CMD_R_TEMP + call owire_write_byte + call owire_read_byte + return + +temp_read_value_error + ;; TODO: react to missing device return ;; ------------------------------------- |