單片機(jī)(c語言版)定時(shí)器計(jì)數(shù)器培訓(xùn)講學(xué).ppt_第1頁
單片機(jī)(c語言版)定時(shí)器計(jì)數(shù)器培訓(xùn)講學(xué).ppt_第2頁
單片機(jī)(c語言版)定時(shí)器計(jì)數(shù)器培訓(xùn)講學(xué).ppt_第3頁
單片機(jī)(c語言版)定時(shí)器計(jì)數(shù)器培訓(xùn)講學(xué).ppt_第4頁
單片機(jī)(c語言版)定時(shí)器計(jì)數(shù)器培訓(xùn)講學(xué).ppt_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余43頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第6章AT89S51單片機(jī)的定時(shí)器 計(jì)數(shù)器 1 內(nèi)容概要 介紹AT89S51單片機(jī)片內(nèi)定時(shí)器 計(jì)數(shù)器的結(jié)構(gòu)與功能 兩種工作模式和4種工作方式 以及與其相關(guān)的兩個(gè)特殊功能寄存器TMOD和TCON各位的定義及其編程 最后介紹定時(shí)器 計(jì)數(shù)器的C51編程及應(yīng)用實(shí)例 6 1定時(shí)器 計(jì)數(shù)器的結(jié)構(gòu)定時(shí) 計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器 16位 由高8位THX X 0或1 和低8位TLX兩個(gè)寄存器組成 TMOD是定時(shí) 計(jì)數(shù)器的工作方式寄存器 確定工作方式和功能 TCON是控制寄存器 控制T0 T1的啟動(dòng)和停止及設(shè)置溢出標(biāo)志 外部脈沖 3 圖6 1AT89S51單片機(jī)的定時(shí)器 計(jì)數(shù)器結(jié)構(gòu)框圖 6 1 1工作方式控制寄存器TMODAT89S51定時(shí)器工作方式寄存器TMOD用于選擇工作模式和工作方式 字節(jié)地址為89H 不能位尋址 8位分為兩組 高4位控制T1 低4位控制T0 1 GATE 門控位GATE 0時(shí) 僅由運(yùn)行控制位TRx x 0 1 來控制定時(shí)器運(yùn)行GATE 1時(shí) 用外中斷引腳INT0 或INT1 上的電平與運(yùn)行控制位TRx共同控制定時(shí)器運(yùn)行 4 圖6 2寄存器TMOD格式 2 M1 M0 工作方式選擇位M1 M0的4種編碼 對(duì)應(yīng)于4種工作方式的選擇 3 C T 計(jì)數(shù)器模式和定時(shí)器模式選擇位C T 0 為定時(shí)器工作模式 對(duì)單片機(jī)的晶體振蕩器12分頻后的脈沖進(jìn)行計(jì)數(shù) C T 1 為計(jì)數(shù)器工作模式 計(jì)數(shù)器對(duì)外部輸入引腳T0 P3 4 或T1 P3 5 的外部脈沖 負(fù)跳變 計(jì)數(shù) 5 6 1 2定時(shí)器 計(jì)數(shù)器控制寄存器TCONTCON字節(jié)地址為88H 可位尋址 位地址為88H 8FH 1 TF1 TF0 計(jì)數(shù)溢出標(biāo)志位 當(dāng)計(jì)數(shù)器計(jì)數(shù)溢出時(shí) 該位置 1 使用查詢方式時(shí) 應(yīng)注意查詢有效后 使用軟件及時(shí)將該位清 0 使用中斷方式時(shí) 中斷請(qǐng)求標(biāo)志位在進(jìn)入中斷服務(wù)程序后由硬件自動(dòng)清 0 2 TR1 TR0 計(jì)數(shù)運(yùn)行控制位 TR1位 或TR0位 1 啟動(dòng)定時(shí)器工作 TR1位 或TR0位 0 停止定時(shí)器工作 該位可由軟件置 1 或清 0 6 圖6 3TCON格式 6 2定時(shí)器 計(jì)數(shù)器的4種工作方式6 2 1方式0 M1M0 00方式0為13位計(jì)數(shù) 由TL0的低5位 高3位未用 和TH0的8位組成 TL0的低5位溢出時(shí)向TH0進(jìn)位 TH0溢出時(shí) 置位TCON中的TF0標(biāo)志 向CPU發(fā)出中斷請(qǐng)求 7 圖6 4定時(shí)器 計(jì)數(shù)器方式0邏輯結(jié)構(gòu)框圖 C T 位決定定時(shí)器 計(jì)數(shù)器的兩種工作模式 1 C T 0 T1 或T0 為定時(shí)器工作模式 把時(shí)鐘振蕩器12分頻后的脈沖作為計(jì)數(shù)信號(hào) 2 C T 1 T1 或T0 為計(jì)數(shù)器工作模式 計(jì)數(shù)脈沖為P3 4 或P3 5 引腳上的外部輸入脈沖 當(dāng)引腳上發(fā)生負(fù)跳變時(shí) 計(jì)數(shù)器加1 9 GATE位決定定時(shí)器的運(yùn)行控制取決于TRx一個(gè)條件 還是取決于TRx和INTX x 0 1 引腳狀態(tài)這兩個(gè)條件 1 GATE 0時(shí) 僅由TR0控制與門的開啟 與門輸出1時(shí) 控制開關(guān)接通 計(jì)數(shù)開始 2 GATE 1時(shí) 由外中斷引腳信號(hào)控制或門的輸出 此時(shí)控制與門的開啟由外中斷引腳信號(hào)和TR0共同控制 當(dāng)TR0 1時(shí) 外中斷引腳信號(hào)引腳的高電平啟動(dòng)計(jì)數(shù) 外中斷引腳信號(hào)引腳的低電平停止計(jì)數(shù) 這種方式常用來測量外中斷引腳上正脈沖的寬度 定時(shí)器模式時(shí)有 N t Tcy 計(jì)數(shù)初值計(jì)算的公式為 6 2 2方式1 M1M0 01方式1的計(jì)數(shù)位數(shù)是16位 由TLX作為低8位 THX作為高8位 組成了16位加1計(jì)數(shù)器 計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為 6 2 3方式2 M1M0 10方式2為自動(dòng)重裝初值的8位計(jì)數(shù)方式 工作方式2特別適合于用作較精確的脈沖信號(hào)發(fā)生器 計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為 工作過程 T0分成兩個(gè)8位定時(shí) 計(jì)數(shù)器TL0和TH0 TL0 既可計(jì)數(shù)也可定時(shí) 是一個(gè)8位定時(shí) 計(jì)數(shù)器 占用了T0所有控制位 C T TR0 GATE TF0和INT0 T0引腳 TH0 只能作為定時(shí)器 因?yàn)門0已被TL0占用 TH0用T1的控制位 TR1 TF1 6 2 4方式3 M1M0 11 13 T0在方式3時(shí)T1的工作模式T1只能工作在0 1 2方式 作為串行口的波特率發(fā)生器使用 因?yàn)門1的運(yùn)行控制位TR1及計(jì)數(shù)溢出標(biāo)志位TF1已被定時(shí) 計(jì)數(shù)器T0借用 當(dāng)作為波特率發(fā)生器使用時(shí) 只需要設(shè)置好工作方式 便可自動(dòng)運(yùn)行 如要停止工作 只需送入一個(gè)把T1設(shè)置為方式3的方式控制字 因?yàn)槎〞r(shí) 計(jì)數(shù)器T1不能在方式3下工作 因?yàn)門1處于方式3時(shí)相當(dāng)于TR1 0 停止計(jì)數(shù) 14 6 3對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求當(dāng)定時(shí)器 計(jì)數(shù)器工作在計(jì)數(shù)器模式時(shí) 計(jì)數(shù)脈沖來自外部輸入引腳T0或T1 當(dāng)輸入信號(hào)產(chǎn)生由1至0的跳變 即負(fù)跳變 時(shí) 計(jì)數(shù)器值增1 由于確認(rèn)一次負(fù)跳變花2個(gè)機(jī)器周期 即24個(gè)振蕩周期 因此外部輸入的計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1 24 圖6 12對(duì)外部計(jì)數(shù)輸入信號(hào)的要求 例如 選用6MHz頻率的晶體 允許輸入的脈沖頻率最高為250kHz 如果選用12MHz頻率的晶體 則可輸入最高頻率為500kHz的外部脈沖 15 6 3對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求當(dāng)定時(shí)器 計(jì)數(shù)器工作在計(jì)數(shù)器模式時(shí) 計(jì)數(shù)脈沖來自外部輸入引腳T0或T1 當(dāng)輸入信號(hào)產(chǎn)生由1至0的跳變 即負(fù)跳變 時(shí) 計(jì)數(shù)器值增1 由于確認(rèn)一次負(fù)跳變花2個(gè)機(jī)器周期 即24個(gè)振蕩周期 因此外部輸入計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1 24 圖6 12對(duì)外部計(jì)數(shù)輸入信號(hào)的要求 例如 選用6MHz頻率的晶體 允許輸入的脈沖頻率最高為250kHz 如果選用12MHz頻率的晶體 則可輸入最高頻率為500kHz的外部脈沖 時(shí)間常數(shù)的計(jì)算時(shí)間常數(shù) 定時(shí)器 計(jì)數(shù)器T0或T1的初始計(jì)數(shù)值 在T0或T1被啟動(dòng)后 每個(gè)機(jī)器周期使計(jì)數(shù)器中的計(jì)數(shù)值加1 計(jì)數(shù)器產(chǎn)生溢出后 定時(shí)時(shí)間 計(jì)數(shù)器溢出時(shí)間 時(shí)間常數(shù)越大 定時(shí)時(shí)間就越短 時(shí)間常數(shù)越小 定時(shí)時(shí)間就越長 時(shí)鐘的頻率越高 定時(shí)時(shí)間越短 時(shí)鐘的頻率越低 定時(shí)時(shí)間越長 設(shè)系統(tǒng)時(shí)鐘的頻率為fosc 計(jì)數(shù)器的初始值為N 定時(shí)器工作于方式1 則定時(shí)時(shí)間 T 216 N 12 fosc 1 如果定時(shí)器工作于方式2或方式3 定時(shí)時(shí)間為 T 28 N 12 fosc 2 當(dāng)初始值N 0時(shí) 如果fosc 12MHZ 最大定時(shí)時(shí)間為 方式1為 Tmax 216 12 fosc 65536us 65 536ms方式2 方式3為 Tmax 28 12 fosc 256us 根據(jù)定時(shí)時(shí)間T 及公式 1 2 分別可以求出初值N為 方式1 N 216 T fosc 12 3 方式2 方式3 N 28 T fosc 12 4 如果fosc 12MHZ 以上公式可簡化為方式1 N 216 T方式2 方式3 N 28 T 例如 系統(tǒng)的時(shí)鐘頻率是12MHz 在方式1下 如果希望定時(shí)器 計(jì)數(shù)器T0的定時(shí)時(shí)間T為10ms 則初值N 216 T 65536 10000 55536 如何將55536給兩個(gè)8位寄存器TH0 TL0賦值呢 可將十進(jìn)制數(shù)55536轉(zhuǎn)換成四位十六進(jìn)制數(shù) 將高2位送TH0 低2位送TL0 更簡單的方法是 對(duì)于16位計(jì)數(shù)器來講 216等效為0 對(duì)于8位計(jì)數(shù)器 28等效為0 這樣公式 3 4 可簡化為N T 直接用下面兩條語句就可以完成計(jì)數(shù)器初值的設(shè)置 TH0 10000 256 取 N的高8位TL0 10000 256 取 N的低8位 例如 設(shè)系統(tǒng)的時(shí)鐘頻率是12MHz 定時(shí)器工作于方式2 定時(shí)時(shí)間200us 根據(jù)前面分析 N T 200 可直接用以下語句實(shí)現(xiàn) TH0 200 TL0 200 MCS 51單片機(jī)的定時(shí)器是可編程的 但在進(jìn)行定時(shí)或計(jì)數(shù)之前要對(duì)程序進(jìn)行初始化 具體步驟如下 1 確定工作方式字 對(duì)TMOD寄存器正確賦值 2 確定定時(shí)初值 計(jì)算初值 直接將初值寫入寄存器的TH0 TL0或TH1 TL1 初值計(jì)算 設(shè)計(jì)數(shù)器的最大值為M 則置入的初值X為 計(jì)數(shù)方式 X M 計(jì)數(shù)值定時(shí)方式 由 M X T 定時(shí)值 得X M 定時(shí)值 TT為計(jì)數(shù)周期 是單片機(jī)的機(jī)器周期 模式0 M為213 模式1 M為216 模式2和3 M為28 3 根據(jù)需要 對(duì)IE置初值 開放定時(shí)器中斷 4 啟動(dòng)定時(shí) 計(jì)數(shù)器 對(duì)TCON寄存器中的TR0或TR1置位 置位以后 計(jì)數(shù)器即按規(guī)定的工作模式和初值進(jìn)行計(jì)數(shù)或開始定時(shí) 6 4定時(shí)器 計(jì)數(shù)器的編程和應(yīng)用 6 4 1P1口外接的8只LED每0 5s閃亮一次 例6 1 在AT89S51單片機(jī)的P1口上接有8只LED 電路見圖4 7 下面采用定時(shí)器T0的方式1的定時(shí)中斷方式 使P1口外接的8只LED每0 5s閃亮一次 1 設(shè)置TMOD寄存器方式1 計(jì)時(shí)工作模式 僅由TR0來控制 T1不使用 TMOD寄存器應(yīng)初始化為0 x01 00000001B 2 計(jì)算T0計(jì)數(shù)初值設(shè)定時(shí)時(shí)間5ms 即5000 s 設(shè)定時(shí)器T0的計(jì)數(shù)初值為X 假設(shè)晶振的頻率為11 0592MHz 則定時(shí)時(shí)間為 定時(shí)時(shí)間 216 X 12 晶振頻率則5000 216 X 12 11 0592得 X 60928 轉(zhuǎn)換成16進(jìn)制后為 0 xee00 其中0 xee裝入TH0 0 x00裝入TL0 3 設(shè)置IE寄存器本例由于采用定時(shí)器T0中斷 因此需將IE寄存器中的EA ET0位置1 4 啟動(dòng)和停止定時(shí)器T0將定時(shí)器控制寄存器TCON中的TR0 1 則啟動(dòng)定時(shí)器T0 TR0 0 則停止定時(shí)器T0定時(shí) 21 includeChari 100 給變量i賦初值 定時(shí)0 5S 每次定時(shí)中斷5MS 需要中斷100次 voidmain TMOD 0 x01 設(shè)置定時(shí)器T0為方式1 TH0 0 xee 向TH0寫入初值的高8位 TL0 0 x00 向TL0寫入初值的低8位 P1 0 x00 P1口8只LED點(diǎn)亮 EA 1 總中斷允許 ET0 1 定時(shí)器T0中斷允許 TR0 1 啟動(dòng)定時(shí)器T0 while 1 無窮循環(huán) 等待定時(shí)中斷 22 以下為定時(shí)器T0的中斷服務(wù)程序 voidT0 int void interrupt1 TH0 0 xee 給T0裝入16位初值 計(jì)4608個(gè)數(shù)后 T0溢出TL0 0 x00 i 循環(huán)次數(shù)減1 if i 0 P1 P1 P1口按位取反 i 100 重新設(shè)置循環(huán)次數(shù) 23 案例2 如圖所示 P0口接8只發(fā)光二極管 編程使發(fā)光管輪流點(diǎn)亮 點(diǎn)亮?xí)r間為500ms 要求使用定時(shí)器T0來控制 設(shè)晶振為12MHz 設(shè)計(jì)思想我們可將P0口的初值設(shè)置為0 xFE 對(duì)應(yīng)于發(fā)光管D1亮 每隔500ms將P0的值循環(huán)左移一位 這一周期性的定時(shí)作業(yè)用T0來完成 當(dāng)時(shí)鐘頻率為12MHZ時(shí) 在定時(shí)器的4種工作方式中 方式1的最大溢出時(shí)間最長 但即使在方式1 最大的溢出時(shí)間也只有65 536ms 所以我們不能在每次中斷時(shí)都執(zhí)行上述移位操作 可以這樣處理 將定時(shí)器T0的溢出時(shí)間設(shè)定為50ms 累計(jì)滿10次中斷正好500ms 才允許程序執(zhí)行1次移位動(dòng)作 主函數(shù)ucharcount 0 50ms定時(shí)中斷次數(shù)計(jì)數(shù)器voidmain void led 0 xfe TMOD 0 x01 T0工作于方式1TH0 50000 256 定時(shí)時(shí)間為50msTL0 50000 256 ET0 1 允許T0中斷TR0 1 啟動(dòng)T0定時(shí)EA 1 CPU開中斷while 1 voidtime0 void interrupt1 TH0 50000 256 TL0 50000 256 count if count 10 count 0 led crol led 1 P0 led 定時(shí)器T0中斷服務(wù)程序 重新裝入時(shí)間常數(shù) 每中斷一次 計(jì)數(shù)器加1 10次中斷為0 5秒 滿10次變量led左移1位送P0口 6 4 2計(jì)數(shù)器的應(yīng)用 例6 2 采用定時(shí)器T1的方式1的中斷計(jì)數(shù)方式 如圖6 13所示 計(jì)數(shù)輸入引腳T1 P3 5 上外接開關(guān)K1 作為計(jì)數(shù)信號(hào)輸入 按4次K1后 P1口的8只LED閃爍不停 28 1 設(shè)置TMOD寄存器T1工作在方式1 應(yīng)使TMOD的M1 M0 01 設(shè)置計(jì)數(shù)器工作模式C T 1 對(duì)T0的運(yùn)行控制僅由TR0來控制 應(yīng)使GATE0 0 定時(shí)器T0不使用 各相關(guān)位均設(shè)為0 所以 TMOD寄存器應(yīng)初始化為0 x50 圖6 13 2 計(jì)算T1計(jì)數(shù)初值由于每按4次K1 計(jì)數(shù)一次 因此計(jì)數(shù)器的初值為65536 4 65532 將其轉(zhuǎn)換成16進(jìn)制后為 0 xfffc 因此 TH0 0 xff TL0 0 xfc 3 設(shè)置IE寄存器本例由于采用定時(shí)器T1中斷 因此需將IE寄存器中的EA ET1位置1 4 啟動(dòng)和停止定時(shí)器T1將定時(shí)器控制寄存器TCON中的TR1 1 則啟動(dòng)定時(shí)器T1計(jì)數(shù) TR1 0 則停止定時(shí)器T1計(jì)數(shù) 參考程序如下 29 include 定義延時(shí)函數(shù)Delay i是形式參數(shù) 不能賦初值 voidDelay unsignedinti unsignedintj 變量i由實(shí)際參數(shù)傳入一個(gè)值 因此i不能賦初值 for i 0 i for j 0 j 125 j 空函數(shù) voidmain 主函數(shù) TMOD 0 x50 設(shè)置定時(shí)器T1為方式1計(jì)數(shù) TH0 0 xff 向TH0寫入初值的高8位 30 TL0 0 xfc 向TL0寫入初值低8位 EA 1 總中斷允許 ET1 1 T1中斷允許 TR1 1 啟動(dòng)T1 while 1 無窮循環(huán) 等待定時(shí)中斷 以下為定時(shí)器T1的中斷服務(wù)程序 voidT1 int void interrupt3 for 無限循環(huán) P1 0 xff 8位LED全滅 Delay 500 延時(shí)500ms P1 0 8位LED全亮 Delay 500 延時(shí)500ms 31 案例4 用定時(shí)器來控制數(shù)碼管的動(dòng)態(tài)顯示 用定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示的方法 設(shè)定時(shí)器的定時(shí)時(shí)間為1ms 每次產(chǎn)生溢出中斷 就根據(jù)位選變量bsel 主程序中將其初值設(shè)置為0 xfe 送位選口 點(diǎn)亮一位數(shù)碼管 并將bsel左移一位 為下一位的顯示做好準(zhǔn)備 4次定時(shí)中斷分別完成4位數(shù)碼管的顯示 之后將bsel的值再次初始化為0 xfe 準(zhǔn)備下一輪顯示 因此這種顯示方式由定時(shí)中斷自動(dòng)完成 無需在主程序中調(diào)用 主程序ucharbsel n voidmain void n 0 bsel 0 xfe 首先顯示數(shù)碼管的最低位TMOD 0 x01 T0工作于定時(shí)方式2TH0 1000 256 T0的定時(shí)時(shí)間為1000usTL0 1000 256 ET0 1 允許T0中斷TR0 1 啟動(dòng)定時(shí)EA 1 開中斷while 1 ucharcodesegtab 0 xc0 0 xf9 0 xa4 0 xb0 0 x99 0 x92 0 x82 0 xf8 0 x80 0 x90 0 x88 0 x83 0 xc6 0 xa1 0 x86 0 x8e 0 x89 0 x8c uchardbuf 4 4 3 2 1 字符0 F的字形碼表 顯示緩存 存放要顯示字符 voidtime0 void interrupt1 TH0 1000 256 TL0 1000 256 P0 0 xff P2 bsel P0 segtab dbuf n bsel crol bsel 1 n if n 4 n 0 bsel 0 xfe 重新裝入時(shí)間常數(shù) 定時(shí)器T0中斷服務(wù)程序 熄滅數(shù)碼管 防止上一位字符在當(dāng)前位置顯示出來 點(diǎn)亮當(dāng)前位 根據(jù)顯示緩存查字段碼 準(zhǔn)備顯示下一位 指向下一位要顯示的數(shù)據(jù) 如果四位已顯示完 重新從最低位開始 6 4 3擴(kuò)展一個(gè)外部中斷源方式2可自動(dòng)重新裝載初值 此方式可省去用戶程序中重新裝初值的指令 當(dāng)某個(gè)定時(shí)器 計(jì)數(shù)器不使用時(shí) 可為AT89S51擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源 基本思想 把定時(shí)器溢出中斷做成外部中斷 然后把計(jì)數(shù)輸入信號(hào)接到定時(shí)器的相應(yīng)引腳上T0腳 或T1腳 并把定時(shí)器被設(shè)置為方式2 自動(dòng)裝入常數(shù)方式 計(jì)數(shù)工作模式 計(jì)數(shù)器TH0 TL0初值均為0FFH 并允許T0中斷 總中斷開放 當(dāng)檢測到T0腳 或T1腳 引腳電平發(fā)生負(fù)跳變時(shí) 計(jì)數(shù)器TF0 或TF1 溢出 這時(shí)將產(chǎn)生一個(gè)中斷請(qǐng)求 例6 3 擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源 把定時(shí)器T0計(jì)數(shù)輸入引腳作為外部中斷請(qǐng)求信號(hào)的輸入端 35 includevoidmain TMOD 0 x06 設(shè)置定時(shí)器T0為方式2計(jì)數(shù) TH0 0 xff 給T0裝入初值 TL0 0 xff 給T0裝入初值 ET0 1 允許T0中斷 EA 1 總中斷開 TF0 0 T0中斷溢出標(biāo)志位清0 TR0 1 接通T0計(jì)數(shù) while 1 無限循環(huán)等待 以下為定時(shí)器T0的中斷服務(wù)程序 voidT0 int void interrupt1using0 外中斷處理部分 36 6 4 4P1 0上產(chǎn)生周期為2ms的方波 例6 4 系統(tǒng)時(shí)鐘為12MHz 編程實(shí)現(xiàn)從P1 0引腳上輸出一個(gè)周期為2ms的方波 如圖6 14所示 基本思想 要在P1 0上產(chǎn)生周期為2ms的方波 定時(shí)器應(yīng)產(chǎn)生1ms的周期性的定時(shí) 定時(shí)對(duì)P1 0求反 選擇定時(shí)器T0 方式1定時(shí) 采用中斷方式 GATE不起作用 37 圖6 14定時(shí)器控制P1 0輸出一個(gè)周期為2ms的方波 計(jì)算T0的初值計(jì)算 設(shè)T0的初值為X 則 216 X 1 10 6 1 10 3 65536 X 1000則初值為 65536 1000 64536 因此TH0 65536 1000 256 TL0 65536 1000 256 參考程序如下 38 includesbitP1 0 P1 0 voidmain void TMOD 0 x01 設(shè)置定時(shí)器T0為方式2計(jì)數(shù) P1 0 0 TH0 65536 1000 256 給T0裝入初值 TL0 65536 1000 256 給T0裝入初值 ET0 1 允許T0中斷 EA 1 總中斷開 TR0 1 接通T0計(jì)數(shù) do while 1 無限循環(huán)等待 voidT0 int void interrupt1using1 P1 0 P1 0 TH0 65536 1000 256 TL0 65536 1000 256 39 6 4 5P1 1上產(chǎn)生周期為1s的方波 例6 5 假設(shè)系統(tǒng)時(shí)鐘為12MHz 編程實(shí)現(xiàn)從P1 1引腳上輸出一個(gè)周期為1s的方波 基本思想 要在P1 0上產(chǎn)生周期為1s的方波 定時(shí)器應(yīng)產(chǎn)生500ms的周期性定時(shí) 定時(shí)到則對(duì)P1 0求反 由于定時(shí)時(shí)間較長 用定時(shí)器不能直接實(shí)現(xiàn) 直接定時(shí)時(shí)間最長的就是方式1 僅為65ms 系統(tǒng)時(shí)鐘12MHz 多一點(diǎn) 實(shí)現(xiàn) T0定為10ms定時(shí) 每10ms對(duì)P1 0求反一次 P1 0輸出的脈沖加到定時(shí)器T1的計(jì)數(shù)輸入腳P3 5 T1腳 作為計(jì)數(shù)輸入 定時(shí)500ms需計(jì)數(shù)50次 T1設(shè)為方式2計(jì)數(shù) 初值X為 28 X 50 則X 206 40 所以TH1 TL1 206 T0設(shè)為方式1定時(shí) 則控制字為61H 定時(shí)器T0和T1均采用中斷方式工作 參考程序如下 includesbitP1 0 P1 0 sbitP1 1 P1 1 voidmain void TMOD 0 x61 設(shè)置定時(shí)器T0為方式1定時(shí) T1為方式2計(jì)數(shù) P1 0 0 TH0 65536 10000 256 給T0裝初值 TL0 65536 10000 256 TH1 206 給T1裝初值 TL1 206 41 EA 1 總中斷開 ET0 1 允許T0中斷 ET1 1 允許T1中斷 TR0 1 TR1 1 while 1 voidT0 int void interrupt1 TH0 65536 1000 256 TL0 65536 1000 256 P1 0 P1 0 voidT1 int void interrupt3 P1 1 P1 1 P1 1腳產(chǎn)生1s的方波 42 6 4 6T1控制發(fā)出1KHz的音頻信號(hào) 例6 6 利用定時(shí)器T1的中斷來控制蜂鳴器發(fā)出1KHz的音頻信號(hào) 電路圖見圖6 15 假設(shè)系統(tǒng)時(shí)鐘為11 0592MHz 則每個(gè)脈沖的周期為12 11 0592 1 085 s 1KHz的音頻信號(hào)周期為1ms 因此要計(jì)數(shù)的脈沖數(shù)為1000 1 085 921次 所以T1的初值 TH1 65536 921 256 TL1 65536 921 256參考程序如下 43 includesbitsound P1 7 voidmain void EA 1 總中斷開 ET1 1 允許T0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論