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

 
 
> Проблемы с UART на C8051F520
gmp
сообщение Sep 11 2008, 10:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 10-10-07
Из: Челябинск
Пользователь №: 31 206



Написал программку, которая ждет запроса с кодом 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;
}
}
}
Go to the top of the page
 
+Quote Post



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

 


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


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