两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

本講我們主要通過實驗操作來熟悉ASCII碼與通信數(shù)據(jù)之間的關(guān)系。

我們現(xiàn)在實現(xiàn)這樣的功能,在電腦端上發(fā)送“十六進(jìn)制”模式或“字符格式”模式的字節(jié)給單片機,數(shù)碼管則顯示出這些數(shù)據(jù)的十進(jìn)制值,然后觀察數(shù)碼管上顯示的數(shù)值與發(fā)送數(shù)據(jù)的關(guān)系。


1.代碼

#include <reg52.h> 
#include <function.h>//詳見第六章第8講
#include <timer.h>   //詳見第八章第11講
  
u8 RXDBUF;//緩存接收到的數(shù)據(jù)
void ConfigUART(u16 baud)
{
    SCON  = 0x50;  //配置串口為模式1
    TMOD &= 0x0F;  //清零T1的控制位
    TMOD |= 0x20;  //配置T1為模式2
    TH1 = 256 - (11059200/12/32)/baud;//計算T1重載值
    TL1 = TH1;     //初值等于重載值
    ET1 = 0;       //禁止T1中斷
    ES  = 1;       //使能串口中斷
    TR1 = 1;       //啟動T1
}

void main()
{  
    LED_Init();        //初始化LED硬件模塊
    EA = 1;            //閉合總中斷開關(guān)
    ConfigUART(9600);
    TIM0_Init(1000,0); //定時1ms,用來刷新數(shù)碼管顯示,定時精度要求不高可不微調(diào)

    while(1)
    {      
        ShowNumber(RXDBUF);
    } 
}

void TIM0_IRQHandler()  interrupt 1   
{
    TH0 = T0RH;  //重新加載重載值
    TL0 = T0RL;
    SEG_Scan();
}
 
void InterruptUART() interrupt 4
{
    if (RI)             //RI等于1就滿足if條件語句,意為接收到字節(jié)
    {
        RI = 0;         //手動清零接收中斷標(biāo)志位
        RXDBUF = SBUF;  //接收到的數(shù)據(jù)保存到接收緩存變量中
        SBUF = RXDBUF;  //接收到的數(shù)據(jù)又直接發(fā)回,叫作-"echo",
                        //用以提示用戶輸入的信息是否已正確接收
    }
    if (TI)             //TI等于1滿足if條件語句,意為字節(jié)發(fā)送完畢
    {
        TI = 0;         //手動清零發(fā)送中斷標(biāo)志位
    }
}


2.實驗觀察分析

在發(fā)送窗口和接收窗口都選“十六進(jìn)制”模式,電腦端發(fā)送一個8的數(shù)據(jù)(也就是0x08)的字節(jié)給單片機,然后單片機會發(fā)送回來這個數(shù)據(jù)給電腦端顯示在窗口中。

ascii1

此時開發(fā)板上的數(shù)碼管顯示的是8。


接著我們在電腦端發(fā)送的是10,這是0x10,不要與十進(jìn)制的10混淆。

ascii2

數(shù)碼管顯示的是16,所以發(fā)送的數(shù)據(jù)用十進(jìn)制顯示在數(shù)碼管上是正確的。


接著我們切換到“字符格式”模式下發(fā)送字符“A”。

ascii3

數(shù)碼管顯示的是65,電腦端接收到單片機發(fā)送回來的數(shù)據(jù)是0x41,也就是十進(jìn)制下的65。

找到ASCII表,字符“A”對應(yīng)的數(shù)剛好是65。


如果把電腦端接收窗口改為“字符格式”顯示,那么顯示的內(nèi)容就跟發(fā)送窗口的字符一樣了。

ascii4

剩下的留給大家自己思考。


3.注意

如果我們在電腦端發(fā)送窗口輸入一串字符比如“ABCD123”點擊發(fā)送給單片機,如果我們看到的是下面這個現(xiàn)象

ascii5

那么結(jié)合以下的程序代碼分析

RXDBUF = SBUF;

SBUF = RXDBUF;

也就是電腦端先發(fā)送字符“A”給單片機,單片機馬上發(fā)送回字符“A”給電腦端,接著電腦端又發(fā)送字符“B”,如此執(zhí)行下去,直到發(fā)送完最后一個字符“3”。

這些發(fā)送和接收過程是非常快的,因為單片機接收緩存區(qū)SBUF每次只能暫存一個字節(jié),所以前面6個字節(jié)都會很快被替換,導(dǎo)致數(shù)碼管在一瞬間里只顯示字符“3”的ASCII碼值51。

點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)