moi,
käytän koodissani SIGNAL(SIG_UART_RECV) keskeytysrutiinia.
Koodi:
//Serial interrupt
SIGNAL(SIG_UART_RECV)
{
unsigned char merkki;
//lue merkki Datarekisteristä muuttujaan
merkki = UDR;
//Put_char(merkki); //kutsu putchar-funktiota, argumenttina merkki
switch (merkki) // select what to do ...
{
case CR: // Carriage return, go to line 2
LINE2;
break;
case LF: // Line Feed, go to line 2
LINE2;
break;
case FF: // Clear the display on a Form Feed (Ctrl L)
LCD_CLEAR_HOME;
break;
default:
putchar_lcd(merkki); // get a serial character and display it
break;
} //switch ends
}
Tarkoitus olisi saada 27 merkkiä pitkä merkkijono terminaaliohjelmasta lcd-näytölle, niin, että merkkijono jakaantuisi kolmeen lohkoon. Eka ja toka lohko 10 merkkiä pitkiä ja viimeinen lohko 7 merkkiä pitkä.
merkkijono olisi esim. 95e 1.247 98e 1.305 D 0.984.
jonon 10 ensimmäistä merkkiä tulisi lcd-näytön ensimmäiselle riville alkuun. 10 seuraavaa merkkiä toiselle riville alkuun. Ja loput 7 merkkiä vaikka ensimmäisen rivin 7 viimeistä merkkiä. Näyttöni on 16*2 lcd-näyttö. Kuinka tämä kannattaa tehdä keskeytysrutiinia käyttäen? Kun yritin tossa keskeytysrutiinissa käyttää silmukkaa ja taulukoa merkkien lukemiseen, niin ohjelma hukkasi merkkejä ja teki omaperäisiä lisämerkkejä.
Pollaamalla onnistuis jotenkin näin:
Koodi:
while(1) // do this forever...
{
unsigned char ch[18];
for (int j=0;j<9;j++){
for (int i=0;i<9;i++){
ch[i] = Get_char(); // get a serial character
putchar_lcd(ch[i]);
} //i
LINE2;
ch[j] = Get_char(); // get a serial character
putchar_lcd(ch[j]);
}//j