Files
bme280_cpm/bme280_util.z80

156 lines
2.2 KiB
Z80 Assembly

org 100h
siob_data equ 083h
siob_ctrl equ 082h
lcd_data equ 0dbh
lcd_ctrl equ 0dah
celcius_offset equ 08ah
pressure_offset equ 0cah
humid_offset equ 09eh
bdos equ 0005h
conout equ 02h
conin equ 01h
start:
call init_lcd
call init_siob
call lcd_delay
ld a,celcius_offset ; write celcius label
out (lcd_ctrl),a
call lcd_delay
ld hl,clabel
call print_str_to_lcd
ld a,pressure_offset ; write pressure label
out (lcd_ctrl),a
call lcd_delay
ld hl,plabel
call print_str_to_lcd
ld a,humid_offset ; write humidity label
out (lcd_ctrl),a
call lcd_delay
ld hl,hlabel
call print_str_to_lcd
main:
call read_char_b
call print_char_to_lcd
ld c,11
call bdos
or a
jr z,main
ret
init_siob:
ld a,018h ; channel reset
out (siob_ctrl),a
ld a,04h
out (siob_ctrl),a ; wr4 baud settings
ld a,0c4h
out (siob_ctrl),a
ld a,03h
out (siob_ctrl),a ; rx enable
ld a,0c1h
out (siob_ctrl),a
ld a,05h
out (siob_ctrl),a ; tx settings
ld a,0eah
out (siob_ctrl),a
ret
init_lcd:
ld a,38h
out (lcd_ctrl),a ; function 8 bit, 2 lines, 5x8 dot font
call lcd_delay
ld a,0ch
out (lcd_ctrl),a ; display on, cursor off, no blink
call lcd_delay
ld a,01h
out (lcd_ctrl),a ; clear display
ret
lcd_delay:
ld bc,500
delay1:
dec bc
ld a,b
or c
jr nz,delay1
ret
read_char_b:
wait:
in a,(siob_ctrl)
bit 0,a
jr z,wait
in a,(siob_data)
ret
print_char_to_lcd:
cp a,0dh ; carriage return
jr z,lcd_done
cp a,0ah ; new line
jr z,lcd_done
cp a,054h ; T character
call z,move_to_tempaddr
cp a,050h ; P character
call z,move_to_presaddr
cp a,048h ; H character
call z,move_to_humidaddr
out (lcd_data),a
lcd_done:
ret
print_str_to_lcd: ; place memory address in hl first
ld a,(hl)
or a
jr z,print_done
out (lcd_data),a
call lcd_delay
inc hl
jr print_str_to_lcd
print_done:
ret
move_to_tempaddr:
ld c,a
ld a,85h
out (lcd_ctrl),a
ld a,c
ret
move_to_presaddr:
ld a,0c1h
out (lcd_ctrl),a
ret
move_to_humidaddr:
ld a,99h
out (lcd_ctrl),a
ret
print_char:
ld e,a
ld c,conout
call bdos
ret
clabel: DB 'degree C',0
plabel: DB 'pascal',0
hlabel: DB '% RH',0
end start