6502-OS/programs/dht.s65

158 lines
2.9 KiB
Plaintext
Raw Normal View History

2023-12-08 22:56:35 +01:00
;;********************************************************************************
2024-08-08 21:11:25 +02:00
;; @file
;; @brief DHT22 driver (WIP)
;; @ingroup driver
2023-12-08 22:56:35 +01:00
;; @details
;; @depends IO-W65C22N
2024-08-08 21:11:25 +02:00
;;
2023-12-08 22:56:35 +01:00
;;********************************************************************************
;;TODO EVERYTHING
;DHT_REQUEST_L = $00
;DHT_REQUEST_H = %01010000 ; = 20480 PHI2 pulses = 20,5 ms at 1 MHz
;DHT_RECV_H = %10011100
;DHT_RECV_L = %01000000 ; = 40000 PHI2 = 40ms
;; Status Variables, Used to determine what is sent by temp module
;DHT_STATUS = $400
;DHT_NONE = 0
;DHT_WAIT_REQ = 1
;DHT_WAIT_RESP = 2
;DHT_RECV = 3
;DHT_DONE = 4
;DHT_BIT = $401
;DHT_BIT_ROT = $402
;DHT_VALUES = $405 ;
;DHT_OFFSET = $403
;DHT_OFF_RH_HIGH = 0 ; offsets to DHT_VALUES
;DHT_OFF_RH_LOW = 1
;DHT_OFF_T_HIGH = 2
;DHT_OFF_T_LOW = 3
;DHT_OFF_CHECKSUM = 4
;DHT_OFF_DONE = 5
;message_dht: .asciiz "DHT-Request gesendet."
;dht_wait:
; ldx #$00
;dht_wait_:
; lda message_dht,x
; sta TO_PRINT,x
; inx
; bne dht_wait_
; jsr lcd_print_clear
;dht_wait_loop: ; check after every interrpt if dht program is done and then return home
; lda #'.'
; jsr _lcd::print_char
; wai
; lda DHT_STATUS
; cmp #DHT_DONE
; bne dht_wait_loop
;dht_exit:
; jsr kb_read
; cmp #'*'
; jeq home
; bra dht_exit
; jmp return_home
;dht_request: ; send request to sensor
; sei
2023-10-26 19:51:20 +02:00
2023-12-08 22:56:35 +01:00
; lda #%00000001 ; set PA1-0 to output 0
; ora IO2 + IO_DDRA
; sta IO2 + IO_DDRA
; lda #(LCD_CLEAR | $00)
; sta IO2 + IO_RA
2023-10-26 19:51:20 +02:00
2023-12-08 22:56:35 +01:00
; ; start timer
; lda #DHT_REQUEST_L
; sta IO2 + IO_T1CL
; lda #DHT_REQUEST_H
; sta IO2 + IO_T1CH
2023-10-26 19:51:20 +02:00
2023-12-08 22:56:35 +01:00
; lda #DHT_WAIT_REQ
; sta DHT_STATUS
2023-10-26 19:51:20 +02:00
2023-12-08 22:56:35 +01:00
; cli
; jmp dht_wait
2023-10-26 19:51:20 +02:00
2023-12-08 22:56:35 +01:00
;dht_request_end:
; lda #%10000010
; sta IO2 + IO_IER ; enable Interrupt for CA1
; lda #%11111110
; and IO2 + IO_DDRA
; sta IO2 + IO_DDRA ; set PA1-0 to input
2023-10-26 19:51:20 +02:00
2023-12-08 22:56:35 +01:00
; lda #DHT_WAIT_RESP
2023-10-26 19:51:20 +02:00
2023-12-08 22:56:35 +01:00
;dht_response: ; receive response from sensor
; lda #DHT_RECV
; sta DHT_STATUS
; stz DHT_OFFSET
; lda #7
; sta DHT_BIT
;dht_recv:
; ; start timer
; lda #DHT_RECV_L
; sta IO2 + IO_T1CL
; lda #DHT_RECV_H
; sta IO2 + IO_T1CH
; rts
;dht_recv_read:
; ; read PA2
; lda IO2 + IO_RA
; and #%00000001
; ldx DHT_BIT
; beq dht_recv_end
;dht_recv_rot:
; rol
; dex
; bne dht_recv_rot
;dht_recv_end:
; ldy DHT_OFFSET
; ora DHT_VALUES,y
; sta DHT_VALUES,y
; ; determine if 8 bits are done
; ldx DHT_BIT
; beq dht_recv_next
; rts
;dht_recv_next:
; lda #7
; sta DHT_BIT
; inc DHT_OFFSET
; cmp DHT_OFF_DONE
; beq dht_display
; rts
;dht_display:
; ldx #0
;dht_display_:
; lda DHT_VALUES,x
; sta TO_PRINT,x
; inx
; cpx #5
; bne dht_display_
; jsr lcd_print_clear
; rts
;dht_irq:
; lda DHT_STATUS
; cmp #DHT_WAIT_REQ
; beq dht_request_end
; cmp #DHT_WAIT_RESP
; beq dht_response
; cmp #DHT_RECV
; beq dht_recv
; rts
2023-10-26 19:51:20 +02:00