下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版汽車銷售合同擔(dān)保法執(zhí)行合同3篇
- 2025年環(huán)保節(jié)能建筑材料供應(yīng)合同3篇
- 2025年度個人汽車貸款購車合同(新能源汽車購置補貼合同)3篇
- 長沙幼兒師范高等??茖W(xué)?!睹绹膶W(xué)史及選讀(2)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度文化產(chǎn)業(yè)股權(quán)投資保密及運營管理協(xié)議3篇
- 校園心理咨詢服務(wù)體系的完善與創(chuàng)新
- 2025年度夫妻忠誠協(xié)議履行監(jiān)督與違約追究協(xié)議4篇
- 學(xué)生實訓(xùn)前安全教育的重要性與策略
- 心理教育課程在學(xué)生心理健康中的重要性
- 個人車輛抵押權(quán)協(xié)議標(biāo)準(zhǔn)范本2024版
- 三角形與全等三角形復(fù)習(xí)教案 人教版
- 2024年1月高考適應(yīng)性測試“九省聯(lián)考”英語 試題(學(xué)生版+解析版)
- 《朝天子·詠喇叭-王磐》核心素養(yǎng)目標(biāo)教學(xué)設(shè)計、教材分析與教學(xué)反思-2023-2024學(xué)年初中語文統(tǒng)編版
- 成長小說智慧樹知到期末考試答案2024年
- 紅色革命故事《王二小的故事》
- 海洋工程用高性能建筑鋼材的研發(fā)
- 英語48個國際音標(biāo)課件(單詞帶聲、附有聲國際音標(biāo)圖)
- GB/T 6892-2023一般工業(yè)用鋁及鋁合金擠壓型材
- 冷庫安全管理制度
- 2023同等學(xué)力申碩統(tǒng)考英語考試真題
- 家具安裝工培訓(xùn)教案優(yōu)質(zhì)資料
評論
0/150
提交評論