430 likes | 789 Views
任务 1. ATmega16 单片机 I/O 口的使用. 任务内容. 1 、 ATMEGA16 单片机 IO 口使用概述; 2 、 1 只 LED 控制系统设计; 3 、 8 只 LED 系统设计; 4 、 带按键控制的 1 只 LED 系统设计; 5 、 带按键控制的多只 LED 系统设计。. 1 、 ATMEGA16 单片机 IO 口使用概述. 1.1 ATMEGA16 单片机 IO 简介
E N D
任务1 ATmega16单片机 I/O口的使用
任务内容 1 、ATMEGA16单片机IO口使用概述; 2、 1只LED控制系统设计; 3、 8只LED系统设计; 4、 带按键控制的1只LED系统设计; 5、 带按键控制的多只LED系统设计。
1、ATMEGA16单片机IO口使用概述 1.1 ATMEGA16单片机IO简介 ATMEGA16单片机总共有4个IO端口,每个IO端口有8个IO口。所以ATMEGA16单片机一共有32个IO口。ATmega16的I/O口作为通用数字I/O口使用时是真正的双向数字I/O口,其端口引脚说明如图下所示。当作为通用数字I/O使用时具有如下特性: 1)ATmega16所有的I/O端口都具有真正的读-修改-写功能。 2)输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接驱动LED。 3)所有的端口引脚都具有与电压无关的上拉电阻。
重要说明:本节所有的寄存器和位以通用格式表示:小写的“x”表示端口的序号,而小写的“n”代表位的序号;但是在程序里一定要写完整。 例如:PORTx DDRx PINx x:A、B、 C、 D PORTxn n:1~8 x:A、B、C、D
◆ IO口的设置 1)、相关寄存器 PORTx:IO口数据寄存器 DDRx :IO口方向控制寄存器 PINx :IO口数据输入引脚电平读取寄存器 输出控制信号用PORTx,读取外部输入的管脚电平用PINx,在做相应操作之前要用DDRx寄存器对相应IO口的数据方向进行设置。具体设置如下表:
例1:在ATmega16的A口,序号为0的IO口输出高电平: DDRA=0X01; PORTA=0X01; 例2:在ATmega16的A口,序号为0的IO口输出低电平: DDRA=0X01; PORTA=0X00; 例3:在ATmega16的A口全部输出高电平: DDRA=0Xff; PORTA=0Xff; 例4:例3:在ATmega16的A口全部输出低电平: DDRA=0Xff; PORTA=0X00; 注意:其它几个IO口的操作与A口类似。IO口的使用还有很多要注意的地方, 远比我们暂时讲的复杂的多,在后续课程中逐步讲解。
IO口总结 *ATmega16共有4个IO端口,分别是: PORTA、PORTB、PORTC、PORTD * 每个IO端口有8个IO口 PORTA:PA0~PA7 PORTB:PB0~PB7 PORTC:PC0~PC7 PORTD:PD0~PD7
* 每个IO端口有3个三个控制寄存器 A口:PORTA DDRA PINA B口:PORTB DDRB PINB C口:PORTC DDRC PINC D口:PORTD DDRD PIND * 控制寄存器作用 DDRX 控制数据方向,PORTX输出数据,PINX读取引脚电平。
2、 1只LED控制系统设计 任务:利用ATmega16的一个IO口点亮一个LED 目标: 1)、学会利用ICC AVR建立一个工程的方法; 2)、掌握新建一个C程序文件并加入到新建的项目中的方法; 3)、掌握IO输出高低电平的方法; 4)、掌握在PROTEUS中绘制仿真电路图,加载程序,运行并观察运行效果的方法;
2.1硬件电路设计 1)、常规LED开关控制电路
说明: 1)、SW1用来选择LED的正极是接到电源正极上还是接到电源负极上; 2)、当SW1触电与电源正极相连时,LED点亮; 3)、当SW1触电与电源负极相连时,LED熄灭;
说明: 1、U1是ATmega16单片机; 2、R1为限流电阻; 3、D1为发光二极管; 问题:如何通过对ATmega16编程,实现用ATmega16的IO来控制LED 的亮灭呢? (我们要对ATmega16进行编程)
2.2、新建ICC AVR项目 新建项目的步骤: 1、建立一个保存项目文件的文件夹; 例如:D:\1LED 2、打开ICC AVR 软件,新建项目,更名为1LED,并保存到D:\1LED中; 3、配置项目属性; 芯片型号设置、输出文件设置、编译器路径设置 4、新建C文件,加入到项目中; 5、编写C语言代码; 6、编译 。 注意:要多做几遍,掌握新建项目的方法。
2.2、新建PROTEUS项目 新建项目的步骤: 1、建立一个保存项目文件的文件夹; 例如:D:\8LED 2、打开PROTEUS 软件,新建项目,更名为8LED,并保存到D:\8LED中; 3、绘制原理图; 4、加载程序文件; 5、运行; 6、观察结果。 注意:这个步骤要熟记、练会,这是基础。
3、 8只LED系统设计 任务:利用ATmega16的一个IO端口点亮8个LED 目标: 1)、学会利用ICC AVR建立一个工程的方法; 2)、掌握新建一个C程序文件并加入到新建的项目中的方法; 3)、掌握IO端口输出高低电平的方法; 4)、掌握在PROTEUS中绘制仿真电路图,加载程序,运行并观察运行效果的方法;
4、 带按键控制的1只LED系统设计 任务:通过按键控制1个LED亮灭 目标: 1)、学会利用ICC AVR建立一个工程的方法; 2)、掌握新建一个C程序文件并加入到新建的项目中的方法; 3)、掌握IO输出高低电平的方法; 4)、掌握外部控制信号的读取方法; 5)、掌握在PROTEUS中绘制仿真电路图,加载程序,运行并观察运行效果的方法;
4.1、 硬件电路设计 1)、系统硬件框图
小结 • 如何将一个口线设置成输出; • 如何将一个口线设置成输入; • 程序中如何读取口线的输入电平; • 根据读取的按键状态,控制LED的亮灭。 • 进一步熟悉了ICC AVR项目的建立、程序编写、编译; • 进一步熟悉PROTEUS中原理图的绘制与程序加载、运行。
5、 带按键控制的多只LED系统设计 任务:利用一个按键控制多个LED的亮灭 目标: 1)、进一步熟悉用ICC AVR建立工程的方法; 2)、掌握新建一个C程序文件并加入到新建的项目中的方法; 3)、掌握IO端口输出高低电平的方法; 4)、掌握在PROTEUS中绘制仿真电路图,加载程序,运行并观察运行效果的方法; 5)、掌握外部电平的读取方法,并根据外部电平状态控制多个LED的亮与灭;
5.1、 硬件电路设计 1)、系统硬件框图
4.2、 软件设计 功能要求: 1)、按键打到高电平时,LED1点亮,LED2熄灭; 2)、按键打到低电平时,LED2点亮,LED1熄灭;
程序代码: #include <iom16v.h>#include <macros.h>void main(void){ DDRA = 0xff; PORTA = 0x00; DDRD = 0xfe; PORTD = 0x01; while(1) {if(PIND&0X01==0X01) PORTA = 0x01; else PORTA = 0x02; }}
小结 • 如何将两个口线设置成输出; • 如何将一个口线设置成输入; • 程序中如何读取口线的输入电平; • 根据读取的按键状态,控制LED的亮灭。 • 进一步熟悉了ICC AVR项目的建立、程序编写、编译; • 进一步熟悉PROTEUS中原理图的绘制与程序加载、运行。