реклама на сайте
подробности

 
 
> USART в PIC16F870
rl_inc
сообщение Apr 30 2009, 06:45
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 14-04-09
Пользователь №: 47 680



Доброго времени суток!
Захотелось мне принять байт от контроллера. Сваял программу на MicroC:

CODE
void interrupt(void)
{
if(PIR1.TXIF)
{
PORTB=10;//äëÿ îáíàðóæåíèÿ ïðåðûâàíèÿ ïåðåäàò÷èêà
}
if(PIR1.TMR2IF)
{
PORTB++;
PIR1.TMR2IF=0;
if(PORTB==4)//äëÿ èñêóññòâåííîãî âûçîâà ïðåðûâàíèÿ ïåðåäàò÷èêà
{
PIR1.TXIF=1;
PORTB=0;
}
}
}
//=======================
void main(void)
{
TRISB=0;
PORTB=0;
TRISC=0b11000000;
//RC6 - äëÿ ïåðåäà÷è áàéòà
//RC7 - äëÿ ïðè¸ìà áàéòà
PORTC=0;
INTCON.GIE=1;
INTCON.PEIE=1;
//-------
TXSTA.BRGH=1;
SPBRG=90;//ñêîðîñòü 9600 áîä
TXSTA.SYNC=0;//àñèíõðîííûé ðåæèì
TXSTA.SPEN=1;//âêëþ÷àåì USART
RCSTA.CREN=1;//ïðè¸ì äàííûõ âûêë
TXSTA.TXEN=1;//ïåðåäà÷a äàííûõ âêë

PIR1.RCIF=0;
PIE1.RCIE=0;//ïðåðûâàíèå îò ïðè¸ìíèêà âûêë
PIR1.TXIF=1;
PIE1.TXIE=1;//ïðåðûâàíèå îò ïåðåäàò÷èêà âêë
//-------
T2CON=0b11111111;//255 ïðåñêàëåð=16, ïîñòñêàëåð=16, âêë.=1
TMR2=0;
PIE1.TMR2IE=1;
//-------
while(1)
{
}
}


Перегнал в ХЕКС. Загрузил в ПРОТЕУС. И фиг там. Не работает.
Прерывания передатчика вообще не происходит!
Даже искусственно созданного!
Горелый модуль USART в контроллере?

Извиняюсь. Код немного не тот отправил.

CODE
void interrupt(void)
{
if(PIR1.TXIF)
{
PORTB=10;//для обнаружения прерывания передатчика
PIR1.TXIF=0;
TXREG=PORTB;
}
if(PIR1.TMR2IF)
{
PORTB++;
PIR1.TMR2IF=0;
if(PORTB==4)//для искусственного вызова прерывания передатчика
{
PIR1.TXIF=1;
PORTB=0;
}
}
}
//=======================
void main(void)
{
//-------
TRISB=0;
PORTB=0;
TRISC=0b11000000;
//RC6 - для передачи байта
//RC7 - для приёма байта
PORTC=0;
INTCON.GIE=1;
INTCON.PEIE=1;
//-------
TXSTA.BRGH=1;
SPBRG=90;//скорость 9600 бод
TXSTA.SYNC=0;//асинхронный режим
TXSTA.SPEN=1;//включаем USART
RCSTA.CREN=1;//приём данных выкл
TXSTA.TXEN=1;//передачa данных вкл

PIR1.RCIF=0;
PIE1.RCIE=0;//прерывание от приёмника выкл
PIR1.TXIF=0;
PIE1.TXIE=1;//прерывание от передатчика вкл
//-------
T2CON=0b11111111;//255 прескалер=16, постскалер=16, вкл.=1
TMR2=0;
PIE1.TMR2IE=1;
//-------
while(1)
{
}
}


Сообщение отредактировал zltigo - May 2 2009, 18:49
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01547 секунд с 7
ELECTRONIX ©2004-2016