盛群c語言應(yīng)用中斷范例_第1頁
盛群c語言應(yīng)用中斷范例_第2頁
盛群c語言應(yīng)用中斷范例_第3頁
盛群c語言應(yīng)用中斷范例_第4頁
盛群c語言應(yīng)用中斷范例_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本章介紹以C 語言程式處理微控制器的中斷事件第四章 4.7中斷服務(wù)函式中說明如何撰寫中斷服務(wù)函式以及注意事項必須遵照下列的規(guī)則來定義中斷服務(wù)函式t 函式的返回值型態(tài)必須是void in terruptt 函式不可有參數(shù)(argume nt)t 設(shè)定中斷服務(wù)函式的中斷向量(interrupt vector)使用 指定中斷向量t 最好不要從程式的其他地方呼叫中斷服務(wù)函式t 不要在中斷服務(wù)函式內(nèi)做開啟本中斷功能(interrupt reentrance)相同的中斷不要重復(fù)進入格式void in terrupt ISR_Timer(void) 0x08/定義:返回值的型態(tài),沒有參數(shù),設(shè)定中斷向量為0x

2、08C編譯器會根據(jù)中斷服務(wù)函式對暫存器的需要,在進入中斷服務(wù)函式后,將這些暫存器的內(nèi)容儲存等執(zhí)行完中斷服務(wù)函式的工作后,再恢復(fù)先前所儲存的暫存器內(nèi)容最后回要被中斷的地方繼續(xù)執(zhí)行,同時中斷功能也打開,允許中斷產(chǎn)生如果為了節(jié)省程式編碼 的大小,在中斷服務(wù)函式中也可不要保存某些暫存器,例如 BP, MP0, MP1.可參考第四章的4.9節(jié)關(guān)于#pragma的說明及使用.在中斷服務(wù)函式中不要將自身的中斷功能再打開,避免重復(fù)進入同一個中斷服務(wù)函式.但是可以打開其他的中斷功能,只是要特別注意兩個中斷服務(wù)函式有無呼叫到相同函式的狀態(tài),以致發(fā)生變數(shù)共用造成資料錯誤的風(fēng)險.7.1.用時鐘控制 LED的亮與滅7.

3、1.1目的本范例是使用時鐘控制LED亮與滅的時間.亮滅的時間相同并且固定 .是以C語言撰寫中斷服務(wù)函式.盛群半導(dǎo)體股份有限公司HOLTEK SEMICONDUCTOR INCC50微電腦工具事業(yè)處部撰寫人:文 件編號 程式語言及應(yīng)用范例(三) 版 別 1.10日期 2007/11/14103頁 共189 頁7.1.2周邊元件使用單顆LED 接到微控制器 HT48R10A-1 的埠A, PAO 引腳需要使用微控制器HT48R10A-1 的暫存器INTC, TMRC 與TMR 等,定義如下TMRC (Timer Con trol Register)時鐘控制暫存器控制時鐘的功能與啟動,Bit No.

