【藍橋杯微控制器組】(6)uart
(1)波特率的概念:1bps = 1 bit/s
(2)板載資源有兩個串列埠,僅UART1可以通過USB連線電腦
(3)四種方式波特率計算公式:(fosc:晶振頻率 )
方式1:baud = fosc / 12;
方式2:baud = (2^smod / 32) * (T1溢位率)
方式3:baud = (2^smod / 64) * fosc
方式4:baud = (2^smod / 32) * (T1溢位率)
(4)SMOD的設定位於PCON(電源管理暫存器中)PCON_D7
SMOD = 1 波特率加倍PCON &= 0x7f
SMOD = 0 波特率不變PCON |= 0x80
(5)T1溢位率為T1定時器溢位的頻率,即:T1溢位一次所需要的時間的倒數
溢位率 = 1 / ( N * (12 / fosc))
(6)使用T1做時鐘源的時候應當使用方式2,以避免重灌計時器初值帶來的時延,否則會產生累積誤差。
(7)計算計數器初值方法(方式1):
設初值為x, T1 = (256 - x) * ( 12 / fosc)
baud = ( 2 ^ SMOD) / 32 * T1
需要使用的暫存器:SCON 序列口暫存器(可位定址)
SCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
SM0/SM1:工作方式選擇位
SM0 | SM1 | 方式 | 功能說明 |
0 | 0 | 0 | 同步移位暫存器方式(用於拓展I/O口) |
0 | 1 | 1 | 10位非同步收發(1開始位,8位資料,1停止位)波特率可變(T1控制) |
1 | 0 | 2 | 11位非同步收發(9位資料)波特率固定 |
1 | 1 | 3 | 11位非同步收發(9位資料)波特率可變(T1控制) |
一般使用方式1
SM2:多機通訊控制位,SM2 = 1:收到的RB8(第9位資料)進入SBUF,並激活RI,引起中斷
SM2 = 0:收到的RB8被丟棄
REN:接收使能
TB8 / RB8:傳送、接收到的第9位資料
TI :傳送結束標誌(在傳送最後一位停止位開始時TI硬體置1,需要手動清零)
RI:接收中斷標誌(在接受到最後一位停止位中間,RI硬體置1,需要手動清零)
程式設計步驟:
(1)設定T1工作方式(方式2)
(2)為TH1 TL1裝初值,開計數器
(3)為串列埠設定所使用的時鐘源
sfr AUXR = 0x8e;
AUXR &= 0xBF; //定時器1時鐘為Fosc/12,即12T
AUXR &= 0xFE; //串列埠1選擇定時器1為波特率發生器
(4)設定SCON工作方式(主要:SM0 SM1 REN)
(5)開中斷(總中斷與串列埠中斷)
P.S:善於使用STC - ISP中自帶的波特率計算器
傳送函式:
(1)送字元入SBUF
(2)等待TI變為1(while( ! TI ); )
(3)清零TI
接收中斷:
(1)清零RI
(2)收SBUF中的資料
自己寫的分片程式碼初始化:
void t1_init()
{
TMOD = 0x20; //M1 = 1; M0 = 0
TH1 = 0xfd;
TL1 = 0xfd;
EA = 1;
TR1 = 1 ;
}
void uart_init()
{
AUXR &= 0xBF; //定時器1時鐘為Fosc/12,即12T
AUXR &= 0xFE; //串列埠1選擇定時器1為波特率發生器
SM0 = 0;
SM1 = 1; //方式1
REN = 1; //RECEIVE INTERRUPT
ES = 1; //uart interrupt
EA = 1;
}
STC - ISP計算的初始化程式碼:
void UartInit(void) //[email protected]
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位資料,可變波特率
AUXR &= 0xBF; //定時器1時鐘為Fosc/12,即12T
AUXR &= 0xFE; //串列埠1選擇定時器1為波特率發生器
TMOD &= 0x0F; //清除定時器1模式位
TMOD |= 0x20; //設定定時器1為8位自動重灌方式
TL1 = 0xFD; //設定定時初值
TH1 = 0xFD; //設定定時器重灌值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
}
傳送函式:
void trans_char(char t)
{
SBUF = t;
while(!TI);
TI = 0;
}
void trans_str(char t[])
{
char *p;
p = t;
while(*p != '\0')
{
trans_char(*p);
p++;
}
}
中斷:
void uart_isr() interrupt 4
{
RI = 0;
rechar = SBUF;
trans_char(rechar); //驗證
}
P.S:在開發板上需要講J13跳線至MM
相關推薦
【藍橋杯微控制器組】(6)uart
(1)波特率的概念:1bps = 1 bit/s (2)板載資源有兩個串列埠,僅UART1可以通過USB連線電腦 (3)四種方式波特率計算公式:(fosc:晶振頻率 ) 方式1:baud = fosc / 12; 方式2:baud = (2^smod / 32) * (T1
【藍橋杯微控制器組】實時時鐘RTC(DS1302)
1、暫存器表 注意: (1)ds1302.h中提供的暫存器地址是寫地址,讀暫存器時需要將地址加一 (2) #define ds1302_control_addr 0x8Ee //防寫命令字單元地址對應上圖倒數第二行:BIT7 = 0(取消防寫)、BIT7 = 1(上
【藍橋杯|微控制器組】| I2C通訊(官方程式碼) + EEPROM
之前我寫的I2C通訊協議是基於“金沙灘”的教程,程式碼比較繁瑣,為了能在之後的比賽中提高效率,本次就以官方提供的I2C通訊協議來實現單位元組的存取,同時也當作對I2C協議的複習。該協議有關主機(微控制器)與從機(板子上焊的晶片AT24C02)之間的資料傳輸。首先我們
【暴力自動生成排列】(2015)第六屆藍橋杯省賽 C/C++ B組 題解(第三題)
第三題題目三羊獻瑞觀察下面的加法算式: 祥 瑞 生 輝 + 三 羊 獻 瑞------------------- 三 羊 生 瑞 氣(如果有對齊問題,可以參看【圖1.jpg】)其中
【蒻爆了的NOIP系列--普及組複賽】(6)NOIP2015普及組複賽題解
這只是一個作業,如果有幫到您的,我只能說。。。這不科學。。。 ————————————華麗的分割線———————————— 第一題: 這題很水雙重for列舉直n次輸出當然你要數論我也沒辦法
【藍橋杯學習記錄】【6】不定方程的解法
一次不定方程 4 * x - 5 * y = 7;ax + by = c; a = 4 , b = -5 , c = 7; ax = c - by; 1 .先求一個特殊解 x0
python基礎之【元組 】(04)
Python 的元組與列表類似,不同之處在於元組的元素不能修改。 元組使用小括號,列表使用方括號。 元組建立很簡單,只需要在括號中新增元素,並使用逗號隔開即可。 tup1 = ('Google', 'Runoob', 1997, 2000); 元組
2016年 藍橋杯 C語言B(本科)組 考試題
煤球數目 171700 #include<cstdio> int main() { int a[100],sum=0; a[0]=1; for(int i=1;i<100;i++) a[i]=a[i-1]+(i+1); for(in
【Spring Boot】(6)、Profile
Profile是Spring對不同環境提供不同配置功能的支援,可通過啟用、指定引數等方式快速切換環境。1、多Profile檔案(Properties格式)在主配置檔案編寫的時候,檔名可以是applica
【程式設計師眼中的統計學(6)】幾何分佈、二項分佈及泊松分佈:堅持離散
/** * 在n次伯努利試驗中,試驗r次才得到第一次成功的機率 P(X=r)=pq^{r-1} * @param p double型保留一位小數,表示成功的概率 * @param q double型保留一位小數,表示失敗的概率即1-p * @param r 整型,實驗次數 *
2016年藍橋杯B組初賽(第七屆)
第一題: 簡單的求和題。 #include<iostream> #include<cmath> using namespace std; int a[110]; int main(){ int i; int
【藍橋杯C語言】 基礎練習 數列排序
問題描述 給定一個長度為n的數列,將這個數列按從小到大的順序排列。1<=n<=200輸入格式 第一行為一個整數n。 第二行包含n個整數,為待排序的數,每個整數的絕對值小於10000。輸出格式 輸出一行,按從小到大的順序輸出排序後的數列。樣例輸入58 3 6
2018年藍橋杯B組初賽(第九屆)
昨天去南京理工大學參加了藍橋杯,總體感覺比去年難了不少,後面島嶼的題目自己寫的有點可惜。就當一次鍛鍊吧,大三我還會來的。 1.標題:第幾天 2000年的1月1日,是那一年的第1天。 那麼,2000年的5月4日,是那一年的第幾天? 答案:125 2:明碼 漢字的字
【藍橋杯C語言】Fibonacci數列問題
問題描述Fibonacci數列的遞推公式為:Fn=Fn-1+Fn-2,其中F1=F2=1。當n比較大時,Fn也非常大,現在我們想知道,Fn除以10007的餘數是多少。輸入格式輸入包含一個整數n。輸出格式輸出一行,包含一個整數,表示Fn除以10007的餘數。說明:在本題中,答案
2017年藍橋杯B組初賽(第八屆)
第一題: 資料處理的題目,簡單題目 第一步,將資料複製到txt文件中 第二步,將資料從txt複製到excel中 第三步,現將資料分列。資料—>分列即可 第四步,替換,ctrl+H.替
【nodejs原理&原始碼賞析(6)】深度剖析cluster模組原始碼與node.js多程序(下)
目錄 一. 引言 二.server.listen方法 三.cluster._getServer( )方法 四.跨程序通訊工具方法Utils 五.act:queryServer訊息
c++對象內存模型【內存布局】(轉)
dbd 對象大小 成員函數 .cn eof 註意 .cpp als his 總結:1、按1繼承順序先排布基於每個父類結構。2、該結構包括:基於該父類的虛表、該父類的虛基類表、父類的父類的成員變量、父類的成員變量。3、多重繼承且連續繼承時,虛函數表按繼承順序排布函數與虛函數。
藍橋杯-加法變乘法(java)
tac chm init system area 需要 out nor clas 藍橋杯第六屆省賽題目-加法變乘法(java) 題目: 我們都知道:1+2+3+ ... + 49 = 1225 現在要求你把其中兩個不相鄰的加號變成乘號,使得結果為2015 比如:
【微信小遊戲】(一)小遊戲開發調試--關於找不到app.json入口文件
com png info alt 微信開發者 遊戲 進入 http 找不到 經了解發現 小程序必須要有app.json 小遊戲必須的文件只有2個 game.js 小遊戲入口文件 game.json 小遊戲配置文件 所以不是工程文件缺失,解決方案如下: 進入微信開發者工具
痞子衡嵌入式:飛思卡爾i.MX RT系列微控制器啟動篇(6)- Bootable image格式與加載(elftosb/.bd/.bin)
before 詳細介紹 tab true 加載完成 table sdp 推薦 包含 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的Bootable image格式與加載過程。 在i.MXRT啟動系列第三篇文章 飛