AVR單片機位操作的C語言編程實現(xiàn)_第1頁
AVR單片機位操作的C語言編程實現(xiàn)_第2頁
AVR單片機位操作的C語言編程實現(xiàn)_第3頁
AVR單片機位操作的C語言編程實現(xiàn)_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、第第 頁共4頁電子報/2011年/I月/16日/第015版智能電子AVR單片機位操作的C語言編程實現(xiàn)湖北曾安君一、常規(guī)方法AVR單片機的各類教材或編程應(yīng)用參考資料,對介紹的端II位操作方法不外乎宏定義及整體和某個常吊湘或、相與來實現(xiàn)某一單個位狀態(tài)的改變。如:PORT&=(11):等價J:PORTB&=oxfd:作用是PB1清零而其余位不變。與之類似的還有:PORTB1=(14);PB4置位,其余位不變。PORTBA=(14);PB4翻轉(zhuǎn),其余位不變。上述方法,無論是常屋值參與還是移位操作,用起來總嫌麻煩,不夠直觀,且具體常崑值還需人工推算,易出錯。移位操作生成的目標(biāo)代碼偏人,在人鼠運用時,占用

2、系統(tǒng)內(nèi)存或flash空間,執(zhí)行效率低。以筆者實際運用效果來看,宏定義比較好。筆者也偏好運用宏定義。C編譯器在編譯Z前會事先進行宏替換,所以,如果宏定義講究一些技巧,則代碼執(zhí)行效率將得到較人提升,編程時,操作也得心應(yīng)手。常規(guī)參考手冊或資料,建議用以I、宏定義:#definePAO0#definePAI1#definePA22#definePA33#definePA44#deffinePA55#definePA66#definePA77#defineCPL_BIT(x、y)(xA=(1y)#dcfineSET_BIT(x、y)(xl=(ly)#defineCLR_BIT(x、y)(x&=(lvy)

3、#defineGET_BIT(x、y)(x&=(ly)如此宏定義之后,可構(gòu)成一個頭文件,然后加入到新建工程文件中(編譯器用ICC的ICC6.31A),但Z前需包含和應(yīng)單片機的頭文件,如:MCU為AT-MEGA48,則最先包含iom48V.h之后,再包含此自制頭文件,即可在程序中運用:CPLBIT(PORTA.PA2);/PB2取反GET_BIT(PORTA.PA6);讀取PA6的狀態(tài)CLR_BIT(PORTA.PA5);清零PA5SETBIT(PORTA.PAl);/PA1置1此法在運用時,依舊用了移位操作,只是為了方便程序操作,筆者只在小規(guī)模程序中運用。I、而,筆者將充分利用C語言自身的強人

4、位運算能力和指針相結(jié)合,構(gòu)建一個ICC6.31A平臺卜的位定義頭文件,希望能給大家一些啟示。首先明確幾個基本概念:位域、地址綁定,和Volatile限定關(guān)鍵字。在ICC631A的安裝目錄中有個in-elude文件夾,里而有大屋編譯器開發(fā)人員已為我們開發(fā)好的各類AVR單片機預(yù)定頭文件,卜面是iom48v.h頭文件。AVR的ATMEGA48MCU頭文件iom48v.h中關(guān)其端II地址定義部分:/*PortB*/#definePINB(*(volatileunsignedchar*)ox23)#defineDDRB(*(volatileunsignedchar*)oxx24)#definePORTB

5、(*(volatileunsignedchar*)ox25)/*PORTC*/#definePINC(*(volatileunsignedchar*)ox26)#defineDDRC(*(volatileunsignedchar*)ox27)#definePORTC(*(volatileunsignedchar*)ox28)/*PortD*/#definePIND(*(volatileunsignedchar*)ox29)#defineDDRD(*(volatileunsignedchar*)ox2A)#definePORTD(*(volatileunsignedchar*)ox2B)注:每個

6、端II均有PIN、DDR、PORT三個八位寄存器簡要概括如下:Volatile一詞用來規(guī)定C編譯器不允許對其限定的變堂進行優(yōu)化處理。如:#definePORTB(*(volatileunSignedchar*)ox25)這句宏定義要結(jié)合iom48v.h頭文件來看,在前而有該頭文件關(guān)丁各端II寄存器的定義。上述宏語句中,ox25被強制轉(zhuǎn)化為一個指針常彊,實際上,上述宏定義的意義為:PORTB被強制定義在地址ox25,即定義了一個無符號字符型變量PORTB,且被強制綁定在ox25地址上。其他語句依此類推。有了這個概念之后,再來了解一下C語言中位域的定義。標(biāo)準(zhǔn)C語言中,可以定義一個特殊的結(jié)構(gòu),位域,

