zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    随机购买彩票问题
    for循环小题
    20150914 异常语句 math的方法 去空格 索引
    20150913生成三个10以内的随机数,不想等
    winform 计算器 两步走
    枚举、常量、结构
    视频嵌入网页, 分享嵌入网页!
    !!!框架集
    日常总结!!!
    随笔练习!!!
  • 原文地址:https://www.cnblogs.com/mickey-double/p/12175378.html
Copyright © 2011-2022 走看看