📄 c8051f022uart.c
字号:
//----------------------------------------------------------------------------------
//串口0函数
//----------------------------------------------------------------------------------
void OutPutUART0(uchar *p,uint len) //输出
{ uint i;
for(i=0;i<len;i++)
{SBUF0=p[i];
while(TI0==0);
TI0=0;
}
}
void INPUTUART0()interrupt 4 using 1
{
if(RI0)
{
RI0=0;
INbuf0[_buf0num]=SBUF0;
_buf0num++;
if(_buf0num>300)_buf0num=0x00;
}
}
/*--------------------------------------
void Svr2320() interrupt 4 using 1
{
if(RI0){
RI0=0;
R232Buf0[pRecBuf0]=SBUF0;
pRecBuf0++;
if(pRecBuf0>R232MEMMAX) pRecBuf0=0x0;}
}
----------------------------------------*/
void UART0_Init (long baud) //串口0初始化
{
SCON0 = 0X50;
T2CON = 0X30;
switch(baud){
case 4800 : RCAP2 = -(_SYSCLK/4800/32);break;
case 9600 : RCAP2 = -(_SYSCLK/9600/32);break;
case 14400 : RCAP2 = -(_SYSCLK/9600/32);break;
case 19200 : RCAP2 = -(_SYSCLK/19200/32);break;
case 28400 : RCAP2 = -(_SYSCLK/28400/32);break;
case 57600 : RCAP2 = -(_SYSCLK/57600/32);break;
case 115200 : RCAP2 = -(_SYSCLK/115200/32);break;
}
T2 = RCAP2;
CKCON |= 0X20;
PCON |= 0X80;
TR2=1;
EA=1;
ES0=1;
// EIE2 |= 0X40;
}
//----------------------------------------------------------------------------------
//串口1函数
//----------------------------------------------------------------------------------
void UART1_Init (long baud) //串口1初始化
{
SCON1 = 0X50;
T4CON = 0X30;
switch(baud){
case 4800 : RCAP4 = -(_SYSCLK/4800/32);break;
case 9600 : RCAP4 = -(_SYSCLK/9600/32);break;
case 14400 : RCAP4 = -(_SYSCLK/9600/32);break;
case 19200 : RCAP4 = -(_SYSCLK/19200/32);break;
case 28400 : RCAP4 = -(_SYSCLK/28400/32);break;
case 57600 : RCAP4 = -(_SYSCLK/57600/32);break;
case 115200 : RCAP4 = -(_SYSCLK/115200/32);break;
}
T4 = RCAP4;
CKCON |= 0X40;
PCON |= 0X10;
T4CON |= 0X04;
EIE2 |= 0X40;
}
void OutPut(uchar *p,uint len) //输出
{ uint i;
for(i=0;i<len;i++)
{SBUF1=p[i];
while((SCON1&0x02)==0);
SCON1&=0xfd;
}
}
/*-----------------------------------
void Svr232() interrupt 20 using 3
{
if(SCON1&0x01){
SCON1&=0xfe;
R232Buf[pRecBuf]=SBUF1;
pRecBuf++;
if(pRecBuf>0X424) pRecBuf=0x0;}
}
------------------------------------*/
//-----------------------------------------------------------------------------------
//系统晶振和端口配置
//-----------------------------------------------------------------------------------
void SYSCLK_INIT0 (void)
{
int i; // 延时计数器
OSCXCN = 0x67; // 开启外部振荡器3.579MHz晶体
for (i=0; i < 256; i++) ; // 等待振荡器启振
while (!(OSCXCN & 0x80)) ; // 等待晶体振荡器稳定
OSCICN = 0x88; // 选择外部振荡器为系统时钟源并允许丢失时钟检测器
}
void PORT_INIT0(void)
{
XBR0=0x04;
XBR1=0x00;
XBR2=0x46;
P0MDOUT=0x0;
P1MDOUT=0x0;
P2MDOUT=0x0;
P3MDOUT=0x0;
P74OUT|=0xcc;
p20=1;
p21=1;
p22=1;
p23=1;
// p36=0;
}
//----------------------------------------------------------------------------------
//延时
//----------------------------------------------------------------------------------
void Delay(uchar i)
{uint k=5000;
for(;i>0;i--)
while(k>0) k--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -