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

 
 
> Помогите начинающему с UART в P89C51, Помогите начинающему с UART в P89C51
shamray
сообщение Sep 6 2005, 15:08
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 114
Регистрация: 31-08-05
Из: Украина, Одесса
Пользователь №: 8 105



Судьба заставила перейти на 51 ядро. Надо организовать прием и передачу данных по UART-у. С передачей все вроде нормально. А вот с приемом - несрослось. Не вызываетсяя прерывание по приему. Вот код.

Код
void UartInit(void)
{
    TMOD= 0x20;           /* Set M1 for 8-bit autoreload timer */
    TH1 = 0xFD;      /* Set autoreload value for timer 1 */
    TL1 = 0xFD;      /* 9600 baud with 11.0592 MHz xtal */
    TCON_bit.TR1 = 1;    /* Start timer 1 */
    SCON_bit.TI=0;
    SCON_bit.RI=0;
IEN0_bit.ES=1;  //enable RX&TX interupt
IEN0_bit.EA=1;
}

void UARTWriteChar(u08 txData)
{
SBUF=txData;
while(!SCON_bit.TI);
SCON_bit.TI=0;
}

#pragma vector=RI_int
__interrupt void UARTRX( void )
{
if(SCON_bit.RI)              //сюда никогда не прподаем :(
{
SCON_bit.RI=0;
LEDBlink();
}
}

void LEDBlink(void)
{
P1=P1^0x1;
}

int main( void )
{
init();
for(;;);
}


Может чего-то недонастроил?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
psL
сообщение Sep 6 2005, 16:52
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Должно быть что-то типа:

SCON = 0x52; // режим 1: 8-bit UART, разрешить прием
TMOD |= 0x20; // тамер 1 режим 2: 8-Bit перезагрузка
TCON = 0x69;
TL1 = c_baud;
TH1 = c_baud;
TR1 = 1; // запустить таймер 1
ES = 1; // разрешить прерывания от UART
RXD = 1;
TXD = 1;

А что у филипса нет аппноутов как работать с UART?
Go to the top of the page
 
+Quote Post
vzyk
сообщение Sep 6 2005, 21:08
Сообщение #3


Участник
*

Группа: Validating
Сообщений: 18
Регистрация: 3-09-05
Пользователь №: 8 208



Posmatri na PDF: http://www.semiconductors.philips.com/acro...2_RC2_RD2_2.pdf

Tam vsio ocenj jasno krasivo napisanno. Kod v rodie kak i "psL" pisal..
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Sep 7 2005, 05:12
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Разрешением работы приемника управляет дополнительный бит REN


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Krom
сообщение Sep 7 2005, 06:35
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 27-06-05
Из: Россия
Пользователь №: 6 324



Настройка обмена по последовательному каналу со скоростью 9600 при частоте кварца 22 118Мгц.

push IE ;
clr EA ;

clr TR1 ; останавливаем таймер 1
anl TMOD,#0Fh ; таймер 1 в режим 2 и в тоже время
orl TMOD,#20h ; не портим настройки таймера 0

mov TH1,#0FAh ; значение для скорости 4800 при кварце 11 059,
mov TL1,#0FAh ; но у нас частота кварца в 2 раза выше...

mov A,PCON ; сбрасываем бит удвоения скорости (SMOD)
clr ACC.7 ; если установить в 1, то получим скорость 19200
mov PCON,A ;

setb RXD ; на всякий случай.
setb TXD ;

mov SCON,#60h ; установка режима, сброс битов RI, TI, REN

setb TR1 ; запуск таймера 1
pop IE ;


Для разрешения приема в программе установить бит REN в 1 и запретить или разрешить прерывание RS. Это (REN=1) можно сделать и при настройке загрузив в SCON не 60Н, а 70Н.

Учтите, что управление прерыванию последовательного порта передается по RI=1 ИЛИ TI=1, то есть при входе в прерывание нужно анализировать оба этих бита. В коде программы:

setb REN ; разрешаем прием
setb ES ; разрешаем прерывание

Если прием/передача в каком-то месте осуществляется в обход вектора последовательного порта, не забывайте запрещать его.

В Вашей функции передачи байта прерывание не запрещается, и после окончания передачи байта управление передается вектору последовательного порта, а так как анализа бита TI и его сброса не производится, то программа может на этом зациклится.

Ну и значения TH1 и бита SMOD для различных скоростей (кварц 22 118):

9600 FA 0
19200 FD 0
38400 FD 1
57600 FF 0
115200 FF 1

ДЛя кварца 11 059 разумеется настройки будут другие.
Go to the top of the page
 
+Quote Post
shamray
сообщение Sep 7 2005, 06:36
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 114
Регистрация: 31-08-05
Из: Украина, Одесса
Пользователь №: 8 105



Спасибо всем ответившим. Просто недосмотрел этот битик.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 01:01
Рейтинг@Mail.ru


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