AVR单片机的I

合集下载

第2讲 AVR单片机IO口

第2讲 AVR单片机IO口

继电器原理及应用
1,继电器原理. ,继电器原理.
1,12为线圈的两端 1为正端 12为负端.(线圈实质是个电磁铁 为线圈的两端, 为正端, 为负端.(线圈实质是个电磁铁) ⊙ 1,12为线圈的两端,1为正端,12为负端.(线圈实质是个电磁铁) 为一个单刀双掷开关, , , 为一个单刀双掷开关 为一个单刀双掷开关. ⊙ 3,4,5为一个单刀双掷开关,8,9,10为一个单刀双掷开关. , , 为一个单刀双掷开关 在电磁铁没吸合的时候,开关的公共端4, 分别连接的是 分别连接的是3和 . ⊙ 在电磁铁没吸合的时候,开关的公共端 ,9分别连接的是 和10. 在电磁铁吸合的时候,开关的公共端4, 分别连接的是 分别连接的是5和 . ⊙ 在电磁铁吸合的时候,开关的公共端 ,9分别连接的是 和8. 2,继电器的保护. ,继电器的保护. 一般都在线圈两端反向加一个二极管做为保护, ⊙ 一般都在线圈两端反向加一个二极管做为保护,减小感应电流的损害
第二讲 AVR单片机IO口 AVR单片机 口 单片机IO
内容: 内容:
复位电路, 复原理 编写延时函数 ,编写流水灯函数 蜂鸣器原理, 蜂鸣器原理,继电器
While (表达式) 表达式) { 语句(内部也可为空) 语句(内部也可为空) } 特点:先判断表达式,后执行语句. 特点:先判断表达式,后执行语句. 原则:若表达式不是 ,即为真,那么执行语句. 原则:若表达式不是0,即为真,那么执行语句. 否则跳出while 语句. 语句. 否则跳出

For (表达式 表达式 表达式 表达式1;表达式 表达式3) 表达式 表达式2;表达式 { 语句(内部可为空) 语句(内部可为空) } 执行过程: 执行过程: 1.求解一次表达式 求解一次表达式1. 求解一次表达式 2.求解表达式 ,若其值为真(非0 即为真), 求解表达式2,若其值为真( 即为真), 求解表达式 则执行for中语句 然后执行第3步 中语句. 则执行 中语句.然后执行第 步.否则结 语句,直接跳出, 束for 语句,直接跳出,不再执行 第3步. 步 3.求解表达式 求解表达式3. 求解表达式 4.跳到第 步重复执行. 跳到第2步重复执行. 跳到第 步重复执行

AVR单片机原理及应用

AVR单片机原理及应用

AVR单片机原理及应用AVR(Advanced Virtual RISC)是一种低功耗、高性能的单片机架构,由Atmel公司开发。

AVR单片机具有简单易学、高速、低功耗和丰富的外设等特点,在工业控制、电子设备、通信等领域应用广泛。

1.CPU:AVR单片机的核心部分,包括ALU(运算单元)、寄存器组和控制单元。

ALU负责执行加减乘除等基本运算,寄存器组用于保存数据和中间结果,控制单元用于控制指令执行。

2. 存储器:AVR单片机采用分布式存储器结构,包括程序存储器(Flash)和数据存储器(RAM)。

程序存储器用于保存程序指令,数据存储器用于保存数据和变量。

3.时钟电路:AVR单片机通过时钟电路来同步指令执行。

时钟信号控制着单片机内部各个部件的工作节奏,使其按照预定的频率工作。

4.外设接口:AVR单片机具有丰富的外设接口,包括通用IO口、串口、定时器、ADC(模拟转换器)等。

这些接口可用于连接外部设备,实现与外部环境的信息交互。

1.工业控制:AVR单片机具有高性能和丰富的外设接口,可应用于工业自动化控制领域。

例如,可用于控制温度、湿度、压力等参数,实现工业过程的自动化控制和监测。

2.电子设备:AVR单片机广泛应用于各类电子设备,如电子钟表、电子秤、电子计数器等。

其高速和低功耗特点使其特别适用于电子设备的控制和计算。

3. 通信:AVR单片机可以通过串口接口实现与其他设备的通信。

例如,可以用它来实现蓝牙、WiFi、Zigbee等无线通信模块的控制,实现设备之间的数据传输和通信。

4.智能家居:AVR单片机可应用于智能家居系统。

通过外设接口控制家居设备,如照明、空调、窗帘等,将其变为可远程控制和智能化管理的设备。

5.医疗设备:AVR单片机在医疗设备中的应用广泛,如体温计、血糖仪、血压计等。

通过与传感器结合,可以实现各种医疗参数的测量和监测。

总之,AVR单片机以其高性能、低功耗和丰富的外设接口在各个领域都有着广泛的应用前景。

AVR单片机PPT课件

AVR单片机PPT课件

out spl,r16
ldi r16,high(RAMend)
out sph,r16
ldi r16,$ff
;set porta as output
out ddra,r16
AVR单片机
;(Continued)
loop:
ldi r16,$00 ;输出低——led亮
out porta,r16
ldi r24,6
AVR单片机
B口、C口、D口作为通用I/O时,具有与A口同样的 功能
4) B 口数据寄存器-PORTB $18($38) 5) B 口数据方向寄存器— DDRB $17($37) 6) B 口输入脚地址-PINB $16($36) 7) C 口数据寄存器-PORTC $15($35) 8) C 口数据方向寄存器— DDRC $14($34) 9) C 口输入脚地址-PINC $13($33) 10) D 口数据寄存器-PORTD $12($32) 11) D 口数据方向寄存器— DDRD $11($31) 12) D 口输入脚地址-PIND $10($30)
;送个位位线
;将个位的 BCD 码送 R23
;查七段码 送 B 口输出 ;延时 1ms ;送十位位线
;将十位的 BCD 码送 R23
;查七段码 送 B 口输出 ;延时 1ms
AVR单片机
2 动态扫描五位数码管显示
ldi r16,$fb out portd,r16
mov r23,r20 rcall cqb rcall t1ms ldi r16,$f7 out portd,r16
1 I /O 端口使用注意事项
1) 先定义 I/O 口方向,对数据方向寄存器的某位置 1 为输出,清 0 为输入

