Написал программку, которая ждет запроса с кодом 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;
}
}
}