From e34ee666dafc0a77f01cfac0b2c16a219ba0a368 Mon Sep 17 00:00:00 2001 From: Maddiefuzz Date: Thu, 14 May 2026 17:47:44 -0400 Subject: [PATCH] Initial commit of bme280 Z80 utility --- bme280_util.z80 | 155 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 bme280_util.z80 diff --git a/bme280_util.z80 b/bme280_util.z80 new file mode 100644 index 0000000..79df48b --- /dev/null +++ b/bme280_util.z80 @@ -0,0 +1,155 @@ +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 +