單片機基礎實驗(二)

0x06 LED矩陣

74HC595

74HC595

教程:https://www.bilibili.com/video/av25104575?from=search&seid=1047628661288106627

工作原理

image.png

D0到D7從下到上
P0到P7從右往左

代碼示例

0x07 驅動直流電機

驅動原理

本例中使用的是UNL2003芯片


image.png

可以看到和非門類似,輸入低電平就為高電平,輸入高電平就為低電平
吧直流電機一端接在5V電源上(高電平),另外一端接四個管腳的其中一個


接線端

要控制直流電機,要使直流電機兩端電平不同,一端已經(jīng)接了高電平(5V),所以因為UNL2003類似非門,輸入高電平時才是低電平,所以UNL2003芯片的輸入應該也為高電平

代碼

讓直流電機運行一小會

注意最后一定要加while(1);
單片機默認會循環(huán)的執(zhí)行程序,所以不加的話可能就會一直運行或者運行一會停止又馬上運行

#include <reg51.h>
#include "intrins.h"


sbit moto  = P1^0;

typedef unsigned char u8;
typedef unsigned int u16;



void delay(u16 t){
    while(t--);
}

void main(){
    
    moto = 0; //?????

    delay(5000);
    //??????
    moto = 1;
    delay(50000);

    moto = 0;// ?????

    while(1){}  


}



注意:
默認直流電機為開啟狀態(tài),如果打開電源后電機總是處在運行狀態(tài)沒有停止與代碼不相符,一定要檢查是否控制錯了管腳,本例中控制的是P01

0x07 中斷

1. 中斷的概念

中斷即指單品機停止當前所作的工作A,轉向工作B,稍后在來完成工作A


image.png

引起CPU中斷的根源洞焙,稱為中斷源摊崭。中斷源向CPU提出的中斷請求。CPU暫時中斷原來的事務A钻弄,轉去處理事件B稼稿。對事件B處理完畢后薄榛,再回到原來被中斷的地方(即斷點),稱為中斷返回让歼。實現(xiàn)中斷功能的部件稱為中斷系統(tǒng)敞恋。


image.png

2. 中斷的類型

STC89C5X 系列單片機提供了 8 個中斷請求源,它們分別是:外部中斷 O(INTO)谋右、外部中斷 1(INT1)耳舅、外部中斷 2(INT2)、外部中斷 3(INT3)倚评、定時器 0 中斷浦徊、定時器 1 中斷、定時器 2 中斷天梧、串口(UART)中斷

注意:51 系列單片 機一定有基本的 5 個中斷盔性,但不全有 8 個中斷,需要查看芯片手冊呢岗,通常我們 使用的都是基本的 5 個中斷:INT0冕香、INT1、定時器 0/1后豫,串口中斷


image.png

中斷號會體現(xiàn)在代碼中!

3. 單片機中斷系統(tǒng)

89C51/52的中斷系統(tǒng)有5個中斷源 悉尾,2個優(yōu)先級,可實現(xiàn)二級中斷嵌套 挫酿。
從上到下優(yōu)先級遞增

單片機中斷系統(tǒng)

4. 中斷的條件

1.1 中斷允許控制

CPU對中斷系統(tǒng)所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器IE控制的构眯。

IE
  • EX0(IE.0),外部中斷0允許位早龟;
  • ET0(IE.1)惫霸,定時/計數(shù)器T0中斷允許位;
  • EX1(IE.2)葱弟,外部中斷0允許位壹店;
  • ET1(IE.3),定時/計數(shù)器T1中斷允許位芝加;
  • ES(IE.4)硅卢,串行口中斷允許位;
  • EA (IE.7), CPU中斷允許(總允許)位将塑。如果置0不能發(fā)生中斷

1.2 中斷請求標志

TCON的中斷請求標志
  • IT0(TCON.0)脉顿,外部中斷0觸發(fā)方式控制位。
    • 當IT0=0時抬旺,為電平觸發(fā)方式弊予。
    • 當IT0=1時祥楣,為邊沿觸發(fā)方式(下降沿有效)开财。
  • IE0(TCON.1),外部中斷0中斷請求標志位误褪。
  • IT1(TCON.2)责鳍,外部中斷1觸發(fā)方式控制位。
  • IE1(TCON.3)兽间,外部中斷1中斷請求標志位历葛。
  • TF0(TCON.5),定時/計數(shù)器T0溢出中斷請求標志位嘀略。
  • TF1(TCON.7)恤溶,定時/計數(shù)器T1溢出中斷請求標志位。

