C语言“位运算”:
“与&”运算: 1×1=1 1×0=0 0×1=0 0×0=0
“或|”运算: 1+1=1 1+0=1 0+1=1 0+0=0
“异或^”运算: 1^1=0 1^0=1 0^1=1 0^0=0
设:PORTA==10110100 x=(0~7)
PORTA &= ~(0x01<<x) x位置“0”
PORTA |= (0x01<<x) x位置“1”
PORTA^=(0x01<<x)x位置“取反”
______________________________________
C语言常识:逻辑“真”:非“0”, 逻辑“假”:“0”。
______________________________________
判断端口A的某一“位”的值:x= ( 0 ~ 7 )
If(PORTA &(0x01<<x))then …
在if表达式中,如果x位的值为1,则表达式因为“非0”而为“真”,如果x位的值为0,则表达式因为值为“0”而为“假”。
在AVR的端口寄存器中DDRx默认为0x00,PORTx默认为0x00。
/*********************************************************** * 函数库说明:ATMEGE8 灯闪烁 * 版本: v1.0 * 修改: 庞辉 * 修改日期: 2011年08月01日 * * 说明: 无 * * 版本更新: * ************************************************************ *注意: LED C5 ***********************************************************/ #include <avr/io.h> int main(void) { unsigned int i,j; //PORTC5设置为输出 DDRC |= (1 << DDC5); //PORTC5输出低电平,LED亮 PORTC &= ~(1 << PORTC5); while(1) { //取反 PORTC ^= (1 << PORTC5); for(i = 0;i < 100;i ++) for(j = 0;j < 1000;j ++); } }