.include "m8def.inc" ;********************************************************************** ;Wert auf dem Display dauerhaft speichern: ;Zuerst Fusstaste drücken, dann Taste "increment" ;********************************************************************** .def w = r16 ;workingregister .def W = r16 ;Workingregister .equ block = $0070 .equ kopr17 = $0071 .equ kopr18 = $0072 .equ kopr19 = $0073 .equ adckop = $0075 .equ seg0 = $0076 .equ seg1 = $0077 .equ seg2 = $0078 .equ seg3 = $0079 .equ wert = $007a .EQU wkop = $007b .org 0x000 rjmp main ; Reset Handler .org 0x00E rjmp ADC_ ;ADC Conversion Complete main: ; hier beginnt das Hauptprogramm ldi W, 0x5f ; Softwarestack initialisieren!(wichtig) out SPL, w ; abhängig von der SRAM-Grösse ldi w, 0x04 ; Softwarestack initialisieren!(wichtig) out SPH, w ; abhängig von der SRAM-Grösse ldi r25,1 ldi r24,255 out EEARH, r25 out EEARL, r24 sbi EECR,EERE in w,EEDR sts wert,w rcall xx ldi w,0xff out DDRB,w sbi PORTD,4 ;PORTD,4 weak pullup sbi PORTD,5 ;PORTD,5 weak pullup sbi PORTD,6 ;PORTD,6 weak pullup cbi PORTD,7 ;PORTD,7 -> GND ------------------------------------------------------------11.06.2022 sbi DDRD,7 ;PORTD,7 als Ausgang GND ---------------------------------------------------------11.06.2022 cbi PORTC,5 ;PORTC,5 -> GND ------------------------------------------------------------21.06.2022 sbi DDRC,5 ;PORTC,5 als Ausgang GND ---------------------------------------------------------21.06.2022 clr w sts block,w ldi w,1 sts wert,w aa: sbis PIND,4 ;Taste um "wert" zu inkrementieren rcall hoeher sbis PIND,5 ;Taste um "wert" zu dekrementieren rcall tiefer rcall rechnen rcall spaet rjmp aa spaet: ;Register r19 = 1 = c.a. 10'000 Takte sts kopr17,r17 ;Registerinhalt retten, das Register könnte anderwo in Verwendung sein sts kopr18,r18 ;Registerinhalt retten, das Register könnte anderwo in Verwendung sein clr r17 clr r18 cpi r19,0 brne spaet0 lds r17,kopr17 ;Register wieder in den Zustand vor Aufruf der spaet-Routine versetzen lds r18,kopr18 ;Register wieder in den Zustand vor Aufruf der spaet-Routine versetzen lds r19,kopr19 ;Register wieder in den Zustand vor Aufruf der spaet-Routine versetzen ret spaet0: nop nop nop nop nop rcall yy ; sbi ADCSRA,6 ;ADC start conversion XXXX20h50 nop sbis PIND,6 ;Taste um Schweisszeit (Relais od. Triac)zu schalten rcall schalten nop nop nop inc r17 cpi r17,25 breq spaet1 rjmp spaet0 spaet1: clr r17 inc r18 cpi r18,1;;;;;;;;;;;;;;;;xxxxx7.10.2014,20h00-schneller,20h50-langsamer breq spaet2 rjmp spaet0 spaet2: clr r18 dec r19 cpi r19,0 brne spaet0 lds r17,kopr17 ;Register wieder in den Zustand vor Aufruf der spaet-Routine versetzen lds r18,kopr18 ;Register wieder in den Zustand vor Aufruf der spaet-Routine versetzen lds r19,kopr19 ;Register wieder in den Zustand vor Aufruf der spaet-Routine versetzen ret yy: lds w,block cpi w,0 breq zz cpi w,1 breq uu cpi w,2 breq oo cpi w,3 breq ww zz: lds w,seg0 rcall segmente out PORTB,w ldi w,0x01 out DDRD,w lds w,block inc w sts block,w ret uu: lds w,seg1 rcall segmente out PORTB,w ldi w,0x02 out DDRD,w lds w,block inc w sts block,w ret oo: lds w,seg2 rcall segmente out PORTB,w ldi w,0x04 out DDRD,w lds w,block inc w sts block,w ret ww: lds w,seg3 rcall segmente out PORTB,w ldi w,0x08 out DDRD,w clr w sts block,w ret rechnen: clr w sts seg0,w sts seg1,w sts seg2,w sts seg3,w lds w,wert ; ldi w,221 ; ; in w,ADCH ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; clr r17 rechnen0: subi w,100 brcs rechnen1 inc r17 sts seg0,r17 cpi r17,3 breq rechnen1 rjmp rechnen0 rechnen1: ldi r17,100 add w,r17 clr r17 rechnen5: subi w,10 brcs rechnen2 inc r17 sts seg1,r17 cpi r17,9 breq rechnen4 rjmp rechnen5 rechnen2: ldi r17,10 add w,r17 clr r17 rechnen6: subi w,1 brcs rechnen3 inc r17 sts seg2,r17 cpi r17,9 breq rechnen3 rjmp rechnen6 rechnen3: ldi w,0x00 sts block,w ret rechnen4: clr r17 rjmp rechnen6 xx: ;29.09.2014 clr r27 ldi r26,0xe0 ldi w,0b00111111 st X+,w ldi w,0b00000110 st X+,w ldi w,0b01011011 st X+,w ldi w,0b01001111 st X+,w ldi w,0b01100110 st X+,w ldi w,0b01101101 st X+,w ldi w,0b01111101 st X+,w ldi w,0b00000111 st X+,w ldi w,0b01111111 st X+,w ldi w,0b01101111 st X+,w ret segmente: ;29.09.2014 clr r27 ldi r26,0xe0 add r26,w ld w,X ret hoeher: ;hier wird die Zahl an 7-Segment-Display erhöht lds w,wert cpi w,255 breq hoeher2 inc w sts wert,w Test: rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 sbis PIND,4 ; ------------------------------------------------------------12.06.2022 breq Test ; ------------------------------------------------------------12.06.2022 ret hoeher1: ;Zahl an 7-Segment-Display hat 255 überschritten, d.h. 0, also decrementieren dec w sts wert,w ret hoeher2: rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 sbis PIND,4 ; ------------------------------------------------------------12.06.2022 breq hoeher2 ; ------------------------------------------------------------12.06.2022 ret tiefer: ;hier wird die Zahl an 7-Segment-Display erhöht ;ldi r19,50 ;rcall wait lds w,wert cpi w,1 breq tiefer2 dec w ; cpi w,0 ; breq hoeher1 sts wert,w Test1: rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 sbis PIND,5 ; ------------------------------------------------------------12.06.2022 breq Test1 ; ------------------------------------------------------------12.06.2022 ret tiefer2: rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 sbis PIND,5 ; ------------------------------------------------------------12.06.2022 breq tiefer2 ; ------------------------------------------------------------12.06.2022 ret set_eeprom: lds w,wert ldi r25,1 ldi r24,255 out EEARH, r25 out EEARL, r24 ; Write data (r16) to data register out EEDR,w ; Write logical one to EEMWE sbi EECR,EEMWE ; Start eeprom write by setting EEWE sbi EECR,EEWE set_eeprom1: sbic EECR,EEWE rjmp set_eeprom1 set_eeprom2: sbis PIND,4 ;Taste immer noch gedrückt? rjmp set_eeprom2 ;ja set_eeprom3: sbis PIND,6 ;Taste immer noch gedrückt? rjmp set_eeprom3 ;ja ldi r19,1 ;nein rcall wait ;entprellen ret schalten: rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 rcall wait ; ------------------------------------------------------------12.06.2022 sbis PIND,4 ;falls diese Taste gedrückt, dann wird Eeprom mit dem rjmp RET3 ;auf dem Display angezeigten Wert beschrieben clr r19 out DDRD,r19 lds r19,wert ;sbi DDRD,7 ;PORTD,7 als Ausgang GND, Schweissen ein ;sbi PORTD,7 ;PORTD,7 als Ausgang GND, Schweissen ein sbi PORTD,7 ;PORTD,7 -> VCC ------------------------------------------------------------11.06.2022 sbi PORTC,5 ;PORTC,5 -> VCC ------------------------------------------------------------21.06.2022 warten: ;Register r19 = 1 = c.a. 10'000 Takte sts kopr17,r17 ;Registerinhalt retten, das Register könnte anderwo in Verwendung sein sts kopr18,r18 ;Registerinhalt retten, das Register könnte anderwo in Verwendung sein clr r17 clr r18 cpi r19,0 brne ret0 lds r17,kopr17 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen lds r18,kopr18 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen lds r19,kopr19 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen ret ret0: nop ;nop 10x **************************************************************************************** 21.06.2022 ;nop ;nop ;nop ;nop ;nop ;nop ;nop ;nop ;nop inc r17 cpi r17,5 ;vorher 25 **************************************************************************************** 21.06.2022 breq ret1 rjmp ret0 ret1: clr r17 inc r18 cpi r18,25 breq ret2 rjmp ret0 ret2: clr r18 dec r19 cpi r19,0 brne ret0 lds r17,kopr17 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen lds r18,kopr18 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen lds r19,kopr19 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen cbi PORTD,7 ;PORTD,7 -> GND ------------------------------------------------------------11.06.2022 cbi PORTC,5 ;PORTC,5 -> GND ------------------------------------------------------------21.06.2022 ret3: sbis PIND,4 ;falls diese Taste gedrückt, rjmp set_eeprom ; beschreibe Eeprom mit "wert" sbis PIND,6 ;Taste immer noch gedrückt? rjmp ret3 ;ja ldi r19,1 ;nein rcall wait ;entprellen ret wait: ;Register r19 = 1 = c.a. 10'000 Takte sts kopr17,r17 ;Registerinhalt retten, das Register könnte anderwo in Verwendung sein sts kopr18,r18 ;Registerinhalt retten, das Register könnte anderwo in Verwendung sein clr r17 clr r18 cpi r19,0 brne wait0 lds r17,kopr17 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen lds r18,kopr18 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen lds r19,kopr19 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen ret wait0: nop nop nop nop nop nop nop nop nop nop nop inc r17 cpi r17,25 breq wait1 rjmp wait0 wait1: clr r17 inc r18 cpi r18,25 breq wait2 rjmp wait0 wait2: clr r18 dec r19 cpi r19,0 brne wait0 lds r17,kopr17 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen lds r18,kopr18 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen lds r19,kopr19 ;Register wieder in den Zustand vor Aufruf der retard-Routine versetzen ret ADC_: ;hierher springt ADC Conversion Complete ;in r25, SREG ; SREG sichern ;push w ; w (mit Wert von SREG) auf stack legen ;code... hier ;pop w ; w von Stack holen (gesicherter Wert von SREG) ;out SREG,r25 ; w in SREG schieben reti