avr单片机的总结

avr单片机的总结

1、A VR单片机中断总结A VR单片机只是A TMEL公司推出的一款基于RISC指令构架的高性能、低功耗单片机。

ATmega16单片机具有21个中断源,如下表所示。

每一个中断源都有一个独立的中断向量作为中断服务程序的入口地址,而且所有的中断源都有自己独立的使能位。

如果全局中断IA VR单片机有3个外部中断,由引脚触发。

PB2(INT2),PD2(INT0)、PD3(INT1).。

需要注意:如果允许外部中断的话,即使是INT0,INT1、INT2这三个引脚都设为输出方式,外部中断也会触发。

INT0、INT1外部中断可以选择的触发方式有上升沿触发、下降沿触发以及低电平触发;INT2只有跳变沿触发,没有电平触发。

使用外部中断涉及到的寄存器有:MCU控制寄存器MCUCR,MCU控制欲寄存器MCUCSR,通用中断控制寄存器GICR,通用中断寄存器GIFR。

A VR单片机的中断响应时间最少为4个时钟周期。

在这4个时钟周期里,程序计数器PC的2字节自动入栈,而堆栈指针SP减2。

中断相关的寄存器:外部中断0触发方式选择6位—ISC2:外部中断2的触发方式,异步外部中断2由外部引脚INT2激发。

如果ISC2清零,则INT2的下降沿激活中断;如果ISC2置1,则INT2的上升沿激活中断。

INT2的边沿触发方式是异步的,只要INT2引脚上产生宽度超过50ns就会引起中断。

如果选择了低电平中断,则低电平必须保持到当前的指令完成才会产生中断。

而且只要引脚拉低,就会引发中断请求。

改变ISC2时有可能发生中断。

因此在寄存器GICR里清楚相应的中断使能位INT2,然后再改变ISC2,最后在重新使能中断之前,需要通过对GIFR寄存器的响应中断标志位INF2写“1”使其清零。

位7INT1:使能外部中断请求1.当INT1为1,且状态寄存器SREG的I标志置位的时候,相应的外部引脚中断使能。

MCU通用控制寄存器MCUCR的中断敏感电平控制ISC11和ISC10决定中断是由上升沿、下降沿、还是INT1电平触发的。

AVR单片机BASIC语言

AVR单片机BASIC语言

2、输出语句 当单片机根据人们设定的程序要求,对信息进行处理 之后,需要通过I/O端口对外发出控制信号或其他 之后,需要通过I/O端口对外发出控制信号或其他 信息,可以使用下面的语句: PortC = A ,把A这个变量送出到C ,把A这个变量送出到C 同样,要强制某个或些端子的输出状态,也可以使用 逻辑运算的方法实现,例如在送出A 逻辑运算的方法实现,例如在送出A 之前作如下处 理,看看是什么结果: A = A OR &B00001110 ’强制Bit1、 Bit2、 Bit3 置1 ’强制Bit1、 Bit2、 A =A AND &B11110001 ’强制Bit1、 Bit2、 Bit3 置0, ’强制Bit1、 Bit2、 式中的二进制数可以写成十进制数 同样能够直接对某一输出端子实施控制: Set/Reset ProtC.2 ’把PC2这一位置1/置 ’把PC2这一位置1/置0 这个方法亦适用于位变量中的某一位: Set/Reset X.0 ’置位/ ’置位/清0变量X 的Bit 0 变量X
端口配置和特性
1、端口配置 由于单片机强大的功能,使用上的灵活性和多样性,因此在执 行具体任务时,必须明确所指派的工作,在程序设计上称为 “配置”(Config)。通用I/O端口的配置如下: “配置”(Config)。通用I/O端口的配置如下: Config PortB=Output/Input —PortB 用作输出/输入(可以是 用作输出/ 其它端口),这时整个端口用作一个并行I/O用途。 其它端口),这时整个端口用作一个并行I/O用途。 Config PortD.2=Output/Input —端口D的引脚2用于输入/输出 端口D的引脚2用于输入/ (可以是其他端口或引脚)。单独指定一个端子。 DDRB=&B00001111— 指定PB0~PB3 DDRB=&B00001111— 指定PB0~PB3 作为输出用途, PB4~PB7 用于输入用途。DDR是端口的方向寄存器,每个位 用于输入用途。DDR是端口的方向寄存器,每个位 对应控制一个I/O引脚,用于规定该引脚的输入/ 对应控制一个I/O引脚,用于规定该引脚的输入/输出方向,若写 入0,则规定引脚为输入;若写入1,则规定引脚为输出。位控 ,则规定引脚为输入;若写入1 方式用这种形式指定端口用途最好。 用作通用I/O的其他端口(子),可以根据情况使用上面的语句 用作通用I/O的其他端口(子),可以根据情况使用上面的语句 进行安排。

AVR单片机指令入门

AVR单片机指令入门

AVR指令中使用的符号1、状态寄存器与标志位SREG: 8位状态寄存器,其中每一位的定义为:C:进位标志位Z:结果为零标志位N:结果为负数标志位V: 2的补码溢出标志位S: N⊕V,用于符号测试的标志位H:操作中产生半进位的标志位T:用于和BLD、BST指令进行位数据交换的位I:全局中断触发/禁止标志位2、寄存器和操作码Rd:目的(或源)寄存器,取值为R0~R31或R16~R31(取决于指令)。

Rr:源寄存器,取值为R0~R31。

A:I/O寄存器,取值为0~63或0~31(取决于指令)。

b: I/O寄存器中的指定位,常数(0~7)。

s:状态寄存器SREG中的指定位,常数(0~7)。

K:立即数,常数(0~255)。

k:地址常数,取值范围取决于指令。

q:地址偏移量常数(0~63)。

X、Y、Z:地址指针寄存器(X=R27:R26;Y=R29:R28;Z=R31:R30)。

3、堆栈STACK:作为返回地址和压栈寄存器的堆栈SP:堆栈STACK的指针AVR指令的寻址方式和寻址空间1、单寄存器直接寻址由指令指定一个寄存器的内容作为操作数,在指令中给出寄存器的直接地址,这种寻址方式称为单寄存器直接寻址。

单寄存器寻址的地址范围限制为通用工作寄存器组中的32个寄存器R0~R31,或后16个寄存器R16~R31。

例:INC Rd;操作:Rd←Rd+1。

INC R5;将寄存器R5内容加1回放。

2、双寄存器直接寻址双寄存器直接寻址方式与单寄存器直接寻址方式相似,它是将指令指出的两个寄存器Rd和Rr的内容作为操作数,而结果存放在Rd寄存器中。

指令中同时给出两个寄存器的直接地址,这种寻址方式称为双寄存器直接寻址。

双寄存器寻址的地址范围限制为通用工作寄存器组中的32个寄存器R0~R31,或后16个寄存器R16~R31,或后8个寄存器R16~R23(取决于不同指令)。

例:ADD Rd,Rr;操作:Rd←Rd+Rr。

ADD R0,R1;将R0和R1寄存器内容相加,结果回放R0。

AVR单片机状态寄存器SREG

AVR单片机状态寄存器SREG
AVR单片机状态寄 存器SREG
关于状态寄存器SREG
1 状态寄存器SREG

7 0
$3F($5F) I T H S V N Z C
(MCS51类似的寄存器为程序状态字PSW,有进位/借位CY, 辅助进位AC, 用户标志F0, 溢出OV, 奇偶标志P等)
• 其各标志位意义如下:
I:全局中断触发禁止位,为中断总控制开关。将其 清除,则禁止一切中断(但在异步工作方式下的 T/C2 的中断唤醒MCU功能除外)
例3:$EB + $CA = $B5 运算后,C=1, Z=0, N=1, V=0, S=1, H=1
作为无符号数运算时,C=1(有进位)应加到高字节,否则结 果不正确
作为符号数运算时, V=0(未溢出), N=1(负数),S=1(=N), 结 果正确,不必修正(-21 + -54 = -75)
AVR单片机状态寄存器SREG
AVR单片机状态寄存器SREG
关于状态寄存器SREG
⑤ 逻辑左移和循环左移指令同8位加法指令一样影 响标志位 HSNVZC。逻辑右移和循环右移指 令以及算术右移指令都不影响半进位标志 H,但 由于这些指令的特殊性,对标志位的影响面可进 一步缩小或可简化。如算术右移指令不影响标志 位S和 N,并使 V=0;逻辑右移指令清除标志 位N,使S=V 等等。
N:负数标志位,直接取自运算结果最高位。N= 1时运算结果为负,否则为正。但溢出时不能表 示真实结果(见上条对溢出标志的说明)。
Z:零标志位,用以标示数据算术运算或逻辑运算 结果是否为零,或多字节数据算术运算(包括比 较)结果是否为零。运算(比较)结果为零(即 所有位都清除)时,Z标志置位。就字节型数据 运算结果来说,Z的逻辑表达式为Z=

3_C语言基本结构和AVR单片机IO口介绍

3_C语言基本结构和AVR单片机IO口介绍

Slide 13
E&C College AVR Training 2005
仿真器编程下载与熔丝配置的使用 Program Download& Fuse Config
选项卡: Fuse 选项卡: 功能熔丝位的配置: 1. 功能熔丝位的配置: BOOT区熔丝位的配置 区熔丝位的配置: 2. BOOT区熔丝位的配置:支持引导加载程序的芯片有更 多的安全位,可以锁定存储器中的引导加载区。 多的安全位,可以锁定存储器中的引导加载区。 FLASH锁定位 选择芯片编程使用的安全级别。 锁定位: 3. FLASH锁定位:选择芯片编程使用的安全级别。 注意,请保证“ Enable”一项始终有效 注意,请保证“JTAG Interface Enable 一项始终有效 否则目标芯片就将失去与JTAGICE 的通信能力, ,否则目标芯片就将失去与JTAGICE 的通信能力,只 有通过并行编程的办法才能重新激活该熔丝位 选项卡——加密锁定位的设置 4. Lock&Bits 选项卡 加密锁定位的设置 注意,如果想要将加密位删除, 注意,如果想要将加密位删除,那么只能对芯片做擦除 操作。 操作。
Slide 14 E&C College AVR Training 2005
简单跑马灯的设计
Flash LED Design
设计内容:共有8个LED 设计内容:共有8 需要每隔500MS 500MS同时 需要每隔500MS同时 点亮或熄灭,LED ,LED接在 点亮或熄灭,LED接在 PORTA口 PORTA口,输出高电 平灯亮 ,输出低电平 时灯灭。 时灯灭。 要求1:自行编程。 要求 :自行编程。 要求2: 要求 :采用自动引导 程序进行配置生成软 件初始化代码框架, 件初始化代码框架, 然后填入自己的程序 代码。 代码。通过 CodeVision编译, 编译, 编译 注意时钟频率。 注意时钟频率。

AVR单片机(C语言)项目开发实践教程项目4 ATmega16单片机IO接口应用

AVR单片机(C语言)项目开发实践教程项目4 ATmega16单片机IO接口应用

【知识目标】
1. 了解LED发光二极管的驱动控制方法 2. 了解ATmega16单片机数字I/O口的结构 3. 了解ATmega16单片机数字I/O口的相关寄
存器功能
2021/8/3
【项目知识点与技能点】
1. 掌握单片机控制LED发光二极管驱动电 路的连接方法
2. 掌握ATmega16单片机数字I/O口的相关 寄存器功能的设置
位 PORTA.7 PORTA.6 PORTA.5 PORTA.4 PORTA.3 PORTA.2 PORTA.1 PORTA.0
复位值 0
0
0
0
0
0
0
0
2021/8/3
二、I/O接口的寄存器
• 端口输入寄存器:PINX(PINA)-----只读
位 PINA.7 PINA.6 PINA.5 PINA.4 PINA.3 PINA.2 PINA.1 PINA.0 复位值 N/A N/A N/A N/A N/A N/A N/A N/A
①DDRA为A口数据方向寄存器,用来定义A口的通讯方 向(输入/输出);
②PORTA为A口数据寄存器,用来输出数据(输入时, PORTX为高,打开上拉电阻);当PORTx=1时,I/O引脚高 电平,可提供输出20mA电流;当PORTx=0时,I/O引脚低电 平,可吸纳20mA电流。因此,AVR的I/O在输出方式下提供 了比较大驱动能力,可以直接驱动LED等小功率外围器件。
AVR单片机(C语言)项目开发实践 教程项目4 ATmega16单片机IO接口应

