Siwieje przez 8252

Apr 23, 2004 3 Replies

Oto program ktory nie dziala: (ponizej bedzie program ktory dziala)



#include <REG8252.H>



#include <stdio.h>



void rs(char c) { while(!TI); TI=0; SBUF = c; }



void pisznars (char *znak) { while( *znak ) { rs(*znak); znak++; } }



void main(void) { int x = 10000; while(1) // loop { while(x > 1) // 10000 { P1 = 0x0f; // PORT1 to 00001111 x--; // dec. x } while(x < 10000) // 10000 { P1 = 0x00; // PORT1 to 00000000 x++; // inc. x } TMOD=0x20; TH1=0xFD; SCON=0x50; TR1=1; SBUF = "O"; TI=0; pisznars("Ka"); } }



---------------------------------------------- Ten dziala:



#include <REG8252.H>



#include <stdio.h>



void main(void) { int x = 10000; while(1) // loop { while(x > 1) // 10000 { P1 = 0x0f; // PORT1 to 00001111 x--; // dec. x } while(x < 10000) // 10000 { P1 = 0x00; // PORT1 to 00000000 x++; // inc. x } TMOD=0x20; TH1=0xFD; SCON=0x50; TR1=1; SBUF = "O"; TI=0; } }



Miga diodami i wyswietla znak na RS ktory rzeczywiscie sie pokazuje. Gdy laduje pierwszy program dioda nawet nie mrugnie, gdy laduje drugi migaja i pisze. Co sie do diabla dzieje ?



Pozdrawiam, Mariusz



Program nie wychodzi z petli while w funkcji rs(). Tam powinno byc chyba tak

void rs(char c) { TI=0; // Skasownie flagi (na wszelki wypadek) SBUF=c; // Wrzucenie znaku do wyslania. while(!TI); // Czekamy na flage po wyslaniu znaku. TI=0; // Skasowanie flagi }

Oczywiscie zakladam ze przerwanie od UART jest zablokowane, bo w przeciwnym razie program p> Oto program ktory nie dziala: (ponizej bedzie program ktory dziala) >

Losisko ze mnie wsadzilem rejestry i timer w petle, ale po wyjeciu ich przed while nic sie nie poprawilo.

M.

Tu jest OK.

^^^^^^^^^^ Po skonfigurowaniu portu szeregowego powiniene¶ ustawiæ flagê TI, bo inaczej nie rozpoczniesz transmisji.

while(1);

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required