Atmega16
IO相關寄存器
學習每種單片機要從控制各IO口的高低電平開始,avr系列與IO有關的寄存器每組有三類,PORTn ,DDRn , PINn,及SFIOR內PUD位,PORTn與DDRn是控制端口的狀態,對應關系如圖。
現在以keil中51系列為例,定義端口然后對等關系定義AVR端口在ICCARV中。
51 : Sbit led=P1^2; led=0; led=1;
AVR: #define ledh PORTA|=(1<<PA0) led=1;
#define ledl PORTA&=~(1<<PA0) led=0;
PINn return PINn; if(PINn==XX)
中斷向量及中斷程序寫法
#pragma interrupt_handler timer0_ovf:10 //定時器溢出
Void timer0_ovf(void) 中斷源中斷向量
{}
外部中斷
外部中斷有三個,分別為INT0,INT1,INT2;對應端口為PD2,PD3,PB2;首先設置端口狀態INT0為例,PORTD|=(1<<PD2);
DDRD&=~(1<<DDD2);
中斷產生條件設置
外部中斷0、1MCUCR Bit0:3 位ISC00 ISC01 ISC10 ISC11
INT2 ISC2寫0時低電平觸發,寫1時高點批評觸發
中斷控制寄存器: GICR Bit 5:7 INT2,INT0,INT1
需要哪個中斷時將其寫1 GICR|=(1<<INTn);
中斷標志位寄存器:GIFR Bit5:7 INTF2/INTF0/INTF1
全局中斷打開,中斷控制位打開,引腳上發生合適的電平變化,對應的中斷標志位就會置位,對其寫1實現清零。
下邊寫個INT0的程序發生中斷時將PORTA取反
本章到這里,不定期更新,后邊有、定時器,UART,AD,SPI,EEPROM、IIC總線。更有Atmega128等著你,不要走開,哈哈哈
精彩的生活怎么能沒有你的存在 MCU