📄 iouart.c
字号:
/*********************************************************
IO口模拟232测试程序,仿单片机Keil Cx51应用开发技术中的程序
主要的功能是在利用串口调试工具发送一个8bit的数据,而后单片机
接收后把这个数据发送给模拟串口
*********************************************************/
#include "STC12C2052AD.H"
sbit Tx_Pin=P3^7;//发送端口
sbit Rx_Pin=P1^0;//接收端口
sbit Baud0=P1^6;
sbit Baud1=P1^7;//波特率选择
bit Flag=0;//若标志位为1,则表示串口已经过了一位的时间
#define unchar unsigned char
#define unint unsigned int
unchar HighTime;
unchar LowTime;
/********************************************************/
bit CheckAvailStartBit()//检测开始位
{
return(Rx_Pin==0);//若为0,则返回1,即有数据传送
//若为1,则返回0,即没有接收到数据
}
/********************************************************/
void Timer0() interrupt 1//定时器中断处理
{
Flag=1;
TL0=LowTime;
TH0=HighTime;
}
/********************************************************/
unchar ReceiveByte()//接收字节
{
unchar Data;
unint i;
Data=0x00;
TR0=1;//开始定时
while(Flag==0);
Flag=0;//开始位不采样
for(i=0;i<=7;i++)
{
Data>>=1;//移位处理
if(Rx_Pin==1)//为1的话,则进行处理
{
Data|=0x80;
}
while(Flag==0);//若Flag为0,则时间还未到,等待
//若Flag为1,则一位的时间已经到,准备接收数据
Flag=0;
}
while(Flag==0);//对第9位停止位的处理
Flag=0;
while(Flag==0)
{
if(Rx_Pin)//检测到停止位,退出
{
break;
}
}
TR0=0;//关闭定时器
return(Data);//返回数据
}
/********************************************************/
void SendByte(unchar Data)
{
unint i;
TR0=1;//开始定时
Tx_Pin=0;//起始位,0
while(Flag==0);
Flag=0;
for(i=0;i<=7;i++)
{
if(Data&0x01)
{
Tx_Pin=1;
}
else
{
Tx_Pin=0;
}
Data>>=1;
while(Flag==0);
Flag=0;
}
Tx_Pin=1;//结束位
TR0=0;//关闭定时器
}
/********************************************************/
void main()
{
unchar temp;
TMOD=0x01;//定时器0为模式1,自动重装载
TR0=0;
PCON=0x00;
if(Baud1==1)
{
if(Baud0==1)
{
HighTime=0xFF;
LowTime=0xD0;//在这个分频下波特率为19200
}
else
{
HighTime=0xFF;
LowTime=0xA0;//在这个分频下波特率为9600,也是默认的波特率
}
}
else
{
if(Baud0==0)
{
HighTime=0xFF;
LowTime=0x40;//在这个分频下波特率为4800
}
else
{
HighTime=0xFE;
LowTime=0x80;//在这个分频下波特率为2400
}
}
/********************测试*********************************/
HighTime=0xFF;
LowTime=0xA0;//在这个分频下波特率为9600,也是默认的波特率
/*********************************************************/
TH0=HighTime;
TL0=LowTime;
ET0=1;//开定时器0的中断
EA=1;//开总中断
for(;;)
{
if(CheckAvailStartBit())//模拟接收口检测到起始位
{
temp=ReceiveByte();//接收数据
SendByte(temp);//将接收到的数据发送给PC
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -