娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年07月07日(星期一)

2020年07月07日 | 51單片機IO口模擬串口通訊3-中斷法

發布者:CW13236066525 來源: eefocus關鍵字:51單片機  IO口  模擬串口通訊  中斷法 手機看文章 掃描二維碼
隨時隨地手機看文章

硬件環境:STC89C52


軟件環境:IDE Keil uVision V4.10


編譯器 C51 V9.0


代碼如下:


/**********************************************

方法3:中斷法

硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1

波特率:9600

描述:所謂中斷法是指根據模擬出的波特率,每1位持續的時間的長短是通過定時器計數

      溢出產生中斷來延時的。

測試1:上電發送1個0x03的字符

測試2:上電先發送1個0x03的字符,然后等待接收,將收到的字符再發送出去(分別一個一個發送0x01,0x02,0x03,0x04,0x05)

測試3:上電等待接收,將收到的字符再發送出去(分別一個一個發送0x01,0x02,0x03,0x04,0x05)

結果:

測試1:錯誤!上電發送0x03,接到到0xE0

測試1:錯誤!上電發送0x00,接到到0x80

測試1:錯誤!上電發送0x01,接到到0xC0

測試1:錯誤!上電發送0x02,接到到0x81

測試2:錯誤!上電接收到錯誤字符0xE0,此后分別接收到0x01,0x02,0x03,0x04,0x05,均正確

測試3:錯誤!接收到第1個字符錯誤0x82,此后分別接收到0x02,0x03,0x04,0x05,均正確。第1個錯誤的字符有時會是0x81

注意:初始化時,要將定時器T0的溢出標志位清0

時間:2012.07.25 于單位

**********************************************/

#include "reg52.h"

#define uchar unsigned char

 

sbit P1_0 = 0x90;

sbit P1_1 = 0x91;

sbit P1_2 = 0x92;

 

#define RXD P1_0

#define TXD P1_1

#define WRDYN 44 //寫延時

#define RDDYN 43 //讀延時

 

void Delay2cp(unsigned char i);

void WaitTF0( void );

 

#define TM0_FLAG P1_2 //設傳輸標志位

 

//計數器及中斷初始化

void S2INI(void)

{

TMOD |=0x02; //計數器0,方式2

TH0=0xA0;                      //預值為256-96=140,十六進制A0

TL0=TH0;        

TR0=0;                          //在發送或接收才開始使用

TF0=0; 

ET0=1;                          //允許定時器0中斷

EA=1;                          //中斷允許總開關

}

 

//發送一個字符

void WByte(uchar input)

{

     //發送啟始位

     uchar i=8;

     TR0=1;

     TXD=(bit)0;

     WaitTF0();

 

     //發送8位數據位

     while(i--)

     {

         TXD=(bit)(input&0x01);   //先傳低位

         WaitTF0();

         input=input>>1;

     }

 

     //發送校驗位(無)

 

     //發送結束位

     TXD=(bit)1;

     WaitTF0();

     TR0=0;

}

 

//接收一個字符

uchar RByte()

{

uchar Output=0;

uchar i=8;

TR0=1;                          //啟動Timer0

TL0=TH0;

WaitTF0();                      //等過起始位

 

//發送8位數據位

while(i--)

{

Output >>=1;

if(RXD)

Output   |=0x80;    //先收低位

WaitTF0();                  //位間延時

}

while(!TM0_FLAG) if(RXD) break;

 

TR0=0;                          //停止Timer0

 

return Output;

}

 

//中斷1處理程序

void IntTimer0() interrupt 1

{

     TM0_FLAG=1;                  //設置標志位。

}

 

//查詢傳輸標志位

void WaitTF0( void )

{

while(!TM0_FLAG); 

TM0_FLAG=0;                  //清標志

}

 

//檢查是不是有起始位

bit StartBitOn()

{

return   (RXD==0); 

}

 

void main()

{

uchar ccc;

S2INI();

 

//2012.07. 25 李響添加

//計時器T0啟用之前要把溢出標志清0,計時滿TF0=1

//缺少如下的語句,將發生描述中的錯誤

TM0_FLAG=0;

 

//測試1

/*

WByte(0x03);

WByte(0x01);

WByte(0x02);

WByte(0x03);

WByte(0x04);

WByte(0x05);

while(1){;}

*/

 

//測試2

WByte(0x03);

while(1)

{

if(StartBitOn())

{

ccc=RByte();

WByte(ccc);

}

}

 

//測試3

/*

while(1)

{

if(StartBitOn())

{

ccc=RByte();

WByte(ccc);

}

}

*/

}

 


