.include "4433def.inc" .def temp = r16 ; universalregister definieren .def keybdata = r14 ; kegister fuer keyboard daten .def keybparity = r15 ; keyboard parity counter .def keybcount = r18 .def status = r19 ; hier merken wir uns keycodes .equ break = 0 ; bit 0 vom keyb. status register -> breakcode folgt .equ shift = 1 ; shift gedrueckt?! .equ caps = 2 ; caps an/aus .equ alt = 3 .equ ctrl = 4 rjmp reset ; Reset Handler rjmp keyb_int ; IRQ0 Handler reti ; IRQ1 Handler reti ; Timer1 Capture Handler reti ; Timer1 compare Handler reti ; Timer1 Overflow Handler reti ; Timer0 Overflow Handler reti ; SPI Transfer Complete Handler reti ; UART RX Complete Handler : RXCIE reti ; UDR Empty Handler reti ; UART TX Complete Handler reti ; ADC Conversion Complete Interrupt Handler reti ; EEPROM Ready Handler reti ; Analog Comparator Handler reset: ldi temp, RAMEND out SP, temp ; set stack pointer ; Port datenrichtungen setzen ; PD 2 <- Keyboard Clock (interrupt0) ; PD 3 <- Keyvoard Data ldi temp, 0b11110011 ; und fuer Port D out ddrd, temp ; ldi temp, 0b00001100 ; pullups fuer pd2 und 3 anschalten out portd, temp ;INT0 aktivieren ldi temp, 0b01000000 ; int0 aktivieren out gimsk, temp ldi temp, 0b00000010 ; int0 bei fallender flanke out mcucr, temp clr keybcount ; keyboard bits initialisieren clr status ; nocheins sei ; interrupts global an main: rjmp main ; =============== Keyboard routinen ============= keyb_int: cpi keybcount, 0x00 ; startbit breq startbit cpi keybcount, 0x09 ; paritybit breq paritybit cpi keybcount, 0x0A ; stoppbit breq stopbit clc sbic pind, 3 sec ror keybdata startbit: ; interessiert nicht paritybit: ; TODO stopbit: inc keybcount cpi keybcount, 0x0B ; alle bitsuebertragen, gucken was dabei rausgekommen ist... brne nextbit ; ans prozedurende springen, falls noch NICHT alle bits ;keyboard stoppen, soll puffern sbi ddrd, 2 ; pd2 als ausgang... cbi portb, 2 ; pd2 low... push temp ; temp sichern mov temp, keybdata ; eingefangene daten nach temp kopieren rcall keyb ; keyboarddaten weiterverarbeiten pop temp ; temp sicherung zurueckholen clr keybcount ; counter wieder zurueckstellen fuer die naechste runde cbi ddrd, 2 ; pd2 wieder eingang sbi portd, 2 ; pullup wieder an, ready to send nextbit: reti keyb: cpi temp, 0xAA ; BAT test breq keyb99 cpi temp, 0xF0 ; breakcodes suchen brne keyb0 sbr status, 1<