📄 uart.txt
字号:
/*
函数功能:串口配置
入口: val_numb---串口号-----------2/3/4/5
val_bps----串口波特率-------1200bps/2400bps/4800bps/9600bps
val_bit----串口方式---------10(bit)/11(bit)
val_parity-奇偶校验位设定---0(even)/非0(odd)
出口: 1----设置成功
0----串口号出错
-1---串口方式出错
-2---波特率出错
注:目前支持串口方式为10位/11位;波特率支持1200bps,2400bps,4800bps,9600bps
*/
char CfgEU(unsigned char val_numb,unsigned int val_bps,unsigned char val_bit,unsigned char val_parity)
{
unsigned char temp1,temp2;
unsigned char xdata *point;//
temp2 = 0;
//==================串口号定位================================
if(val_numb > 5 || val_numb <2)
{
return 0; // 串口号找不到
}
point = 0x2820 + (8*(val_numb-2)); // TCONx
//==================波特率发生器模式设定======================
point++; // TMODx
*point |= 0x20; // 8-bit counter with auto-reload
//==================串口波特率设定============================
switch(val_bps)
{
// case 300:
// case 600:
case 1200: temp1 = 0xab;break;
case 2400: temp1 = 0xab;temp2 = 1;break;
case 4800: temp1 = 0xeb;break;
case 9600: temp1 = 0xeb;temp2 = 1;break;
// case 11520:
default: return -2;break; // 波特率不支持
}
point += 2; // TH1
*point = temp1;
point += 2; // TL1
*point = temp1;
//==================串口方式设定==============================
point++; // SCONx
if(val_bit == 11)
{
*point = 0xd0; //
InstPara |= bUrMo; // 串口模式有校验位
}
else if(val_bit == 10)
{
*point = 0x50; //
InstPara &= ~bUrMo; // 串口模式无校验位
}
else
{
return -1; // 串口方式不支持
}
//===================奇偶校验位设定============================
if(val_parity)
{
InstPara |= bPari;
}
else
{
InstPara &= ~bPari;
}
//===================波特率加倍设定============================
point -= 6; // TCONx
if(temp2)
{
*point |= 0x80; // SET SMOD,波特率加倍
}
//===================开启波特率发生器==========================
*point |= 0x22; // TR1 = 1 && T1M = 1;
return 1;
}
/*
函数功能:向对应串口发送一个字节数据
入口:val_data:希望发送的数据
val_numb:希望发送的串口号
出口:1----发送成功
0----串口号出错
*/
char SendUData(unsigned char val_data,unsigned char val_numb)
{
unsigned char xdata *point;
unsigned char temp;
if(val_numb > 5 || val_numb <2)
{
return 0; // 串口号找不到
}
temp = 8*(val_numb-2);
point = 0x2826 + temp; // SCONx
if(InstPara & bUrMo)
{
temp = InstPara & bPari;
temp >>= 3; // InstPara.bit3
ACC = val_data;
if(temp == P)
{
*point &= ~bPari; // SCONx.bit3
}
else
{
*point |= bPari;
}
}
point++;
*point = val_data;
return 1;
}
/*
函数功能:从串口接受一个字节数据
入口:串口号
出口:低8位为受到数据
高8位中0x01表示校验错误,0x02表示串口号出错
*/
int RecvUData(unsigned char val_numb)
{
unsigned char xdata *point;
unsigned char temp,temp_data;
if(val_numb > 5 || val_numb <2)
{
return 0x0200; // 串口号找不到
}
temp = 8*(val_numb-2);
point = 0x2827 + temp; // SBUFx
temp_data = *point;
if(InstPara & bUrMo)
{
point--; // SCONx
ACC = *point;
if(P)
{
if((*point & 0x08) != (InstPara & bPari))
{
return temp_data;
}
else
{
return (int)temp_data + 0x0100;
}
}
else
{
if((*point & 0x08) == (InstPara & bPari))
{
return temp_data;
}
else
{
return (int)temp_data + 0x0100;
}
}
}
return temp_data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -