C51 單片機(jī)開發(fā)單片機(jī)發(fā)數(shù)據(jù)給 PC
共 2557字,需瀏覽 6分鐘
·
2024-07-01 07:30
公眾號文章同步閱讀網(wǎng)址:www.netor0x86.com
閑話:某人在某劇中有這樣一段話,“酒喝不出朋友,煙抽不走寂寞,訴換不來同情,怨改不了命運,炫帶不了幸福,憤解不了饑渴,在這個涼薄的世界,自己不強(qiáng)大,什么都是浮云,狐朋狗友說的再美,都抵不過碎銀幾兩”。你認(rèn)可么?
本篇文章整理了串口的波特率的初始化,以及向 SBUF 發(fā)送數(shù)據(jù)的代碼實現(xiàn)。
0x01:串口發(fā)送數(shù)據(jù)的準(zhǔn)備
串口發(fā)送數(shù)據(jù)給電腦,那么按照約定會設(shè)置串口相關(guān)的參數(shù),比較重要的就是波特率。設(shè)置波特率并不是單片機(jī)一方進(jìn)行設(shè)置,而是單片機(jī)和電腦都要進(jìn)行設(shè)置。
波特率表示每秒傳送二進(jìn)制代碼的位數(shù),所以兩端要一致。
波特率的初始化,也是一系列寄存器的設(shè)置,這里可以使用 STC-ISP 來生成,如下圖:
從圖中我們可以看出,波特率設(shè)置為 9600,串口使用的是 串口1,數(shù)據(jù)位是 8位數(shù)據(jù),波特率跟晶振相關(guān),那么就需要用到定時器,這里我們使用 定時器1(8 位自動重載),定時器時鐘使用 12T。
然后我們發(fā)送數(shù)據(jù)時,我們就一秒發(fā)送一個字符,那么讓 STC-ISP 來給我們生成一個軟件延時,如下圖:
有了上面這兩部分,我們就可以完成我們要的功能了。
0x02:代碼實現(xiàn)
我們發(fā)送的數(shù)據(jù)是小寫字母 a ~ z,然后循環(huán)發(fā)送,一秒鐘發(fā)送一個字母。
代碼如下:
#include <intrins.h>
#include "reg52.h"
sfr AUXR = 0x8e; /* 聲明AUXR寄存器的地址 */
void UartInit(void) //[email protected]
{
PCON &= 0x7F;
SCON = 0x50;
AUXR &= 0xBF;
AUXR &= 0xFE;
TMOD &= 0x0F;
TMOD |= 0x20;
TL1 = 0xFD;
TH1 = 0xFD;
ET1 = 0;
TR1 = 1;
}
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
char data_msg = 'a';
UartInit();
while (1)
{
Delay1000ms();
SBUF = data_msg;
data_msg ++;
if (data_msg > 'z')
{
data_msg = 'a';
}
}
}
然后通過 STC-ISP 將代碼生成的 hex 文件寫入單片機(jī),然后打開 STC-ISP 的 串口助手,選擇連接單片機(jī)的串口,選擇相同的 波特率、校驗位 和 停止位。最后點擊 打開串口 按鈕,就可以收到單片機(jī)發(fā)來的數(shù)據(jù)了。如下圖所示:
我是一個程序員,了解 C、PHP、Java、ASM、Python,有 信安、CISP 證書,寫小白也能看得懂的文章,感謝關(guān)注!!!
我的網(wǎng)站:https://www.netor0x86.com
我錄制的視頻課程:
1. 入門級棧溢出分析
2. WEB端獲取MAC地址真實項目案例
3. PHP擴(kuò)展模塊開發(fā)之DLL編寫與調(diào)用
4. C語言零基礎(chǔ)入門教程
5. PE 文件結(jié)構(gòu)初識與二進(jìn)制手寫可執(zhí)行程序