7、允許對定義的結(jié)構(gòu)中的單個位進行操作?;緲?gòu)成如卜:位域:stnict位域結(jié)構(gòu)名位域列表;)位域類型變量名;卜面是筆者給出的位域定義等的頭文件,在自定義位操作頭文件中定義了一個位域BYTE_BITo相關(guān)詳細架構(gòu)標(biāo)準(zhǔn)請參考C語言規(guī)范,在此不再多述,只是希望人家對此有人概了解。自定義avr_bit.h頭文件(節(jié)選,以ATMEGA48為例,定義其BII)定義位域tyoedefstnictByteBitunsignedBitO:1;unsignedBitl:l;unsignedBit2:l:unsignedBit3:l;unsignedBit4:1;unsignedBit5:l;unsignedBit6

8、:1;unsignedBit7:l;)BYTE.BIT:/BI1宏定義,此值參見相應(yīng)頭文件。#define_PINBox23#define_DDRBox24#definePORTBox25定義B端口每個位,進行地址綁定。#definePINB_BITO(*(voIatileBYTE_BIT*)(_PINB).BTTOPINB.BITlBIT1#dcfincPORTB_BITO(*(volatiIcBYTE_BIT*)(_PORTB)BITOPORTB_BIT1BIT1#defineDDRBBITO(*(volatilcBYTE_BIT*)(_DDRB)BITODDRB_B1T1Bill對各端L

9、I依同一規(guī)律均進行各位的定義即可。結(jié)合頭文件的和關(guān)定義,重新對其特定地址進行另外的綁定,結(jié)合位域的概念,進而一步步將各寄存器由一個字節(jié)分成了可操控的8個位。在上述文件中,筆者僅表述了B端II。另外,Atmega48的端門不完全,只有B、C、DII,沒有All,且Dll為8位,CII為6位,BII為7位,若外接晶體,則PB6和PB7不能另作端II運用。所以,端II很不完整,但為了保持位域完整性和一致性,便丁理解,將B、C、D三門均作8bit對待。實際操作時,千萬注意不要去操作那些實際不存在的位。當(dāng)然,若感興趣,人家可改動頭文件相關(guān)定義,來完善它。為驗證這個頭文件,筆者很快編寫了一個測試程序Bee

10、p.c,具體如卜:Beep.c程序代碼#include#includeavr_bith”包含自定義頭文件#definetime40000Voidbeepcunsignedint);Voidporting):Voidmain():while(l)portint();beep(time);1)Voidbeepcunsignedintr)/蜂鳴器發(fā)聲函數(shù)unsignedinti;PORTB_BIT0=0;/PBO輸出低電平fori=rjoa.)PORTB_BITO=1;/PBO輸出高電平for(i=r;i0;i.)voidportint()端II初始化函數(shù)DDRB_BITO=1:/PBO為輸出狀態(tài)P

11、ORTB_BITO=0:/PBO輸出“0”1在電路拓撲中,在ATMEGA48的PB0腳,即(14)腳外接一只三極管(接b極)由三極管去控制只蜂鳴器。程序很簡單。為了更直觀,在PORTBII其他不用的引腳上均接了發(fā)光二極管,此時,在測試程序中,將端II初始化函數(shù)語句改為:DDRB=oxff:PORTB=oxOO;(或PORTB=oxff:視二極管接法而定),由二極管配合蜂鳴器來觀察PBO位是否能單獨動作。當(dāng)然,運用此位定義頭文件,可實現(xiàn)單片機任一口的任一位的位操作。二、擴展運用基上述原理,結(jié)合C語言取地址運算符&,不難實現(xiàn)一個通用位定義頭文件,來適合所有AVR單片機,只是代碼較為復(fù)雜。大家不妨自己試試。注意一點:以上頭文件,筆者是參考ICC6.31A編譯器的include文件夾定義的,在使用前,請首先包含系統(tǒng)提供的MCU頭文件,并將自定義頭文件復(fù)制到所建工程中,然后,就可運用自如To就目前使用情況來看,使用AT-MEGA48/16/128的MCU較多,所以即便是定義3個對應(yīng)的位操作頭文件,也是可以的。通用型文件往往體積較人,編制麻煩,可讀性差,不適合普通愛好者。在本文中,筆者對J-AVR單片機的位操作端II編程提

溫馨提示

  • 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

提交評論