第六章 通用IO接口的基本结构与基本应用
第6章 通用IO接口的基本结构与输出应用分解

11
AVR通用I/O端口的主要特点
• DDRx可控的方向寄存器。
– AVR的I/O端口结构同其它类型单片机的明显区别是,AVR采 用3 个寄存器来控制 I/O 端口。一般单片机的I/O 仅有数据寄存 器和控制寄存器,而 AVR 还多了一个方向控制器,用于控制 I/O的输入输出方向。由于输入寄存器PINx实际不是一个寄存 器,而是一个可选通的三态缓冲器,外部引脚通过该三态缓 冲器与MCU的内部总线连接,因此,读PINx时是读取外部引 脚上的真实和实际逻辑值,实现了外部信号的同步输入。这 种结构的 I/O 端口,具备了真正的读 - 修改 - 写( Read-ModifyWrite)特性。
这个运算对一个位取反有用 例如 在下面的例子中 位 7 是被翻转的 PORTA ^= 0x80; // 翻转位 7 ~a –- 按位取反 在表达式中这个运算执行一个取反 当用按位与运算关闭某些位 时 与这个运算组合使用尤其有用 如 13 PORTA &= ~0x80;// 关闭位 7
9
AVR通用I/O端口的主要特点
• 双向可独立位控的I/O口
– ATmega16的PA、PB、PC、PD四个端口都 是8位双向I/O口,每一位引脚都可以单独的 进行定义,相互不受影响。如用户可以在定 义PA口第0、2、3、4、5、6位用于输入的 同时定义第1、7位用于输出,互不影响
10
AVR通用I/O端口的主要特点
7
I/O端口寄存器 PA口寄存器—PORTA、DDRA、PINA各个位的具体定义
位 7 6 PORTA6 R/W 0
7 6 R/W 0
5 DDA5 R/W 0
5 PINA5 R N/A
4 PORTA4 R/W 0
4 DDA4 R/W 0
第6章常用IO接口电路

6.2.2 常用并行I/O接口电路
1. 并行I/O接口的基本概念 2. 常用简单接口芯片 (1) 缓冲器接口芯片 ①单向缓冲器74LS244 ②双向缓冲器74LS245 (2)锁存器接口芯片 ①锁存器74LS273
②锁存器74LS374
图6-15 74LS374作为输入/输出接口
③量程:量程是指ADC所能够转换的模拟量输入电压范围。 ④绝对精度:是指在ADC输出端获得给定的数字输出时,
所需要的实际模拟量输入值与理论模拟量输入值之差值。 ⑤相对精度:是指ADC进行满刻度校准以后,任意数字输
出所对应的实际模拟输入值(中间值)与理论模拟输入值 (中间值)之差。
(3)ADC0809)ADC0809简介及应用 ①ADC0809的内部结构与引脚功能
6.2.3 常用数/模和模/数转换电路
1.数/模(D/A)转换器 (1)D/A转换原理 ( 2 )D/A转换器的性能参数 ①分辨率 ②转换精度 影响精度的原因有失调误差、增益误差、线性误
差和微分线性误差等。 ③建立时间 ④温度系数
(3)DAC0832简介及应用 ①DAC0832的内部结构与引脚功能
1.无条件传送方式 (1)无条件输入
2.查询传送方式
3.中断传送方式
4.直接存储器存取(DMA)方式
直接存储器存取(DMA,Direct Memory Access)方式, 即外设在专用的接口电路DMA控制器的控制下直接和存储 器进行数据传送的方式。采用DMA方式所传送的数据,无 须CPU干涉,而是在存储器和高速外设之间直接进行交换。
计数器式A/D转换器,双积分式A/D转换器,逐次逼近式 A/D转换器,并行A/D转换器。 (3)A/D转换器的性能参数 ①分辨率(位数):分辨率是指A/D转换器可转换成数字 量的最小模拟电压值,它标志着A/D转换器对输入电压微 小变化的响应能力。
第六章 IO接口电路

