www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] //******************************************************************//@FileName: UART51.C//@Controller AT89S52//@Compiler Keil//@Hardware: 一個(gè)普通的I/O,一個(gè)定時(shí)器T0;和TXD//Descripti

//******************************************************************
//@FileName: UART51.C
//@Controller AT89S52
//@Compiler Keil

//@Hardware: 一個(gè)普通的I/O,一個(gè)定時(shí)器T0;和TXD
//Description: 該程序?yàn)榻邮粘绦?,接收發(fā)送的數(shù)據(jù),并通過串口輸出顯示,
// 判斷是否接收到正確數(shù)據(jù),接收程序主要在于時(shí)間的控制,
// 說白了,就是模擬串口接收數(shù)據(jù)
// 發(fā)送程序通過TXD直接發(fā)送數(shù)據(jù),將要發(fā)出的數(shù)據(jù)與38KHz的方波
// 通過兩個(gè)9012三極管處理,得到要發(fā)出的波形,再通過發(fā)射管發(fā)射
//@Data 2010-11-14
//Version 1.0
//*****************************************************************
#include //頭文件


#define ubyte unsigned char //宏定義
#define uword unsigned int
#define Rx_Lg 16 //定義要接收數(shù)據(jù)的個(gè)數(shù)

sbit HWRx=P0^0; //紅外接收引腳聲明

bit State1,State2; //用于暫存紅外引腳的前兩個(gè)狀態(tài)


ubyte Count=0; //定時(shí)器計(jì)數(shù)值
ubyte Date_Rx=0; //接收數(shù)據(jù)
ubyte Bit8_Rx=0; //接收的8位
ubyte Table_Cnt=0; //緩沖區(qū)變量值
ubyte Flag=0,Flag8=0; //16位數(shù)據(jù)接收完成標(biāo)志位,和一個(gè)數(shù)據(jù)接收完成標(biāo)志位

ubyte Table_Rx[16]={0}; //接收數(shù)據(jù)的緩沖區(qū)

//****************************************************************************
//@Function: Data8_Rx()
//@Description 接收一個(gè)八位數(shù)據(jù)
//@ReturnValue 無
//@Parameters 無
//@Data 2010-11-14
//Version 1.0
//****************************************************************************
void Data8_Rx() //接收8位數(shù)據(jù)的子函數(shù)
{
  if((Bit8_Rx>=1)&&(Bit8_Rx<=8)) //判斷接收的數(shù)據(jù)8位,是否全部接收完成
  {
   Date_Rx>>=1; //左移一位
if(HWRx==1) //判斷紅外接收引腳的狀態(tài)
Date_Rx|=0x80; //是高,則將最高位置1
Bit8_Rx--; //減一
if(Bit8_Rx==0) //八位數(shù)據(jù)全部接收,置標(biāo)志位
Flag8=1;
}
}

//****************************************************************************
//@Function: Init_Uart()
//@Description 串口初始化,波特率為9600Bit/s
//@ReturnValue 無
//@Parameters 無
//@Data 2010-11-14
//Version 1.0
//****************************************************************************
void Init_Uart() //產(chǎn)生波特率的初始化函數(shù)
{
TMOD|=0x20; //定時(shí)器T1工作在方式2
SCON=0x50; //開ES,工作在方式1
TH1=0xfd; //產(chǎn)生9600
TL1=0xfd;
TR1=1; //啟動(dòng)定時(shí)器
}

//****************************************************************************
//@Function: main()
//@Description 主函數(shù)
//@ReturnValue 無
//@Parameters 無
//@Data 2010-11-14
//Version 1.0
//****************************************************************************
void main()
{
ubyte i=0; //循環(huán)變量

TMOD=0x01; //定時(shí)器T0工作在方式1
TH0=0XFF; //定時(shí)260us,按理應(yīng)該是1/1200/3=278us
TL0=0X0F;
EA=1; //開總控
ET0=1; //打開定時(shí)器
TR0=1; //啟動(dòng)定時(shí)器
Init_Uart(); //調(diào)用串口初始化函數(shù)
while(1) //等待中斷
{ }
}

//****************************************************************************
//@Function: Time0()
//@Description 定時(shí)器T0的中斷函數(shù)
//@ReturnValue 無
//@Parameters 無
//@Data 2010-11-14
//Version 1.0
//****************************************************************************
void Time0() interrupt 1 //定時(shí)器中斷函數(shù)
{
ubyte i=0; //定義一個(gè)變量
Count++; //計(jì)算進(jìn)入中斷的次數(shù)
TH0=0XFF; //重裝初值
TL0=0X0F;

if((Count==1)&&(Bit8_Rx==0)) //判斷數(shù)據(jù)是否發(fā)送完成
{
Count=0; //是,則計(jì)數(shù)變量清零
State2=State1; //賦紅外引腳的狀態(tài)
State1=HWRx;
if((HWRx==0)&&(State1==0)&&(State2==1)) //判斷是否有有效數(shù)據(jù),

即檢測(cè)到起始位
Bit8_Rx=8; //是,賦值,準(zhǔn)備接收
}

if((Count>=3)&&((Bit8_Rx!=0))) //判斷數(shù)據(jù)是否接收完成
{
Count=0; //沒有,清零計(jì)數(shù)變量
Data8_Rx(); //接收該位
}
if((Flag8==1)&&(Bit8_Rx==0)&&(HWRx==1)) //判斷該數(shù)據(jù)的8位是否全部

接收完,并且檢測(cè)到停止位
{
Flag8=0; //把8位數(shù)據(jù)接收完的標(biāo)志位清零
Table_Rx[Table_Cnt]=Date_Rx; //暫存該數(shù)據(jù)
Table_Cnt++; //變量加,準(zhǔn)備下一個(gè)
if(Table_Cnt>=Rx_Lg) //判斷16個(gè)數(shù)據(jù)是否接收完成
{
Table_Cnt=0; //是,則清零
Flag=1; //置標(biāo)志位
}
}

if(Flag==1) //判斷所有數(shù)據(jù)接收完成
{
Flag=0; //是,則該標(biāo)志位清零
for(i=0;i<16;i++) //通過串口,發(fā)送該16個(gè)數(shù)據(jù)
{
SBUF=Table_Rx[i]; //發(fā)送緩沖區(qū)數(shù)據(jù)
while(!TI); //等待發(fā)送完成
TI=0; //發(fā)送完成,清標(biāo)志位
}
}
}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在這篇文章中,小編將對(duì)PLC的相關(guān)內(nèi)容和情況加以介紹以幫助大家增進(jìn)對(duì)它的了解程度,和小編一起來閱讀以下內(nèi)容吧。

