使用波特率為9600bpS,晶振頻率為11.0592MHz,通過計(jì)算可知,串口的每位需延時(shí)0.104ms,通過執(zhí)行96個(gè)指令周期可能完成0.104ms的延時(shí)。與其相關(guān)的程序在結(jié)構(gòu)上可分為:IO口定義、串口發(fā)送函數(shù)、串口接收函數(shù)、延時(shí)函數(shù)。下面依次介紹各個(gè)部分。
1.IO口定義程序等
這部分程序主要包括基本的IO口定義、全局變量定義、頭文件包含、函數(shù)聲明等。為后面程序提供編程基本。其程序代碼如下:
sbit RXD1 = 0x90;
sbit TXD1 = 0x91;
#define WR_delay 44 //寫延時(shí)
#define RD_delay 43 //讀延時(shí)
2.串口發(fā)送函數(shù)
串口發(fā)送函數(shù)首先發(fā)送起始位,再發(fā)送數(shù)據(jù),根據(jù)通信協(xié)議選擇是否發(fā)送校驗(yàn)位。最后發(fā)送停止位。延時(shí)法模擬串口發(fā)送流程如圖所示。
其程序代碼如下:
#define Check_bit_switch_on_off 0//不使用校驗(yàn)位
uchar Check_bit;
//往串口寫一個(gè)字節(jié)
void Send_Byte(uchar input,bit Check_bit)
{
uchar i=8;
TXD=(bit)0; //發(fā)送啟始位
Delay(39);
//發(fā)送8位數(shù)據(jù)位
while(i--)
{
TXD=(bit)(input&0x01); //先傳低位
Delay(36);
input=input >>1;
}
//發(fā)送校驗(yàn)位(無)
#if Check_bit_switch_on_off
{
TXD1=(bit)(Check_bit); //發(fā)送校驗(yàn)位
Delay(36);
}
#else
Check_bit = Check_bit;
#endif
TXD1=(bit)1; //發(fā)送結(jié)束 位
Delay(46);
}
3.串口接收函數(shù)
串口接收函數(shù)首先等待起始位,然后接收數(shù)據(jù),根據(jù)通信協(xié)議選擇是否需要接收校驗(yàn)位。最后等待停止位。延時(shí)法模擬串口接收流程如圖所示。
其程序代碼如下:
//從串口讀一個(gè)字節(jié)
uchar Revice_Byte(void)
{
uchar Output=0;
uchar i=8;
uchar temp=RD_delay;
//發(fā)送8位數(shù)據(jù)位
Delay(RD_delay *1.5); //此處注意,等過起始位
while(i--)
{
Output > >=1;
if(RXD1)
Output |=0x80; //先收低位
Delay(35); //(96-26)/2,循環(huán)共
//占用26個(gè)指令周期
}
//接收校驗(yàn)位
#if Check_bit_switch_on_off
(Check_bit)=TXD; //接收校驗(yàn)位
Delay(35);
#endif
while(--temp) //在指定的
//時(shí)間內(nèi)搜尋結(jié)束位。
{
Delay(1);
if(RXD1)
break; //收到結(jié)束位便退出
}
return Output;
}
用延時(shí)方式可以模擬多個(gè)個(gè)串口,但是使用延時(shí)方式模擬的串口在接收上存在一定的難度,主要是采樣定位要求嚴(yán)格,另外還必須知道每條語句的指令周期數(shù)。在調(diào)試過程中,讀者可以借助編譯軟件通過反匯編的方式查看編譯后的匯編語句,已確定你所使用的C語句的執(zhí)行時(shí)間。
-
晶振
+關(guān)注
關(guān)注
34文章
3197瀏覽量
69553 -
串口
+關(guān)注
關(guān)注
14文章
1582瀏覽量
78635 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4369瀏覽量
64187 -
波特率
+關(guān)注
關(guān)注
2文章
310瀏覽量
34723 -
IO口
+關(guān)注
關(guān)注
3文章
170瀏覽量
24737
發(fā)布評(píng)論請(qǐng)先 登錄
有關(guān)串口通訊延時(shí)問題的討論
串口通信延時(shí)發(fā)送問題or調(diào)用延時(shí)問題
串口延時(shí)問題
Labview串口讀寫的延時(shí)問題
單片機(jī)IO 口模擬串口通信低到延時(shí)法
為什么4432無線串口模塊有很大延時(shí)?
HL配套C實(shí)驗(yàn)例程100例之59秒計(jì)時(shí)器軟件延時(shí)法
一文深度了解串口WiFi模塊作用,串口WiFi模塊的應(yīng)用場(chǎng)景
你不知道單片機(jī)延時(shí)的種種情況

無線串口模塊的概念與選型要點(diǎn)
串口模塊選型要點(diǎn)

什么是無線串口模塊?無線串口模塊怎么用?

評(píng)論