项目四 ATmega6单片机I/O口应用
• 任务一 项目知识点学习 • 任务二 LED闪烁灯控制 • 任务三 LED开关灯控制 • 任务四 汽车转向灯控制 • 任务五 霓虹灯控制 • 任务六 继电器控制照明设备

AVR单片机IO口结构分析

AVR单片机IO口结构分析

AVR的IO是真正双向IO结构,由于大部分网友都是从标准51转过来的,受标准51的准双向IO和布尔操作概念影响,没能掌握AVR的IO操作,所以有必要撰文说明一下,其实采用真正双向IO结构的新型MCU很多,常用的有增强型51,PIC,AVR等。

先简单的回顾一下标准51的准双向IO结构这种准双向IO结构的特点是1 输出结构类似 OC门,输出低电平时,内部NMOS导通,驱动能力较强(800uA);输出高电平靠内部上拉电阻,驱动能力弱(60uA)。

2 永远有内部电阻上拉(P0口除外),高电平输出电流能力很弱,所以即使IO口长时间短路到地也不会损坏IO口(同理,IO口低电平输出能力较强,作低电平输出时不能长时间短路到VCC)3 作输入时,因为OC门有"线与"特性,必须把IO口设为高电平(所以按键多为共地接法)4 作输出时,输出低电平可以推动LED(也是很弱的),输出高电平通常需要外接缓冲电路(所以LED多为共阳接法)5 软件模拟 OC结构的总线反而比较方便-----例如 IIC总线* P0口比较特殊,做外部总线时,是推挽输出,做普通IO时没有内部上拉电阻,所以P0口做按键输入需要外接上拉电阻。

* OC门:三极管的叫集电极开路,场效应管的叫漏极开路,简称开漏输出。

具备"线与"能力,有0得0。

* 为什么设计成输出时高电平弱,低电平强----是考虑了当年流行的TTL器件输入特性相信我们大多数人都接触过51单片机,51单片机的I/O口是准双向I/O口。

其实这种说法是不严谨的,我们知道,51单片机有4个I/O口,分别是P0、P1、P2、P3,这4个I/O口的结构并不完全一致,其中P0口是标准的双向I/O口,而P1、P2、P3则是准双向I/O口。

关于准双向I/O口和双向I/O口的区别请看另一篇文章“准双向I/O口和标准双向I/O口的区别”AVR单片机的I/O口是标准的双向I/O口,它的IO结构就就比51的I/O 口复杂多了,单是控制端口的寄存器就有3个 PORTx(数据寄存器)、DDRx(数据方向寄存器)、PINx(端口输入引脚);另外还有一个SFIOR(特殊功能I/O寄存器),这个寄存器中的PUD位控制全部I/O口的上拉电阻是允许还是被禁止。

AVR单片机IO端口操作方法及注意事项

AVR单片机IO端口操作方法及注意事项


一次即可。因为它是一个控制全部上拉电阻的控制位。
DDRB&=~(BIT(2)|BIT(3)); //定义 PB2、PB3为输入
PORTB|=BIT(2)|BIT(3); // 将 PORT 置1,满足上拉电阻的另一个条件
举例四:将PB0、PB1数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1
PORTB^=BIT(0)|BIT(1); // 翻转PB0 、PB1口
举例五:将PB2、PB3定义为输入,不带上拉电阻
DDRB&=~(BIT(2)|BIT(3)); //定义 PB2、PB3为输入
PORTB&=~(BIT(2)|BIT(3)); // 将 PORT 置0,没有上拉电阻
举例六:将PB2、PB3定义为输入,带上拉电阻。即没有引用这些引脚时,缺省值为高电平
SFIOR&=~BIT(PUD); // SFIOR寄存器的上拉电阻控制位PUD置0,在整个代码中,这句话可以不出现,或仅出现
4功能模块(中断,定时器)的输入可以是低电平触发,也可以是上升沿触发或下降沿触发。
5用于高阻模拟信号输入,切记不要使能内部上拉电阻,影响精确度。例如ADC数模转换器输入,模拟比较器输入
作输出时:
采用必要的限流措施,例如驱动LED要串入限流电阻
复位时:
复位时内部上拉电阻将被禁用。如果应用中(例如电机控制)需要严格的电平控制,请使用外接电阻固定电平
举例二:将PB0、PB1定义为输出,PB0、PB1均为高电平
DDRB|=BIT(0)|BIT(1); //定义 PB0、PB1为输出
PORTB|=BIT(0)|BIT(1);// PB0、PB1 输出高电平

AVR IO使用方法

AVR IO使用方法

A VR I/O使用方法A VR单片机寄存器DDRx PORTx PINx 与对应IO端口之间的关系(x代表某个端口,如A 端口、B端口等)下表以端口B的第2位PB2为例子加以说明,并且假设PB2为悬空状态读取PINB.2时,就是读取PB2引脚的实际电平,如果PB2直接接VCC,那么任何时候读取PINB.2的结果都是1如果PB2直接接GND,那么任何时候读取PINB.2的结果都是0下面是一个标准C语言例子:#include <mega48.h>unsigned char abc; //定义一个变量void main(void) //主函数{DDRB = 0b11110000;PORTB = 0b11001100;while (1) //主循环{abc = PINB; //读取B端口的实际电平}}如果整个B端口都是悬空的话,那么abc的结果就是:0b110011**如果B端口第7位接GND 、第0位接VCC 、其它位悬空,那么abc的结果就是:0b010011*1 (PB7工作在“短路”状态)其中“*”表示不确定,理想状态下可以看作0端口声明:include <iom16v.h>#include "D:\ICC_H\CmmICC.H"#define OUT_BUZ sbi(DDRB,3) //PB3#define BUZ_ON cbi(PORTB,3)#define BUZ_OFF sbi(PORTB,3)/*--------------------------------------------------------------------程序名称:程序功能:注意事项:提示说明:输入:返回:--------------------------------------------------------------------*/void main(void){OUT_BUZ; //设置相应的IO口为输出while(1){BUZ_ON; //我叫delay50ms(20);BUZ_OFF; //我不叫delay50ms(20);}}系统调试将语句:delay50ms(20);改为语句:delay50ms(1);可以听到叫的频率更高,吵死人了!以ATMEGA16为例,用轻松幽默的讲解方式,讲解A VR的每个功能部件,配合给出Protel 电路图及ICCA VR源代码。