附解決問題過程中所抓的波形:


測試1:錯誤!上電發送0x00時的波形。

測試1:錯誤!上電發送0x00時接收到的數據。

分析:上電發送0x00,理應也收到數據0x00,波形的形狀也應該如上圖所示,但接收到的數據為0x80則顯示這波形是錯誤的。且往下看。


----------------------------------------------------------------------------------------------------------------------------------------


測試1:錯誤!上電發送0x01時的波形。

測試1:錯誤!上電發送0x01時接收到的數據。

分析:波形錯誤,接收到的數據也錯誤。起始位為低電平,理應持續1位的時間,但可以看出,起始位保持很短的時間就跳為高電平了。說明起始位到來以后,相應的延時時間那里出了問題。


正確的0x01的波形如下圖所示: 

----------------------------------------------------------------------------------------------------------------------------------------


測試1:錯誤!上電發送0x02時的波形。

測試1:錯誤!上電發送0x02時接收到的數據。

正確的0x02的波形如下圖所示: 

----------------------------------------------------------------------------------------------------------------------------------------


測試1:錯誤!上電發送0x03時的TXD的波形。

上電發送0x03時接收到的數據。

正確的0x03的波形如下:

----------------------------------------------------------------------------------------------------------------------------------------


測試2:錯誤!上電本應先接到一個0x03的字符,但實際接收到的為0xE0,此后收發均正確。

測試2:錯誤!上電本應先接到一個0x03的字符,但實際接收到的為0xE0,此后收發均正確。

此圖僅用于證明除第一個字符錯誤外,此后其它接收到的字符均正確。

----------------------------------------------------------------------------------------------------------------------------------------


測試3:錯誤!先手動發送第1個字符0x01,此時接收到的錯誤數據81,此時的波形

接收到的錯誤數據0x81

上電后,依次發送0x01,0x02,0x03,0x04,0x05,接收到第1個字符0x81錯誤,后4個字符正確

上邊的那個實驗,有的時候偶爾會出現第1個字符是0x82的錯誤數據。

----------------------------------------------------------------------------------------------------------------------------------------


以下兩圖為0x04和0x05的正確的波形


0x04時的波形

0x05時的波形

----------------------------------------------------------------------------------------------------------------------------------------


分析:可以看出,起始位持續的時間不正確。


原因為:中斷標志位上電后默認為1,高電平,需要手動將其清0。本程序利用了P1^2做為中斷標志位,P1^2上電后為高電平。在程序中,S2INI();之后,添加TM0_FLAG=0;解決此問題。

關鍵字:51單片機  IO口  模擬串口通訊  中斷法 引用地址:51單片機IO口模擬串口通訊3-中斷法

上一篇:51單片機IO口模擬串口通訊4
下一篇:51單片機IO口模擬串口通訊2-計數法

推薦閱讀

