Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с UART на C8051F520
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
gmp
Написал программку, которая ждет запроса с кодом 0x43 и после получения такового выдает четыре байта информации. Никакк не получается запустить работу UARTа. сигнал запроса поступает Проверял осцилографом), на ножке TX постоянно напряжение питания и никаких импульсов. Скорость обменя 9600. На различных сайтах смотрел как народ настраивает, но все равно ничего не получилось. Подскажите, как правильно настроить UATR, чтобы он наконец заработал? Текст программы ниже.

#include <ioc8051F520.h>
#include <STDIO.H>
#include <FLOAT.H>
#include <MATH.H>

#define inquiry 0x43
#define uchar unsigned char
#define uint unsigned int

uchar counterTX;
uchar bufRX[4];


void init(void);


void main ()
{
PCA0MD =0; // Disable the Watchdog Timer

init();

while(3)
{

}
}

void init(void)
{
OSCICN = 0xC3; // 1.5 МГц

// P0.0 - Unassigned, Open-Drain, Digital
// P0.1 - Unassigned, Open-Drain, Digital
// P0.2 - Unassigned, Open-Drain, Digital
// P0.3 - Unassigned, Open-Drain, Digital
// P0.4 - TX (UART), Push-Pull, Digital
// P0.5 - RX (UART), Open-Drain, Digital

P0MDOUT = 0x10;
P0SKIP |= 0x30;
XBR0 = 0x01;
XBR1 = 0x40;

// íàñòðîéêà UART

SCON0 = 0xF0; // âêëþ÷àåì UART, ðàçðåøèòü ðàáîòó ïðèåìíèêà


// íàñòðàèâàåì òàéìåð 1 äëÿ ðàáîòû UART
TMOD = 0x20;
CKCON = 0x08;
TH1 = 0xB0;
TL1 = TH1;
TCON_bit.TR1 = 1;

IP = 0x10; // ïðèîðèòåò UART ñàìûé âûñîêèé
IE_bit.ES0 = 1; // ðàçðåøèòü ïðåðûâàíèÿ ïî UART
IE_bit.EA = 1; // ðàçðåøèòü ãëîáàëüíûå ïðåðûâàíèÿ

}

// ïðåðûâàíèå ïî UART
#pragma vector = TI0_int
__interrupt void TXD (void)
{
uchar Byte;

if (SCON0_bit.RI0==1)
{
SCON0_bit.RI0=0;
SCON0_bit.RB80=0;
Byte = SBUF0;
if(Byte==inquiry)
{
counterTX=0;
bufRX[0]=0x03;
bufRX[1]=0xE0;
bufRX[2]=0x2E;// 46,875 ãðàäóñîâ
bufRX[3]=bufRX[0]^bufRX[1]^bufRX[2];
SCON0_bit.REN0 = 0; // çàïðåòèòü ðàáîòó ïðèåìíèêà
SBUF0 = bufRX[counterTX];
return;
}
}
else if (SCON0_bit.TI0==1)
{
SCON0_bit.TI0=0;
SCON0_bit.TB80=0;
counterTX++;
if(counterTX>=4)
{
counterTX=0;
SCON0_bit.REN0 = 1; // ðàçðåøèòü ðàáîòó ïðèåìíèêà
return;
}
else
{
SBUF0 = bufRX[counterTX];
return;
}
}
}
Палыч
Не знаком с C8051F520, но если у Вас тактовая 1,5 Мгц (это - так?), то скорость UART 9600 с помощью таймера1 в "классике" установить невозможно.

P.S. Первое, что напрашивается - у Вас UART настроен не на скорость 9600, поэтому МК неправильно принимает байт запроса (байт с кодом 43h), а, поэтому, ничего и не передаёт. Проверить правильность настройки скорости UART - не имею возможности, т.к. не знаком с применённым Вами микроконтроллером. Если настройка скорости в C8051F520 не отличается от классического МК51 и тактовая частота 1,5МГц, то - да, настроено не верно. В классическом МК51 с тактовой частотой 1,5МГц на таймере1 при ТН1= FF скорость UART получается 7812, и получить 9600 нет никакой возможности.
gmp
Да я уже все частоты перебрал, сейчас поставил максимальную 24.5 МГц, соответственно изменил и настройки таймера для этой частоты, но результат тот же!

Все, нашел ошибку! Дело в том, что плата была разведена под C8051F520A, а поставили контроллер C8051F520! У них ножки для UARTа разные. Порезали дорожки, перепаяли, подкорректировали программу и все заработало!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.