.include "m8515def.inc" .equ clock = 14745600 ; .def null = r14 .def wl = r16 .def temp2 = r17 .def temp3 = r18 .def loop1 = r19 .def loop2 = r20 .equ lcdcontroller1 = 4 ;Flag für Controller 1 .equ lcdcontroller2 = 6 ;Flag für Controller 2 .def flags = r23 ;Steuerflags .def wl = r24 ;Working L .def wh = r25 ;Working H .dseg temp_lsb: .byte 8 temp_msb: .byte 8 th_reg: .byte 1 tl_reg: .byte 1 res1: .byte 1 res2: .byte 1 count_re: .byte 1 count_pc: .byte 1 crc: .byte 1 .include"LCD_4x27ohneBusyRW.inc" ;LCD-Routinen für 4-Zeilen-LCDs mit HD44780 .include"PRINT.inc" ;LCD-Augabe-Routinen mit HD44780 reset: clr wl clr temp2 clr temp3 clr loop1 clr loop2 sts temp_lsb, wl sts temp_msb, wl sts th_reg , wl sts tl_reg , wl sts res1 , wl sts res2 , wl sts count_re, wl sts count_pc, wl sts crc , wl ldi wl, LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse out SPL, wl ldi wl, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse out SPH, wl rcall lcd_init ;LCD initialisieren ;****************************************************************************** ; Hauptschleife ;****************************************************************************** main: rcall ini rcall skip_rom rcall convert_t rcall ini rcall skip_rom rcall read_scratchpad rcall ini main1: rjmp main;1 ;****************************************************************************** ;****************************************************************************** ;ds18s20 routinen ;****************************************************************************** ini: sbi ddrd, 0 ;pd0 ausgang cbi portd, 0 ;signal auf low ziehen rcall wait500us ;und 500us halten cbi ddrd,0 rcall wait70us ;wartet dazu 70us wait_presence_pulse: sbic pind,0 rjmp wait_presence_pulse rcall wait410us ;410us warten ret ;------------------------------------------------------------------------------ write_1: sbi ddrd, 0 ;pb0 ausgang cbi portd, 0 ;signal auf low ziehen rcall wait6us ;und 6us halten cbi ddrd, 0 ;lässt bus los rcall wait65us ;wartet dazu 65us ret ;----------------------------------------------------------------------------- write_0:sbi ddrd, 0 ;pb0 ausgang cbi portd, 0 ;signal auf low ziehen rcall wait60us ;und 60us halten cbi ddrd, 0 ;lässt bus los rcall wait10us ;wartet dazu 10us ret ;----------------------------------------------------------------------------- read_bit: clr temp3 ;löschen ldi wl, 8 ;für 8mal durchführen (8bit) read_bit1: ror temp3 ;rechts rollen cbi portd, 0 ;signal auf low ziehen sbi ddrd,0 ;pb0 ausgang rcall wait6us ;und 6us halten cbi ddrd, 0 ;lässt bus los rcall wait9us ;wartet dazu 9us sbis pind,0 ;prüfen ob null anliegt rjmp read_bit2 ;wenn 0 dann springen ldi temp2, 128 ;10000000 laden add temp3, temp2 ;und zu temp3 addieren read_bit2: rcall wait55us ;wartet 55us dec wl ;temp1 erniedigen brne read_bit1 ;von vorne bis temp1=0 ret ;----------------------------------------------------------------------------- write_command: ldi wl, 8 ; für 8 mal durchführen (8bit) write_command1: sbrs r10, 0 ;prüfen ob 0 rcall write_0 ;wenn ja dann 0 schreiben sbrc r10, 0 ;prüfen ob 1 rcall write_1 ;wenn ja dann 1 schreiben ror r10 ;rollen dec wl ;um eins erniedrigen brne write_command1 ;von vorne bis temp1=0 ret ;----------------------------------------------------------------------------- skip_rom: ldi wl, 0xCC ;befehl für skip rom mov r10, wl rcall write_command ;schicken ret ;----------------------------------------------------------------------------- convert_t: ldi wl, 0x44 ;befehl für convert_t mov r10, wl rcall write_command ;schicken rcall wait60us convert_t1: rcall wait70us sbis pind,0 rjmp convert_t1 ret ;----------------------------------------------------------------------------- read_scratchpad: ldi wl, 0xBE ;befehl für scratchpad mov r10, wl rcall write_command ;schicken rcall read_bit ;einlesen und speichern sts temp_lsb, temp3 rcall read_bit sts temp_msb, temp3 rcall read_bit sts th_reg, temp3 rcall read_bit sts tl_reg, temp3 rcall read_bit sts res1, temp3 rcall read_bit sts res2, temp3 rcall read_bit sts count_re, temp3 rcall read_bit sts count_pc, temp3 rcall read_bit sts crc, temp3 ret ;----------------------------------------------------------------------------- wait500us: ldi loop1, 200 ldi loop2, 6 wait500us1: inc loop1 brne wait500us1 dec loop2 brne wait500us1 ret ;----------------------------------------------------------------------------- wait410us: ldi loop1, 5 ldi loop2, 185 wait410us2: inc loop1 brne wait410us2 dec loop2 brne wait410us2 ret ;----------------------------------------------------------------------------- wait70us: ldi loop1, 185 wait70us1: inc loop1 brne wait70us1 ret ;----------------------------------------------------------------------------- wait65us: ldi loop1, $AD wait65us1: dec loop1 brne wait65us1 nop ret ;----------------------------------------------------------------------------- wait60us: ldi loop1, $A0 wait60us1: dec loop1 brne wait60us1 ret ;----------------------------------------------------------------------------- wait55us: ldi loop1, $92 wait55us1: dec loop1 brne wait55us1 nop nop ret ;----------------------------------------------------------------------------- wait10us: ldi loop1, $1A wait10us1: dec loop1 brne wait10us1 nop nop ret ;----------------------------------------------------------------------------- wait9us: ldi loop1, $18 wait9us1: dec loop1 brne wait9us1 ret ;----------------------------------------------------------------------------- wait6us: ldi loop1, $10 wait6us1: dec loop1 brne wait6us1 ret