這是一款身兼數種不同功能的口紅,由韓國SK電訊推廣的一款女性準備的口紅,當遇到危險時,用戶可以打開類似唇膏的保護套,激活這款名為“我的英雄”(My Hero)的設備。它將發出一個90分貝的警報,并且還能向警方發送一條韓國緊急號碼112的短信。??另外,在發出短信后,它還將在接下來的三分鐘內開始錄音。用戶還可以配置該設備,向至多5個朋友發送短信...
富士康可以說是我國有頭有臉的工廠了,它以流水線的生產運作方式而著名,在國內的許多工廠里非常有名。富士康大多負責一些加工產品的業務,在前些年與美國的蘋果手機平臺合作頻繁。隨著蘋果銷售量的部分增加,富士康的業務拓展也越來越大,兩者可以說是形成了互利共贏的局面。 雖然富士康與蘋果公司的合作很多,但是并沒有涉及到一些核心技術和高科技...
近幾年,降壓-升壓型充電器變得越來越流行,因為它能夠從幾乎任何輸入源為電池充電,無論輸入電壓是高于或低于電池電壓。 USB Type-C被廣泛采用的一大關鍵性優勢是它被認為是目前實現通用適配器和減少相應電子廢棄物減少理想方案。雖然USB Type-C接口是統一的,但是不同適配器的額定功率和電壓仍然有很大的差異,這里面包含了傳統的5 V USB適配器和能...
[導讀]存儲深度(Record Length)也稱記錄長度,它表示示波器可以保存的采樣點的個數。存儲深度如果為“20000個采樣點”則一般在技術指標中會寫作“2Mpts”(這里的pts可以理解為“points”存儲深度(Record Length)也稱記錄長度,它表示示波器可以保存的采樣點的個數。存儲深度如果為“20000個采樣點”則一般在技術指標中會寫作“2Mpts”(這里的pts可...

史海拾趣

問答坊 | AI 解惑

如何從makefile創建工程文件,比如wpj工程?

我們經常會從工程文件創建makefile文件,但也會遇到這樣的需求,得到的第三方源代碼(正版)只有makefile文件,而沒有對應平臺的工程文件。 這里有幾種情況: 第一:單個工程的轉換,可以找一個現成的wpj文件,對照著去修改,試試也就差不多了。 ...…

查看全部問答∨

wavecom來電應答的問題

最近做wavecom模塊連單片機的項目,要做來電自動回復短信的模塊,可是用at+clip=1的at命令后,打電話返回的是這樣的字符串 +CLIP: \"618935\",129,,,\"8090B866535CF00032FFFF\" 這個是wavecom返回的數據,18935是我的號碼的一部分,其他的就不 ...…

查看全部問答∨

高手請幫我解釋一下下面程序的意義,y

  HANDLE hevt = OpenEvent(EVENT_ALL_ACCESS, FALSE,                     TEXT(\"SYSTEM/ShellAPIReady\"));   ASSERT(NULL != hevt);  & ...…

查看全部問答∨

求助. VS 2005 和 WINCE 怎么也連接不上..

我是一個新手, 按照這個文章配置 的 , 但是 只成功了一次,  以后就一直說 Active Sync 沒有安裝, 但是這個文章的說法是不使用  Active Sync 的., 不知道是不是有什么關鍵或者比較怪的地方,我沒有注意到, 請各位大蝦賜教. http ...…

查看全部問答∨

請教版主,STM8L152R6SWIM與BEEP共用

                                 請教版主,STM8L152R6 SWIM與BEEP共用,使用BEEP功能后調試會不會不方便?還有,LCD SEG腳位不連續使用可以不?因 ...…

查看全部問答∨

看看多少進復賽的

本帖最后由 paulhyde 于 2014-9-15 02:54 編輯 呵呵,加油  …

查看全部問答∨

用萬用表可以測天線是否發射信號了嗎?

我在用NRF905做一個無線通信的模塊時,但是始終收不到信號。我身邊只有萬用表,沒有頻譜儀之類的,大伙覺得用萬用表可以測量天線上面是否有信號嗎  …

查看全部問答∨

求USB攝像頭電路一個????急急急

求USB攝像頭一個電路,有PCB最好!!! 我的郵箱是xubbwd@gmail.com 非常的感謝!…

查看全部問答∨

求助 DSP28335 外擴FLASH的問題

前段時間做了1塊DSP28335的板卡。基本功能都已經實現,程序在內部FLASH運行正常。 目前遇到新的問題:     后期有可能程序比較大,內部FLASH存放不下,于是通過XZCS7外擴了1片FLASH(SST39VF1602B-70)     目前想測試將程 ...…

查看全部問答∨

為什么在程序中加了math頭文件后,程序還是識別不了里面的庫函數,例如sinf。急急....

本人是新手,接觸VxWorks時間不長。本人在Tornado的開發環境中編譯沒有任何問題。單下載到DSP上就報錯 說無法識別math里面的庫函數。程序中也加了頭文件,不知問題出在哪里,還請各位大神幫幫忙。很急很急。…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 浦县| 莎车县| 江门市| 哈密市| 景德镇市| 康定县| 喜德县| 永年县| 冕宁县| 紫阳县| 于都县| 三明市| 万源市| 广南县| 霍林郭勒市| 博爱县| 仪陇县| 仁布县| 静宁县| 海淀区| 邯郸县| 石嘴山市| 福贡县| 卢龙县| 乌海市| 怀远县| 依安县| 临江市| 桃源县| 东宁县| 德化县| 金湖县| 桓仁| 龙里县| 德格县| 永安市| 体育| 固阳县| 郁南县| 太和县| 阿图什市|