發(fā)光二極管的閃爍顯.ppt
《發(fā)光二極管的閃爍顯.ppt》由會員分享,可在線閱讀,更多相關(guān)《發(fā)光二極管的閃爍顯.ppt(35頁珍藏版)》請在裝配圖網(wǎng)上搜索。
發(fā)光二極管的閃爍顯示 案例功能 定時器T0做定時器使用工作在方式0下 控制發(fā)光二極管 使發(fā)光二極管以亮0 5s后熄0 5s再亮再熄如此反復(fù)的形式進行閃爍 本案例中fosc 11 0592MHZ 閃爍周期為1s 相關(guān)知識 1 發(fā)光二極管的工作特性這個我們在前面以做過介紹 這里就不重述了 要求二極管的初始狀態(tài)是熄滅的 2 定時器T0 T1的基本結(jié)構(gòu) 工作原理3 定時 計數(shù)器0和定時 計數(shù)器1的應(yīng)用設(shè)計 2 定時器T0 T1的基本結(jié)構(gòu) 工作原理 T0 T1的組成結(jié)構(gòu)T0 T1的工作方式T0 T1的控制寄存器計算初值的裝入 T0 T1的組成結(jié)構(gòu) T0 T1的結(jié)構(gòu)如圖6 1所示 圖中i 0 1 表示T0和T1的參數(shù)標記 例如TRi就表示T0的控制位TR0和T1的控制位TR1 Ti為單片機的外部引腳T0 T1 INTi也為單片機的外部引腳INT0 INT1 TFi為中斷標志位TF0 TF1 C T GATE為特殊功能寄存器TMOD中的兩位 TRi TFi為特殊功能寄存器TCON中的二位 從圖中可以看出 T0 T1主要由計數(shù)輸入 計數(shù)器 計數(shù)溢出管理以及控制邏輯等幾個部分組成 圖6 1T0 T1的基本結(jié)構(gòu) 定時 計數(shù)器的輸入有兩路 由特殊功能寄存器TMOD的C T位來管理 C T 0時 由振蕩頻率的12分頻后的脈沖進行計數(shù) 定時 計數(shù)器工作于定時模式 實現(xiàn)的是定時功能 所以定時器的實質(zhì)是對機器周期進行計數(shù)的計數(shù)器 C T 1時 對Ti引腳輸入的外部脈沖進行計數(shù) 定時 計數(shù)器工作于計數(shù)模式 實現(xiàn)計數(shù)器功能 Ti作計數(shù)器使用時 引腳Ti用作外部脈沖輸入引腳 不能作普通的I O端口使用 其它情況下 可作普通的I O端口使用 計數(shù)溢出管理具有使特殊功能寄存器TCON的TFi位自動置1和自動清0的功能 當計數(shù)器計數(shù)滿發(fā)生溢出 即計到模值 時 自動使TFi位置1 CPU響應(yīng)了對應(yīng)的定時中斷并且進入到中斷服務(wù)程序中后 TFi位被自動清0 TFi位也可以用程序指令清0和置1 控制邏輯由受控開關(guān) 特殊功能寄存器TCON的TRi位 TMOD的GATE位 引腳INTi以及門電路組成 控制C 1時 受控開關(guān)閉合 計數(shù)脈沖被送往計數(shù)器計數(shù)器對計數(shù)脈沖計數(shù) 計數(shù)器運行 控制C 0時 控制開關(guān)斷開 計數(shù)器停止計數(shù) 從圖中可以看出 控制C GATE INTi TRi所以 GATE 0時 控制C TRiGATE 1且TRi 1時 控制C INTi實際應(yīng)用中 常將GATE設(shè)為0 用TRi控制計數(shù)器的開啟和停止 當需要測量外部脈沖寬度時 可將GATE設(shè)為1 TRi設(shè)為1 外部脈沖從INTi引腳引入 用外部脈沖控制計數(shù)器的開啟和停止 T0 T1的工作方式 定時 計數(shù)器有4種工作方式 方式0 方式1 方式2 方式3 除方式3外 T0和T1的工作狀態(tài)完全相同 在不同的工作下其計數(shù)器的構(gòu)成不同 在本案例中我們選用工作方式0 所以只對進行詳細的介紹 其它的方式在以后的案例中涉及到了我們再做介紹 方式0 13位的工作方式 定時 計數(shù)器的結(jié)構(gòu)與圖6 1所示的基本結(jié)構(gòu)相同 其中的計數(shù)器為13位的計數(shù)器 它由Tli的低5位和Thi的8位組成 Tli的高3位無效 定時 計數(shù)器工作時 計數(shù)脈沖輸入至TLi Thi作加1計數(shù) 當TLi的低5位發(fā)生由11111B變至00000B時 Thi加1 由TLi和Thi組成的13位計數(shù)器滿后回0時硬件電路自動將TFi置1 T0 T1的控制寄存器 T0 T1的運行受控于特殊功能寄存器TCON和TMOD 1 定時器控制寄存器 TCON 字節(jié)地址 88H 圖6 3TCON中的結(jié)構(gòu)圖 其中 TF1 TR1用于定時 計數(shù)器1 TF0 TR0用于定時 計數(shù)器0 IE1 IT1用于外部中斷1 IE0 IT0用于外部中斷0 各位的含義如下 TFi位 定時 計數(shù)器回0標志位 也稱作定時 計數(shù)器中斷請求標志位 對應(yīng)的計數(shù)器計數(shù)滿回0時 硬件電路自動將TFi位置1 并向CPU提出中斷申請 CPU響應(yīng)對應(yīng)的定時中斷 并進入中斷服務(wù)程序中后 硬件電路自動將TFi清0 TRi位 定時 計數(shù)器運行控制位 它與GATE位 INTi引腳一起組合來控制定時 計數(shù)器的開啟和停止 其詳細的控制關(guān)系請參考 T0 T1的組成結(jié)構(gòu) 中的有關(guān)部分 IEi位 外部中斷請求標志 IEi 0外部中斷INTi無中斷請求 IEi 1外部中斷INTi有中斷請求 CPU響應(yīng)了INTi中斷后 硬件電路自動將IEi位清0ITi位 外部中斷觸發(fā)方式控制位 ITi 0外部中斷INTi用低電平方式觸發(fā)ITi 1外部中斷INTi用下跳沿方式觸發(fā)單片機復(fù)位時 TCON的值為00H 這就意味著上電時T0 T1均被停止 其中TR0和TR1分別用于控制T0和T1的啟動和停止 TF0和TF1用于標識T0和T1是否產(chǎn)生溢出中斷請求 2 定時器方式寄存器TMODTMOD用于控制T0 T1的運行模式和工作方式 字節(jié)地址位89H M1 M0位 工作方式選擇控制位 它們的取值組合用來確定定時 計數(shù)器的工作方式 M1 M0的取值組合與定時 計數(shù)器的工作方式之間的關(guān)系如表所示 GATE位 門控位 與特殊功能寄存器TCON的TRi位以及外部引腳INTi的狀態(tài)組合起來控制定時 計數(shù)器Ti開啟和停止 其詳細的控制方法在 T0與T1的組成結(jié)構(gòu) 中作了介紹 這里不再累述 計算初值的裝入 計數(shù)初值的求法 計數(shù)初值的裝入 計數(shù)初值的求法 T0 T1開啟時 它們的計數(shù)器都是在計數(shù)初值的基礎(chǔ)上作加1計數(shù) 當計數(shù)滿回0時 TFi置1 也就是說 當計數(shù)器計到模值時 TFi被置1 計數(shù)器發(fā)生溢出 此時 計數(shù)次數(shù)N與計數(shù)器的模值M以及計數(shù)初值X之間有如下關(guān)系M N X不同計數(shù)方式下 計數(shù)器的模值是不同的 各種計數(shù)方式下的模值如下 對于模值為M的計數(shù)器 如果要計數(shù)N次后發(fā)生計數(shù)溢出 TFi位置1 則其計數(shù)初值X應(yīng)為 X M N定時 計數(shù)器作計數(shù)器使用時 一般是已知計數(shù)次數(shù)要求計數(shù)初值 我們可以用上式計算得出計數(shù)初值 定時 計數(shù)器作定時器使用時 一般是已知定時時間t 要確定計數(shù)初值X 由于定時器的實質(zhì)是對機器周期進行計數(shù) 每隔一個機器周期其計數(shù)值就加1 因此 若要定時t時間 則計數(shù)器的計數(shù)次數(shù)N為 N t MC fosc t 12式中的MC為機器周期 fosc為晶振的振蕩頻率 計數(shù)初值為 X M N M fosc t 12對于模值為M的計數(shù)器 其計數(shù)次數(shù)N的取值范圍為 1 N M 例6 1 設(shè)單片機的晶振頻率fosc 12MHz 現(xiàn)擬定用T0作1ms定時器 試求其在方式0下的計數(shù)初值X 解 定時器的定時長為1ms 則定時器的計數(shù)次數(shù)N為 N fosc t 12 12 106 1 10 3 12 1000方式0的模值為2000H 所以 計數(shù)初值X M N 2000H 1000 1C18H 計數(shù)初值的裝入 不同的工作方式下 定時 計數(shù)器的構(gòu)成不同 因此其初值的裝入方法也不完全相同 在方式0下 計數(shù)器為13位的計數(shù)器 它由TLi的低5位及THi構(gòu)成 計數(shù)器的低5位二進制數(shù)為TLi中低5二進制數(shù) 高8位二進制數(shù)為THi中的二進制數(shù) 因此 在裝入計數(shù)初值時必須將初值的低5位數(shù)裝入TLi的低5位中 將初值的高8位數(shù)裝入THi中 其具體方法是 將計數(shù)初值轉(zhuǎn)換成13位的二進制數(shù) 截取其高8位二進制數(shù)并傳送至THi中 截取其低5位二進制數(shù) 并在這5位二進制數(shù)左端 高位 補上3位任意二進制數(shù)后行成一個字節(jié)的二進制數(shù) 再將此二進制數(shù)裝入TLi中 實際應(yīng)用中 一般是高3位補0 例如 假定通過計算求得計數(shù)初值為1234H T0采用方式0工作 則把初值1234H轉(zhuǎn)換成13位二進制數(shù)為 1001000110100B 截取其高8位二進制數(shù)為10010001B 91H 截取其低5位二進制數(shù)為10100B 高3位補上0后為00010100B 14H 因此 TH0中應(yīng)裝入91H TL0中應(yīng)裝入14H在方式0下 將計數(shù)初裝入T0的計數(shù)器中的程序段為 MOVTL0 14H 計數(shù)初值的低5位數(shù)裝入TL0中MOVTH0 91H 計數(shù)初值的高8位數(shù)裝入TH0中 3 定時 計數(shù)器0和定時 計數(shù)器1的應(yīng)用設(shè)計 定時 計數(shù)器的應(yīng)用設(shè)計主要是軟件設(shè)計 包括初始化程序的設(shè)計和執(zhí)行程序的設(shè)計兩個部分 1 初始化程序的設(shè)計 2 執(zhí)行程序的設(shè)計 初始化程序的設(shè)計 初始化程序一般安排在系統(tǒng)復(fù)位后所要執(zhí)行的模塊程序中 有時為了提高系統(tǒng)的穩(wěn)定性 也可以將初始化程序的一部分代碼安排在系統(tǒng)反復(fù)執(zhí)行的主程序中 初始化程序所要完成的工作是 設(shè)置定時 計數(shù)器的運行模式 工作方式 計數(shù)初值 如果執(zhí)行程序被安排在定時中斷服務(wù)程序中 則在初始化程序中還要包括設(shè)置定時中斷的優(yōu)先級 開定時中斷等 也就是設(shè)特殊功能寄存器TMOD TCON THi TLi以及IE IP的值 在實際應(yīng)用中 一般對TCON IE IP三個特殊功能寄存器采用位操作 只設(shè)置與T0或T1有關(guān)的位的值 以避免改變其它功能部件的工作狀態(tài) 例6 2 某實際應(yīng)用系統(tǒng)需用定時 計數(shù)器T0對外部輸入脈沖進行計數(shù) 每計數(shù)滿1000個脈沖后 系統(tǒng)就進入定時中斷服務(wù)程序處相應(yīng)的處理 現(xiàn)擬定T0采用高優(yōu)先級中斷 試編寫出對T0作初始化的子程序INIT T0 分析 依題要求 執(zhí)行程序放在定時中斷服務(wù)程序中 T0初始化程序中除了要設(shè)置TMOD TCON TH0和TL0的值外 還要開中斷和設(shè)置定時中斷的優(yōu)先級 T0的計數(shù)值N為 N 1000 3E8H28 N 213故可采用方式0 方式1進行計數(shù) 現(xiàn)采用方式1計數(shù) 則計數(shù)初值X為 X 216 1000 10000H 3E8H FC18H因此初始化程序中TL0應(yīng)裝入初始值18H TH0中應(yīng)裝入初始值FCH T0作計數(shù)器使用 TMOD應(yīng)設(shè)為 XXX0101B 現(xiàn)取05H 定時中斷的優(yōu)先級 所以PT0 1 程序清單 INIT T0 MOVTMOD 05H 設(shè)置T0的工作模式 計數(shù)模式 方 式1MOVTL0 18H 設(shè)置T0的計數(shù)初值 1000MOVTH0 0FCHSETBPT0 T0采用高優(yōu)先級中斷SETBEA 開全局中斷SETBET0 開定時 計數(shù)T0中斷SETBTR0 啟動定時 計數(shù)器T0RET 執(zhí)行程序的設(shè)計 執(zhí)行程序所要完成的任務(wù)是 定時 計數(shù)器中的計數(shù)器計數(shù)滿發(fā)生溢出 即定時器定時到或者計數(shù)器計數(shù)到 時 CPU所要完成的工作 這部分程序無固定的模式 要根據(jù)具體情況來作具體處理 計數(shù)器計數(shù)滿發(fā)生溢出時 硬件電路會自動地將TFi位置1 并向CPU請求中斷 所以執(zhí)行程序可以放在定時中斷服務(wù)程序中 也可以放在主程序中 通過查詢TFi位值來決定執(zhí)行程序是否被執(zhí)行 不過這種結(jié)構(gòu)將要占用CPU的大量時間 單片機的實時性將會下降 在實際應(yīng)用中盡量少用 將執(zhí)行程序放在定時中斷服務(wù)程序中 執(zhí)行程序的編寫實際上就是定時中斷服務(wù)程序的設(shè)計的問題 在設(shè)計中要注意以下幾方面問題 除方式2外 其它工作方式下 定時 計數(shù)器都不具備重裝初值的功能 如果定時 計數(shù)器在計數(shù)滿發(fā)生溢出時 還需計數(shù) 則在定時中斷服務(wù)程序中需重裝計數(shù)初值 在方式2下 定時 計數(shù)器常作波特率發(fā)生器 此時不必編寫定時中斷服務(wù)程序 初始化程序中也不必開定時中斷 有關(guān)中斷服務(wù)程序入口地址 000BH是T0的中斷服務(wù)程序的入口地址 001BH是T1的中斷服務(wù)程序的入口地址 當T0工作在方式3時 以TH0作計數(shù)器的定時中斷服務(wù)程序的入口地址也是001BH 中斷服務(wù)程序一般不放在上述入口地址開始的存儲空間中而是放在0050H以后的存儲空間中 在上述入口地址處一般放一條無條件轉(zhuǎn)移指令 將程序轉(zhuǎn)移到對應(yīng)的中斷服務(wù)程序中去 硬件電路 用P1口的8個引腳分別驅(qū)動8個發(fā)光二極管 二極管的陰極端接P1的各引腳 陽極端通過1K限流電阻接高電平 采用RC復(fù)位電路 內(nèi)部晶振電路 軟件編程 1 編程思路 采用T0定時 計數(shù)寄存器 設(shè)置T0的運行模式為定時模式 工作方式為0方式 設(shè)置定時時間為5ms 在T0定時中斷服務(wù)程序調(diào)用100次獲得5s延時后 將發(fā)光二極管的輸入狀態(tài)取反 2 設(shè)計過程 1 主程序部分 選取工作方式0 進行延時5ms的初值計算定時器 計數(shù)器的計數(shù)初值 8192 5000 11 0592 12 3854 0111000000000B將低5位00000B送入TL0 將高8位01110000送入TH0 設(shè)置變量TimCnt 用來統(tǒng)計T0中斷服務(wù)程序被調(diào)用的次數(shù) 初值為0 設(shè)置T0的運行模式為定時模式 工作方式為0 給TMOD提供的值為00H 開啟全局中斷令EA 1 開T0中斷令ET0 1 啟動T0計數(shù)令TR0 1 2 T0中斷服務(wù)程序 T0在0工作方式下 當產(chǎn)生計數(shù)溢出后 不具備硬件自動重載功能 所以給T0重置計數(shù)初值 即TL0 00H TH0 70H 修改TimCnt變量的值 每調(diào)用一次其值加1 判斷TimCnt的值是否超過100 若是則表示已經(jīng)獲得延時5s的效果將發(fā)光二極管的輸入狀態(tài)取反 否則返回主程序 T0從初值開始重新計數(shù) 3 繪制流程框圖 主程序流程 定時中斷程序 4 編寫源程序代碼 TIMCNTEQU30HORG0000HAJMPMAINORG000BH T0定時中斷程序的入口地址AJMPTIMER0ORG0030HMAIN MOVTH0 70H 給T0提供計數(shù)初值MOVTL0 00HSETBET0 允許T0定時中斷SETBEA 開啟全局中斷SETBTR0 啟動T0定時MAIN1 ORLPCON 1 讓CPU進入休眠狀態(tài)SJMPMAIN1 TIMER0 MOVTL0 00H 重置計數(shù)初值MOVTH0 70HINCTIMCNT 計數(shù)值加1MOVA TIMCNTADDA 256 100 9CH 100的補碼JNCTM1MOVTIMCNT 0CPLP1TM1 RETIEND 應(yīng)用總結(jié) 1 定時中斷的一般步驟1 初始化程序設(shè)置之度2 執(zhí)行程序的編寫2 定時 計數(shù)和CPU并行工作 既可以降低CPU的功耗 也可以提高CPU的工作效率- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 發(fā)光二極管 閃爍
鏈接地址:http://m.jqnhouse.com/p-6438376.html