關(guān)鍵字: PLC 模塊化 程序

串口全稱是串行接口(Serial Interface),串口通訊指僅用一對(duì)傳輸線就能將數(shù)據(jù)以比特位進(jìn)行傳輸?shù)囊环N通訊方式。盡管串口通訊必按字節(jié)傳輸?shù)牟⑿型ㄐ怕?,但是串口可以在僅用兩根線的情況下完成數(shù)據(jù)傳輸,大大降低了成本...

關(guān)鍵字: 串口 UART

隨著電腦技術(shù)的發(fā)展,一些老的設(shè)備在新電腦上不能被使用,主要原因是不管是臺(tái)式電腦,還是筆記本電腦,都很少有串口接口,也就是我們常說的COM口。好在這些設(shè)備都有USB接口,不妨通過接口轉(zhuǎn)換的方式,使我們的設(shè)備在新電腦上重新被...

關(guān)鍵字: 串口 USB

串口:串口是一個(gè)泛稱,UART、TTL、RS232、RS485都遵循類似的通信時(shí)序協(xié)議,因此都被通稱為串口。串口通訊應(yīng)用是工控人必須掌握的一個(gè)技能,幾乎在每一個(gè)項(xiàng)目中都會(huì)用到,今天我們就來詳細(xì)比較一下它們究竟有何區(qū)別。

關(guān)鍵字: 串口 協(xié)議

在嵌入式開發(fā)過程中,許多系統(tǒng)通常使用串口驅(qū)動(dòng)來滿足通信要求,但在實(shí)際應(yīng)用中,使用SPI通信方式會(huì)更加高效和快捷。

關(guān)鍵字: 串口 驅(qū)動(dòng)

對(duì)程序進(jìn)行優(yōu)化,通常是指優(yōu)化程序代碼或程序執(zhí)行速度。優(yōu)化代碼和優(yōu)化速度實(shí)際上是一個(gè)予盾的統(tǒng)一。一般是優(yōu)化了代碼的尺寸,就會(huì)帶來執(zhí)行時(shí)間的增加;如果優(yōu)化了程序的執(zhí)行速度,通常會(huì)帶來代碼增加的副作用。很難魚與熊掌兼得,只能在...

關(guān)鍵字: 單片機(jī) 程序

串口WiFi模塊作為新一代嵌入式WiFi模塊,因其體積小、功耗低的特點(diǎn),廣泛應(yīng)用于物聯(lián)網(wǎng)、智能家居等領(lǐng)域。

關(guān)鍵字: 串口 WiFi模塊 嵌入式

在現(xiàn)代嵌入式系統(tǒng)設(shè)計(jì)中,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門陣列)的靈活性和可重構(gòu)性使其成為許多應(yīng)用的理想選擇。而在FPGA的開發(fā)和部署過程中,如何實(shí)現(xiàn)遠(yuǎn)程升級(jí)和故障恢復(fù)成為了一個(gè)重要議題。本文將詳細(xì)探討如何通過BPI FLASH實(shí)現(xiàn)...

關(guān)鍵字: FPGA 串口 MultiBoot 嵌入式系統(tǒng)

在現(xiàn)代電子設(shè)計(jì)中,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門陣列)因其高度的靈活性和可重構(gòu)性,成為眾多領(lǐng)域的核心組件。特別是在需要?jiǎng)討B(tài)更新或調(diào)整系統(tǒng)功能的場(chǎng)景中,F(xiàn)PGA的串口升級(jí)和MultiBoot功能顯得尤為重要。本文將深入探討FPGA...

關(guān)鍵字: FPGA 串口 MultiBoot

之前有個(gè)同事因?yàn)橛么诓樵兎绞桨l(fā)送數(shù)據(jù),被我說了一頓,明明有DMA資源,竟然放著不用,對(duì)于魚鷹這種性能強(qiáng)迫癥來說,肯定無法忍受,所以當(dāng)時(shí)就和他說,有時(shí)間你把它改一下。誰知道過了好幾個(gè)月他才有時(shí)間弄這個(gè),然后還是出了問題,...

關(guān)鍵字: DMA 串口
關(guān)閉