1.3 中斷響應條件

  1. 中斷源有中斷請求.如當IT0 = 1時發(fā)生了下降沿
  2. 此中斷源的中斷允許位為1,如外部中斷0, EX0 =1
  3. CPU開中斷(即EA=1)帜羊。
    以上三條同時滿足時咒程,CPU才有可能響應中斷。

4. 使用中斷讼育,程序員需要做什么帐姻?

image.png
  1. 你想使用的中斷是哪個?選擇相應的中斷號奶段;
  2. 你所希望的觸發(fā)條件是什么饥瓷?
  3. 你希望在中斷之后干什么?

中斷服務函數(shù):

void   int0   ()  interrupt   0    using  1
{
    do anything that you want
}

using 1可以省略不用

0x08 定時器/計數(shù)器中斷

51 單片機有兩組定時器/計數(shù)器痹籍,因為既可以定時呢铆,又可以計數(shù),故稱之 為定時器/計數(shù)器蹲缠。

1. 四個周期

  1. 振蕩周期:為單片機提供定時信號的振蕩源的周期(晶振周期或外加振蕩 周期)
  2. 狀態(tài)周期:2 個振蕩周期為 1 個狀態(tài)周期刺洒,用 S 表示。振蕩周期又稱 S 周 期或時鐘周期
  3. 機器周期:1 個機器周期含 6 個狀態(tài)周期吼砂,12 個振蕩周期逆航。
  4. 指令周期:完成 1 條指令所占用的全部時間,它以機器周期為單位

渔肩,51 單片機相關周期的具體值為:
振蕩周期=1/12us; 狀態(tài)周期=1/6us;
機器周期=1us; 指令周期=1~4us;

2. 定時器工作原理

STC89C5X 單片機內有兩個可編程的定時/計數(shù)器 T0因俐、T1 和一個特殊功能定 時器 T2。定時/計數(shù)器的實質是加 1 計數(shù)器(16 位),由高 8 位和低 8 位兩 個寄存器 THx 和 TLx 組成抹剩。它隨著計數(shù)器的輸入脈沖進行自加 1撑帖,也就是每來一 個脈沖,計數(shù)器就自動加 1澳眷,當加到計數(shù)器為全 1 時胡嘿,再輸入一個脈沖就使計數(shù) 器回零,且計數(shù)器的溢出使相應的中斷標志位置 1钳踊,向 CPU 發(fā)出中斷請求(定時 /計數(shù)器中斷允許時)衷敌。如果定時/計數(shù)器工作于定時模式,則表示定時時間已到拓瞪; 如果工作于計數(shù)模式缴罗,則表示計數(shù)值已滿〖拦。可見面氓,由溢出時計數(shù)器的值減去計數(shù) 初值才是加 1 計數(shù)器的計數(shù)值。

注意:
①定時器/計數(shù)器和單片機的 CPU 是相互獨立的蛆橡。定時器/計數(shù)器工作的過程 是自動完成的舌界,不需要 CPU 的參與。
②51 單片機中的定時器/計數(shù)器是根據(jù)機器內部的時鐘或者是外部的脈沖信 號對寄存器中的數(shù)據(jù)加 1泰演。

2.1 51 單片機定時/計數(shù)器結構

單片機定時/計數(shù)器結構

T0對應 P3.4管腳
T1對應P3.5 管腳

51單片機定時/計數(shù)器的工作由兩個特殊功能寄存器控制.

  1. TMOD: 確定工作方式
  2. TCON: 控制定時器/計數(shù)器的啟動,停止與設置溢出標志

2.2 工作方式寄存器TMOD

工作方式寄存器 TMOD 用于設置定時/計數(shù)器的工作方式呻拌,低四位用于 T0,高 四位用于 T1粥血。其格式如下:


image.png

GATE 是門控位, GATE=0 時柏锄,用于控制定時器的啟動是否受外部中斷源信號 的影響。只要用軟件使 TCON 中的 TR0 或 TR1 為 1复亏,就可以啟動定時/計數(shù)器工作趾娃; GATA=1 時,要用軟件使 TR0 或 TR1 為 1缔御,同時外部中斷引腳 INT0/1 也為高電平 時抬闷,才能啟動定時/計數(shù)器工作。即此時定時器的啟動條件耕突,加上了 INT0/1 引腳 為高電平這一條件

