#include #include "uart.h" #include "lcd.h" #include "portyUart.h" #include "portyLcd.h" #define TAKTY_ZEGARA_1_SEK 800000 char Bufor[30]; // bufor odczytywanych danych int low=0; // znacznik pocz¹teku danych w buforze int high=0; // zmacznik koñca danych w buforze int a=0,b=0,c=0,d=0,literki=0; void main(void) { WDTCTL=WDTPW + WDTHOLD; // wy³¹czenie WDT P3SEL |= 0x10 + 0x20 + 0x40 + 0x80; P4DIR &= ~0x10; P4DIR &= ~0x20; P4DIR &= ~0x40; P4DIR &= ~0x80; InitPortsLcd(); // inicjalizacja portów LCD InitLCD(); // inicjalizacja LCD clearDisplay(); // czyszczenie wyœwietlacza initPortyUart(); // inicjalizacja portow UART //initUart(115200); // inicjalizacja UARTa prêdkoœæ transmisji 2400 Budoów initUart(9600); _EINT(); // w³¹czenie przerwañ while(1) // nieskoñczona pêtla { if(literki%16==0) { if(literki%32==0) SEND_CMD(CUR_HOME); else SEND_CMD(DD_RAM_ADDR2); } if( !(P4IN & 0x10) == 0 && a>0) { a=0; __delay_cycles(TAKTY_ZEGARA_1_SEK*0.02); } if( !(P4IN & 0x20) == 0 && b>0) { b=0; __delay_cycles(TAKTY_ZEGARA_1_SEK*0.02); } if( !(P4IN & 0x40) == 0 && c>0) { c=0; __delay_cycles(TAKTY_ZEGARA_1_SEK*0.02); } if( !(P4IN & 0x80) == 0 && d>0) { d=0; __delay_cycles(TAKTY_ZEGARA_1_SEK*0.02); } if( !(P4IN & 0x10) != 0) { //UartStringTransmit("pierwszy"); // wys³anie napisu Tekst do ternimala if(a==0) { literki++; SEND_CHAR('a'); UartCharTransmit('a'); __delay_cycles(TAKTY_ZEGARA_1_SEK*0.02); a=a+1;} if(a>0&&a<10) { a=a+1; __delay_cycles(TAKTY_ZEGARA_1_SEK); } if(a==10) { literki++; SEND_CHAR('a'); UartCharTransmit('a'); __delay_cycles(TAKTY_ZEGARA_1_SEK*0.5); } while(high != low) // gdy odebrano dane { putc(Bufor[low]); // wypisanie danych na wyœwietlaczu low= (++low)%30; // inkrementowanie znaczika pocz¹tka danych } continue; } if( !(P4IN & 0x20) != 0) { if(b==0) { literki++; SEND_CHAR('b'); UartCharTransmit('b'); __delay_cycles(TAKTY_ZEGARA_1_SEK*0.02); b=b+1;} if(b>0&&b<10) { b=b+1; __delay_cycles(TAKTY_ZEGARA_1_SEK); } if(b==10) { literki++; SEND_CHAR('b'); UartCharTransmit('b'); __delay_cycles(TAKTY_ZEGARA_1_SEK*0.5); } while(high != low) // gdy odebrano dane { putc(Bufor[low]); // wypisanie danych na wyœwietlaczu low= (++low)%30; // inkrementowanie znaczika pocz¹tka danych } continue; } if( !(P4IN & 0x40) != 0) { if(c==0) { literki++; SEND_CHAR('c'); UartCharTransmit('c'); __delay_cycles(TAKTY_ZEGARA_1_SEK*0.02); c=c+1;} if(c>0&&c<10) { c=c+1; __delay_cycles(TAKTY_ZEGARA_1_SEK); } if(c==10) { literki++; SEND_CHAR('c'); UartCharTransmit('c'); __delay_cycles(TAKTY_ZEGARA_1_SEK*0.5); } while(high != low) // gdy odebrano dane { putc(Bufor[low]); // wypisanie danych na wyœwietlaczu low= (++low)%30; // inkrementowanie znaczika pocz¹tka danych } continue; } if( !(P4IN & 0x80) != 0) { if(d==0) { literki++; SEND_CHAR('d'); UartCharTransmit('d'); __delay_cycles(TAKTY_ZEGARA_1_SEK*0.02); d=d+1;} if(d>0&&d<10) { d=d+1; __delay_cycles(TAKTY_ZEGARA_1_SEK); } if(d==10) { literki++; SEND_CHAR('d'); UartCharTransmit('d'); __delay_cycles(TAKTY_ZEGARA_1_SEK*0.5); } while(high != low) // gdy odebrano dane { putc(Bufor[low]); // wypisanie danych na wyœwietlaczu low= (++low)%30; // inkrementowanie znaczika pocz¹tka danych } continue; } } } #pragma vector=UART0RX_VECTOR // procedura obs³ugi przerwania UART __interrupt void usart0_rx (void) { Bufor[high]=RXBUF0; // wpisanie odebranych danych do bufora high=(++high)%30; // inkrementowanie znacznika koñca danych }