找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4444|回復(fù): 4
收起左側(cè)

單片機(jī)串口通信控制led亮滅程序

[復(fù)制鏈接]
ID:952337 發(fā)表于 2021-7-18 10:06 | 顯示全部樓層 |閱讀模式
/*現(xiàn)象:在串口調(diào)試助手中選擇字符顯示與字符發(fā)送。發(fā)送字符1,則led1亮;發(fā)送字符0,led1滅。
注意:發(fā)送后將發(fā)送區(qū)的字符清除,否則會(huì)繼續(xù)再次發(fā)送。*/
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
u8 receivedata;//將發(fā)送的字符保存到一個(gè)變量中
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;
}


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:1004248 發(fā)表于 2022-6-3 18:17 | 顯示全部樓層
我那個(gè)用的STC-ISP的串口助手,用仿真畫(huà)的,但是出現(xiàn)問(wèn)題,就是我不管發(fā)1還是0,都不對(duì),我換if   else語(yǔ)句之后,一直是else里邊運(yùn)行,說(shuō)明我串口數(shù)據(jù)傳輸亂了,波特率也是9600,為之奈何
回復(fù)

使用道具 舉報(bào)

ID:1004248 發(fā)表于 2022-6-3 20:40 | 顯示全部樓層
PCON=0X80; 把這一句去掉就可以用了,。。。為什么要寫(xiě)這一句
回復(fù)

使用道具 舉報(bào)

ID:496636 發(fā)表于 2022-6-3 23:31 | 顯示全部樓層
祥ZD 發(fā)表于 2022-6-3 20:40
PCON=0X80; 把這一句去掉就可以用了,。。。為什么要寫(xiě)這一句

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

使用道具 舉報(bào)

ID:1039472 發(fā)表于 2022-7-14 16:36 | 顯示全部樓層
膜拜各位大佬
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表