DMA传送方式
CPU I/O、DMA DMA请求
I/O初始化
读I/O控制器数据
其他任务 数据存入存储器
I/ODMA
DMAMem
否
传送完成?
引起中断
是
处理DMA中断
DMA CPU 子程序返回
6.2 中断控制器
• 6.2.1 概述 • 6.2.2 S3C44B0x的中断控制器
2013-8-9
6.1 引言——数据传送方式
• I/O的数据传送方式
– 查询
• 最简单、最可靠的数据传送方式
– 中断
• 嵌入式系统最常用的数据传送方式
– 直接内存访问(DMA)
• 批量数据传送方式
2013-8-9
6
程序查询方式
• cpu运行输入、输出程序循环对输入、输出设备 的状态寄存器进行查询,若准备就绪则处理这个输 入或输出,否则继续等待或查询
16
1 中断源
• S3C44B0x中断控制器的中断源有30个
– 中断请求线只有26个
• 其中外部中断4、5、6、7共用一根中断请求线 • UART0、UART1接收错误共用一根中断请求线 • 中断源查询
2013-8-9
17
中断源
EINT0 EINT1
Description
External interrupt 0 External interrupt 1
21
中断源 INT_TIMER1 INT_TIMER2 INT_TIMER3 INT_TIMER4 INT_TIMER5 INT_URXD0 INT_URXD1 INT_IIC INT_SIO INT_UTXD0 INT_UTXD1 INT_RTC 2013-8-9
第6章 基本输入输出接口(jkbs)--0173页PPT

IN AX,DX
第6章:OUT指令实例(向300H端口输出一个字节)
;唯一的方法:间接寻址,字节量输出 MOV AL,BVAR ;BVAR是字节变量 MOV DX,300H OUT DX,AL
第6章:输入/输出指令(IN、OUT)特点
(1) 累加器AL、AX的专用指令 对输入指令IN ,目的操作数只能为AL, 或AX IN AL, 21H IN AX, DX IN BX, 21H 对输出指令OUT ,源操作数只能为AL, 或AX OUT 20H, AL OUT DX, AX OUT DX, CX
I/O接口是位于系统与外设间、用来协助完成数据传 送和控制任务的逻辑电路,是CPU与外界进行信息 交换的中转站。
PC机系统板的可编程接口芯片、I/O总线槽的电路 板(适配器)都是接口电路
CPU
接口 电路
I/O 设备
第6章:6.1.1 I/O接口的主要功能
⑴ 对输入输出数据进行缓冲和锁存 输出接口有锁存环节;输入接口有缓冲环节 实际的电路常见: 输出锁存缓冲环节、输入锁存缓冲环节
;方法3:直接寻址,字节量输入
IN AL,21H
MOV AH,AL
IN AL,20H
;方法4:间接寻址,字节量输入
MOV DX,21H
IN AL,DX MOV AH,AL DEC DX IN AL,DX
;方法1:直接寻址,字量输入 IN AX,20H
;方法2:间接寻址,字量输入 MOV DX,20H
OUT 20H, AL
E620
IN AL, DX
输入指令(IN:将外设数据传送给CPU内的AL/AX)
IN AL,i8 ;字节输入
IN AL,DX ;字节输入
IN AX,i8;字输入
课件:第6章 基本IO接口技术20140217

空间
读写,使程序清晰易读。
I/O
空间
对内存操作的指令不能用于I/O 0
⑴ 数据寄存器
– 输入数据寄存器:保存外设给CPU的数据 – 输出数据寄存器:保存CPU给外设的数据
⑵ 状态寄存器
– 保存外设或接口电路的状态
⑶ 控制寄存器
– 保存CPU给外设或接口电路的命令
2021/6/30
14
2. 接口电路的外部特性
• 主要体现在引脚上,分成两侧信号 面向CPU一侧的信号:
– 用于与CPU连接 – 主要是数据、地址和控制信号
数据寄存器
CPU
地址1.总接线A口B电路的状内态部寄存结器构 2. 接口电路的外部特性
控制3.总接线C口B电路芯控片制的寄存分器类 4. 接口电路的可编程性
数据 状态
外设
控制
2021/6/30
13
1. 接口电路的内部结构
• CPU与外设主要有数据、状态和控制信息需 要相互交换,于是从应用角度看内部:
串行传送(一位一位)
2021/6/30
7
6.1.1 I/O信息的种类(续)
2. 状态信息 — CPU与外设之间交换数据时的联络信息
3. 控制信息 — CPU发给外设的命令信息。
2021/6/30
8
6.1.2 I/O接口的功能
1.为什么需要I/O接口(电路)?
• 微机的外部设备多种多样 多种外设 • 工作原理、驱动方式、信息格式、以及工作速
实际的电路常见:
输出锁存缓冲环节、输入锁存缓冲环节
⑵ 设备选择--对I/O端口进行寻址
⑶ 对信号的形式和数据的格式进行变换
微机直接处理:数字量、开关量、脉冲量
第六章IO接口与总线

