51单片机LCD显示温度与串口接受温度
外接晶振為12MHz時(shí),51單片機(jī)相關(guān)周期的具體值為:
振蕩周期=1/12us;
狀態(tài)周期=1/6us;
機(jī)器周期=1us;
指令周期=1~4us;
51單片機(jī)定時(shí)/計(jì)數(shù)器的工作由兩個(gè)特殊功能寄存器控制。TMOD用于設(shè)置其工作方式;TCON用于控制其啟動(dòng)和中斷申請(qǐng)。
1、工作方式寄存器TMOD
工作方式寄存器TMOD用于設(shè)置定時(shí)/計(jì)數(shù)器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
GATE是門控位, GATE=0時(shí),用于控制定時(shí)器的啟動(dòng)是否受外部中斷源信號(hào)的影響。只要用軟件使TCON中的TR0或TR1為1,就可以啟動(dòng)定時(shí)/計(jì)數(shù)器工作;GATA=1時(shí),要用軟件使TR0或TR1為1,同時(shí)外部中斷引腳INT0/1也為高電平時(shí),才能啟動(dòng)定時(shí)/計(jì)數(shù)器工作。即此時(shí)定時(shí)器的啟動(dòng)條件,加上了INT0/1引腳為高電平這一條件。
C/T :定時(shí)/計(jì)數(shù)模式選擇位。C/T =0為定時(shí)模式;C/T =1為計(jì)數(shù)模式。
M1M0:工作方式設(shè)置位。定時(shí)/計(jì)數(shù)器有四種工作方式。
控制寄存器TCON
TCON的高4位用于控
制定時(shí)/計(jì)數(shù)器的啟動(dòng)和中斷申請(qǐng)。其格式如下:
TF1(TCON.7):T1溢出中斷請(qǐng)求標(biāo)志位。T1計(jì)數(shù)溢出時(shí)由硬件自動(dòng)置TF1為1。CPU響應(yīng)中斷后TF1由硬件自動(dòng)清0。T1工作時(shí),CPU可隨時(shí)查詢TF1的狀態(tài)。所以,TF1可用作查詢測(cè)試的標(biāo)志。TF1也可以用軟件置1或清0,同硬件置1或清0的效果一樣。
TR1(TCON.6):T1運(yùn)行控制位。TR1置1時(shí),T1開始工作;TR1置0時(shí),T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止。
TF0(TCON.5):T0溢出中斷請(qǐng)求標(biāo)志位,其功能與TF1類同。
TR0(TCON.4):T0運(yùn)行控制位,其功能與TR1類同。
定時(shí)/計(jì)數(shù)器的工作方式
1、方式1
方式1的計(jì)數(shù)位數(shù)是16位,由TL0作為低8位,TH0
作為高8位,組成了16位加1計(jì)數(shù)器 。計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為:X=2(16次方)-N
2、方式2
為自動(dòng)重裝初值的8位計(jì)數(shù)方式。 計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為:X=28-N
工作方式2特別適合于用作較精確的脈沖信號(hào)發(fā)生器。所以串口通信處用此方式。
計(jì)數(shù)器初值的計(jì)算
機(jī)器周期也就是CPU完成一個(gè)基本操作所需要的時(shí)間。
機(jī)器周期=1/單片機(jī)的時(shí)鐘頻率。
51單片機(jī)內(nèi)部時(shí)鐘頻率是外部時(shí)鐘的12分頻。也就是說(shuō)當(dāng)外部晶振的頻率輸入到單片機(jī)里面的時(shí)候要進(jìn)行12分頻。比如說(shuō)你用的是12MHZ的晶振,那么單片機(jī)內(nèi)部的時(shí)鐘頻率就是12/12MHZ,當(dāng)你使用12MHZ的外部晶振的時(shí)候。機(jī)器周期=1/1M=1us。
而我們定時(shí)1ms的初值是多少呢,1ms/1us=1000。也就是要計(jì)數(shù)1000個(gè)數(shù),初值=65535-1000+1(因?yàn)閷?shí)際上計(jì)數(shù)器計(jì)數(shù)到66636才溢出)=64536=FC18H
串口通信
比特率是每秒鐘傳輸二進(jìn)制代碼的位數(shù),單位是:位/秒(bps)。如每秒鐘傳送240個(gè)字符,而每個(gè)字符格式包含10位(1個(gè)起始位、1個(gè)停止位、8個(gè)數(shù)據(jù)位),這時(shí)的比特率為:
10位×240個(gè)/秒 = 2400 bps
SCON 是一個(gè)特殊功能寄存器,用以設(shè)定串行口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志:
SM0和SM1為工作方式選擇位,可選擇四種工作方式:
SM2,多機(jī)通信控制位,主要用于方式2和方式3。當(dāng)接收機(jī)的SM2=1時(shí)可以利用收到的RB8來(lái)控制是否激活RI(RB8=0時(shí)不激活RI,收到的信息丟棄;RB8=1時(shí)收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI,進(jìn)而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。當(dāng)SM2=0時(shí),不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI(即此時(shí)RB8不具有控制RI激活的功能)。通過(guò)控制SM2,可以實(shí)現(xiàn)多機(jī)通信。
在方式0時(shí),SM2必須是0。在方式1時(shí),如果SM2=1,則只有接收到有效停止位時(shí),RI才置1。
REN,允許串行接收位。由軟件置REN=1,則啟動(dòng)串行口接收數(shù)據(jù);若軟件置REN=0,則禁止接收
TI,發(fā)送中斷標(biāo)志位。在方式0時(shí),當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時(shí),或在其它方式,串行發(fā)送停止位的開始時(shí),由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請(qǐng)。在中斷服務(wù)程序中,必須用軟件將其清0,取消此中斷申請(qǐng)。
RI,接收中斷標(biāo)志位。在方式0時(shí),當(dāng)串行接收第8位數(shù)據(jù)結(jié)束時(shí),或在其它方式,串行接收停止位的中間時(shí),由內(nèi)部硬件使RI置1,向CPU發(fā)中斷申請(qǐng)。也必須在中斷服務(wù)程序中,用軟件將其清0,取消此中斷申請(qǐng)。
PCON中只有一位SMOD與串行口工作有關(guān) :SMOD(PCON.7) 波特率倍增位。在串行口方式1、方式2、方式3時(shí),波特率與SMOD有關(guān),當(dāng)SMOD=1時(shí),波特率提高一倍。復(fù)位時(shí),SMOD=0。
80C51串行口的工作方式
這里只介紹方式1:
方式1是10位數(shù)據(jù)的異步通信口。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳,傳送一幀數(shù)據(jù)的格式如圖所示。其中1位起始位,8位數(shù)據(jù)位,1位停止位。
用軟件置REN為1時(shí),接收器以所選擇波特率的16倍速率采樣RXD引腳電平,檢測(cè)到RXD引腳輸入電平發(fā)生負(fù)跳變時(shí),則說(shuō)明起始位有效,將其移入輸入移位寄存器,并開始接收這一幀信息的其余位。接收過(guò)程中,數(shù)據(jù)從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時(shí),控制電路進(jìn)行最后一次移位。當(dāng)RI=0,且SM2=0(或接收到的停止位為1)時(shí),將接收到的9位數(shù)據(jù)的前8位數(shù)據(jù)裝入接收SBUF,第9位(停止位)進(jìn)入RB8,并置RI=1,向CPU請(qǐng)求中斷。
方式1的波特率 =(2SMOD/32)·(T1溢出率)
T1 溢出率 = fosc /{12×[256 -(TH1)]}
DS18B20溫度傳感器原理
DS18B20溫度轉(zhuǎn)換規(guī)則
DS18B20的核心功能是它可以直接讀出數(shù)字的溫度數(shù)值。溫度傳感器的精度為用戶可編程的9,10,11或12位,分別以0.5℃,0.25℃,0.125℃和0.0625℃增量遞增。在上電狀態(tài)下默認(rèn)的精度為12位。
這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在DS18B20的兩個(gè)8位的RAM中,高字節(jié)的前5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為‘0’,只要將測(cè)到的數(shù)值乘以0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為‘1’,測(cè)到的數(shù)值需要先減1再取反再乘以0.0625即可得到實(shí)際溫度。
(1).數(shù)據(jù)線拉到低電平“0”。
(2).延時(shí)480微妙(該時(shí)間的時(shí)間范圍可以從480到960微妙)。
(3).數(shù)據(jù)線拉到高電平“1”。
(4).延時(shí)等待80微妙。如果初始化成功則在15到60微妙時(shí)間內(nèi)產(chǎn)生一個(gè)由DS18B20所返回的低電平“0”.根據(jù)該狀態(tài)可以來(lái)確定它的存在,但是應(yīng)注意不能無(wú)限的進(jìn)行等待,不然會(huì)使程序進(jìn)入死循環(huán),所以要進(jìn)行超時(shí)判斷。
(5).若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時(shí),其延時(shí)的時(shí)間從發(fā)出的高電平算起(第(3)步的時(shí)間算起)最少要480微妙。
讀時(shí)序
(1).將數(shù)據(jù)線拉低“0”。
(2).延時(shí)1微妙。
(3).將數(shù)據(jù)線拉高“1”,釋放總線準(zhǔn)備讀數(shù)據(jù)。
(4).延時(shí)10微妙。
(5).讀數(shù)據(jù)線的狀態(tài)得到1個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。
(6).延時(shí)45微妙。
(7).重復(fù)1~7步驟,直到讀完一個(gè)字節(jié)。
寫時(shí)序
(1).數(shù)據(jù)線先置低電平“0”
(2).延時(shí)15微妙。
(3).按從低位到高位的順序發(fā)送數(shù)據(jù)(一次只發(fā)送一位)。
(4).延時(shí)60微妙。
(5).將數(shù)據(jù)線拉到高電平。
(6).重復(fù)1~5步驟,直到發(fā)送完整的字節(jié)。
(7).最后將數(shù)據(jù)線拉高。
LCD顯示部分可以參考我一篇文章
51單片機(jī)DS1302時(shí)鐘LCD1602顯示
以上是我在學(xué)習(xí)過(guò)程中的一點(diǎn)總結(jié),用的是普中的51單片機(jī)·。
總結(jié)
以上是生活随笔為你收集整理的51单片机LCD显示温度与串口接受温度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dev Express Report 动
- 下一篇: 文字图片滚动 jquery 实现代码