?? 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 + -