|
最近用C8051F020做一个项目,UART0一直调试不通,发不了也收不到,把程序贴出来,请高手指导
初始化是用Silicon Config2 自动生成的通过IO配置P0=TX0,P1=RX0,P0设为推挽输出。
外部晶振22.1184,波特率用Timer1产生9600的频率,中断允许,UART0优先。
/////////////////////////////////////
// Generated Initialization File //
/////////////////////////////////////
#include "C8051F020.h"
// Peripheral specific initialization functions,
// Called from the Init_Device() function
void Reset_Sources_Init()
{
WDTCN = 0xDE;
WDTCN = 0xAD;
}
void Timer_Init()
{
CKCON = 0x10;
TCON = 0x40;
TMOD = 0x20;
TH1 = 0xB8;
}
void UART_Init()
{
SCON0 = 0x50;
}
void Port_IO_Init()
{
// P0.0 - TX0 (UART0), Push-Pull, Digital
// P0.1 - RX0 (UART0), Open-Drain, Digital
// P0.2 - Unassigned, Open-Drain, Digital
// P0.3 - Unassigned, Open-Drain, Digital
// P0.4 - Unassigned, Open-Drain, Digital
// P0.5 - Unassigned, Open-Drain, Digital
// P0.6 - Unassigned, Open-Drain, Digital
// P0.7 - Unassigned, Open-Drain, Digital
// P1.0 - Unassigned, Push-Pull, Digital
// P1.1 - Unassigned, Push-Pull, Digital
// P1.2 - Unassigned, Push-Pull, Digital
// P1.3 - Unassigned, Push-Pull, Digital
// P1.4 - Unassigned, Push-Pull, Digital
// P1.5 - Unassigned, Push-Pull, Digital
// P1.6 - Unassigned, Push-Pull, Digital
// P1.7 - Unassigned, Push-Pull, Digital
// P2.0 - Unassigned, Open-Drain, Digital
// P2.1 - Unassigned, Open-Drain, Digital
// P2.2 - Unassigned, Open-Drain, Digital
// P2.3 - Unassigned, Open-Drain, Digital
// P2.4 - Unassigned, Open-Drain, Digital
// P2.5 - Unassigned, Open-Drain, Digital
// P2.6 - Unassigned, Open-Drain, Digital
// P2.7 - Unassigned, Open-Drain, Digital
// P3.0 - Unassigned, Open-Drain, Digital
// P3.1 - Unassigned, Open-Drain, Digital
// P3.2 - Unassigned, Open-Drain, Digital
// P3.3 - Unassigned, Open-Drain, Digital
// P3.4 - Unassigned, Open-Drain, Digital
// P3.5 - Unassigned, Open-Drain, Digital
// P3.6 - Unassigned, Open-Drain, Digital
// P3.7 - Unassigned, Open-Drain, Digital
P0MDOUT = 0x01;
P1MDOUT = 0xFF;
P74OUT = 0x33;
XBR0 = 0x04;
XBR2 = 0x40;
}
void Oscillator_Init()
{
int i = 0;
OSCXCN = 0x67;
for (i = 0; i < 3000; i++); // Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0);
OSCICN = 0x08;
}
void Interrupts_Init()
{
IE = 0x90;
IP = 0x10;
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
Reset_Sources_Init();
Timer_Init();
UART_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
}
///////////////////////////////////////////////////////////////////////////
这里是主程序:
void main()
{
Init_Device();
LCD_Init();;
TI0 = 1; //声明TX0就绪,可以发送,这3句去掉加上都一样
TR0 = 1;
SBUF0 = 0x00;
while(1)
{
SBUF0= 48;
while (TI0== 0); //等待发送完毕
TI0= 0; //清发送中断标志TI0
if (recv)
{
ES0=0;
EA=0;
FillRect(0, 0, 8, 16, 0xFFFF);
DrawAChar(0, 0, 0x0, &test);
recv = 0;
ES0=1;
EA=1;
}
}
}
void UART0_Interrupt() interrupt 4 using 1
{
if (RI0 == 1)
{
RI0 = 0; // 清接收中断标志RI0
test = SBUF0;
SBUF0=test;
while (TI0== 0); //等待发送完毕
TI0= 0; //清发送中断标志TI0
recv = 1;
//NMEAHandler(SBUF0);
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|