您的位置:網(wǎng)站首頁 > 電器維修資料網(wǎng) > 正文 >
PIC單片機延時與可可逆計數(shù)器程序
來源: 日期:2013-11-14 15:25:52 人氣:標(biāo)簽:
附表中的后兩條位測試(或位判斷)指令,只需掌握其中任何一條指令的應(yīng)用,均可學(xué)會它們的用途。位測試(或稱位判斷)指令btfss(或btfsc)主要是判斷pic單片機的a口或b口某個位是否有電平發(fā)生了變化,若有變化,程序會按指定的方向進(jìn)行。該兩條指令常用于pic單片機,用人功方法起動輸入口去執(zhí)行某種功能,或pic單片機的a口、b口有輸入脈沖作用時,使輸出口執(zhí)行一系列的程序功能。pic單片機面向位的指令其操作十分簡單,是很常用的指令。
二、面向字節(jié)的指令
面向字節(jié)指令是指參與指令的操作數(shù)為pic芯片內(nèi)寄存器的所有位即字節(jié)(8位),其指令格式如下:
操作碼 f,d
以上格式中的操作碼和寄存器f的功能與面向位的指令相同。
格式中的d稱為目標(biāo)碼選擇指示符,其指示功能是規(guī)定操作的結(jié)果存放在哪個寄存器中。如果d=0,則結(jié)果存放在工作寄存器w中;如果d=l,則結(jié)果存放在指令所使用的寄存器中;d缺省,默認(rèn)d=l。pic單片機面向字節(jié)的指令近20條,以下將逐步介紹它們的應(yīng)用。
1.寄存器f內(nèi)容遞減為零間跳指令
格式:decfszf,d
功能:這是一條具有條件判斷性質(zhì)的指令,即寄存器f的內(nèi)容減1(即遞減),若不為零,程序順序執(zhí)行;若為零,則程序跳過下一條指令(即間跳)再執(zhí)行。寄存器內(nèi)容減l結(jié)果存人寄存器f(指示符d=l)或存人工作寄存器w(指示符d=0)。
2.寄存器f內(nèi)容遞增為零間跳指令
格式:incfszf,d
該條incfsz的指令,與decfsz的邏輯功能完全相同,不同的地方只需把上述的遞減(減1)改為遞增(加1)即可。
上述兩條指令的操作,均不影響狀態(tài)位的變化。
三、方波發(fā)生器和延時程序
利用pic16f84制作方波發(fā)生器是pic單片機 簡單的一種應(yīng)用。
發(fā)生的方波其 高頻率與單片機時種頻率(晶體頻率)有關(guān),而頻率的下限可由軟件任意設(shè)置:方波的占空比也可由軟件任意設(shè)置;方波的輸出電壓和驅(qū)動能力為5v/25ma。pic16f84方波發(fā)生器的硬件電路如下圖所示。電路中的晶振xl為2mhz(對16f84芯片 高可取20mhz),cl、c2和xl組成時鐘振蕩器;rl、c3、二極管d和kl組成手動復(fù)位電路;ra0口上的r2和k2組成方波發(fā)生的起動電路。rb7口為方波輸出,其中l(wèi)ed2為方波輸出指示器。rb0~rb6口都未接有l(wèi)ed,該7個輸出端這里暫時不用,在后面介紹的可逆計數(shù)器時將被派上用場:r3、r4為發(fā)光二極管的限流電阻。
pic16f84方波發(fā)生器的流程如下圖所示;源程序(命名為pic03.asm)清單如下:
說明:
1.關(guān)于復(fù)位電路
pic單片機的復(fù)位通常有幾種方式:(1)芯片上電復(fù)位。因芯片內(nèi)集成有上電復(fù)位電路(por),所以一旦給芯片供電,芯片會自動復(fù)位。所以讀者會發(fā)現(xiàn),許多pic單片機產(chǎn)品,常把mclr的反端(pic16f84的④腳)直接接芯片的電源vdd端或通過電阻接vdd,使芯片上電自動復(fù)位。在圖l電路中若要簡化電路,c3、d和開關(guān)kl均可不用,同樣可到復(fù)位效果。(2)外部mlr引腳加低電平復(fù)位。對于一些特殊應(yīng)用,可在mclr的反端引入復(fù)位電路。如圖1中,在pic16f84的mclr的反④腳引入c3、d、rl和kl組成的復(fù)位電路,是為了后面介紹可逆計數(shù)器而設(shè)置的。當(dāng)手動使kl按下時,給mclr(的反)端一個低電平脈沖,達(dá)到外部使pic16f84復(fù)位目的。(3)正常工作狀態(tài)下,監(jiān)視定時器wdt(又稱看門狗)超時溢出復(fù)位(后文有專門介紹其用途)。當(dāng)然還有其它一些復(fù)位方式。
2.關(guān)于指令周期
pic單片機采用了精簡指令集(risc)結(jié)構(gòu),內(nèi)部總線又采用了各自獨立的數(shù)據(jù)總線和指令總線的哈佛結(jié)構(gòu)。數(shù)據(jù)總線是8位的,而指令總線可以是多位單字長指令。pic單片機內(nèi)部cpu執(zhí)行指令通常是一行接著一行順序執(zhí)行其指令(由程序存儲器的低位地址向高位地址執(zhí)行)。執(zhí)行一條指令所用的時間稱為一個指令周期。指令周期的時間與pic單片機配置的時鐘頻率有關(guān),即以pic單片機配置的晶振頻率除以4為一個指令周期的時間。為了本文計算方波頻率方便,下表列出了pic單片機常用的時鐘頻率和指令周期的關(guān)系表。
查閱pic系列單片機的指令表集,將發(fā)現(xiàn)指令表中除了程序分支指令是雙周期指令外,其余指令全都是單周期指令。所以上述介紹的有關(guān)指令中,除了goto跳轉(zhuǎn)指令和btfss/btfsc間跳時的指令是雙周期外,其余都是單周期指令。
3.關(guān)于方波發(fā)生器
方波發(fā)生器電路其輸出方波如下圖所示。方波的產(chǎn)生全部用匯編軟件的延時程序來實現(xiàn)。在上述的源程序中,若ra0口無電平變化,程序會在標(biāo)號loop地址處于等待狀態(tài);若rao口有電平變化,程序依次執(zhí)行延時程序而使輸出產(chǎn)生方波,所以ra0口外接的開關(guān)k2是方波發(fā)生器的人工起動開關(guān)。一旦人工觸動開關(guān)k2,程序開始執(zhí)行,首先令b口的d7位置l,然后通過計數(shù)器counter1和counter2不斷加1,以執(zhí)行標(biāo)號delayl的延時程序,形成圖3方波周期t的tl時間:
然后又令b口的d7位置0,再利用標(biāo)號delay2的延時程序,形成方波周期的t2時間。所以方波的周期t=t1+t2。
4.關(guān)于方波頻率
pic16f84方波發(fā)生器硬件電路輸出方波頻率f的計算可分兩個步驟,其一是計算上述程序中產(chǎn)生方波有關(guān)指令執(zhí)行周期的總次數(shù);其二是利用表2,查閱指令周期的時間(當(dāng)圖1電路的時鐘頻率xl為2mhz時,單周期指令為2μs),再乘以上述周期總的次數(shù),即為方波的周期t=t1+t2,其對應(yīng)的頻率f=l/t。計算時,指令周期數(shù)應(yīng)從btfss之后的標(biāo)號occur開始(方波啟動);計數(shù)器counter1、couter2的 大值為255;跳轉(zhuǎn)指令為雙周期的。則,方波pic03.asm的執(zhí)行指令周期的總次數(shù)
我們可以將上述pic03.asm源程序匯編,生成pic03.hex目標(biāo)碼文件,再用pic實驗編程器或其它pic編程器將pic03.hex燒寫到pic16f84中,按圖1裝配好印板電路,或直接用pic實驗編程器配套的實驗板即可演示方波的功能。操作時只需將電路板接通電源,啟動k2開關(guān),此時可用人工記錄led的閃動為每分鐘76次,計算值和演示值十分一致。
5.關(guān)于pic03.asm程序
上述源程序簡單的實例,是為了給初學(xué)者提供一種方波振蕩器工作過程和計算方波頻率(延時程序)的一種思維方法。學(xué)會上述的計算方法也是為下次設(shè)計秒脈沖發(fā)生器打下基礎(chǔ)。從上述計算可以看出,方波周期的起始時間,是以產(chǎn)生方波的有效時刻開始的,而不是所有源程序的執(zhí)行時間。
值得注意:在上述源程序中,方波tl的延時程序用了加l判斷指令;而t2的延時用了減1的判斷指令,這里它們的延時量是完全等效的,所以加、減判斷指令,在這里可以互相替換。
- 1
- 2
- 下一頁
【看看這篇文章在百度的收錄情況】
相關(guān)文章
- 上一篇: 電路設(shè)計中的電感線圈及變壓器
- 下一篇: 揭開IC卡的神性面紗