Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
AT89S52, софтовый UART(язык С ) , голову сломал уже (+)
Отправлено
Misha190E (10.3.11.67,217.151.131.16) 09 апреля 2010, г. 14:12
День добрый.
написан софтовый уарт (нужно 2 UART, поэтому штатного не хватает), но глючит.
Код простейший, запуск таймера на нужной частоте, и обрабочтик (привожу кусок по отправке байта)
/*---------------------------------------------------------
Timer 0 Overflow Interrupt
---------------------------------------------------------*/
#pragma disable
void T0_ISR (void) interrupt 1
{
if (SW_TX_STATE == 0x01) {
if (SUTXST == 0) -- номер бита, 0 - стартовый
SW_TX = 0; -- ножка TX
else
{
SW_TX = (TDR & 0x01); -- ножка TX
TDR >>= 1; -- TDR - переменная которую передаем
TDR |= 0x80;
}
SUTXST++;
if (SUTXST >= 10) {
SUTXST = 0;
SW_TX_STATE = 0xFF; // Флаг, передача закончена
}
}
Составить ответ | Вернуться на конференцию
Ответы
- продолжение текста (+) - Misha190E (09.04.2010, 14:12:38 10.3.11.67,217.151.131.16, 516 байт)
- Ответ: - Vallav (09.04.2010, 14:39:8 194.67.73.175, 367 байт)
- прерывания(+) - Misha190E (09.04.2010, 14:43:1 10.3.11.67,217.151.131.16, 541 байт)