////////////////////////////// main.c /////////////////////////////////////// #define F_CPU 1843200 #include #include #include #include unsigned char __edge, __bitcount; void uart_putc(unsigned char c); void decode(unsigned char sc); void uart_init (void); void keyboard_init(void); void clr(void); int main (void) { keyboard_init(); uart_init(); uart_putc('\x0c'); sei(); while (1) { } return 0; } void uart_init(void) { #ifndef F_CPU #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000" #define F_CPU 4000000UL #endif #define BAUD 9600UL #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) #if ((BAUD_ERROR<990) || (BAUD_ERROR>1010)) #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! #endif UCSRB |= (1<> 8; UBRRL = UBRR_VAL & 0xFF; } void uart_putc(unsigned char c) { while (!(UCSRA & (1< 2) // Bit 3 to 10 is data. Parity bit, { // start and stop bits are ignored. data = (data >> 1); if(PINA & 4) data = data | 0x80; // Store a '1' } MCUCR = 3; // Set interrupt on rising edge __edge = 1; } else { // Routine entered at rising edge MCUCR = 2; // Set interrupt on falling edge __edge = 0; if(--__bitcount == 0) // All bits received { decode(data); __bitcount = 11; } } return; } void decode ( unsigned char sc ) { static unsigned char set_release ; // if ( ! set_release ) // { if ( sc != 240 ) // scancode not 0xF0 at release of key { uart_putc(sc); // put scancode to display } else { // set_release = 1; // scancode match 0xF0 } // } else { // set_release = 0; // this decode call echo nothing on display // } return; } void clr(void) { uart_putc(0x0c); } #################### Makefile ########################### PROJECT = main SOURCES = main.c CC = avr-gcc OBJCOPY = avr-objcopy PORT = /dev/ttyU0 MMCU = atmega32 CFLAGS = -mmcu=$(MMCU) -Wall -Os default: $(SOURCES) $(CC) $(CFLAGS) -I./ -o $(PROJECT).out $(SOURCES) $(OBJCOPY) -j .text -O ihex $(PROJECT).out $(PROJECT).hex install: sudo avrdude -e -p m32 -P $(PORT) -c stk500v2 -U flash:w:$(PROJECT).hex fuse: sudo avrdude -e -p m32 -P $(PORT) -c stk500v2 -U lfuse:w:0xff:m -U hfuse:w:0xd9:m clean: rm -fP $(PROJECT).out rm -fP $(PROJECT).hex