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