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