C/T :定時/計數(shù)模式選擇位笤成。C/T =0 為定時模式;C/T =1 為計數(shù)模式。 M1M0:工作方式設置位眷茁。工作方式詳見下節(jié)

例如要使用定時器0,那么就設置TMOD |= 0x01(使用或運算是為了不使之前TMOD的值收到干擾)

  • GATE = 0 ,此時將TCON中的TR0設置為1即可工作
  • C/T = 0定時模式
  • M1M0 = 01 為模式1

2.3 控制寄存器TCON

TCON 的低 4 位用于控制外部中斷,已在前面介紹炕泳。TCON 的高 4 位用于控制定 時/計數(shù)器的啟動和中斷申請。其格式如下:


image.png

TF1(TCON.7):T1 溢出中斷請求標志位上祈。T1 計數(shù)溢出時由硬件自動置 TF1 為 1培遵。CPU 響應中斷后 TF1 由硬件自動清 0浙芙。T1 工作時,CPU 可隨時查詢 TF1 的 狀態(tài)籽腕。所以嗡呼,TF1 可用作查詢測試的標志。TF1 也可以用軟件置 1 或清 0皇耗,同硬 件置 1 或清 0 的效果一樣南窗。 TR1(TCON.6):T1 運行控制位。TR1 置 1 時郎楼,T1 開始工作万伤;TR1 置 0 時, T1 停止工作箭启。TR1 由軟件置 1 或清 0壕翩。所以蛉迹,用軟件可控制定時/計數(shù)器的啟動 與停止傅寡。 TF0(TCON.5):T0 溢出中斷請求標志位,其功能與 TF1 類同北救。 TR0(TCON.4):T0 運行控制位荐操,其功能與 TR1 類同。

如果要使用定時器0,需要將TR1 置為1,才能打開控制,當溢出時TF0 為1,清零將TF0置零即可

3. 定時器工作方式

定時/計數(shù)器有四種工作方式珍策。


image.png

3.1 方式0

方式 0 為 13 位計數(shù)托启,由 TL0 的低 5 位(高 3 位未用)和 TH0 的 8 位組成。 TL0 的低 5 位溢出時向 TH0 進位攘宙,TH0 溢出時屯耸,置位 TCON 中的 TF0 標志,向 CPU 發(fā)出中斷請求蹭劈。其結構圖如下所示:


image.png

3.2 方式1

方式 1 的計數(shù)位數(shù)是 16 位疗绣,由 TL0 作為低 8 位,TH0 作為高 8 位铺韧,組成了 16 位加 1 計數(shù)器多矮。其結構圖如下所示:


image.png

3.3 方式2

方式 2 為自動重裝初值的 8 位計數(shù)方式。工作方式 2 特別適合于用作較 精確的脈沖信號發(fā)生器哈打。其結構圖如下所示:


image.png

4. 定時器配置

在使用定時器時塔逃,應該如何配置使其工作?其步驟如下(各步驟順序可任 意):①對 TMOD 賦值料仗,以確定 T0 和 T1 的工作方式湾盗,如果使用定時器 0 即對 T0 配 置,如果使用定時器 1 即對 T1 配置立轧。 ②根據(jù)所要定時的時間計算初值,并將其寫入 TH0格粪、TL0 或 TH1丙挽、TL1。 ③如果使用中斷匀借,則對 EA 賦值颜阐,開放定時器中斷。 ④使 TR0 或 TR1 置位吓肋,啟動定時/計數(shù)器定時或計數(shù)凳怨。 上述中有一個定時/計數(shù)器初值的計算,下面我們來看下如何計算定時/計數(shù) 器初值是鬼。

5. 計算初值

定時器本質上其實就是計數(shù)器,只不過是根據(jù)機器周期把計數(shù)的次數(shù)轉化成了時間而已
可以自己計算,也可以使用軟件計算
自己計算的方法如下

定時器初值計算方法

前面我們介紹過機器周期的概念肤舞,它是 CPU 完成一個基本操作所需要的時間。 其計算公式是:機器周期=1/單片機的時鐘頻率均蜜。51 單片機內部時鐘頻率是外部 時鐘的 12 分頻李剖,也就是說當外部晶振的頻率輸入到單片機里面的時候要進行 12 分頻。比如說你用的是 12MHZ 晶振囤耳,那么單片機內部的時鐘頻率就是 12/12MHZ篙顺, 當你使用 12MHZ 的外部晶振的時候,機器周期=1/1M=1us充择。如果我們想定時 1ms 172
的初值是多少呢德玫?1ms/1us=1000。也就是要計數(shù) 1000 個椎麦,初值=65535-1000+1 (因為實際上計數(shù)器計數(shù)到 66636(2 的 16 次方)才溢出宰僧,所以后面要加 1) =64536=FC18H,所以初值即為 THx=0XFC观挎,TLx=0X18琴儿。

如果要計算太多的時間,可以以一個比較小的時間為基本單位:如1ms,

6. 實驗代碼

控制小燈間隔1s閃爍

別忘了在main函數(shù)中調用Timer0Init()函數(shù)!!!

#include "reg52.h"


typedef unsigned char u8;
typedef unsigned int u16;

sbit led = P2^0;


void Timer0init(){

    // ???????????TMOD????????????,????M0M1,????|????
    TMOD |= 0x01;    //???????0????1,??TMOD?????λ????,????λ??????????
    //???1ms ????????1us  ???????? 1ms/1us  = 1000  c????65536-1000  =  FC18H   
    //??????????μ???????????м???

    //???ó??
    TH0 = 0xFC;
    TL0 = 0x18;
    
    //?????1????ж???λ ET0
    ET0 = 1;
    // ???ж?    
    EA = 1;
    //???п???λ,??1???????                   
    TR0 = 1;


}




void main(){
    Timer0init();
    while(1)
    {
    }
}



//?????0???ж???1,?????1???ж???3
void Timer0() interrupt 1{
    
    static u16 i = 0;
    TH0 = 0xFC;
    TL0 = 0x18;
    i++;
    //??i????1s
    if(i==1000){
        i = 0;
        led = ~led; 
    }
}       
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嘁捷,隨后出現(xiàn)的幾起案子造成,更是在濱河造成了極大的恐慌,老刑警劉巖普气,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谜疤,死亡現(xiàn)場離奇詭異,居然都是意外死亡现诀,警方通過查閱死者的電腦和手機夷磕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仔沿,“玉大人坐桩,你說我怎么就攤上這事》怙保” “怎么了绵跷?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵膘螟,是天一觀的道長。 經(jīng)常有香客問我碾局,道長荆残,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任净当,我火速辦了婚禮内斯,結果婚禮上,老公的妹妹穿的比我還像新娘像啼。我一直安慰自己俘闯,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布忽冻。 她就那樣靜靜地躺著真朗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僧诚。 梳的紋絲不亂的頭發(fā)上遮婶,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音振诬,去河邊找鬼蹭睡。 笑死衍菱,一個胖子當著我的面吹牛赶么,可吹牛的內容都是我干的。 我是一名探鬼主播脊串,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼辫呻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琼锋?” 一聲冷哼從身側響起放闺,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缕坎,沒想到半個月后怖侦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡谜叹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年匾寝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荷腊。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡艳悔,死狀恐怖,靈堂內的尸體忽然破棺而出女仰,到底是詐尸還是另有隱情猜年,我是刑警寧澤抡锈,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站乔外,受9級特大地震影響床三,放射性物質發(fā)生泄漏。R本人自食惡果不足惜杨幼,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一勿璃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧推汽,春花似錦补疑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暖夭,卻和暖如春锹杈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迈着。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工竭望, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人裕菠。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓咬清,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奴潘。 傳聞我的和親對象是個殘疾皇子旧烧,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容

  • 本文集下的內容主要介紹stc89c51系列單片的基礎知識(初學者看會感到乏味,建議培養(yǎng)興趣愛好之后再來看) 本文主...
    keep1234quiet閱讀 3,289評論 8 6
  • 寄存器IE(8位):對單片機系統(tǒng)所有中斷以及某個中斷源的開放和屏蔽的控制 EX0(IE.0)画髓,外部中斷0允許位掘剪; ...
    又是那一片天閱讀 1,352評論 0 1
  • 6.1定時器概述 89C51/S51單片機內部有兩個16位定時器/計數(shù)器,即定時器0(T0)和定時器1(T1)奈虾。 ...
    MUZYOU閱讀 1,250評論 0 0
  • 51單片機采用中斷方式的串口通信過程及程序分析: 所謂中斷方式夺谁,就是串口收/發(fā)標志位出發(fā)中斷后,在中斷中執(zhí)行既定操...
    緣來閱讀 5,361評論 0 6
  • 單片機STC89C52學習——17 定時器和計數(shù)器 匯總:00 單片機STC89C52學習參考教程:普中科技 1 ...
    aaa小菜雞閱讀 1,290評論 0 0