快捷搜索:  汽车  科技

avr单片机系统实践教程(小5带你飞1)

avr单片机系统实践教程(小5带你飞1)按位取反只要有一个为1就为1了,是不是最高位置位了按位或其实就是置位例如:PORTA |= 0x80;

闲来没事,将自己以前学习AVR单片机的一些笔记给大家整理出来,方便大家来一起学习。也争取每周能整理几篇出来。

此处我使用的单片机是AVR系列的,芯片为Atmega328p,具体资源请查看官网上的该芯片的datasheet。

好的,闲话就不说了,直接上正题,对于单片机来说,可能对io口的操作是最基本的能力了。

  1. 首先我们来看一下位的操作

  • 按位或

    其实就是置位

    例如:PORTA |= 0x80;

avr单片机系统实践教程(小5带你飞1)(1)

只要有一个为1就为1了,是不是最高位置位了

  • 按位取反

    其实就是清位

    例如:PORTA &= ~0x80;

avr单片机系统实践教程(小5带你飞1)(2)

两个全为1才为1 ,是不是最高位清位了

  • 按位异或

    相同为0,不同为1, 是不是最高位翻转了

    • 按位与

      其实可以用来检测某一位是不是为1

      例子:if(PINA & 0x80)

    avr单片机系统实践教程(小5带你飞1)(3)

    就可以用来检测PA.7是不是为1了

    下面来看几个简单的程序例子:

    哦,在写demo程序之前,可能还需要来讲一点别的,

    • 我用的开发环境时winavr,然后使用usbasp将hex烧写进板子里面,不同的开发环境,可能使用的头文件有一些出入,后期我可能只展示一些核心代码了。

    • 可能还要讲一下控制io的寄存器

    • atmega328p 这个mcu的io口都是标准的双向口,这个和51是有区别的。

    • 在复位时,所有的端口都是高阻态,啥是高阻态,不知道可以度娘了。

    • 每一个端口,都对应3个寄存器,分别是:DDRx PORTx PINx

    • 来看看这三个寄存器的控制作用:

    avr单片机系统实践教程(小5带你飞1)(4)

    DDR : 选择引脚是输入还是输出

    PORT : 当io口是输入的时候,它控制有无上拉电阻,当io口是输出的时候,它控制的输出的电平情况。

    PIN :读管脚的电平

    • 总结一下:io口初始化三部曲:

    • 使用DDR来设置端口是输入还是输入

    • 要是输出的话,使用PORT来设置输出的是高电平还是低电平

    • 要是输入的话,使用PINx来读取管脚的输入值,同时可使用PORT来设置管脚是不是有上来电阻。不清楚上、下拉电阻的,以后我再出一个教程。

猜您喜欢: