#include #include #include #include "uart.h" void pause(void); void init(void); void canreg_write(unsigned char adresse, unsigned char daten); unsigned char canreg_read(unsigned char adresse); void pause(void) { asm volatile ("nop"); } void can_init(void) { DDRA = 0xDF; DDRC = 0xFF; PORTA = 0x3C; /* ~INT=1 ~RST=1 ~WR=1 ~RD=1 ~CS=0 ALE=0 */ PORTA &= ~(1<<4); PORTA |= (1<<4); } void canreg_write(unsigned char adresse, unsigned char daten) { PORTA |= (1<<0); // ALE Setzen pause(); PORTC = adresse; pause(); PORTA &= ~(1<<0); // ALE rücksetzen pause(); PORTA &= ~(1<<3); // ~WR rücksetzen pause(); PORTC = daten; pause(); PORTA |= (1<<3); // ~WR setzen //PORTA |= (1<<0); // ALE Setzen } unsigned char canreg_read(unsigned char adresse) { unsigned char daten = 0; PORTA |= (1<<0); // ALE Setzen pause(); PORTC = adresse; PORTA &= ~(1<<0); // ALE rücksetzen pause(); DDRC = 0x00; PORTA &= ~(1<<2); // ~RD rücksetzen pause(); daten = PORTC; PORTA |= (1<<2); // ~RD setzen DDRC = 0xFF; return daten; } int main(void) { //USART initialisieren DDRD = 0x43; UCSRC &= ~(1<