欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機串口通信控制led亮滅程序 [打印本頁]

作者: momoli    時間: 2021-7-18 10:06
標題: 單片機串口通信控制led亮滅程序
/*現象:在串口調試助手中選擇字符顯示與字符發送。發送字符1,則led1亮;發送字符0,led1滅。
注意:發送后將發送區的字符清除,否則會繼續再次發送。*/
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
u8 receivedata;//將發送的字符保存到一個變量中
sbit led=P2^0;
void UsartInit()
{
        SCON=0X50;
        TMOD=0X20;
        PCON=0X80;
        TH1=0XF4;
        TL1=0XF4;
        ES=1;
        EA=1;
        TR1=1;
}
void work()
{
        if(receivedata=='1')
        {
                led=0;
        }
        else if(receivedata=='0')
        {
                led=1;
        }
}
void main()
{
        UsartInit();//串口初始化
        while(1)
        {
                work();
               
        }
        
}

void Usart() interrupt 4
{
        
        receivedata=SBUF;
        RI=0;
        SBUF=receivedata;
        while(!TI)
        TI=0;
}



作者: 祥ZD    時間: 2022-6-3 18:17
我那個用的STC-ISP的串口助手,用仿真畫的,但是出現問題,就是我不管發1還是0,都不對,我換if   else語句之后,一直是else里邊運行,說明我串口數據傳輸亂了,波特率也是9600,為之奈何
作者: 祥ZD    時間: 2022-6-3 20:40
PCON=0X80; 把這一句去掉就可以用了,。。。為什么要寫這一句
作者: 新昌小徐    時間: 2022-6-3 23:31
祥ZD 發表于 2022-6-3 20:40
PCON=0X80; 把這一句去掉就可以用了,。。。為什么要寫這一句

PCON的最高位是 1的話,波特率倍增。
你算計數器1的重載值是這樣算的,256-晶振頻率/12/16/2/波特率
如果PCON=0X80,就是最高位是1,啟用波特率倍增,計算公式就變成了256-晶振頻率/12/16
原理如下,定時器1給串口模塊提供節拍,定時器計數頻率等于晶振頻率/12,模塊接收數據的時候,它不能在數據突變的情況下來測量電壓然后決定接收到的數據是1還是0,所以,需要在采集分成16等分,然后在7,8,9次采樣的時候獲得電壓,如果有二次是1,就是1,如果有二次是0,就是0,一次采錯,不影響結果,這樣提高了測量的正確性。所以在倍頻的情況下,每次采樣的機器周期次數令其為x
12/11059200就是執行一個機器周期所需要的時間
12X*16/11059200就是傳送一個位需要的時間
12*x*16*波特率/11059200就是傳送波特率次數所需的時間,如波特率是9600,傳送9600位的時間就是1秒
這樣12*X*16*波特率/11059200=1
X=11059200/12/16
得到的值就是計數器每次采樣計的數。256-X就是重載值。
如果沒有啟用倍增的話公式變成256-晶振頻率/12/16/2/波特率。好似是采用32次采樣。

作者: Hovey_W    時間: 2022-7-14 16:36
膜拜各位大佬




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1