AVR--IO设置编程
Posted mickey-double
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AVR--IO设置编程相关的知识,希望对你有一定的参考价值。
AVR的C语言基于ANSI C,没有像51那样扩展了位操作(布尔操作),虽然汇编指令里面有SBI/CBI/SBIC/SBIS指令。所以需要采用 位逻辑运算 来实现,这是必须要掌握的。IO口和功能寄存器的操作方法一样,但对于部分功能寄存器的读写有特殊要求,请参看手册。不必考虑代码效率的问题,如果可能,GCCAVR会自动优化为SBI/CBI/SBIC/SBIS指令,跟汇编的效率是一样的。
例如 iom16.h 里面定义了
1 例如 iom16.h 里面定义了 2 3 #define PA0 0 4 5 PA0为1 PORTA |= (1<< PA0) 6 PA0为0 PORTA &= ~(1<< PA0)
位一般操作
1 #define BIT(X) (1<<X) 2 #define SETBIT(x,y) (x |= (y)) 3 #define CLEARBIT(x,y) (x &= (~y)) 4 #define CHECKBIT(x,y) (x & y)
1 1.输出高低电平 2 //Step1:设置PA为输出 3 DDRA |= 0xFF; 4 //Step2:PA1输出高电平 5 PORTA |= 0x01; -----> 优化 SETBIT(PORTA , BIT(PA1)) 6 //Step3:PA1输出低电平 7 PORTA &= 0xFE; -----> 优化 CLEARBIT(PORTA , BIT(PA1)) 8 9 2.检测输入电平 10 //设置PA0为输入 11 DDRA &= 0xFE; 12 //上拉输入 13 PORTA |= 0x01; -----> 优化 SETBIT(PORTA , BIT(PA1)) 14 //高阻态输入 15 PORTA &= 0xFE; -----> 优化 CLEARBIT(PORTA , BIT(PA1)) 16 17 //检测PA0为高电平 18 If(PINA & 0x01) 19 { 20 //do something 21 } 22 23 //检测PA0为低电平 24 If(!(PINA & 0x01)) 25 { 26 //do something 27 }
以上是关于AVR--IO设置编程的主要内容,如果未能解决你的问题,请参考以下文章