4、L«b*lFun£til>on0*2PSCO-PSC2Ta define l 展 prescaker slaves, PSC2 PSCl. PS CO 000; *葉001: f|=f品如4 Or Irtc OiO.<x 右tc陽011=(S¥s/ia«(RTc/l6)00: intsys/32 or 偽丁匸血101; hhr-fsYs怡4 or 帀10&111D: AyhsYsHZE Of28111; fihnWsYs總56 Or 為t蟲563TETo deFinie the TMR active edge of Umer even

5、! counier (0=acbw on low to high 1 adbu on high to Z)4TONTo enaNe or disable limer oountinq (O=disabfed. 1 =enabled)5Unuwdl bil. rtjd us '0"67TMOTM1To define 1 ha C|>$<raUnQi =Event court mode external dock) l0=Timer mode (iniema) ckx抑 )1 :Pukse width msasuremenl mode 00-UnusedTMRC (D

6、EH)Bli IM 6LabelFunebon0EMICotUeU the maaUFr ibbal) inlenupl (i enabted 0 disdd i1EEIControls the eKtemal inlarTupi (1= enabled. 0= disabled)2ETIControls th Imef- ovenl coti niter inlBrruipl (1 enabledi 0 diubledi3UniusQid bil. read as P”4EIFExternal inlemjpt request Flag (1 active. 0 inactive s5TFl

7、imfimal tirin«i'event countef requnt flagscbw; O iriactve)6UniLtsed bit read as "0"7Unused UL read as -0hIMTCTMR暫存器是儲存時鐘啟始數(shù)值的地方.當(dāng)寫入TMR暫存器時,也會存入preload暫存器.若此時時鐘是在停止?fàn)顟B(tài)中,則此數(shù)值會被寫入時鐘計數(shù)器(timercoun ter).每當(dāng)時鐘被啟動,它便將時鐘計數(shù)器的數(shù)值往上加,一直加到FF,之后便發(fā) 生時鐘滿溢(timer overflow). 這時,下列的事情會發(fā)生產(chǎn)生中斷訊號 (interrup

8、t signal)盛群半導(dǎo)體股份有限公司HOLTEK SEMICONDUCTOR INCC50微電腦工具事業(yè)處部撰寫人:文件編 第號 程式語言及應(yīng)用范例(二)版另U1.10 日期2007/11/14104頁共189 頁t將preload暫存器中的數(shù)值重新載入時鐘計數(shù)器,并且繼續(xù)往上計數(shù) 如果需要時鐘在每count 個clock 時產(chǎn)生滿溢,可將 256 - count寫入TMR暫存器如需要正確的時間,則需要設(shè)定根據(jù)系統(tǒng)頻率設(shè)定TMRC暫存器中的PSC0PSC2.計算出對應(yīng)的 count 并將 256 -count 寫入TMR 暫存器如需要產(chǎn)生時鐘中斷并處理之,則需要在INTC 暫存器中打開時鐘

9、的中斷功能,將ETI設(shè)為1.當(dāng)時鐘計數(shù)滿溢時,就會產(chǎn)生時鐘中斷,并跳到中斷向量08H 處中斷函式會對埠 A,PA0 的LED做亮滅的控制7.1.3 電路圖VDORESPADPA1PA2VSSPA4OSC1PASPA6OSC224012將埠A 的PA0連接到LED 的陰極7.1.4 微控制器的架構(gòu)設(shè)定(con figuratio n optio n)HT48R10A-1 的 con figuration option 設(shè)定WDT clock source : disableOSC : Ext. Crystal Pull-high PA : Pull-highIn put type PA : Sc

10、hmitt Trigger BZ/BZB : DisableFsys = 4M盛群半導(dǎo)體股份有限公司HOLTEK SEMICONDUCTOR INC1.10 日期 2007/11/14C50微電腦工具事業(yè)處部撰寫人:文件編號程式語言及應(yīng)用范例(三)版別第105頁 共189 頁7.1.5程式流程1建)F駁逗卩遇0卑駐出衛(wèi)悪 設(shè)定 1NTC 的 EMI.ETI 設(shè)定丁人氓匚寫Fsyi 25& 興砰罐嘎弍1r飯定TOX.腎竝有潼1F進天需隈迴甌.績斧遺中擊函式處理LED亮與滅1F毫穢燮歎初一F畤鐘中卡旋矣隔弍7162F竜聲雯歎設(shè)再0LED班亮或思瑕Frreturn7.1.6原始程式1#inc

11、lude“ ht48r10o1.h ”2#defi ne _ton _0e_04/暫存器TMRC的位元4, TON3char sec_co unt ;/記錄秒數(shù)4void interrupt ISR_TIMER(void) 0x8/定義中斷服務(wù)函式ISR在位址50x086sec_co un t+ ;/ 每16 毫秒(ms)增加一7if( sec_co unt > 62 )/ 超過 16*62 =992 毫秒,一秒89sec_count = 0 ;/重開始10_pa0 A= 0x01 ;/ toggle LED,每一秒,輪流亮火11 12 13 void mai n(void)盛群半導(dǎo)體股

12、份有限公司HOLTEK SEMICONDUCTOR INCC50微電腦工具事業(yè)處部 撰寫人:文 件編號 程式語言及應(yīng)用范例(三)版另U1.10日期 2007/11/14第106頁 共189 頁1415_pac = 0x01;/設(shè)定PA0為輸出型態(tài)16_pa = 0xff ;/熄滅LED17_i ntc = 0x05 ;/設(shè)定EMI, ETI 致能.打開中斷功能18_tmrc = 0x87 ;/設(shè)定時鐘控制暫存器,fin t=fsys/256, timer mode19_tmr = (256 -250);/ 每250 clock 產(chǎn)生一次時鐘中斷20sec_count = 0 ;/設(shè)定初始值21

13、_ton = 1 ;/啟動時鐘開始計時22while(1);/無限回圈237.1.7程式說明2 定義變數(shù)_ton為時鐘控制暫存器TMRC 的位元4, TON 控制時鐘的開始或停止3 定義變數(shù)sec_cou nt記錄秒數(shù)412 定義時鐘中斷服務(wù)函式ISR_TIMER(void)放置于位址 0x08 處6 每16 毫秒(ms) 增加一7 如果累計的毫秒數(shù)超過62次(超過16*62 = 992 毫秒,一秒)9 sec_count重設(shè)為0, 重開始計數(shù)10 toggle LED,每一秒會輪流為亮滅1223 主程式 main(void)15 將PA0 設(shè)為為輸出型態(tài),PA0 接到LED16 設(shè)定PA0

14、為1,熄滅LED17 設(shè)定中斷控制暫存器(INTC) 的EMI及ETI,讓中斷致能設(shè)定時鐘控制暫存器(TMRC), fint=fsys/256, timer mode, fsys = 4MHz, 1 clock=64us時鐘頻率=4M /256, clock = 1/時鐘頻率 =64 us18 設(shè)定時鐘每隔250 clock, 產(chǎn)生一次時鐘中斷.250 * 64us = 16ms19 設(shè)定初始值20 設(shè)定 _ton = 1 ,啟動時鐘開始計時21 無限回圈 while(1)盛群半導(dǎo)體股份有限公司HOLTEK SEMICONDUCTOR INCC50微電腦工具事業(yè)處部撰寫人:文 件編號 程式語言

15、及應(yīng)用范例(三)版另U 1.10日期 2007/11/14第107頁 共189 頁7.2類比/數(shù)位轉(zhuǎn)換(ADC) 的應(yīng)用7.2.1目的本范例利用 HT46R63 微控制器的類比/數(shù)位轉(zhuǎn)換電路(analog to digital con verter)將外界的類比訊號轉(zhuǎn)換為數(shù)位,并從LCD 面板顯示其值.以C語言撰寫ADC 中斷服務(wù)函式(ISR) 及LCD 顯示程式7.2.2 周邊元件LCD 可使用盛群公司HT-IDE3000 所附之LCD Simulator的液晶模擬面板檔LcdDemo.lcd 及LCD各段碼圖案以方便調(diào)試,參閱第六章 6.7節(jié)的LCD顯示HT46R63 的類比/數(shù)位轉(zhuǎn)換電路

16、,包含下列的暫存器,使用前必須先設(shè)定t ADR 暫存器(22H)Bit7Bit6BitSBit4Bi口Bit2BillBitOD7D6D5D4D3D2DIDO類比訊號轉(zhuǎn)換為數(shù)位的數(shù)值會儲存在ADR 暫存器中.轉(zhuǎn)換的數(shù)值從 0 255.t ACSR 暫存器(23H)設(shè)定A/D轉(zhuǎn)換的速度埠B 的設(shè)定及啟動轉(zhuǎn)2007/11/14f ADCR 暫存器(22H)選定A/D轉(zhuǎn)換的輸入通道 換的控制盛群半導(dǎo)體股份有限公司HOLTEK SEMICONDUCTOR INCC50微電腦工具事業(yè)處部撰寫人:文件編號程式語言及應(yīng)用范例(三)版別 1.10日期第108頁 共189 頁當(dāng)要做A/D 轉(zhuǎn)換時,需要先選定轉(zhuǎn)換

17、通道,埠B 的設(shè)定及時鐘選取之 后要將ADCR 暫存器(22H) 的位元 7 (START) 設(shè)為 0 -> 1 -> 0,貝U A/D 轉(zhuǎn)換 器就開始做轉(zhuǎn)換的動作當(dāng)轉(zhuǎn)換完成時,ADCR 暫存器的位元 6 (EOCB)會被清為 0, 若A/D轉(zhuǎn)換的中斷功能是致能的(e nable),則同時會產(chǎn)生中斷盛群半導(dǎo)體股份有限公司HOLTEK SEMICONDUCTOR INCC50微電腦工具事業(yè)處部撰寫人:文 件編號 程式語言及應(yīng)用范例(三)版 別 1.10日期 2007/11/14第109頁 共189 頁如果變更轉(zhuǎn)換通或埠B 的設(shè)定,則需對A/D 做初始化的動作,如下在變更埠B 設(shè)定的1

18、0 個指令周期內(nèi)將 ADCR 暫存器的位元 7 (START) 設(shè)為1再清為0即可為了要利用 HT46R62 A/D 轉(zhuǎn)換器的中斷功能,也需要設(shè)定中斷向量及中斷 控制t INTC0 暫存器Bit NO.LabelFuoclien0EMICofilruls lhe山理曲偉obaii InlErrup仁 1: enabltri. 01EEIOConlruls Iheexternal Interrupt 0(1= enaWed. 0- disabled2EEI1Conibrols Ihe exkemal interrupt 11 (1« eriabled. 0 disabled3EDCen

19、troid 伽 iinvy«wnt count orlnt«nupt |1-enabtad; 0= disabled)4EIFQExiernal tnlwrupt 0 raqul Hag (1" kDvh. 0 mac live)5EIF1EKiernal ini emu pt 1 requ&mM旳(1= acve. 0= inactive)6TFTime花veM Counter erfow request flag (1= anzlive. 0= in已ctivej7Fm tuta&A cniyMusi be wTitlen as '0&

20、quot;. olherwise mtn result In unpredictable ope ration.INTCO Register位元0 (EMI) 需要設(shè)為1,打開中斷的總開關(guān)t INTC1 暫存器Bit gLabalFunctloinaETBIControl呂 the lirra base intenupt (1= enabled, 0B disabted)1EACHOohlrols the AJD oonrvetler interrupt (1= enaUed; 0= disableci)2ERT1Con td b tho ro al time clock 1 nlnr rup

21、l (1 enabl&dl. 0 dit abled |i3Unused bl. read as P4TBFTimst*ns-oul intnupl 0 request11 act)Y« 0: inactive5ADFEndof AD convwrkinkitenupt request Iteg (1* acNw; 0= tnscSw)6RTFRTC tirmfr-oulinterrupt raquestactive. 0二 inactive)7Unussd bi. read a« "t>"INTCl (1EH) Regksler位元1需要

22、設(shè)為1,將A/D 轉(zhuǎn)換器的中斷功能致能(enable) 盛群半導(dǎo)體股份有限公司HOLTEK SEMICONDUCTOR INCC50微電腦工具事業(yè)處部撰寫人:文 件編號 程式語言及應(yīng)用范例(三)版另U 1.10日期 2007/11/14第110頁 共189 頁723 電路圖r Mg尸woin 二osc&« right nidi*77TJj-VDOCOMO-COM3 SEGO-StiGlSV1CDVSSmmPACHPA7OSC1PBCFANUPB7/AM7O9C2PCO'PCZPDiWMJPDiPA-M:lOSC3PCM JNTO Ptfe IMTI PD6HMRPO7

23、OSC4OWPN CUPP CMPO CH GOHT<6RBiHT4«:63OVaoiLCDPAfCL7.2.4 微控制器的架構(gòu)設(shè)定(Co nfigurati on Optio ns)HT46R63 的 configuration option 設(shè)定WDT clock source : disableOSC : Ext. CrystalFsys = 4MLCD duty: 3 COMLCD segme nt: 20 segme ntsSEG7-SEG10: LCD outputSEG11-SEG14:Logical outputSEG15-SEG18:Logical outpu

24、tComparator : disable盛群半導(dǎo)體股份有限公司HOLTEK SEMICONDUCTOR INCC50微電腦工具事業(yè)處部撰寫人:文 件編號 程式語言及應(yīng)用范例(三)版另U1.10日期 2007/11/14第111頁 共189 頁7.2.5程式流程7.2.6原始程式1 #include“ ht46r63.h”2 / 標(biāo)頭檔中定義有變數(shù)_emi =ntc0.0 , _eadi = _1e_1 (INTC1 bit1),3 / A/D轉(zhuǎn)換器的暫存器_adr (0x21), _adcr (0x22), _acsr (0x23)4#defi ne adc_start_22_7/ bit

25、7 (START) of ADCR 暫存器5#define FSYS80x01/ ADC時鐘來源及 fsys/86#defi ne CH_AN00/ ADC 轉(zhuǎn)換通道7#defi ne ADC_2CH2/ ADC 總通道個數(shù) :2, AN0 (PB0), AN1 (PB1)8char in tflag = 0 ;/ ADC 中斷旗標(biāo)9un sig ned char adcvalue = 0 ;/ ADC 轉(zhuǎn)換后的數(shù)值10 void interrupt ADC_ISR(void) 0x14/ ADC 中斷服務(wù)函式,中斷向量為0x1411 12 intflag = 1 ;/ 設(shè)定ADC 中斷旗標(biāo)L

26、CD RAM清為0,不顯示打開ADC中斷及總中斷功能設(shè)定ADC 時鐘頻率,轉(zhuǎn)換通道,總通道數(shù),啟動AD轉(zhuǎn)換將轉(zhuǎn)換完成的數(shù)值顯示在LCD面板上盛群半導(dǎo)體股份有限公司HOLTEK SEMICONDUCTOR INCC50微電腦工具事業(yè)處部撰寫人:文件編 第號 程式語言及應(yīng)用范例(二)版另U1.10 日期2007/11/14112頁共189 頁13adcvalue =_adr ;/讀取轉(zhuǎn)換后的數(shù)值1415/ 啟動ADC轉(zhuǎn)換功能16 / adc_clk = clock source of ADC, fsys/2, fsys/8, fsys/32 (bit01 of ACSR)17 / cha nnel

27、 = channel number of AN, 0 7 (bit 02 of ADCR)18 / port_cfg = port B sett ing (bit 35 of ADCR)19 void StartADCTra ns(char adc_clk, un sig ned char cha nn el, un sig ned char port_cfg)20 21 _acsr = adc_clk ;/ 設(shè)定 時鐘來源及頻率22 adcr = (port_cfg << 3) | channel ;/ 設(shè)定通道,埠 B 設(shè)定23 adc_start = 1 ; adc_star

28、t = 0 ;/ 改變 ADC 通道及埠 B 設(shè)定24 adc_start = 0 ; adc_start = 1 ; adc_start = 0 ;/ 啟動 ADC轉(zhuǎn)換2526/以下函式(除了主函式 mai n) 與Ze/r' 、.、: 第八早6.7節(jié)相同27/定義數(shù)字,0? ,9? 的 LCD RAM資料,7個位元控制各段的顯示28/圖樣各段gacf bdc29char digit10= 0b01111101, 0b00011000,0b01110011, 0b01111010,/,0?,1?,?2?,?3?300b00011110,0b01101110, 0b01101111,

29、0b00111000, /,4?,?5?,?6?,?7?31 0b01111111, 0b01111110 ;/ ,8?, ,9?32 char LcdRam20 0x140 ;/ LCD RAM 記憶體33 void DelayTime(u nsig ned in t cou nt)/ 10 * cou nt + 11, if cou nt > 25634 35 while( count != 0 )cou nt-;37 /addr (IN) = LCD RAM 位址 =Ox14O+x38 / datal = 寫入 LCD RAM 的資料,bit02 寫入 addr, bit35 寫入

30、 addr+139 /bit 6 寫入 addr+2 的 bit240 void DisplayLcd( un sig ned char addr, un sig ned char datal)41 42 LcdRamaddr - 0x140 = datal & 0x7 ;/ 取位元 0 243 LcdRamaddr - 0x140+1 = (data1 >> 3) & 0x7 ;/ 取位元 3544 LcdRamaddr -0x140+2 = (data >> 6) & 0x7) << 2 ; / 取位元 6, 在左移 2 位盛群半

31、導(dǎo)體股份有限公司HOLTEK SEMICONDUCTOR INCC50微電腦工具事業(yè)處部撰寫人:文 件編號 程式語言及應(yīng)用范例(三)版 別 1.10日期 2007/11/14第113頁 共189 頁46/主函式47void1mai n(void)4849int k ;5051for( k=0 ; k < 20 ; k+ )LcdRamk = 0 ;/將LCD記憶體清為52_emi = 0 ;/停止所有中斷的發(fā)生53_eadi = 1 ;/ ADC 中斷功能生效54_emi = 1 ;/所有中斷功能生效55in tflag = 0 ;/ ADC 中斷旗標(biāo)56StartADCTrans(FSYS8, CH_AN0, ADC_2CH) ;/ 開始 ADC57while(1)/無限回圈,等候ADC中斷產(chǎn)生5859

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論