這兩天在做stc8板子的串列埠除錯。整理一下前後做的準備和注意事項
要想做通訊,首先要確保pc機的波特率和微控制器的波特率一致。pc端可直接設定。微控制器端就需要採用定時器。這不是乙個簡單的概念。首先微控制器有自己的晶振,可產生振盪週期,即1s內振盪次數。機器週期是12個振盪週期。計時的方法是採用微控制器自帶的計數器(定時器),通過設定溢位數值來確定週期時間。我手頭的stc8a有5個定時器。網上的教程一般是用t1做串列埠通訊,stc公司官方給出的例程基本是用t2做計時(波特率產生器)。主要工作就是運用,記住這些暫存器的作用,會配置。
對於定時器0,1來說,有tmod,tcon幾個重要的計時器,
tmod:m1,m0兩位用於設定定時器工作方式,主要的有工作模式1:16位定時器,工作模式2:8位自動重灌定時器(高位設定數,低8位滿了自動裝入)
tcon:控制暫存器,可位定址,tf0,1定時器溢位標誌位,tr0,1語序技術控制位,ie0,1外部中斷請示標誌位,it0,1外部中斷觸發標誌位。
於此同時,通訊還需要掌握中斷暫存器ie,,也是可位定址的,ea=1 使能總中斷,et0,1,2使能定時器中斷,es使能序列口中斷,ex0,1使能外部中斷。本實驗中需要ea,es開啟
有了定時器的配置,就可以產生波特率了。這裡又需要掌握序列口的4種工作方式,方式1,3由於波特率靈活可變,更多採用。
方式1,3使用的公式為
baud=2^smod (t1溢位率) /32 (smod=1,波特率加倍)
*或者baud=2^smod×(t1溢位率) /64
溢位率的計算是(65536-count)×t 的倒數,t是微控制器的機器週期,機器週期又是時鐘週期的12倍
此外還有兩個暫存器:scon暫存器,pcon暫存器
scon暫存器:序列口工作方式,一般採用方式2:固定波特率9位資料模式(一位停止位),一般設為0x50
pcon暫存器:一般用最高位smod,為1時波特率加倍,即pcon=0x80
有了這些基礎知識,基本上可以開始套例程了。然而。stc公司給的例程全是用t2當波特率發生器的。且引用了乙個全新的暫存器auxr。這是什麼鬼。。。上網查了一下,各位給出的解釋還和datasheet有出入,難道是stc15和stc8有區別?我肯定是以手頭stc8的datasheet為主咯
auxr輔助暫存器:不可位定址,各位功能如下(只保證對應stc8系列微控制器)
* auxr.0:為1時串列埠波特率發生器為定時器2,否則預設定時器1
* auxr.1:為1可使用內部擴充套件ram
* auxr.2:(定時器2速度控制位)為1則cpu時鐘不分頻(1t),否則12分頻
* auxr.3:(定時器0控制位)為1用作定時器,為0用作計數器
* auxr.4:為1定時器2開始計數,為0停止
* auxr.5:為1則串列埠1模式0通訊速度為2分頻,否則12分頻
* auxr.6:為1則定時器1不分頻,否則12分頻
* auxr.7:為1則定時器0不分頻,否則12分頻
t2作為波特率發生器的串列埠1通訊例程中設定auxr為0x15,即00010101。t2開始計數,時鐘不分頻,波特率發生器為定時器2。這乙個暫存器配置完,給我的感覺是確實比其他暫存器方便許多。只需要再設定t2h和t2l的值即完成了波特率設定。完成了以上設定,通訊基本就可以建立起來了。加乙個ch340電路,用串列埠除錯助手就可以通訊了,記住調整波特率。
注意事項:
1.一定要注意微控制器時鐘頻率,手頭的stc8a和stc8c頻率分別是24mhz和11.0592mhz。程式設計時要區別開
2.網上的資源不可盡信,datasheet是最可靠的夥伴
附例程**:
#include "reg51.h"
#include "intrins.h"
#define fosc 11059200ul
#define brt (65536 - fosc / 115200 / 4)
sfr auxr = 0x8e;
sfr t2h = 0xd6;
sfr t2l = 0xd7;
bit busy;
char wptr;
char rptr;
char buffer[16];
void uartisr() interrupt 4
if (ri)
}void uartinit()
void uartsend(char dat)
void uartsendstr(char *p)
}void main()
}}
STC8微控制器的低功耗詳解
上圖是我採用的型號 stc8f2k08s2 我們開發產品要求如下 1.兩節1號電池供電半年。2.紅外傳送接收資料。上位機傳送指令和讀取資料 3.自帶時間。4.eeprom,掉電儲存資料。5.成本低 在這個專案中,主要問題是成本和功耗。之前採用的是stm8l系列功耗的確很低,但是今年 飛漲,實在傷不起...
STC8微控制器1T模式跑RTX51
網上能找到的資料,大部分是stc15微控制器或者stc8在12t的模式下跑rtx51,本人覺得太浪費這些增強型的51微控制器晶元了,於是經過測試,成功在1t模式下跑rtx51。具體涉及的操作如下 1.在工程中新增rtx51 2.標頭檔案包含 include 3.修改conf tny.a51的time...
8th 串列埠通訊
簡單來說,依然只是設定好幾個暫存器即可。按步驟分別是 1.設定引腳相關暫存器 gpxcon gpxup 2.設定波特率暫存器 ubrdivx 3.設定傳輸格式 ulconx 4.設定接受傳送方式以及時鐘源 uconx 5.設定流控和fifo ufconx umconx 1 void uart0 in...