AVR的IO口详解及正确的熔丝配置

AVR的IO口详解及正确的熔丝配置

A VR的I/O口详解及正确的熔丝配置--更改被锁死的单片机A VR的I/O口结构与使用详解其实采用真正双向IO结构的新型MCU很多,常用的有增强型51,PIC,A VR等A VR的IO是真正双向IO结构,由于大部分网友都是从标准51转过来的,受标准51的准双向IO和布尔操作概念影响,没能掌握A VR的IO操作,所以有必要撰文说明一下先简单的回顾一下标准51的准双向IO结构这种准双向IO结构的特点是1 输出结构类似OC门,输出低电平时,内部NMOS导通,驱动能力较强(800uA);输出高电平靠内部上拉电阻,驱动能力弱(60uA)。

2 永远有内部电阻上拉(P0口除外),高电平输出电流能力很弱,所以即使IO口长时间短路到地也不会损坏IO口(同理,IO口低电平输出能力较强,作低电平输出时不能长时间短路到VCC)3 作输入时,因为OC门有"线与"特性,必须把IO口设为高电平(所以按键多为共地接法)4 作输出时,输出低电平可以推动LED(也是很弱的),输出高电平通常需要外接缓冲电路(所以LED多为共阳接法)5 软件模拟OC结构的总线反而比较方便-----例如IIC总线* P0口比较特殊,做外部总线时,是推挽输出,做普通IO时没有内部上拉电阻,所以P0口做按键输入需要外接上拉电阻。

* OC门:三极管的叫集电极开路,场效应管的叫漏极开路,简称开漏输出。

具备"线与"能力,有0得0。

* 为什么设计成输出时高电平弱,低电平强----是考虑了当年流行的TTL器件输入特性A VR的真正双向IO结构就复杂多了,单是控制端口的寄存器也有4个PORTx.DDRx,PINx,SFIOR(PUD位),不过功能也强劲多了作为通用数字I/O 使用时,所有AVR I/O 端口都具有真正的读- 修改- 写功能。

这意味着用SBI 或CBI 指令改变某些管脚的方向( 或者是端口电平、禁止/ 使能上拉电阻) 时不会无意地改变其他管脚的方向( 或者是端口电平、禁止/ 使能上拉电阻)。

AVR单片机位操作

AVR单片机位操作

向左移位就是在低位上补0,向右移位就是在高位上补0。右移时可以保持结果 的符号位,也就是右移时。如果最高位为1,是符号位,则补1而不是补0。
例如: 当a=01110010 时 若b=a<<2; 结果为 b=11001000 若b=a>>2; 结果为 b=00011100 当a=11110010 时 若b=a<<2; 结果为 b=11001011 若b=a>>2; 结果为 b=11011100
4、按位进行操作
? 举例二:将 PB0、PB1定义为输出,且 PB0输 出低电平, PB1均为高电平
? DDRB|=BIT(0)|BIT(1); // 定义 PB0、PB1为输 出
? PORTB|=BIT(0)|BIT(1);// PB0 、PB1 输出高电 平
4、按位进行操作
? 举例三:将 PB0数据寄存器的数值翻转,即如 果是 1时变成 0,如果是 0时变成1
? 在单片机中,常用于某一位的置位。
例:我们将 PB3和PB0口置为高电平。
? 00001001
0X09
PB3 PB0 PORTB |=0X09 (等价于PORB=PORTB|0X09)
^ 位逻辑异或
? ^ 运算的规则是当两个位相同时,结果为 0,否 则为1; 此逻辑符常用于比较是否相同。
~ 取补(取反)
0XEF
PC4
PORTC &=0xEF ( 等价于PORTC=PORTC&0xEF)
或PORTC&=0b11101111
| 位逻辑或
? | 运算的规则是当两个位都为 0时,结果为0, 否则为 1; (小提示,你可以理解为加号,只有假的加假 的等于假,即 0加0等于0,其余情况,只要有 1 个是真的,结果都为真)

AVR单片机i-o(输入-输出)端口详解

AVR单片机i-o(输入-输出)端口详解

AVR单片机i/o(输入/输出)端口详解通过前面示例的讲解,已基本知道了单片机I/O 端口的用法。

为了更好、更深入地运用好I/O 端口,下面再来详细讨论一下AVR 单片机ATMega16 的端口结构。

输入/输出端口(I/O 端口)是单片机所能依赖进行控制的唯一通道,如果把单片机内核比作人的大脑,那I/O 端口就相当于人的五官和四肢,负责着信息的获取和动作的执行,如果没有I/O 端口单片机本身就变得毫无意义,因此很有必要来详细了解它们的内部结构。

ATMega16 的端口为具有可选上拉电阻的双向I/O 端口,下面是其中某一位I/O 口的内部结构图(来自于Datasheet)。

在上图中,Pxn 就是这一位的输入/输出端口,也就是单片机的某个外部引脚。

它通过PORTxn 寄存器和数据总线(DATA BUS)相连。

前面示例中对PORTxn 的赋值其实就是通过数据总线来写这个寄存器实现的。

在图中还可以看到,在Pxn 和PORTxn 之间实际上还串有一个门控位,如果要让PORTxn 的结果输出至Pxn,那这个门控位必须得打开,而该门控位的受控信号来自于DDxn(DDRx 中的一位)寄存器。

通过数据总线对该寄存器位写1,就可打开门控位,让输出信号直接输出至引脚Pxn。

这也正是为什么单片机引脚要处于输出状态就必须要给DDRx 方向寄存器赋值1 的原因所在。

如果给DDxn 赋值0,则门控位断开,引脚Pxn 不能做为输出,只能做为输入。

但输入信号可以取自两个地方,一个是直接从外部引脚Pxn 来取(图中的下半部分),实际上是把外部引脚的信号锁存到PINxn 寄存器中来读取;另一个则是从输出寄存器PORTxn 来取(图中门控位控制信号为RRx 的地方)。

一般称从外部引脚(PINxn)来取为读引脚,称从寄存器PORTxn 来取为读端口寄存器。

从图中还可以看出,在引脚Pxn 的上方,有一个受控于MOS 管的上拉电阻。

而MOS 管又同时受到PUD 位、DDxn 位和PORTxn 位的共同控制。

AVR单片机位操作

AVR单片机位操作

4、按位进行操作
举例七:
DDRB=BIT(0)|BIT(1) 与DDRB|=BIT(0)|BIT(1) 的区别 假定在执行上面两句指令前,DDRB 的状态为: 1000 0000 如果执行 DDRB=BIT(0)|BIT(1) ,DDRB的状态变为: 0000 0011 如果执行 DDRD|=BIT(0)|BIT(1),,DDRB的状态变为: 1000 0011 前一句会先清空以前的所有状态,后一句保留前面的 状态。在实际应用中,后一句更常用。
若定义为输出,以MEGA128为例,定义其PC
端口(从PC0~PC7)为输出,则: DDRC=0XFF; 作为输出的时候,能够控制如LED,继电器的 开启,电机的启动,或者输出方波等各种信号。
3、端口操作
当定义好I/O口的工作模式后,我们就可以控制端
口了。 例如:我们要读取PA的所有引脚的数据,则 unsigned char a; //定义一个无符号的字符变量 a=PINA; //将PA口的值赋值给变量a; 假如此时,PA的状态是01001000,则a获得该值。
3、位移运算符
符号 << >> 描述 左移 右移 位移运算符作用于其左侧的变量,其右侧的表达式的值就是移动的位数,运算 结果就是移动后的变量结果。 b=a<<2; 就是a的值左移两位并赋值为b。a本身的值并没有改变。 向左移位就是在低位上补0,向右移位就是在高位上补0。右移时可以保持结果 的符号位,也就是右移时。如果最高位为1,是符号位,则补1而不是补0。 例如: 当a=01110010时 若b=a<<2; 结果为 b=11001000 若b=a>>2; 结果为 b=00011100 当a=11110010时 若b=a<<2; 结果为 b=11001011 若b=a>>2; 结果为 b=11011100 程序员常常对右移运算符来实现整数除法运算,对左移运算符来实现整数乘法运 算。其中用来实现乘法和除法的因子必须是2的幂次。

关于AVRIO驱动能力的深入讲解

关于AVRIO驱动能力的深入讲解

关于AVRIO驱动能力的深入讲解……………………………………………………………精品资料推荐…………………………………………………AVR单片机I/O的驱动能力在8位单片机中算一流的。

大家应仔细阅读AVR器件手册中关于电气指标和典型特性的内容。

(顺便提一下,有那些8位单片机的器件手册比AVR的多?并且提供非常详细的电气指标?)。

讨论AVR的I/O驱动能力主要指它使用输出工作方式下的输出电流(输出为1时)和灌电流(输出为0时)。

参考下图,当输出高电平时,在Vcc=5V条件下,一个I/O输出电流可达40mA,但此时输出电压已降到4V左右,输出20mA时,电压降为 4.5v,(3v以上,对于CMOS讲,仍为逻辑“1”)。

说明AVR的输出电流最大可为40mA。

当输出低电平时,I/O的倾动能力表现为灌电流。

见下图……………………………………………………………精品资料推荐…………………………………………………在Vcc=5V条件下,一个I/O可灌入的电流也可达40mA,但此时输出电压已生到1V左右,灌入20mA时,电压生为0.5v,(0.8v以下,对于CMOS讲,仍为逻辑“0”)。

说明AVR的灌入电流最大可为20mA。

在使用中还要注意的是:3. Although each I/O port can sink more than the test conditions (20 mA at VCC = 5V, 10 mA at VCC = 3V) under steady stateconditions (non-transient), the following must be observed: TQFP and MLF Package:1] The sum of all IOL, for all ports, should not e某ceed 400 mA.2] The sum of all IOL, for ports A0 - A7, G2, C3 - C7 should not e某ceed 300 mA.3] The sum of all IOL, for ports C0 - C2, G0 - G1, D0 - D7, XTAL2 should not e某ceed 150 mA.4] The sum of all IOL, for ports B0 - B7, G3 - G4, E0 - E7 should not e某ceed 150 mA.5] The sum of all IOL, for ports F0 - F7, should not e某ceed 200 mA. If IOL e某ceeds the test condition, VOL may e某ceed the related specification. Pins are not guaranteed to sink current greater than the listed test condition.4. Although each I/O port can source more than the test conditions (20 mA at Vcc =5V, 10 mA at Vcc = 3V) under steady state……………………………………………………………精品资料推荐…………………………………………………conditions (non-transient), the following must be observed: TQFP and MLF Package:1] The sum of all IOH, for all ports, should not e某ceed 400 mA.2] The sum of all IOH, for ports A0 - A7, G2, C3 - C7 should not e某ceed 300 mA.3] The sum of all IOH, for ports C0 - C2, G0 - G1, D0 - D7, XTAL2 should not e某ceed 150 mA.4] The sum of all IOH, for ports B0 - B7, G3 - G4, E0 - E7 should not e某ceed 150 mA.5] The sum of all IOH, for ports F0 - F7, should not e某ceed 200 mA. If IOH e某ceeds the test condition, VOH may e某ceed the related specification. Pins are not guaranteed to source current greater than the listed test condition.此段大家自己读,主要是说整个PORT口,以及整个芯片电流的限制。

AVR单片机的特点及缺点解析

AVR单片机的特点及缺点解析

AVR 单片机的特点及缺点解析AVR 单片机AVR 单片机是Atmel 公司推出的较为新颖的单片机,其显着的特点为高性能、高速度、低功耗。

它取消机器周期,以时钟周期为指令周期,实行流水作业。

AVR 单片机指令以字为单位,且大部分指令都为单周期指令。

而单周期既可执行本指令功能,同时完成下一条指令的读取。

通常时钟频率用4~8MHz,故最短指令执行时间为250~125ns。

AVR 单片机能成为最近仍是比较火热的单片机,主要的特点:特点1、AVR 系列没有类似累加器A 的结构,它主要是通过R16~R31 寄存器来实现A 的功能。

在AVR 中,没有像51 系列的数据指针DPTR,而是由X (由R26、R27 组成)、Y(由R28、R29 组成)、Z(由R30、R31 组成)三个16 位的寄存器来完成数据指针的功能(相当于有三组DPTR),而且还能作后增量或先减量等的运行,而在51 系列中,所有的逻辑运算都必须在A 中进行;而AVR 却可以在任两个寄存器之间进行,省去了在A 中的来回折腾,这些都比51 系列出色些。

2、AVR 的专用寄存器集中在00~3F 地址区间,无需像PIC 那样得先进行选存储体的过程,使用起来比PIC 方便。

AVR 的片内RAM 的地址区间为0~00DF(AT90S2313)和0060~025F(AT90S8515、AT90S8535),它们占用的是数据空间的地址,这些片内RAM 仅仅是用来存储数据的,通常不具备通用寄存器的功能。

当程序复杂时,通用寄存器R0~R31 就显得不够用;而51 系列的通用寄存器多达128 个(为AVR 的4 倍),编程时就不会有这种感觉。

3、AVR 的I/O 脚类似PIC,它也有用来控制输入或输出的方向寄存器,在输出状态下,高电平输出的电流在10mA 左右,低电平吸入电流20mA。

这点虽不如PIC,但比51 系列还是要优秀。

缺点1、是没有位操作,都是以字节形式来控制和判断相关寄存器位的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PORTA=0XF0; //端口A的0~3位不上拉,在没有输入的情况下处于高阻态PINX:端口输入引脚地址如果希望读取引脚的逻辑电平值,一定要读取PINX,而不是PORTX。

注意,PIINX 是只读的,不能对其赋值。

例如:DDRA=0X00;result=PINA; //读取A口路基电平值,赋值给resultATmega16的T/C1为16位定时器一共有15种工作模式,其他2个8位定时器(T0/T2)相对简单,除了T2有异步工作模式用于RTC应用外(可以利用溢出中断和比较匹配中断作定时功能)符号定义:BOTTOM 计数器计到0x0000 时即达到BOTTOMMAX 计数器计到0xFFFF ( 十进制的65535) 时即达到MAXTOP 计数器计到计数序列的最大值时即达到TOP。

TOP 值可以为固定值0x00FF、0x01FF或0x03FF,或是存储于寄存器 OCR1A或ICR1里的数值,具体有赖于工作模式------注意MAX和TOP是不同的,在表格[波形产生模式的位描述]可以看到它们的作用分5种工作类型1 普通模式WGM1=0跟51的普通模式差不多,有TOV1溢出中断标志,发生于MAX(0xFFFF)时1 采用内部计数时钟用于ICP捕捉输入场合---测量脉宽/红外解码(捕捉输入功能可以工作在多种模式下,而不单单只是普通模式)2 采用外部计数脉冲输入用于计数,测频其他的应用,采用其他模式更为方便,不需要像51般费神2 CTC模式[比较匹配时清零定时器模式] WGM1=4,12跟51的自动重载模式差不多1 用于输出50%占空比的方波信号2 用于产生准确的连续定时信号WGM1=4时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断标志WGM1=12时,最大值由ICF1设定,TOP时产生ICF1输入捕捉中断标志 ------如果TOP=MAX,TOP时也会产生TOV1溢出中断标志注:WGM=15时,也能实现从OC1A输出方波,而且具备双缓冲功能计算公式:fOCn=fclk_IO/(2*N*(1+TOP))变量N 代表预分频因子(1、8、64、256、1024),T2多了(32、128)两级。

3 快速PWM模式WGM1=5,6,7,14,15单斜波计数,用于输出高频率的PWM信号(比双斜波的高一倍频率)都有TOV1溢出中断,发生于TOP时[不是MAX,跟普通模式,CTC模式不一样]比较匹配后可以产生OCF1x比较匹配中断.WGM1=5时, 最大值为0x00FF,8位分辨率WGM1=6时, 最大值为0x01FF,9位分辨率WGM1=7时, 最大值为0x03FF,10位分辨率WGM1=14时,最大值由ICF1设定,TOP时产生ICF1输入捕捉中断(单缓冲)WGM1=15时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波)改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值注意,即使OCR1A/B设为0x0000,也会输出一个定时器时钟周期的窄脉冲,而不是一直为低电平计算公式:fPWM=fclk_IO/(N*(1+TOP))4 相位修正PWM模式WGM1=1,2,3,10,11双斜波计数,用于输出高精度的,相位准确的,对称的PWM信号都有TOV1溢出中断,但发生在BOOTOM时比较匹配后可以产生OCF1x比较匹配中断.WGM1=1时, 最大值为0x00FF,8位分辨率WGM1=2时, 最大值为0x01FF,9位分辨率WGM1=3时, 最大值为0x03FF,10位分辨率WGM1=10时,最大值由ICF1设定,TOP时产生ICF1输入捕捉中断(单缓冲)WGM1=11时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波)改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值可以输出0%~100%占空比的PWM信号若要在T/C 运行时改变TOP 值,最好用相位与频率修正模式代替相位修正模式。

若TOP 保持不变,那么这两种工作模式实际没有区别计算公式:fPWM=fclk_IO/(2*N*TOP)5 相位与频率修正PWM模式WGM1=8,9双斜波计数,用于输出高精度的、相位与频率都准确的PWM波形都有TOV1溢出中断,但发生在BOOTOM时比较匹配后可以产生OCF1x比较匹配中断.WGM1=8时,最大值由ICF1设定,TOP时产生ICF1输入捕捉中断(单缓冲)WGM1=9时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波)相频修正修正PWM 模式与相位修正PWM 模式的主要区别在于OCR1x 寄存器的更新时间改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值可以输出0%~100%占空比的PWM信号使用固定TOP 值时最好使用ICR1 寄存器定义TOP。

这样OCR1A 就可以用于在OC1A 输出PWM 波。

但是,如果PWM 基频不断变化(通过改变TOP值),OCR1A的双缓冲特性使其更适合于这个应用。

