AVR学习笔记

更新时间:2024-07-08 12:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

AVR学习笔记

前言:学习一块单片机,我们要几项准备工作:1.开发软件(熟悉开发软件操作流程,基本上开发软件都差不多的,学会了一款,再学其它的就会很顺手了(新建工程、新建设计文件、把源文件加到工程里面、最后设置一些参数)2.编程语言(这个就不用说了,先学语法规则,能够熟练掌握到自己写的代码没有语法错误,然后再逐步把自己的想法驾驭到编程语言上)3.硬件(硬件包括的范围很广,不仅包括你所要学的单片机还有单片机的外围电路所用到的器件),最好要学一款仿真软件。我们始终要记住学单片机绝对不可以纸上谈兵,一定要实践,就是把自己所写的代码下载到板上,看看实际效果。开发板可以买,也可以自己做!我喜欢自己做。

实验一:点亮发光二极管

1.AVR单片机的I/O端口

1)学习单片机的主要任务就是了解、掌握单片机I/O端口的功能,以及如何正确设计这些端口与外围电路的连接,从而能够组成一个嵌入式系统,并编程、管理和运用他们完成各种各样的任务。 2)ATmega16有4个8位的双向I/O端口PA、PB、PC、PD,他们对外对应32个I/O引脚,每一位都可以独立地用于逻辑信号的输入和输出。在5V工作电压下,输出高点平时,每个引脚可输出达20mA的驱动电流;而输出低电平时,每个引脚可吸收最大为40mA的电流,可以直接驱动发光二极管(一般的发光二极管的驱动电流为10mA)和小型继电器等小功率器件。 AVR大部分的I/O端口都具备双重功能(有的还有第三功能)。其中第一功能是作为数字通用I/O接口使用,而复用的功能可分别与片内的各种不同功能的外围接口电路组合成一些可以完成特殊功能的I/O口,如定时器、计数器、串行接口、模拟比较器、捕捉器、USART、SPI等。

3)AVR单片机的每组I/O口都配备有三个8为寄存器,分别是:方向控制寄存器DDRx、数据寄存器PORTx、输入引脚寄存器PINx(x=A/B/C/D).I/O口的工作方式和表现特征由这三个I/O寄存器控制。

方向控制寄存器DDRx用于控制I/O口的输入输出方向,及控制I/O口的工作方式为输出方式还是输入方式。

DDRx=1时,I/O口处于输出工作方式;此时数据寄存器PORTx中的数据输出到外部引脚。 DDRx=0时,I/O口处于输入工作方式;此时输入引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。

此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻。(关于上拉电阻的解释请看后面附录2)

4)AVR 通用I/O端口的主要特点为:

a)双向可独立位控的 I/O口

ATmega16的PA、PB、PC、PD 四个端口都是 8 位双向 I/O 口,每一位引脚都可以单独的进行定义,相互不受影响。如用户可以在定义 PA 口第0、2、3、4、5、6 位用于输入的同时定义第 1、7位用于输出,互不影响。

b)Push-Pull 大电流驱动 (最大 40mA)

每个 I/O 口输出方式均采用推挽(关于推挽电路,请参阅附录3)式缓冲器输出,提供大电流的驱动,可以输出(吸入)

20mA 的电流,因而能直接驱动 LED显示器。

c)可控制的引脚内部上拉电阻

每一位引脚内部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电

阻。当 I/O口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输出电流(uA 量级) 。 DDxn PORTxn PUD(in I/O 上拉电阻 说明

SFIOR) 0 0 0 1 X 0 Input Input No Yes 高阻态 被外部电路拉低时将输出电流 高阻态 输出低电平 输出高电平 0 1 1

1 0 1 1 X X Input Output Output No No No d)DDRx 可控的方向寄存器。

AVR 的 I/O 端口结构同其它类型单片机的明显区别是,AVR 采用 3 个寄存器来控制 I/O端口。一般单片机的 I/O 仅有数据寄存器和控制寄存器,而 AVR 还多了一个方向控制器,用于控制 I/O 的输入输出方向。由于输入寄存器 PINx 实际不是一个寄存器,而是一个可选通的三态缓冲器,外部引脚通过该三态缓冲器与 MCU 的内部总线连接,因此,读 PINx 时是读取外部引脚上的真实和实际逻辑值,实现了外部信号的同步输入。

2.软件编写

1)使用的ICCAVR开发环境,开发语言是C语言 2).程序代码:

#include

#define uchar unsigned char #define uint unsigned int void delay_ms(uint ); main()

{ uchar i,k; DDRA=0xff;

while(1) {

PORTA=0xfe;

for(k=5;k>0;k--) {

for(i=0;i<8;i++)

{ //PORTA=(PORTA<<1)|0x01; PORTA=~(1<

void delay_ms(uint k)//约1ms {

uint i,j;

for(i=0;i

for(j=0;j<1140;j++); }

1<

附录

1、关于复位电路的典型电路

这个学习板上的复位电路非常简单,很不错。但是存在一些缺点:平时复位端口处于悬空状态,这样容易受到外界的干扰。

经典的复位电路设计如下:

R0和C0构成RC复位电路,D3(1N4148)的作用有两个:作用一是将复位输入的最高电压钳在Vcc+0.5V 左右,另一作用是系统断电时,将R0(10K)电阻短路,让C0快速放电,让下一次来电时,能产生有效的复位。

AVR处在工作状态时,按下S0按钮,复位脚拉为低电平,触发AVR单片机复位

当然,Mega16已经内置了上电复位设计。并且在熔丝位里,可以控制复位时的额外时间,故AVR外部的复位线路在上电时,可以设计得很简单:直接拉一只10K的电阻到VCC即可(R0)。为了可靠,再加上一只0.1uF的电容(C0)以消除干扰、杂波。

附录2、关于上拉电阻

一、定义:上拉电阻就是通过端口一个电阻连到电源正极,从而将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!

同理 有上拉电阻也就有下拉电阻,下拉电阻的作用刚好和上拉电阻相反。 上拉是对器件注入(输入)电流,下拉是拉出(输出)电流。 二、为什么要使用上拉(下拉)电阻

数字电路一般有三种状态:高电平、低电平、高阻态。有些场何不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使端口的状态处于一个稳定的方式。 上拉电阻、下拉电阻起着稳定电路工作状态的作用:

通过上拉(下拉)电阻接电源,使端口稳定的处于高(低)电平状态,直到有低(高)电平输入使,才改变端口的电平状态; 三、上拉(下拉电阻阻值的选择)

电源电压在5V时,上拉电阻一般取值4.7K-10KΩ,下拉电阻一般取值100-470Ω。

上拉电阻阻值的选择原则包括:

1、从节约功耗及芯片的灌电流能力考虑应当足够大;电阻大,电流小。 2、从确保足够的驱动电流考虑应当足够小;电阻小,电流大。

3、对于高速电路,过大的上拉电阻可能边沿变平缓。综合考虑

以上三点,通常在4.7k到10k之间选取。对下拉电阻也有类似道理

附录3

推挽电路适用于低电压大电流的场合,广泛应用于功放电路和开关电源中。 优点是:结构简单,开关变压器磁芯利用率高,推挽电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小。

缺点是:变压器带有中心抽头,而且开关管的承受电压较高;由于变压器原边漏感的存在,功率开关管关断的瞬间,漏源极会产生较大的电压尖峰,另外输入电流的纹波较大,因而输入滤波器的体积较大。

OTL推挽输出

这是一个输出电路

按功放输出级放大元件的数量,可以分为单端放大器和推挽放大器。

单端放大器的输出级由一只放大元件(或多只元件但并联成一组)完成对信号正负两个半周的放大。单端放大机器只能采取甲类工作状态。

推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。尽管甲类放大器可以采用推挽式放大,但更常见的是用推挽放大构成乙类或甲乙类放大器。

当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。这样一来,输出高低电平时,VT3 一路和 VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。因此,推拉式输出级既提高电路的负载能力,又提高开关速度。供你参考。

如果输出级的有两个三极管,始终处于一个导通、一个截止的状态,也就是两个三级管推挽相连,这样的电路结构称为推拉式电路或图腾柱(Totem- pole)输出电路。当输出低电平时,也就是下级负载门输入低电平时,输出端的电流将是下级门灌入VT5。

实验二:显示(数码管、1602、12864)

1.数码管的静态显示(共阴极)

1).硬件电路

数码管的结构如下图:

一个“8”字型的显示模块用“a、b、c、d、e、f、g、p” 8 个发光二极管组合而成。每个发光二极管称为一字段。LED 数码显示器有共阳极和共阴极两种结构形式,其内部电原理图如下图,在硬件电路设计和软件编写时不要混淆。

以共阴极数码管为例,由图中可以看出:如果要点亮数码管的某一段,只需将该段加上高电平,然后使数码管的COM端为低电平,那么该段就会点亮。

LED 数码管显示的基本控制原理同发光二极管的控制相同,但在具体使用时则要复杂得多。与发光二极管的控制电路相比,数码管有不同的设计和应用电路,软件的设计也各不相同,有许多技巧和变化。

本例中数码管管脚连接如下图,选用的是共阴极数码管。

单片机控制数码管位驱动电路如下图,在这个电路中三极管9013的作用有两个:1)数码管

本文来源:https://www.bwwdw.com/article/zcd.html

Top