Witam
Wykonałem układ, który komunikuje się z PC przez moduł BTM-222. Komunikacja USART, asynchroniczna 38.400 kbps, 1 bit parzysztości, 1 bit stopu. Jeśli zadeklaruję na stałe, że wielkość bufora wynosi np. 30, i wysyłam z PC 30 znaków, to komunikacja działa bez zarzutu. Problem w tym, że chciałbym, aby program działał, przy różnej ilości odbieranych danych z PC. Przy takich ustawieniach USART, wychodzi mi na to, że przesłanie jednego znaku nie trwa dłużej niż 280 us. Dlatego, w przerwaniu od USART, zeruję flagę przerwania od TIMER0, wpisuję wartość początkową i włączam przerwanie od TIMER0. W obsłudze przerwania od TIMER0, zeruję wartość zmiennej licznika bufora, ustawiam flagę dane odebrane, oraz wyłączam przerwanie od TIMER0. Timer, ustawiony jest na 400 us. Niestety nie działa ta koncepcja.
Poniżej kod programu:
Wykonałem układ, który komunikuje się z PC przez moduł BTM-222. Komunikacja USART, asynchroniczna 38.400 kbps, 1 bit parzysztości, 1 bit stopu. Jeśli zadeklaruję na stałe, że wielkość bufora wynosi np. 30, i wysyłam z PC 30 znaków, to komunikacja działa bez zarzutu. Problem w tym, że chciałbym, aby program działał, przy różnej ilości odbieranych danych z PC. Przy takich ustawieniach USART, wychodzi mi na to, że przesłanie jednego znaku nie trwa dłużej niż 280 us. Dlatego, w przerwaniu od USART, zeruję flagę przerwania od TIMER0, wpisuję wartość początkową i włączam przerwanie od TIMER0. W obsłudze przerwania od TIMER0, zeruję wartość zmiennej licznika bufora, ustawiam flagę dane odebrane, oraz wyłączam przerwanie od TIMER0. Timer, ustawiony jest na 400 us. Niestety nie działa ta koncepcja.
Poniżej kod programu:
Kod: C#