頭文件含義
avr_macros.h里面包含了讀寫(xiě)16位寄存器的簡(jiǎn)化書(shū)寫(xiě),和幾個(gè)位操作函數(shù)
comp_a90.h對(duì)大量的內(nèi)在函數(shù)做了簡(jiǎn)要書(shū)寫(xiě)
ina90.h包含"inavr.h""comp_A90.h"文件
intrinsics.h內(nèi)在函數(shù)提供最簡(jiǎn)單的操作處理器底層特征。休眠,看門(mén)狗,F(xiàn)LASH函數(shù)。
iomacro.HI/O寄存器定義文件樣本。
iom8.h包含I/O等寄存器定義
位操作
在c語(yǔ)言里對(duì)位的操作如一般如下:
PORTB|=(1<<2); //置PORTB的第2位=1
PORTB&=~(1<<2); //置PORTB的第2位=0
PORTB^|=(1<<2); //取反PORTB的第2位
While(PORTB&(1<<2)); //判斷1
While(!(PORTB&(1<<2))); //判斷為0
IAR編譯器對(duì)位的支持更強(qiáng)大,除了上面的方法外還有以下更簡(jiǎn)單的操作方法:
PORTB_Bit2=1;//置PORTB的第2位=1
PORTB_Bit2=0;//置PORTB的第2位=0
PORTB_Bit2=~PORTB_Bit2;//取反PORTB的第2位
While(PORTB_Bit2);或者while(PORTB_Bit2==1);//判斷1
while(PORTB_Bit2==0);//判斷0
PORTC_Bit4=PORTB_Bit2;//把PORTB的第2位傳送到PORTC的第4位
位變量定義:
由于iar使用了擴(kuò)展語(yǔ)言,它對(duì)位域的支持變?yōu)樽钚閏har類型,我們可以很方便地用來(lái)定義位變量。
采用結(jié)構(gòu)體來(lái)定義位變量:
struct
{
unsignedcharbit0:1;
unsignedcharbit1:1;
unsignedcharbit2:1;
unsignedcharbit3:1;
unsignedcharbit4:1;
unsignedcharbit5:1;
unsignedcharbit6:1;
unsignedcharbit7:1;
}t;
然后就可以用以下位變量
t.bit0=1;
t.bit0=~t.bit0;
但是采用以上結(jié)構(gòu)體做出來(lái)的位變量只可以訪問(wèn)t的位,不能夠直接訪問(wèn)變量t,和標(biāo)準(zhǔn)的IAR位操作也不一樣,可以采用聯(lián)合體來(lái)定義。
#include
union
{
unsignedchart;
struct
{unsignedchart_bit0:1,
t_bit1:1,
t_bit2:1,
t_bit3:1,
t_bit4:1,
t_bit5:1,
t_bit6:1,
t_bit7:1;
};
};
voidmain(void)
{
t_bit0=1;//訪問(wèn)變量t的位
t_bit0=~t_bit0;
PORTB=t;//直接訪問(wèn)變量t
}
延時(shí)函數(shù)
__delay_cycles(unsignedlong);
如果處理器頻率為1M,延時(shí)100us,如下:
__delay_cycles(100);
延時(shí)任意時(shí)間
#define CPU_F 8000000
#define delay_us(x) __delay_cycles(CPU_F*x/1000000)
#define delay_ms(x) __delay_cycles(CPU_F*x/1000)
中斷函數(shù):
在IAR編譯器里用關(guān)鍵字來(lái)__interrupt來(lái)定義一個(gè)中斷函數(shù),用#pragmavector來(lái)提供中斷函數(shù)的入口地址
#pragmavector=0x12 //定時(shí)器0溢出中斷入口地址
__interruptvoidtime0(void)
{
;
}
上面的入口地址寫(xiě)成#pragmavector=TIMER0_OVF_vect更直觀,每種中斷的入口地址在頭文件里有描述。
中斷指令
__disable_interrupt(); //也可以用_CLI();也可以SREG_Bit7=0;
__enable_interrupt(); //也可以用_SEI();也可以SREG_Bit7=1;
MCU控制指令
__no_operation(); //空操作指令
_NOP();
__sleep(); //休眠指令
_SLEEP();
__watchdog_reset(); //看門(mén)狗清零
_WDR();
來(lái)源:暢學(xué)電子
審核編輯:何安
-
AVR單片機(jī)
+關(guān)注
關(guān)注
22文章
607瀏覽量
55417 -
IAR
+關(guān)注
關(guān)注
5文章
344瀏覽量
36564
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論