计算公式:fPWM=fclk_IO/(2*N*TOP)T/C 的时钟源T/C 的时钟源可以有多种选择,由CS12:0控制,分别用于高速(低分频)/长时间(高分频)/外部计数场合一个16位定时器,在8MHz系统时钟驱动下,可以实现uS级的高速定时和长达8秒的超长定时,这可是标准51的弱点CS12 CS11 CS10 说明0 0 0 无时钟源 (T/C 停止)0 0 1 clkIO/1 ( 无预分频)0 1 0 clkIO/8 ( 来自预分频器)0 1 1 clkIO/64 ( 来自预分频器)1 0 0 clkIO/256 ( 来自预分频器)1 0 1 clkIO/1024 ( 来自预分频器)1 1 0 外部T1 引脚,下降沿驱动1 1 1 外部T1 引脚,上升沿驱动分频器复位在高预分频应用时,通过复位预分频器来同步T/C 与程序运行,可以减少误差。

但是必须注意另一个T/C是否也在使用这一预分频器,因为预分频器复位将会影响所有与其连接的T/C。

外部时钟源由于使用了引脚同步逻辑,建议外部时钟的最高频率不要大于fclk_IO/2.5。

外部时钟源不送入预分频器选择使用外部时钟源后,即使T1引脚被定义为输出,其T1引脚上的逻辑信号电平变化仍然会驱动T/C1 计数,这个特性允许用户通过软件来控制计数。

输入捕捉单元T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。

外部事件发生的触发信号由引脚ICP1 输入,也可通过模拟比较器单元来实现。

时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。

输入捕捉单元可以工作在多种工作模式下(使用ICR1定义TOP的(WGM1=12,14,10,8)波形产生模式时,ICP1与输入捕捉功能脱开,从而输入捕捉功能被禁用。

)在任何输入捕捉工作模式下都不推荐在操作过程中改变TOP值当引脚ICP1 上的逻辑电平( 事件) 发生了变化,或模拟比较器输出ACO 电平发生了变化,并且这个电平变化为边沿检测器所证实,输入捕捉即被激发:16位的TCNT1 数据被拷贝到输入捕捉寄存器ICR1,同时输入捕捉标志位ICF1 置位。

如果此时ICIE1 = 1,输入捕捉标志将产生输入捕捉中断。

中断执行时ICF1 自动清零,或者也可通过软件在其对应的I/O 位置写入逻辑"1” 清零。

注意,改变触发源有可能造成一次输入捕捉。

因此在改变触发源后必须对输入捕捉标志执行一次清零操作以避免出现错误的结果除去使用ICR1定义TOP的波形产生模式外,T/C中的噪声抑制器与边沿检测器总是使能的。

(其实就是永远使能??)使能噪声抑制器后,在边沿检测器前会加入额外的逻辑电路并引入4个系统时钟周期的延迟.噪声抑制器使用的是系统时钟,因而不受预分频器的影响使用输入捕捉中断时,中断程序应尽可能早的读取ICR1 寄存器如果处理器在下一次事件出现之前没有读取ICR1 的数据,ICR1 就会被新值覆盖,从而无法得到正确的捕捉结果。

测量外部信号的占空比时要求每次捕捉后都要改变触发沿。

因此读取ICR1 后必须尽快改变敏感的信号边沿。

改变边沿后,ICF1 必须由软件清零( 在对应的I/O 位置写"1”)。

若仅需测量频率,且使用了中断发生,则不需对ICF1 进行软件清零。

输出比较单元16位比较器持续比较TCNT1与OCR1x的内容,一旦发现它们相等,比较器立即产生一个匹配信号。

然后OCF1x 在下一个定时器时钟置位。

如果此时OCIE1x = 1,OCF1x 置位将引发输出比较中断。

(就是说输出比较可以工作在所有工作模式下,但PWM模式下更好用,功能更强)输出比较单元A(OCR1A) 的一个特质是定义T/C 的TOP 值( 即计数器的分辨率)。

TOP 值还用来定义通过波形发生器产生的波形的周期。

由于在任意模式下写TCNT1 都将在下一个定时器时钟周期里阻止比较匹配,在使用输出比较时改变TCNT1就会有风险,不管T/C是否在运行这个特性可以用来将OCR1x初始化为与TCNT1 相同的数值而不触发中断。

强制输出比较(FOC)工作于非PWM 模式时,可以通过对强制输出比较位FOC1x 写”1” 的方式来产生比较匹配。

强制比较匹配不会置位OCF1x 标志,也不会重载/ 清零定时器,但是OC1x 引脚将被更新,好象真的发生了比较匹配一样(COMx1:0 决定OC1x 是置位、清零,还是交替变化)。

比较匹配输出单元比较匹配模式控制位COM1x1:0 具有双重功能。

1 波形发生器利用COM1x1:0 来确定下一次比较匹配发生时的输出比较OC1x 状态;2 COM1x1:0 还控制OC1x 引脚输出的来源。

只要COM1x1:0 不全为零,波形发生器的输出比较功能就会重载OC1x 的通用I/O 口功能。

但是OC1x 引脚的方向仍旧受控于数据方向寄存器(DDR)。

从OC1x 引脚输出有效信号之前必须通过数据方向寄存器的DDR_OC1x 将此引脚设置为输出。

波形发生器利用COM1x1:0 的方法在普通模式、CTC 模式和PWM 模式下有所区别。

对于所有的模式,设置COM1x1:0=0 表明比较匹配发生时波形发生器不会操作OC1x寄存器访问16位寄存器写16 位寄存器时,应先写入该寄存器的高位字节.usigned int k;k=0x1234;TCNT1H=(unsigned char)(k>>8);TCNT1L=(unsigned char) k;而读16 位寄存器时应先读取该寄存器的低位字节.usigned int k;k=TCNT1L;k+=(unsigned int)(TCNT1H<<8);使用“C” 语言时,编译器会自动处理16位操作.usigned int k;k=0x1234;TCNT1=k;k=TCNT1;这里举例如何用16位定时器T1实现高精度1秒连续定时,精准度跟所用晶振一样T1 CTC模式,8MHz外部晶振,定时1秒的话,选256分频,刚好整步距,非常准确TOP=1000000/(0.125*256)-1=31249=0x7A11。

相关文档
最新文档