码迷,mamicode.com
首页 > 其他好文 > 详细

AVR--IO设置编程

时间:2020-01-10 12:50:28      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:基于   运算   image   bis   操作方法   bsp   逻辑   http   info   

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设置编程

标签:基于   运算   image   bis   操作方法   bsp   逻辑   http   info   

原文地址:https://www.cnblogs.com/mickey-double/p/12175378.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!