ATmega88的简单引脚设置

发布者:csZhou最新更新时间:2022-07-21 来源: csdn关键字:ATmega88  引脚设置  高低电平 手机看文章 扫描二维码
随时随地手机看文章

/*******************************************************************************/

//ATmega88简单输出;

//pd0和pb1输入  pd1输出

//当pb0为低电平的时候,pd1输出高电平

//当pb1为低电平的时候,pd1输出高低交换电平

/*******************************************************************************/

#include

#include


void delay(int x)

{

int a,b;

for(a = x;a >0;a--)

{

for(b = 114;b>0;b--)

{

}

}

}


void main()

{

DDRB = 0x00;  //pb input

PORTB = 0x00;

DDRD |= 0x02; //pd1 output

    PORTD = 0x00;

    while(1)

    {

if((PINB & 0x04) != 0x04)  //pb2weidi

{

   PORTD = 0x00;

   delay(538);

   PORTD = 0x02;

   delay(538);

}

else if((PINB & 0x01) != 0x01) // pd0weidi

{

   PORTD = 0x02;

}

else

{

PORTD = 0x00;

}

    }

}


问题:在判断引脚为高低电平的时候,之前是以下的判断方法:

1、if(PINB & (1 << 2) == 1) //是不是在意思是说 pb2 == 0 pb0 == 1吗??

2、if (PINB & (1 << 0) == 0) //意思是不是说 pb2 == 0 pb0 == 0 吗?

3、if(PINB | (0 << 2) == 0) { PORTD = 0x02; }

//pb0 pb2 都为高电平的时候吗?仿真中显示的是 不管P2 和Pb0是什么电平组合,都会产生灯亮的效果;是不是意思这个判断就根本不行?


解答问题:

1、 if(PINB & (1<<2) == 1)

这个判断始终不能成立,因为1左移两位,最低位是0,位操作中0&任何数都为零,所以这个操作不能成立;


2、if (PINB & (1 << 0) == 0)

这个判断只能判断pb0为0,并不能判断其他的位,因为0&任何数都为零;


3、if(PINB | (0 << 2) == 0)

移位判断的时候只能用&判断,如果用了|操作,除了第二位之外的任何位为1的时候,都不可满足。只有在第二位为0,其他位也为0的情况下才可以满足;


总结:位操作不熟练的时候最好使用if((PINB & 0x02) == 0x02)的形式使用;

关键字:ATmega88  引脚设置  高低电平 引用地址:ATmega88的简单引脚设置

上一篇:基于ATMEGA8A_AVR单片机温度测控系统proteus仿真
下一篇:ATmega88输出1khz的方波

推荐阅读最新更新时间:2024-11-08 12:19

ATmega88 减少功耗的方法
试图降低AVR 控制系统的功耗时需要考虑几个问题。一般来说,要尽可能利用睡眠模式,并且使尽可能少的模块继续工作。不需要的功能必须禁止。下面的模块需要特殊考虑以达到尽可能低的功耗。 模数转换器 使能时, ADC 在所有休眠模式下都继续工作。为了降低功耗,在进入休眠模式之前需要禁止 ADC。重新启动后的第一次转换为扩展的转换。详见 P217“ 模数转换器” 。 模拟比较器 ATmega88在 ADC 噪声抑制模式下也是如此。在其他休眠模式模拟比较器是自动关闭的。如果模拟比较器使用了内部电压基准 源,则不论在什么休眠模式下都需要通过程序来关闭它。否则内部电压基准源将一直使能。请参见 P214“模拟比较器”以了解如何配置模拟比较器。 掉电
[单片机]
单片机STM32的引脚模式设置运用理解
单片机STM32的引脚有多种方式可以选择。 如果你是用直接写寄存器来配置的话,那么,看上手册,给“配置寄存器”对应的位写0或者1就可以达到目的。如下图: 如果是用库函数来配置的话,就需要知道下面这个结构体中的变量代表的意义。 库函数,选择好GPIO_Mode之后,就要使用GPIO_Init()函数来配置,你可以打开这个配置函数,实际上也是在对“配置寄存器”进行写操作。 先解释一下这个结构体中的各个变量的意思: GPIO_Mode_AIN:模拟输入模式 GPIO_Mode_IN_FLOATING:浮空输入模式 GPIO_Mode_IPD:下拉输入模式 GPIO_Mode_IPU:上拉输入模式 GPIO_Mode_Out
[单片机]
单片机STM32的<font color='red'>引脚</font>模式<font color='red'>设置</font>运用理解
ATmega88 状态寄存器
ATmega88状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以实现条件操作。如指令集所述,所有ALU 运算都将影响状态寄存器的内容。这样,在许多情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。 在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作需要软件来处理。 AVR 中断寄存器 SREG 定义如下: ·Bit 7 – I: 全局中断使能 I 置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果I 清零,则不 论单独中断标志置位与否,都不会产生中断。任意一个中断发生后I 清零,而执行RETI 指令后I 恢复置位以使能中断。I 也可以通过
[单片机]
<font color='red'>ATmega88</font> 状态寄存器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved