📄 uart0.c
字号:
#include "C8051F020.h"
#include "string.h"
// Peripheral specific initialization functions,
// Called from the Init_Device() function
void Reset_Sources_Init()
{
WDTCN = 0xDE;
WDTCN = 0xAD;
}
void Timer2_Init()
{
CKCON = 0x20; //T2按系统时钟计数
T2CON = 0x30; //工作方式2
RCAP2L = 0x70; //波特率2400,重载值65536-11059200/2400/32=65536-144=65392=0xff70
RCAP2H = 0xFF;
TL2 = 0xFF;
TH2 = 0xFF;
T2CON|= 0x04; //启动T2
}
void UART0_Init()
{
SCON0 = 0x40; //方式1,波特率不加倍
}
void Port_IO_Init()
{
XBR0 = 0x04; //UART0配置端口,并使能交叉开关
XBR2 = 0x40;
}
void Oscillator_Init()
{
int i = 0;
OSCXCN = 0x77;
for (i = 0; i < 3000; i++); // Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0);
OSCICN = 0x0C;
}
void Interrupts_Init()
{
IE = 0x10; //开UART中断
}
// Initialization function for device,
// Call Init_Device() from your main program
char c[]={"China"}; //中断方式
char i=0,length;
void main(void)
{
//char c[]={"China"}; 查询方式
//char i=0,length;
Reset_Sources_Init();
Oscillator_Init();
Interrupts_Init();
Port_IO_Init();
Timer2_Init();
UART0_Init();
EA=1;
length=strlen(c);
SBUF0=c[i];
while(1);
//for(i=0;i<length;i++) 查询方式
//{
// SBUF0=c[i];
// while(!TI0);
// TI0=0;
//}
}
void interrupt_UART0 (void) interrupt 4
{
TI0=0;
if (i<length)
{
i++;
SBUF0=c[i];
}
else
{
EA=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -