




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、入門(mén)有針對(duì)性的解決一些簡(jiǎn)單的實(shí)際問(wèn)題,邊理論邊實(shí)踐學(xué)一樣會(huì)一樣基本實(shí)驗(yàn):流水燈,數(shù)碼管顯示,鍵盤(pán)控制,音樂(lè)播放,繼電器控制通信實(shí)驗(yàn),串口通信實(shí)驗(yàn),紅外線遙控信號(hào)解碼實(shí)驗(yàn)等單片機(jī)的定義分類和內(nèi)部組成1單片機(jī)就是中央處理器CPU,隨機(jī)存儲(chǔ)器RAM。只讀存儲(chǔ)器ROM。定時(shí)、計(jì)數(shù)器和各種輸入輸出接口I/o接口電路等部件集成在一塊電路芯片上的微型計(jì)算機(jī)。2,1分類按制造工藝分:HMOS和CHMOS CHMOS包括80c51等中間加了C功耗要小適合便攜式手提式和野外作業(yè)。2分類按不同容量的存儲(chǔ)器配置分:51子系列和52子系列51表示單片機(jī)最后一位數(shù)字為1作為標(biāo)志。片內(nèi)帶有4KbROM或EPROM(Eras
2、able Programmable ROM,可擦除可編程ROM,128BRAM,兩個(gè)16位定時(shí)器/計(jì)數(shù)器和5個(gè)中段器52系列是增強(qiáng)型各項(xiàng)指標(biāo)都高。AT89S51是AT89C51的升級(jí)版支持ISP在線更新程序ISP(Internet Service Provider內(nèi)部集成看門(mén)狗計(jì)時(shí)器等。3.1串行接口就是接口數(shù)據(jù)傳送3.2中斷控制系統(tǒng)接收中斷請(qǐng)求如定時(shí)時(shí)間到,需要鳴笛報(bào)警類似stop to do 停下來(lái)去執(zhí)行ROM中特定的每段程序,執(zhí)行完后再繼續(xù)執(zhí)行先前中斷的程序時(shí)鐘電路控制節(jié)拍工作。一個(gè)典型的單片機(jī)應(yīng)用系統(tǒng)包括輸入電路,單片機(jī),輸出電路把他想象成電腦。單片機(jī)的應(yīng)用:十六進(jìn)制記和點(diǎn)得點(diǎn)不是十六
3、進(jìn)制加邏輯數(shù)據(jù)的運(yùn)算邏輯與。兩個(gè)輸入一個(gè)輸出中間加一個(gè)恒定電壓有為,全出邏輯或有為,全出;字長(zhǎng)通常與計(jì)算機(jī)內(nèi)部的寄存器和運(yùn)算器數(shù)據(jù)總線的寬度一致實(shí)例1功能感受protues仿真單片機(jī)播放渴望主題曲運(yùn)用protues打開(kāi)仿真原理圖。對(duì)單片機(jī)進(jìn)行處理編輯edit component,選取目標(biāo)文件hexClock frequency 時(shí)鐘頻率Ok原理圖編輯窗口沒(méi)有滾動(dòng)條,可通過(guò)預(yù)覽窗口該表原理圖的可視范圍。Protues雙擊右鍵刪除先單擊鼠標(biāo)右鍵,可通過(guò)鼠標(biāo)左鍵可以編輯元器件的屬性鼠標(biāo)右鍵來(lái)刪除畫(huà)錯(cuò)的連線中鍵縮放原理圖新建即保存新建設(shè)計(jì)文件Junction dot mode連接點(diǎn) Subcircui
4、t mode 子電路 lab用總線時(shí)會(huì)用到Terminals mode 終端接口,有VCC地輸出輸入等接口Device pins mode 器件引腳用于繪制各種引腳。Graph mode 仿真圖表,用于各種分析,如noise analysisTape recorder mode錄音機(jī)Generator mode 信號(hào)發(fā)生器Voltage probe mode 電壓探針?lè)抡鎴D表用Current probe mode 電流探針?lè)抡鎴D表用Virtual instruments mode虛擬儀表有示波器可顯示工作波形Resistors 電阻Capacitors電容Crystal晶振Radianl el
5、ectrolytic圓柱形電解電容Keywords輸入resistors 470r或功率先選擇元器件后放元器件Led+yellowDrag object 拖動(dòng)對(duì)象Editi properties 編輯屬性Rotate clockwise 順時(shí)針旋轉(zhuǎn)90Rotate anti-clockwise 逆時(shí)針旋轉(zhuǎn)90X-mirror 水平翻轉(zhuǎn)Y-mirror 垂直翻轉(zhuǎn)刪可以右鍵雙擊雙擊鼠標(biāo)左鍵編輯label放置電源和地必須編輯正確的label如VCC地GND各元器件引腳通過(guò)總線的連接并不表示真正意義上的電氣連接,需要添加網(wǎng)絡(luò)標(biāo)號(hào)。要運(yùn)行雙擊單片機(jī)基本電源5V振蕩電路:單片機(jī)是一種時(shí)序電路,必須施加脈沖
6、信號(hào)才能工作。在它的內(nèi)部有一個(gè)時(shí)鐘產(chǎn)生電路,只要接上兩個(gè)電容和一個(gè)晶振即可正常工作。P30復(fù)位電路;啟動(dòng)后讓單片機(jī)從初始狀態(tài)開(kāi)始執(zhí)行程序。EA一橫:接正電源端,表示使用內(nèi)部程序存儲(chǔ)器。注意:觀察仿真效果時(shí),晶振電路,復(fù)位電路和EA引腳和電路的連接可以省略。Keil軟件源程序后綴。C必須手工輸入,表示為c語(yǔ)言程序,讓keilc51采用對(duì)應(yīng)的c語(yǔ)言的方式來(lái)編譯源程序。#include包含51單片機(jī)寄存器定義的頭文件將新建的源程序文件加載到項(xiàng)目管理器右擊source group文件add c文件單片機(jī)不能處理c,必須將c轉(zhuǎn)換成二進(jìn)制或十六進(jìn)制代碼,匯編或編譯。用鼠標(biāo)右鍵點(diǎn)擊target 進(jìn)入opti
7、ons for target 確認(rèn)output選項(xiàng)中create hex重新構(gòu)造所有目標(biāo)程序燒錄器及燒錄軟件的使用單片機(jī)軟硬件系統(tǒng)仿真成功后,要真正投入實(shí)際應(yīng)用,必須將程序燒寫(xiě)入單片機(jī)芯片,A51程序燒錄器和先將COM接口(用作數(shù)據(jù)通信)與計(jì)算機(jī)的COM接口(RS-232)連接好,然后將單片機(jī)安插在燒錄器的插座中,再用一根USB線將USB接口與計(jì)算機(jī)的USB接口連接,讓計(jì)算機(jī)通過(guò)這根USB線向燒錄器提供+5V電源使用燒錄器前,手動(dòng)設(shè)置一些,參數(shù)標(biāo)簽頁(yè),根據(jù)COM口,設(shè)置好串口,波特率設(shè)置為28800;點(diǎn)擊自動(dòng)擦除器件命令,點(diǎn)擊打開(kāi)文件命令選擇單片機(jī)文件十六進(jìn)制文件hex 再點(diǎn)擊打開(kāi)點(diǎn)擊自動(dòng)寫(xiě)器
8、件。實(shí)例4用單片機(jī)控制一個(gè)燈閃爍Led燈亮存在電壓差和正向偏置延遲函數(shù)Void main(void)/ 兩個(gè)void分別表示無(wú)須返回值和沒(méi)有參數(shù)傳遞 Unsigned int i;/ 定義無(wú)符號(hào)整數(shù),最大65535 For(i=0;i20000;i+) ; 只有一個(gè)分號(hào)表示什么都不做,等待一個(gè)機(jī)器周期 0x中的0是數(shù)字0,而不是字母O郁悶一編寫(xiě)keil時(shí),文檔第一行必須是#include虛擬儀表示波器oscilloscopeProtues示波器面板?及使用單片機(jī)需要一個(gè)時(shí)鐘信號(hào)送給內(nèi)部個(gè)電路,才能使他們有節(jié)拍的工作,時(shí)鐘信號(hào)的頻率由外部振蕩電路的晶振頻率決定,51系列單片機(jī)的機(jī)器周期是由12個(gè)
9、振蕩周期組成。指令周期:?jiǎn)纹瑱C(jī)執(zhí)行一條指令的時(shí)間。時(shí)鐘頻率越低,延時(shí)的時(shí)間就越長(zhǎng),燈閃爍的速度就越慢。實(shí)例5 將p1口狀態(tài)送入p0口p2口p3口利用單片機(jī)工作速度快的特點(diǎn),無(wú)限循環(huán)可以讓單片機(jī)不停地把p1口的電平狀態(tài)送到p0口p2口和p3口。引腳接地低電平被輸入到p口實(shí)例6使用p3口流水點(diǎn)亮8位led記憶,0xfe 0xfd 0xfb 0xf7 0xef 0xdf 0xbf 0x7f 實(shí)例7通過(guò)對(duì)p3口地址的操作流水點(diǎn)亮8位led單片機(jī)都有固定的地址,記憶:張三在教室的第2排第5列老師可以說(shuō)清張三回答問(wèn)題也可以說(shuō)請(qǐng)第2排第5列的同學(xué)答題。Sfr x=0xb0; 通過(guò)關(guān)鍵字sfr將x定義為p2的
10、地址0xb0定義后,程序中對(duì)x的操作就相當(dāng)于對(duì)地址0xb0即p3的操作類似于指針P3口的固定地址是BOHMCS-51單片機(jī)存儲(chǔ)器的基本結(jié)構(gòu) 它有兩種1即程序存儲(chǔ)器和2數(shù)據(jù)存儲(chǔ)器從物理MSC-51有4個(gè)存儲(chǔ)地址空間,即片內(nèi)程序存儲(chǔ)器和片外程序存儲(chǔ)器程序存儲(chǔ)器受EA一橫外接電平的控制。1當(dāng)EA一橫接地時(shí),單片機(jī)只能使用外部程序存儲(chǔ)器2當(dāng)EA一橫接+5v是單片機(jī)先使用內(nèi)部程序存儲(chǔ)器,容量不夠時(shí)自動(dòng)使用外部程序存儲(chǔ)器。特殊功能寄存器ACC 累加器標(biāo)識(shí)符名稱地址ACC累加器E0HBb寄存器F0HPSW程序狀態(tài)字D0HSP堆棧指針81HDRTR數(shù)據(jù)指針83H 82HP080HP190HP2A0HP3B0H
11、IP中斷優(yōu)先級(jí)控制B8HIE允許中斷控制A8HTMOD定計(jì)方式控制89HTCON定計(jì)控制88HTH0定計(jì)0高位字節(jié)8CHTL0定計(jì)0低位字節(jié)8AHTH1定計(jì)1高位字節(jié)8DHTL1定計(jì)1低位字節(jié)8BHSCON串行控制98HSBUF串行數(shù)據(jù)緩沖器99HPCON電源控制87H單片機(jī)的復(fù)位電路P54頁(yè)?單片機(jī)C語(yǔ)言開(kāi)發(fā)基礎(chǔ)#includeC注釋1種采用/*。*/可以注釋多行內(nèi)容2種采用/但只能注釋一行ANSI標(biāo)準(zhǔn)定義的關(guān)鍵字P57記憶思考P58跳過(guò)數(shù)據(jù)類型表p59頁(yè)指針型數(shù)據(jù)位類型數(shù)據(jù)空類型數(shù)據(jù)延時(shí)函數(shù)不需要返回值。X+先用x的值,再讓x加1邏輯與&邏輯或|邏輯非!按位與& 25&77=9按位或| 2
12、5|77=93按位異或 相異為1,相同出0按位取反 有0出1,有1出0左移運(yùn)算符 將一個(gè)二進(jìn)制數(shù)的各位全部左移若干位,移動(dòng)的過(guò)程中,高位丟棄,低位補(bǔ)0. w=0x3a B w低位丟棄,高位補(bǔ)0賦值運(yùn)算符逗號(hào)運(yùn)算符條件運(yùn)算符強(qiáng)制轉(zhuǎn)換運(yùn)算符?實(shí)例8用不同數(shù)據(jù)類型的數(shù)據(jù)控制led的閃爍 使用無(wú)符號(hào)整型數(shù)據(jù)和無(wú)符號(hào)字符數(shù)據(jù)來(lái)設(shè)計(jì)延時(shí)函數(shù)。由于整型數(shù)據(jù)占兩個(gè)字節(jié),而無(wú)符號(hào)字符型數(shù)據(jù)僅占一個(gè)字節(jié),因此對(duì)無(wú)符號(hào)整型數(shù)據(jù)進(jìn)行操作花費(fèi)的時(shí)間就要長(zhǎng)一些,整型數(shù)據(jù)要實(shí)現(xiàn)100次循環(huán),消耗的時(shí)間約800個(gè)機(jī)器周期。無(wú)符號(hào)100占300個(gè)。為了提高運(yùn)行效率,盡可能用無(wú)符號(hào)字符型數(shù)據(jù)。實(shí)例9 用p0口和p1口分別顯示加法
13、和減法運(yùn)算結(jié)果其實(shí)就是利用二進(jìn)制的單位數(shù)值進(jìn)行亮1不亮0的表示乘法除法就是利用二進(jìn)制轉(zhuǎn)化為十進(jìn)制再進(jìn)行處理實(shí)例12用自增運(yùn)算控制p0口8位ked的閃爍花樣只要送到p0口的數(shù)值發(fā)生變化,p0口8位led點(diǎn)亮的狀態(tài)就會(huì)發(fā)生變化??梢韵葘⒆兞康某踔邓偷絧0口延遲一段時(shí)間,再利用自增運(yùn)算使變量加1,然后將新的變量值送到p0口并延時(shí)一段時(shí)間,即可使8位led的閃爍花樣不斷變化,Unsigned char I;定義無(wú)符號(hào)字符型變量,其值不超過(guò)255運(yùn)用變量的值變化和將變量的值送到p口用來(lái)變化。For(i=0;i0)&(90xab)=1&0=0;將運(yùn)算結(jié)果送到p0口實(shí)例14用p0口顯示條件運(yùn)算的結(jié)果P0=(
14、84)?8:4; P0=8=B實(shí)例15;用p0口顯示按位異或運(yùn)算結(jié)果異或相異出1,相同出0;記憶異性才能很火熱的做出子女P0=0xa20x3c 異或要做必須上頂 很公平應(yīng)用實(shí)例16 用p0口顯示左移的運(yùn)算結(jié)果實(shí)例17萬(wàn)能邏輯電路 F=EY+Z邏輯函數(shù)p77圖1專門(mén)設(shè)計(jì)數(shù)字電路,實(shí)現(xiàn)邏輯功能2通過(guò)單片機(jī)編程來(lái)實(shí)現(xiàn)邏輯功能軟件即硬件/實(shí)例17:萬(wàn)能邏輯電路實(shí)驗(yàn)#include /包含單片機(jī)寄存器的頭文件sbit F=P14; /將F位定義為 P1.4sbit X=P15; /將X位定義為 P1.5sbit Y=P16; /將Y位定義為 P1.6sbit Z=P17; /將Z位定義為 P1.7voi
15、d main(void) while(1) F=(X)&Y)|Z; /將邏輯運(yùn)算結(jié)果賦給F ; 實(shí)例18用右移實(shí)現(xiàn)流水燈前提設(shè)p口為0xff八次右移一位高位丟棄低位補(bǔ)0延遲用的變量因?yàn)橐〈髷?shù)所以必須用int后面因?yàn)橐焖匀har型變量因?yàn)閱纹瑱C(jī)運(yùn)行快。所以led燈閃后要延遲。C語(yǔ)言語(yǔ)句 If(S1=0)P1=0x00;如果按鍵s按下接地(相應(yīng)位為低電平),Swich 整型 break 三者緊密While語(yǔ)句花括號(hào)運(yùn)用和 一般情況下,在循環(huán)體中應(yīng)該有讓循環(huán)停止的語(yǔ)句。?Do while 語(yǔ)句注意;Do和while連用 while后面的分號(hào)不能丟,它表示整個(gè)循環(huán)語(yǔ)句的結(jié)束Do循環(huán)語(yǔ)句 whi
16、le(循環(huán)式)盡量避免使用goto語(yǔ)句P87頁(yè)的程序軟件即硬件實(shí)例21用for語(yǔ)句實(shí)現(xiàn)鳴笛報(bào)警T=1/f,所以要讓蜂鳴器發(fā)出頻率f的聲音,只要讓單片機(jī)輸送周期為t的脈沖方波電平即可,讓單片機(jī)沒(méi)半個(gè)周期取反一次。半周期可通過(guò)延時(shí)來(lái)實(shí)現(xiàn)。可以通過(guò)循環(huán)的方式來(lái)實(shí)現(xiàn)延時(shí),P90一重循環(huán)消耗的機(jī)器數(shù)近似N=3*n二重循環(huán)消耗的機(jī)器數(shù)近似N=3*n*m例子,如果單片機(jī)的晶振頻率為11.0592MHz,則機(jī)器的周期為1.085s,要發(fā)出1600Hz的聲音,就讓單片機(jī)每半個(gè)周期312s將輸出電平取反一次,而延時(shí)312s需要消耗機(jī)器周期數(shù)N=312/1.085286可以取300循環(huán)次數(shù)300/3=100次Voi
17、d delay(void) Unsigned char I;For(i=0;i100;i+);形成1600Hz的音頻相對(duì)應(yīng)800Hz的音頻可以i取200Sbit sound=P15;Sound=0; 即可執(zhí)行Unsigned char i;While(1)i=0;?數(shù)組是同類型的一組變量?Unsigned char code tab應(yīng)用卻是tab【】? 字符型數(shù)組中的個(gè)字符數(shù)據(jù)在單片機(jī)中是以字符的ASCII 存放的,正確的使用指針,可以有效地表示復(fù)雜的數(shù)據(jù)類型,動(dòng)態(tài)分配內(nèi)存,方便的使用字符串,有效地使用數(shù)組。指針本身就具有地址還存在一個(gè)地址,Unsigned char*p;Unsigned c
18、har a;P=&a;指針數(shù)組Unsigned char a=0,1,2,3;Unsigned char *a=&a0,&a1,&a2,&a3;數(shù)組的指針Unsigned char a=0,1,2,3;Unsignde *p;P=&a0;Pi+j 為Pij實(shí)例26未細(xì)看返回值是通過(guò)return語(yǔ)句獲得的。如果函數(shù)無(wú)返回值,需要用void來(lái)聲明。數(shù)組作為函數(shù)參數(shù)一個(gè)數(shù)組的名字表示該數(shù)組的首地址,所以用數(shù)組名作為函數(shù)的參數(shù)時(shí)。被傳遞的數(shù)組的首地址,被調(diào)用函數(shù)的參數(shù)的形式須是定義為指針型變量。 用數(shù)組名作為函數(shù)的參數(shù)時(shí),應(yīng)該在主調(diào)函數(shù)和被調(diào)函數(shù)中都進(jìn)行數(shù)組定義。定義的數(shù)組類型必須一致。編譯器不檢查形
19、參數(shù)組的長(zhǎng)度p109函數(shù)?函數(shù)型指針一個(gè)函數(shù)在編譯時(shí),就分配了一個(gè)入口地址,這個(gè)入口地址就是函數(shù)的指針,類型說(shuō)明符 (*指針變量名)(形參列表)Int (*p)(int a,int b)(*p)(a,b)這些需要思考p110頁(yè)。P1=z/256;取得z的高八位P2=z/256;取得z的低八位?While(1);無(wú)限循環(huán)防止程序跑飛。實(shí)例30用有參函數(shù)控制p0口8位流水燈的流水速度P113實(shí)例31不實(shí)用?、實(shí)例32 實(shí)例33是不錯(cuò)的c語(yǔ)言程序函數(shù)調(diào)用。練習(xí)c語(yǔ)言p115p116實(shí)例34不錯(cuò)c語(yǔ)言程序p118指針數(shù)組適合用來(lái)指向若干個(gè)字符串,尤其是各列字符串長(zhǎng)度不一致的情形,這對(duì)于字符的液晶顯示等
20、很有意義。實(shí)際運(yùn)用液晶等顯示器顯示字符時(shí),如果液晶的接口通過(guò)P0口和單片機(jī)連接,將各字符串送入p0口,實(shí)際上就是送入液晶顯示器。實(shí)例35#includeP0=isalpha(_)?0xf0:0x0f;內(nèi)部函數(shù)文件instrins.h中有_crol_()函數(shù)實(shí)例36;應(yīng)用內(nèi)部函數(shù)文件instrins.h中有_crol_()函數(shù)來(lái)點(diǎn)亮P3口8位流水燈_crol_(15,2)的返回值為B=0x3c思考他的應(yīng)用實(shí)例37實(shí)例38感覺(jué)像是介紹函數(shù)以后?c語(yǔ)言應(yīng)用程序卡那可可能看看C語(yǔ)言編譯預(yù)處理宏定義c語(yǔ)言允許一個(gè)標(biāo)示符來(lái)表示一個(gè)字符串,稱為宏。P125宏定義不是c語(yǔ)句,所以不需加分號(hào)??梢杂?undef
21、命令來(lái)終止宏定義的作用域。即對(duì)#undef后面的無(wú)用。為防止歧義應(yīng)加括號(hào)及時(shí)帶參數(shù)的函數(shù)宏和函數(shù)不同,函數(shù)是先求出實(shí)參表達(dá)式的值,然后代入形參,而帶參數(shù)的宏只是進(jìn)行簡(jiǎn)單的字符替換。實(shí)例40文件包含應(yīng)用舉例使用頭文件為#include中有關(guān)特殊功能寄存器的定義已將P3_0定義為P3.0引腳,直接應(yīng)用P3_0就可以對(duì)P3口進(jìn)行操作了。實(shí)例41條件編譯應(yīng)用舉例 常用的條件編譯是根據(jù)某常量表達(dá)式的值的是否為真來(lái)控制編譯即#if 常量表達(dá)式 程序段1#else 程序段2#endif?思考好的應(yīng)用第五章單片機(jī)的定時(shí)器計(jì)數(shù)器當(dāng)加在定時(shí)器計(jì)數(shù)器T0或T1用作計(jì)數(shù)器時(shí),對(duì)外接晶振產(chǎn)生的振蕩信號(hào)經(jīng)12分頻后,提供
22、給計(jì)數(shù)器,作為計(jì)數(shù)器的脈沖輸入,計(jì)數(shù)器以12分頻后的脈沖周期為基本計(jì)數(shù)單位,對(duì)輸入的脈沖進(jìn)行計(jì)數(shù),直至產(chǎn)生溢出。?P136頁(yè)到p140頁(yè)有點(diǎn)不懂。工作方式圖p135T0或T1引腳上的外部脈沖信號(hào)出現(xiàn)一個(gè)由1到0的負(fù)跳變時(shí),計(jì)數(shù)器加1,直至計(jì)數(shù)器溢出。CPU是按順序進(jìn)行工作的。實(shí)例42用計(jì)時(shí)器T0查詢方式控制P2口的8位LED閃爍T0工作于方式1,LED燈的閃爍周期為100ms,即亮50ms,熄滅50ms;12分頻即頻率被12等分,周期即12除頻率定時(shí)器的初值設(shè)定需要進(jìn)行計(jì)算,總而言之,就是定時(shí)器必須達(dá)到頂值即65536.初值需要T0的高八位寄存器TH0和低八位寄存器TL0分別存儲(chǔ)存儲(chǔ)方法及TH
23、0= /256;TL0= %256;溢出標(biāo)志位是否為1若為1表示時(shí)間已到,否則,等待。/實(shí)例42:用定時(shí)器T0查詢方式P2口8位控制LED閃爍#include / 包含51單片機(jī)寄存器定義的頭文件/*函數(shù)功能:主函數(shù)*/void main(void) / EA=1; /開(kāi)總中斷/ET0=1; /定時(shí)器T0中斷允許 TMOD=0x01; /使用定時(shí)器T0的模式1TH0=(65536-46083)/256; /定時(shí)器T0的高8位賦初值TL0=(65536-46083)%256; /定時(shí)器T0的高8位賦初值TR0=1; /啟動(dòng)定時(shí)器T0TF0=0;P2=0xff; while(1)/無(wú)限循環(huán)等待查詢
24、 while(TF0=0)/查詢標(biāo)志位是否溢出 ; TF0=0; P2=P2;按位取反,實(shí)現(xiàn)led燈的閃爍 TH0=(65536-46083)/256; /定時(shí)器T0的高8位賦初值 TL0=(65536-46083)%256; /定時(shí)器T0的高8位賦初值 TFO 記憶flow溢出TRO 記憶trigger引起啟動(dòng)THO 記憶high高八位TMOD 記憶mode 方式實(shí)例43,用定時(shí)器t1查詢方式控制單片機(jī)發(fā)出1kHz音頻/實(shí)例43:用定時(shí)器T1查詢方式控制單片機(jī)發(fā)出1KHz音頻#include / 包含51單片機(jī)寄存器定義的頭文件sbit sound=P37; /將sound位定義為P3.7引
25、腳/*函數(shù)功能:主函數(shù)*/void main(void) / EA=1; /開(kāi)總中斷/ET0=1; /定時(shí)器T0中斷允許 TMOD=0x10; /使用定時(shí)器T1的模式1TH1=(65536-921)/256; /定時(shí)器T1的高8位賦初值TL1=(65536-921)%256; /定時(shí)器T1的高8位賦初值TR1=1; /啟動(dòng)定時(shí)器T1TF1=0;while(1)/無(wú)限循環(huán)等待查詢 while(TF1=0) ; TF1=0;sound=sound; /將P3.7引腳輸出電平取反 TH1=(65536-921)/256; /定時(shí)器T0的高8位賦初值 TL1=(65536-921)%256; /定時(shí)器
26、T0的高8位賦初值 /實(shí)例44:將計(jì)數(shù)器T0計(jì)數(shù)的結(jié)果送P1口8位LED顯示#include / 包含51單片機(jī)寄存器定義的頭文件sbit S=P34; /將S位定義為P3.4引腳/*函數(shù)功能:主函數(shù)*/void main(void) / EA=1; /開(kāi)總中斷/ET0=1; /定時(shí)器T0中斷允許 TMOD=0x02; /使用定時(shí)器T0的模式2TH0=256-156; /定時(shí)器T0的高8位賦初值TL0=256-156; /定時(shí)器T0的高8位賦初值TR0=1; /啟動(dòng)定時(shí)器T0while(1)/無(wú)限循環(huán)等待查詢 while(TF0=0) /如果未計(jì)滿就等待 if(S=0) /按鍵S按下接地,電平
27、為0 P1=TL0; /計(jì)數(shù)器TL0加1后送P1口顯示 TF0=0; /計(jì)數(shù)器溢出后,將TF0清0 第六章單片機(jī)的中斷系統(tǒng)中斷系統(tǒng)類似寫(xiě)作業(yè)定時(shí)器計(jì)時(shí)器實(shí)際上就是中斷源。MCS51單片機(jī)提供5個(gè)中斷源。外部中斷INT0一橫 編號(hào)0 由P3.2引腳輸入定時(shí)器T0 編號(hào)1外部中斷INT1一橫 編號(hào)2 由P3.3引腳輸入定時(shí)器T1 編號(hào)3串行口通信中斷RI或TI 編號(hào)4自然優(yōu)先級(jí)從上到下逐級(jí)遞減。P150 p151頁(yè)未看void Time(void) interrupt 1 using 0/實(shí)例46:用定時(shí)器T0的中斷實(shí)現(xiàn)長(zhǎng)時(shí)間定時(shí)#include / 包含51單片機(jī)寄存器定義的頭文件sbit D1
28、=P20; /將D1位定義為P2.0引腳unsigned char Countor; /設(shè)置全局變量,儲(chǔ)存定時(shí)器T0中斷次數(shù)/*函數(shù)功能:主函數(shù)*/void main(void) EA=1; /開(kāi)總中斷ET0=1; /定時(shí)器T0中斷允許 TMOD=0x01; /使用定時(shí)器T0的模式2TH0=(65536-46083)/256; /定時(shí)器T0的高8位賦初值TL0=(65536-46083)%256; /定時(shí)器T0的高8位賦初值TR0=1; /啟動(dòng)定時(shí)器T0Countor=0; /從0開(kāi)始累計(jì)中斷次數(shù)while(1)/無(wú)限循環(huán)等待中斷 ; /*函數(shù)功能:定時(shí)器T0的中斷服務(wù)程序*/void Tim
29、e0(void) interrupt 1 using 0 /“interrupt”聲明函數(shù)為中斷服務(wù)函數(shù) /其后的1為定時(shí)器T0的中斷編號(hào);0表示使用第0組工作寄存器 Countor+; /中斷次數(shù)自加1if(Countor=20) /若累計(jì)滿20次,即計(jì)時(shí)滿1s D1=D1; /按位取反操作,將P2.0引腳輸出電平取反Countor=0; /將Countor清0,重新從0開(kāi)始計(jì)數(shù) TH0=(65536-46083)/256; /定時(shí)器T0的高8位重新賦初值TL0=(65536-46083)%256; /定時(shí)器T0的高8位重新賦初值 定時(shí)器T0工作于方式1時(shí),最大可計(jì)脈沖數(shù)次數(shù)為65536,對(duì)
30、于11。0592MHz的時(shí)鐘頻率。一個(gè)脈沖的寬度為1.085s,則最大計(jì)時(shí)長(zhǎng)度只有1.08565536=71107s即大約71ms,要想計(jì)時(shí)更長(zhǎng)時(shí)間,采用 軟件計(jì)時(shí)的方法設(shè)置一個(gè)變量counter 來(lái)存儲(chǔ)定時(shí)器T0的中斷次數(shù),即每產(chǎn)生一次中斷,使變量counter自加1,如果T0每50ms中斷一次,那當(dāng)counter自加20次時(shí),所及時(shí)間為1s。中斷一次就要重新賦值一次控制兩個(gè)LED燈以不同的周期閃爍,第一個(gè)LED亮滅時(shí)間為100ms,第二個(gè)LED亮滅時(shí)間為400ms,所以需要設(shè)置兩個(gè)變量counter1 和counter2來(lái)分別統(tǒng)計(jì)中斷次數(shù),且都為最小的整數(shù)倍。/實(shí)例47:用定時(shí)器T1中斷控
31、制兩個(gè)LED以不同周期閃爍#include / 包含51單片機(jī)寄存器定義的頭文件sbit D1=P20; /將D1位定義為P2.0引腳sbit D2=P21; /將D2位定義為P2.1引腳unsigned char Countor1; /設(shè)置全局變量,儲(chǔ)存定時(shí)器T1中斷次數(shù)unsigned char Countor2; /設(shè)置全局變量,儲(chǔ)存定時(shí)器T1中斷次數(shù)/*函數(shù)功能:主函數(shù)*/void main(void) EA=1; /開(kāi)總中斷ET1=1; /定時(shí)器T1中斷允許 TMOD=0x10; /使用定時(shí)器T1的模式1TH1=(65536-46083)/256; /定時(shí)器T1的高8位賦初值TL1=
32、(65536-46083)%256; /定時(shí)器T1的高8位賦初值TR1=1; /啟動(dòng)定時(shí)器T1Countor1=0; /從0開(kāi)始累計(jì)中斷次數(shù)Countor2=0; /從0開(kāi)始累計(jì)中斷次數(shù) while(1)/無(wú)限循環(huán)等待中斷 ; /*函數(shù)功能:定時(shí)器T1的中斷服務(wù)程序*/void Time1(void) interrupt 3 using 0 /“interrupt”聲明函數(shù)為中斷服務(wù)函數(shù) /其后的3為定時(shí)器T1的中斷編號(hào);0表示使用第0組工作寄存器 7 Countor1+; /Countor1自加1Countor2+; /Countor2自加1if(Countor1=2) /若累計(jì)滿2次,即計(jì)
33、時(shí)滿100ms D1=D1; /按位取反操作,將P2.0引腳輸出電平取反Countor1=0; /將Countor1清0,重新從0開(kāi)始計(jì)數(shù)if(Countor2=8) /若累計(jì)滿8次,即計(jì)時(shí)滿400ms D2=D2; /按位取反操作,將P2.1引腳輸出電平取反Countor2=0; /將Countor1清0,重新從0開(kāi)始計(jì)數(shù) TH1=(65536-46083)/256; /定時(shí)器T1的高8位重新賦初值TL1=(65536-46083)%256; /定時(shí)器T1的高8位重新賦初值 實(shí)現(xiàn)方法 先開(kāi)總中斷EA 分支中斷ET?,選擇方式,賦初值 ,啟動(dòng)定時(shí)器T?,聲明音調(diào)與頻率的關(guān)系音調(diào)低1低2低3低4
34、低5低6低7頻率262294330349392440494音調(diào)中1中2中3中4中5中6中7頻率523 587659698784880988音調(diào)高1高2高3高4高5高6高7頻率1046117513181397156817601967由于單片機(jī)的輸入輸出口只有高電平1和低電平0,因此向蜂鳴器輸送的電平信號(hào)實(shí)際是就是該音頻的方波。例如中音頻率523Hz,他的周期為1523秒,即1。93ms只要向蜂鳴器輸送周期為1.91ms的脈沖方波電平信號(hào)就能發(fā)出523Hz的音調(diào),該方波的半周期為1.912=0.995ms。為此,需要利用定時(shí)器的中斷,讓輸送給蜂鳴器的電平信號(hào)每0。955ms取反一次即可,由于本書(shū)使
35、用的單片機(jī)晶振為11.0952mhz,他的機(jī)器周期為12(111。0592)=1.085s。因此需要的機(jī)器周期總數(shù)為995s1.085s=880定時(shí)器的定時(shí)常數(shù)為880C=106s除2f1.085s=頻率THO=(8192-C)32?每分鐘為72節(jié)拍,每節(jié)拍100060ms72=833ms/實(shí)例49:用定時(shí)器T0的中斷實(shí)現(xiàn)渴望主題曲的播放#include /包含51單片機(jī)寄存器定義的頭文件sbit sound=P37; /將sound位定義為P3.7unsigned int C; /儲(chǔ)存定時(shí)器的定時(shí)常數(shù)/以下是C調(diào)低音的音頻宏定義#define l_dao 262 /將“l(fā)_dao”宏定義為低
36、音“1”的頻率262Hz#define l_re 286 /將“l(fā)_re”宏定義為低音“2”的頻率286Hz#define l_mi 311 /將“l(fā)_mi”宏定義為低音“3”的頻率311Hz#define l_fa 349 /將“l(fā)_fa”宏定義為低音“4”的頻率349Hz#define l_sao 392 /將“l(fā)_sao”宏定義為低音“5”的頻率392Hz#define l_la 440 /將“l(fā)_a”宏定義為低音“6”的頻率440Hz#define l_xi 494 /將“l(fā)_xi”宏定義為低音“7”的頻率494Hz/以下是C調(diào)中音的音頻宏定義#define dao 523 /將“da
37、o”宏定義為中音“1”的頻率523Hz#define re 587 /將“re”宏定義為中音“2”的頻率587Hz#define mi 659 /將“mi”宏定義為中音“3”的頻率659Hz#define fa 698 /將“fa”宏定義為中音“4”的頻率698Hz#define sao 784 /將“sao”宏定義為中音“5”的頻率784Hz#define la 880 /將“l(fā)a”宏定義為中音“6”的頻率880Hz#define xi 987 /將“xi”宏定義為中音“7”的頻率523H /以下是C調(diào)高音的音頻宏定義#define h_dao 1046 /將“h_dao”宏定義為高音“1”
38、的頻率1046Hz#define h_re 1174 /將“h_re”宏定義為高音“2”的頻率1174Hz#define h_mi 1318 /將“h_mi”宏定義為高音“3”的頻率1318Hz#define h_fa 1396 /將“h_fa”宏定義為高音“4”的頻率1396Hz#define h_sao 1567 /將“h_sao”宏定義為高音“5”的頻率1567Hz#define h_la 1760 /將“h_la”宏定義為高音“6”的頻率1760Hz#define h_xi 1975 /將“h_xi”宏定義為高音“7”的頻率1975Hz/*函數(shù)功能:1個(gè)延時(shí)單位,延時(shí)200ms*/vo
39、id delay() unsigned char i,j; for(i=0;i250;i+) for(j=0;j250;j+) ; /*函數(shù)功能:主函數(shù)*/void main(void) unsigned char i,j; /以下是渴望片頭曲的一段簡(jiǎn)譜 unsigned int code f=re,mi,re,dao,l_la,dao,l_la, /每行對(duì)應(yīng)一小節(jié)音符 l_sao,l_mi,l_sao,l_la,dao, l_la,dao,sao,la,mi,sao, re, mi,re,mi,sao,mi, l_sao,l_mi,l_sao,l_la,dao, l_la,l_la,dao,
40、l_la,l_sao,l_re,l_mi,l_sao,re,re,sao,la,sao,fa,mi,sao,mi,la,sao,mi,re,mi,l_la,dao,re,mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,l_la,dao,re,l_la,dao,re,mi,re,l_la,dao,re,l_la,dao,re,mi,re,0xff; /以0xff作為音符的結(jié)束標(biāo)志/以下是簡(jiǎn)譜中每個(gè)音符的節(jié)拍/4對(duì)應(yīng)4個(gè)延時(shí)單位,2對(duì)應(yīng)2個(gè)延時(shí)單位,1對(duì)應(yīng)1個(gè)延時(shí)單位 unsigned char code JP =4,1,1,4,1,1,2, 2,2,2,2,8
41、,4,2,3,1,2,2,10,4,2,2,4,4,2,2,2,2,4, 2,2,2,2,2,2,2,10,4,4,4,2,2,4,2,4,4,4,2,2,2,2,2,2,10,4,2,2,4,4,2,2,2,2,6,4,2,2,4,1,1,4,10,4,2,2,4,1,1,4,10; EA=1; /開(kāi)總中斷 ET0=1; /定時(shí)器T0中斷允許 TMOD=0x00; / 使用定時(shí)器T0的模式1(13位計(jì)數(shù)器) while(1) /無(wú)限循環(huán) i=0; /從第1個(gè)音符f0開(kāi)始播放 while(fi!=0xff) /只要沒(méi)有讀到結(jié)束標(biāo)志就繼續(xù)播放 C=/fi; TH0=(8192-C)/32; /可
42、證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法 TL0=(8192-C)%32; /可證明這是13位計(jì)數(shù)器TL0低5位的賦初值方法 TR0=1; /啟動(dòng)定時(shí)器T0 for(j=0;jJPi;j+) /控制節(jié)拍數(shù) delay(); /延時(shí)1個(gè)節(jié)拍單位 TR0=0; /關(guān)閉定時(shí)器T0 i+; /播放下一個(gè)音符 /*函數(shù)功能:定時(shí)器T0的中斷服務(wù)子程序,使P3.7引腳輸出音頻的方波*/ void Time0(void ) interrupt 1 using 1 sound=!sound; /將P3.7引腳輸出電平取反,形成方波 TH0=(8192-C)/32; /可證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法 TL0=(8192-C)%32; /可證明這是13位計(jì)數(shù)器TL0低5位的賦初值方法 、實(shí)例51本例用單片機(jī)U1從P1。4引腳輸出正脈寬為250s的方波,再利用單片機(jī)U2的into引腳檢測(cè),驗(yàn)證方波的正脈沖寬度,有點(diǎn)沒(méi)看懂/實(shí)例51-2:定時(shí)器T0的模式2測(cè)量正脈沖寬度#include /包含51單片機(jī)寄存器定義的頭文件sbit ui=P32; /將ui位定義為P3.0(INT0)引腳,表示輸入電壓/*函數(shù)功能:主函數(shù)*/void main(v
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何制作卡通課件
- 咖啡書(shū)吧設(shè)計(jì)
- 讀讀小學(xué)數(shù)學(xué)新課程標(biāo)準(zhǔn)有感
- 2025屋頂保溫涂料施工合同范本
- 2025公寓樓外墻翻新合同
- 智慧樹(shù)知到《大學(xué)生職業(yè)生涯規(guī)劃與就業(yè)指導(dǎo)》(西南民族大學(xué))章節(jié)測(cè)試答案
- 2025擔(dān)保合同范本模板
- 2025護(hù)欄安裝合同模板
- 2024-2025蘇教版科學(xué)一年級(jí)下冊(cè)(2024)期末考試試卷附答案
- IT行業(yè)發(fā)展趨勢(shì)與人才需求
- GB/T 4326-2006非本征半導(dǎo)體單晶霍爾遷移率和霍爾系數(shù)測(cè)量方法
- 酒水購(gòu)銷(xiāo)合同范本(3篇)
- GCP培訓(xùn)考試題庫(kù)及參考答案(完整版)
- 乒乓球社團(tuán)活動(dòng)記錄
- 新時(shí)代中小學(xué)教師職業(yè)行為十項(xiàng)準(zhǔn)則考核試題及答案
- 數(shù)據(jù)結(jié)構(gòu)-第6章-圖課件
- 《變態(tài)心理學(xué)與健康心理學(xué)》考試復(fù)習(xí)題庫(kù)150題(含答案)
- DB15T 489-2019 石油化學(xué)工業(yè)建設(shè)工程技術(shù)資料管理規(guī)范
- 皮內(nèi)針講課課件
- 村衛(wèi)生室靜脈輸液準(zhǔn)入申請(qǐng)審批表
- 提高鋼柱安裝垂直度合格率QC成果PPT
評(píng)論
0/150
提交評(píng)論