;*************************************************************************** ; geschrieben fuer atmega8 mit 4mhz (1 clock = 250ns) ; portB bit0 = ir-eingang (siehe: portB bit7) ; portB bit1 = "avr ok" + "ir received" anzeige (0=led aus) ; portB bit2 = eingang schaltspannung SAT ; portB bit3 = ausgang zum pc einschalten ("pc+go") ; portB bit4 = ir-ausgang zur geräte-steuerung ; portB bit5 = eingang schaltspannung satreceiver ; portB bit6 = eingang schaltspannung dvd-player ; portB bit7 = abfrage: b&o empfänger =0, tsop7000 =1 ; portD bit0 = rs232 ; portD bit1 = rs232 ; später: ; portD bit2 = reserve, event. audioumschalter 0=tv/sat 1=computer ;*************************************************************************** .include "C:\Programme\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc" ;variablen definieren .equ rc5satdevice=10 .equ serial_start=18 .equ serial_high=0 .equ serial_low=0 .equ rFlg=0 ; Flaggenregister zur Kommunikation ;register definieren .def bitcount=r14 ;hilfsregister für ir-byte .def lastbit=r15 ;hilfsregister für ir-byte .def timercount=r16 ;timer schleifenzähler .def format=r17 ;1. ir-byte .def to=r18 ;2. ir-byte .def command=r19 ;3. ir-byte .def temp=r20 ;allgemein .def temp1=r21 ;allgemein .def temp2=r22 ;allgemein .def merker=r23 ;merker für sendebefehle .def togglebit=r24 ;diverse togglebits .cseg .org $0000 rjmp RESET ; Interruptvektoren überspringen und zum Hauptprogramm .org INT0addr rjmp INT0_addr .org INT1addr rjmp INT1_addr .org ICP1addr rjmp ICP1_addr ; Timer1 Capture Handler .org OVF1addr rjmp OVF1_addr ; Timer1 Overflow Handler .org OVF0addr rjmp OVF0_addr ; Timer0 Overflow Handler .org URXCaddr rjmp URXC_addr ; USART RX Complete Handler .org UDREaddr rjmp UDRE_addr ; UDR Empty Handler .org UTXCaddr rjmp UTXC_addr ; USART TX Complete Handler .org ACIaddr rjmp ACI_addr ; Analog Comparator Handler .DSEG ; das Folgende kommt ins SRAM timerstatus: .BYTE 1 ;*********** main ********************************************************** main: ;Ein- und Ausgänge konfigurieren & Startblinken der LED ####### unwichtiges entfernt/gekürzt ########## clr temp sts timerstatus, temp ;timerstatus löschen clr timercount ;Timer vorbereiten: ldi temp, (1<>>>> funktioniert rcall timer0stoppen ;timer für Farbe läuft noch, Farbtaste abbrechen und neue auswerten ; hier mit gelber Taste wird der Timer gestartet >>>> funktioniert satgelb: ldi temp,0xD4 cpse command,temp ;überspringe, "command" gleich "D4" ist rjmp satgelblang ####### unwichtiges entfernt/gekürzt ########## clr command rjmp timer0starten satgelblang: ;beo4 "gelblang" ####### unwichtiges entfernt/gekürzt ########## rjmp detect_start ;TIMER0 timer0starten: sbi PORTB,1 ;portB bit1 setzen (1: led an 5v ist an) rcall pause700us cbi PORTB,1 clr timercount ldi temp1, (1<