READY? N
MOV CX, COUNT_1
READ_SI:IN AL,PORT_SI TEST AL, 01H ;查询READY
Y 输入数据信息
JZ READ_SI
IN AL,PORT_IN MOV [BX],AL
请思考:
INC BX LOOP READ_SI
假如D1代表输出状态位BUSY,输 出的程序该如何完成?例:打印机
接口与端口:CPU要与多个外设打交道,一个外设又需和CPU 交换多种信息,所以一个接口通常包含多个端口。同一时刻 CPU只能和一个端口交换信息。
二、简单的输入输出接口芯片
1、缓冲器:74LS244
TTL 8位单向缓冲器 作用:缓冲+提高总线驱动能力 简述:分成4位的两组,当成8位 数据使用时,两个控制端连接在一 起。控制端低电平有效 常用连接:A端接外设,Y端接 CPU的数据总线。两个G端并接, 由CPU片选。
三 1、IO端口
CPU与外设通信时传送的信息由:数据信息、状态信息及控制信息
DB
主 AB
机 CB
接口电 路
数据信息
外 状态信息
设 制信息
不同的信息进入不同的寄存器,通常将这些寄存器和他们的控制 逻辑统称为IO端口。CPU可对端口的信息直接读写。对应三种 端口:数据端口、状态端口、命令端口(控制端口)。三种信息 分别进入三种端口的寄存器,完成不同的功能。但是传输的通道 都是一样的,都是通过数据总线。
传送前,CPU首先将有关参数,包括DMAC的工作方式, 要访问的存储单元的首地址,要传送的字节数等预先写入 DMAC。 当外设需要传送数据时,向DMAC提出请求,该信号应该 维持到DMAC响应为止。 DMAC收到请求后,向CPU提出HOLD总线请求,申请借 用总线,CPU在当前总线周期结束时,将响应该请求,发回 HLDA信号,然后输出高阻态放弃总线。 DMAC向外设发回响应,DMA传送开始。DMAC接管总 线,将数据从外设顺序传送到存储器,并进行地址增量,对 传送次数计数等操作,一直到传输完成,将HOLD信号置为 无效,将总线交还给CPU。
第六章输入输出接口基础(CPU与外设之间的数据传输)

§6.1 接口的基本概念
3、什么是微机接口技术?
处理微机系统与外设间联系的技术 注意其软硬结合的特点 根据应用系统的需要,使用和构造相应的接 口电路,编制配套的接口程序,支持和连接 有关的设备
§6.1 接口的基本概念
4、接口的功能
⑴对I/O端口进行寻址,对送来的片选信号进行 识别;
(2)根据读/写信号决定当前进行的是输入操作还 是输出操作,对输入输出数据进行缓冲和锁存 输出接口有锁存环节;输入接口有缓冲环节 实际的电路常见: 输出锁存缓冲环节、输入锁存缓冲环节
对接口内部寄存器的寻址。
P279
§6.2 CPU与外设之间数据的传送方式
CPU与外设之间传输数据的控制方式通常有 三种: 程序方式:
• 无条件传送方式和有条件传送方式
中断方式 DMA方式
§6.2 CPU与外设之间数据的传送方式
一、程序方式 指用输入/输出指令,来控制信息传输
的方式,是一种软件控制方式,根据程序控 制的方法不同,又可以分为无条件传送方式 和条件传送方式。
输入数据寄存器:保存外设给CPU的数据 输出数据寄存器:保存CPU给外设的数据
⑵ 状态寄存器
保存外设或接口电路的状态
⑶ 控制寄存器
保存CPU给外设或接口电路的命令
§6.1 接口的基本概念
接口电路的外部特性 主要体现在引脚上,分成两侧信号 面向CPU一侧的信号:
用于与CPU连接 主要是数据、地址和控制信号
程序不易阅读(不易分 清访存和访问外设)
00000
I/O 部分
§6.1 接口的基本概念
独立编址方式
FFFFF
优点:
I/O端口的地址空间独立
内存 空间
控制和地址译码电路相对简单 FFFF I/O
IO接口电路的典型结构输入输出的控制方式

微机原理第六章接口2??I/O接口电路的典型结构??输入输出的控制方式??DMA控制器8237A及应用微机原理第六章接口3I/O接口概述为什么需要I/O接口电路??微机的外部设备多种多样其工作原理、驱动方式、信息格式、以及工作速度方面彼此差别很大它们不能与CPU直接相连必须经过中间电路再与系统相连??这部分电路被称为I/O接口电路微机原理第六章接口4I/O接口概述续1什么是I/O接口电路??I/O接口是位于系统与外设间、用来协助完成数据传送和控制任务的逻辑电路CPUCPU接口接口电路电路I/OI/O设备设备微机原理第六章接口5I/O接口的主要功能⑴对输入输出数据进行缓冲和锁存⑵对信号的形式和数据的格式进行变换微机直接处理数字量、开关量、脉冲量⑶对I/O端口进行寻址⑷与CPU和I/O设备进行联络微机原理第六章接口6I/O接口的典型结构控制总线CB地址总线ABI/O接口电路数据控制状态数据总线DBCPU外设控制寄存器状态寄存器数据寄存器微机原理第六章接口7接口电路的内部结构??CPU与外设主要有数据、状态和控制信息需要相互交换于是从应用角度看内部⑴数据寄存器??保存外设给CPU和CPU发往外设的数据⑵状态寄存器??保存外设或接口电路的状态⑶控制寄存器??保存CPU给外设或接口电路的命令微机原理第六章接口8接口电路的外部特性??主要体现在引脚上分成两侧信号面向CPU一侧的信号??用于与CPU连接??主要是数据、地址和控制信号面向外设一侧的信号??用于与外设连接??提供的信号五花八门??功能定义、时序及有效电平等差异较大微机原理第六章接口9接口电路芯片的分类??接口电路核心部分往往是一块或数块大规模集成电路芯片接口芯片??通用接口芯片??支持通用的数据输入输出和控制的接口芯片??面向外设的专用接口芯片??针对某种外设设计、与该种外设接口??面向微机系统的专用接口芯片??与CPU和系统配套使用以增强其总体功能微机原理第六章接口10接口电路的可编程性??许多接口电路具有多种功能和工作方式可以通过编程的方法选定其中一种??接口需要进行物理连接还需要编写接口软件??接口软件有两类??初始化程序段——设定芯片工作方式等??数据交换程序段——管理、控制、驱动外设负责外设和系统间信息交换微机原理第六章接口11I/O端口的编址接口电路占用的I/O端口有两类编排形式??I/O端口单独编址??I/O地址空间独立于存储地址空间??如8086/8088??I/O端口与存储器统一编址??它们共享一个地址空间??如M6800微机原理第六章接口12I/O端口单独编址??优点??I/O端口的地址空间独立??控制和地址译码电路相对简单??专门的I/O指令使程序清晰易读??缺点??I/O指令没有存储器指令丰富内存空间I/O空间FFFFF0FFFF微机原理第六章接口13I/O端口与存储器统一编址??优点??不需要专门的I/O指令??I/O数据存取与存储器数据存取一样灵活??缺点??I/O端口要占去部分存储器地址空间??程序不易阅读不易分清访存和访问外设内存部分I/O部分存储器空间00000FFFFF微机原理第六章接口148088/8086的输入输出指令??输入指令演示IN ALPORT字节输入直接寻址IN ALDX字节输入间接寻址IN AXPORT字输入直接寻址IN AXDX字输入间接寻址输出指令演示OUT PORTAL字节输出直接寻址OUT DXAL字节输出间接寻址OUT PORTAX字输出直接寻址OUT DXAX字输出间接寻址微机原理第六章接口158088/8086的I/O端口??8088只能通过输入输出指令与外设进行数据交换呈现给程序员的外设是端口Port即I/O地址??8086用于寻址外设端口的地址线为16条端口最多为2166553664K个端口号为0000H FFFFH??每个端口用于传送一个字节的外设数据微机原理第六章接口16I/O寻址方式??8088/8086的端口有64K个无需分段设计有两种寻址方式直接寻址只用于寻址00H FFH前256个端口操作数i8表示端口号间接寻址可用于寻址全部64K个端口DX寄存器的值就是端口号??对大于FFH的端口只能采用间接寻址方式微机原理第六章接口17数据交换方式??如果输入输出一个字节利用AL寄存器??如果输入输出一个字利用AX寄存器??输入一个字实际上是从连续两个端口输入两个字节分别送AL对应低地址端口和AH对应高地址端口??输出一个字实际上是将AL对应低地址端口和AH对应高地址端口两个字节的内容输出给连续两个端口微机原理第六章接口18IN指令从20H端口输入一个字字输入直接寻址in ax20h字输入间接寻址mov dx20hin axdx字节输入直接寻址in al21hmov ahalin al20h字节输入间接寻址mov dx21hin aldxmov ahaldec dxin aldx微机原理第六章接口19OUT指令向300H端口输出一个字节唯一的方法间接寻址字节量输出mov albvarbvar是字节变量movdx300hout dxal微机原理第六章接口20I/O地址的译码??I/O地址的译码方法与存储器地址的译码方法一样但有它的特点??常采用部分译码方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于AVR 的单片嵌入式系统原理与实践应用第6 章通用I/O接口基本结构与输出应用从本章开始,将从AVR 单片机的基本功能单元入手,讲解其各个外围功能部件的基本组成和特性,以及它们的应用。
ATmega16 芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4 组8 位,共32 路通用I/O 接口,分别对应于芯片上32 根I/O 引脚。
所有这些I/O 口都是双(有的为3)功能复用的。
其中第一功能均作为数字通用I/O 接口使用,而复用功能则分别用于中断、时钟/计数器、USRAT、I2C 和SPI 串行通信、模拟比较、捕捉等应用。
这些I/O 口同外围电路的有机组合,构成各式各样的单片机嵌入式系统的前向、后向通道接口,人机交互接口和数据通信接口,形成和实现了千变万化的应用。
由于刚开始学习I/O 的应用,读者还没有掌握中断和定时计数器的使用,所以在本章的实例中,调用了CVAVR 提供的软件延时函数来实现时间延时等待的功能。
需要指出的是,使用软件延时的方式会造成MCU 效率的下降,而且也不能实现精确的延时,所以在一般情况下应尽量不使用软件延时的方式。
在后面的章节里,会逐步介绍如何使用T/C 和中断实现延时的正确方法。
6.1 通用I/O口的基本结构与特性6.1.1 I/O口的基本结构图6-1 为AVR 单片机通用I/O 口的基本结构示意图。
从图中可以看出,每组I/O 口配备三个8 位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。
I/O 口的工作方式和表现特征由这3 个I/O 口寄存器控制。
第 6 章通用I/O 接口基本结构与输出应用方向控制寄存器DDRx 用于控制I/O 口的输入输出方向,即控制I/O 口的工作方式为输出方式还是输入方式。
当DDRx=1 时,I/O 口处于输出工作方式。
此时数据寄存器PORTx 中的数据通过一个推挽电路输出到外部引脚(图6-2)。
AVR 的输出采用推挽电路提高了I/O 口的输出能力,当PORTx=1 时,I/O 引脚呈现高电平,同时可提供输出20mA 的电流;而当PORTx=0 时,I/O 引脚呈现低电平,同时可吸纳20mA 电流。
因此,AVR 的I/O 在输出方式下提供了比较大的驱动能力,可以直接驱动LED 等小功率外围器件。
当DDRx=0 时,I/O 处于输入工作方式。
此时引脚寄存器PINx 中的数据就是外部引脚的实际电平,通过读I/O 指令可将物理引脚的真实数据读入MCU。
此外,当I/O 口定义为输入时(DDRx=0),通过PORTx 的控制,可使用或不使用内部的上拉电阻(图6-3)。
图图6-3 通用I/O 口输入工作方式示意图(带内部上拉)表6.1 是AVR 通用I/O 端口的引脚配置情况。
基于 AVR 的单片嵌入式系统原理与实践应用表 6.1 I/O 口引脚配置表表中的 PUD 为寄存器 SFIOR 中的一位,它的作用相当 AVR 全部 I/O 口内部上拉电阻的总 开关。
当 PUD=1 时,AVR 所有 I/O 内部上拉电阻都不起作用(全局内部上拉无效);而 PUD=0时,各个 I/O 口内部上拉电阻取决于 DDRXn 的设置。
AVR 通用 I/O 端口的主要特点为: 双向可独立位控的 I/O 口ATmega16 的 PA 、PB 、PC 、PD 四个端口都是 8 位双向 I/O 口,每一位引脚都可以单独的 进行定义,相互不受影响。
如用户可以在定义 PA 口第 0、2、3、4、5、6 位用于输入的同时 定义第 1、7 位用于输出,互不影响。
Push-Pull 大电流驱动 (最大 40mA)每个 I/O 口输出方式均采用推挽式缓冲器输出,提供大电流的驱动,可以输出(吸入) 20mA 的电流,因而能直接驱动 LED 显示器。
可控制的引脚内部上拉电阻每一位引脚内部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电 阻。
当 I/O 口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低, 则构成电流源输出电流(uA 量级)。
DDRx 可控的方向寄存器。
AVR 的 I/O 端口结构同其它类型单片机的明显区别是,AVR 采用 3 个寄存器来控制 I/O 端口。
一般单片机的 I/O 仅有数据寄存器和控制寄存器,而 AVR 还多了一个方向控制器,用 于控制 I/O 的输入输出方向。
由于输入寄存器 PINx 实际不是一个寄存器,而是一个可选通 的三态缓冲器,外部引脚通过该三态缓冲器与 MCU 的内部总线连接,因此,读 PINx 时是读 取外部引脚上的真实和实际逻辑值,实现了外部信号的同步输入。
这种结构的 I/O 端口,具 备了真正的读-修改-写(Read-Modify-Write )特性。
图 6-4 通用 I/O 口逻辑功能示意图第 6 章通用 I/O 接口基本结构与输出应用图 6-4 为 AVR 一个(位)通用 I/O 口的逻辑功能图。
右上面的两个 D 触发器为方向控制 寄存器和数据寄存器。
1) 使用 AVR 的 I/O 口,首先要正确设置其工作方式,确定其工作在输出方式还是输入方式。
2) 当 I/O 工作在输入方式,要读取外部引脚上的电平时,应读取 PINxn 的值,而不是PORTxn 的值。
3) 当 I/O 工作在输入方式,要根据实际情况使用或不使用内部的上拉电阻。
4) 一旦将 I/O 口的工作方式由输出设置成输入方式后,必须等待一个时钟周期后才能正确的读到外部引脚 PINxn 的值。
上面的第 4 点是由于在 PINxn 和 AVR 内部数据总线之间有一个同步锁存器(图 6-4 中的 SYNCHRONIZER )电路,使用该电路避免了当系统时钟变化的短时间内外部引脚电平也同时变 化而造成的信号不稳定的现象,但它有产生大约一个时钟周期(0.5~1.5)的时延。
6.1.2 I/O 端口寄存器ATmega16 的 4 个 8 位的端口都有各自对应的 3 个 I/O 端口寄存器,它们占用了 I/O 空 间的 12 个地址(见表 6.2)。
表 6.2 ATmega16 I/O 寄存器地址表PIND $10 0x0030D 口输入引脚寄存器下面是 PA 口寄存器—PORTA 、DDRA 、PINA 各个位的具体定义,以及其是否可以通过指 令读写操作和 RESET 复位后的初始值。
其它 3 个口的寄存器的情况与 PA 口相同,只是地址 PORTA复位值0 0基于AVR 的单片嵌入式系统原理与实践应复位值N/A N/A N/A N/A N/A N/A N/A N/A1)正确使用AVR 的I/O 口要注意:先正确设置DDRx 方向寄存器,再进行I/O 口的读写操作。
2)AVR 的I/O 口复位后的初始状态全部为输入工作方式,内部上拉电阻无效。
所以,外部引脚呈现三态高阻输入状态。
3)因此,用户程序需要首先对要使用的I/O 口进行初始化设置,根据实际需要设定使用I/O 口的工作方式(输出还是输入),当设定为输入方式时,还要考虑是否使用内部的上拉电阻。
4)在硬件电路设计时,如能利用AVR 内部I/O 口的上拉电阻,可以节省外部的上拉电阻。
6.1.3 通用数字I/O口的设置与编程在将AVR 的I/O 口作为通用数字口使用时,要先根据系统的硬件设计情况,设定各个I/O 口的工作方式:输入或输出工作方式,既先正确设置DDRx 方向寄存器,再进行I/O 口的读写操作。
如将I/O 口定义为数字输入口时,还应注意是否需要将该口内部的上拉电阻设置为有效,在设计电路时,如能利用AVR 内部I/O 口的上拉电阻,可以节省外部的上拉电阻。
AVR 汇编指令系统中,直接用于对I/O 寄存器的操作指令有以下3 类,全部为单周期指令:1)IN/OUTIN/OUT 指令实现了32 个通用寄存器与I/O 寄存器之间的数据交换,格式为:IN Rd,AOUT A,Rr 2)SBI/CBI ;从I/O 寄存器 A 读数剧到通用寄存器Rd ;通用寄存器Rr 数据送I/O 寄存器 ASBI/CBI 指令实现了对I/O 寄存器(地址空间为I/O 空间的0x00-0x31)中指定位的置1 或清0,格式为:SBI A,bCBI A,b 3)SBIC/SBIS ;将I/O 寄存器 A 的第b 位置1 ;将I/O 寄存器 A 的第b 位清0SBIC/SBIS 指令为转移类指令,它根据I/O 寄存器(地址空间为I/O 空间的0x00-0x31)的指定位的数值实现跳行转移(跳过后面紧接的一条指令,执行后序的第二条指令),格式为:SBIC A,b ;I/O 寄存器 A 的第 b 位为0 时,跳行执行第 6 章通用I/O 接口基本结构与输出应用ATmega16 的4 个8 位的端口共有12 个I/O 端口寄存器,它们在AVR 的I/O 空间的地址均在前32 个之中,因此上面 3 类对I/O 寄存器操作的指令都可以使用。
在第 5 章的例程Demo_5_1.asm 中,使用了OUT 指令设置PC 口的工作方式为输出,输出全1:.def temp1=r20 。
ser temp1out ddrc,temp1out portc,temp1 ;定义寄存器R20用临时变量名temp1代表;置temp1(R20)为0XFF;定义PC口为输出;PC口输出全―1‖,LED不亮在CVAVR 中,我们可以直接使用 C 的语句对I/O 口寄存器进行操作,如:// 定义PortC口的工作方式PORTC = 0x01; DDRC = 0x01; PORTC.0 = ~PORTC.0; // PC口的第0位输出―1‖,LED不亮// 定义PC口的第0位为输出方式// PC口第0位输出取反其中PORTC.0 = 0 (或PORTC.0 = 1)是CVAVR 中对C 的扩展语句,它实现了对寄存器的位操作。
这种语句在标准C 中是没有的,该扩展更加适合编写单片机的系统程序,因为在单片机的系统程序中,是经常需要直接对位进行操作的。
更加标准的 C 程序可以采用以下的写法:#define BIT0 0#define BIT1 1#define BIT2 2#define BIT3 3#define BIT4 4#define BIT5 5#define BIT6 6#define BIT7 7………PORTC = 1<<(BIT0) | 1<<(BIT3); // PC口的第0位和第3位输出―1‖,其它为―0‖这里,1<<(BIT0)表示逻辑1左移0位,结果为0b00000001;而1<<(BIT3) 表示逻辑1左移3位,结果为0b00001000。