AVR GCC對端口的操做指南

1. AVR GCC for AVR編程

I.I/O端口API
1. BV
用法:BV(pos);
說明:將位定義轉換成屏蔽碼(MASK)。與頭文件io.h裏的位定義一塊兒使用。例如,置位WDTOE和WDE可表示爲「BV(WDTOE) | BV(WDE)」
2. bit_is_clear
用法:uint8_t bit_is_clear(uint8_t port, uint8_t bit);
描述:若是port的bit位清零則返回1。此函數調用sbic指令,故port應爲有效地址。
3.bit_is_set
用法:uint8_t bit_is_set(uint8_t port, uint8_t bit);
描述:若是port的bit位置位則返回1。此函數調用sbis指令,故port應爲有效地址。
4.cbi
用法:void cbi(uint8_t port, uint8_t bit);
說明:清零port的bit位。bit的值爲0~7。若是port爲實際I/O寄存器,則此函數生成一條cbi指令;不然,函數生成相應的優化代碼。
5.inp
用法:uint8_t inp(uint8_t port);
說明:從端口port讀入8比特的數值。若是port爲常數,則函數生成一條in指令;若爲變量,則函數用直接尋址指令。
6.__inw
用法:uint16_t __inw(uint8_t port);
說明:從I/O寄存器讀入16位的數值。此函數用於讀取16位寄存器(ADC,ICR1,OCR1,TCNT1)的值,由於讀取這些寄存器須要合適的步驟。因爲此函數只產生兩條彙編指令,所以要在中斷禁止時使用,不然有可能因爲中斷插入到指令之間形成讀取錯誤。
7.__inw_atomic
用法:uint16_t __inw_atomic(uint8_t port);
說明:以原子語句方式讀取16位I/O寄存器的數值。此函數首先禁止中斷,讀取數據以後再恢復中斷狀態,所以能夠安全地應用在各類系統狀態。
8.loop_until_bit_is_clear
用法:oidoid loop_until_bit_is_clear (uint8_t port, uint8_t bit);
說明:此函數簡單地調用sbic指令來測試端口port的bit位是否清零。port必須爲有效端口。
9.loop_until_bit_is_set
用法:oidoid loop_until_bit_is_set (uint8_t port, uint8_t bit);
說明:此函數簡單地調用sbis指令來測試端口port的bit位是否置位。port必須爲有效端口。
10.outp
用法:void outp(uint8_t val, uint8_t port);
說明:將val寫入端口port。若是port爲常數,則函數生成一條out指令;若爲變量,則函數用直接尋址指令。
11.__outw
用法:void __outw(uint16_t val, uint8_t port);
說明:將16位的val寫入端口port。此函數適合於操做16位寄存器,如ADC,ICR1,OCR1,TCNT1。因爲此函數只產生兩條彙編指令,所以要在中斷禁止時使用,不然有可能因爲中斷插入到指令之間形成讀取錯誤。
12.__outw_atomic
用法:void __outw_atomic(uint16_t val, uint8_t port);
說明:將16位的val寫入端口port。此函數適合於操做16位寄存器,如ADC,ICR1,OCR1,TCNT1。此函數首先禁止中斷,讀取數據以後再恢復中斷狀態,所以能夠安全地應用在各類系統狀態。
13.sbi
用法:void sbi(uint8_t port, uint8_t bit);
說明:置位port的bit位。bit的值爲0~7。若是port爲實際I/O寄存器,則此函數生成一條 sbi指令;不然,函數生成相應的優化代碼。
五.看門狗API
如下函數操做看門狗。宏定義參見wdt.h。
用戶能夠經過起動代碼初始化看門狗。WDTCR的缺省值爲0。若是你但願將其設置爲其餘值,則須要在連接命令里加入相應的命令。使用的符號爲__init_wdtcr__。以下爲將WDTCR設置爲0x1f的例子:
avr-ld –defsym __init_wdtcr__=0x1f
1. wdt_disable
用法:void wdt_disable(void);
說明:關閉看門狗。
2. wdt_enable
用法:void wdt_enable(unit8_t timeout);
說明:使能看門狗。看門狗溢出時間爲timeout。
timeout 週期
0 16K CLK
1 32K CLK
2 64K CLK
3 128K CLK
4 256K CLK
5 512K CLK
6 1024K CLK
7 2048K CLK安全

3. wdt_reset
用法:void wdt_reset(void);
說明:產生喂狗指令wdr。
 
附錄:AVR-GCC配置
彙編選項
選項 描述
-mmcu=name 指定目標器件
name能夠爲:at90s1200,at90s2313,at90s2323,at90s2333,at90s2343,at904433,at90s8515,at90s8535,atmega103,atmega161
寄存器使用
若是用戶須要進行彙編與C的混合編程,必須瞭解寄存器的使用。
1.寄存器使用
r0  可用作暫時寄存器。若是用戶彙編代碼使用了r0,且要調用C代碼,則在調用以前必須保存r0。C中斷例程會自動保存和恢復r0。
r1  C編譯器假定此寄存器內容爲「0」。若是用戶使用了此寄存器,則在彙編代碼返回以前須將其清零。C中斷例程會自動保存和恢復r1。
r2-r17,r28,r29  C編譯器使用這些寄存器。若是用戶彙編代碼須要使用這些寄存器,則必須保存並恢復這些寄存器。
R18-r27,r30,r31 若是用戶彙編代碼不調用C代碼則無需保存和恢復這些寄存器。若是用戶要調用C代碼,則在調用以前須保存。
2.函數調用規則
參數表:函數的參數由左至右分別分配給r25到r8。每一個參數佔據偶數個寄存器。若參數太多以致r25到r8沒法容納,則多出來的參數將放入堆棧。
返回值:8位返回值存放在r24。16位返回值存放在r25:r24。32位返回值存放在r25:r24:r23:r22。64位返回值存放在r25:r24:r23:r22:r21:r20:r19:r18。函數

2.Keil for MCS51oop

sbit LED=P1^0測試

相關文章
相關標籤/搜索