1 / 43

ATmega16 单片机 I/O 口的使用

任务 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 简介

argyle
Download Presentation

ATmega16 单片机 I/O 口的使用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 任务1 ATmega16单片机 I/O口的使用

  2. 任务内容 1 、ATMEGA16单片机IO口使用概述; 2、 1只LED控制系统设计; 3、 8只LED系统设计; 4、 带按键控制的1只LED系统设计; 5、 带按键控制的多只LED系统设计。

  3. 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)所有的端口引脚都具有与电压无关的上拉电阻。

  4. 重要说明:本节所有的寄存器和位以通用格式表示:小写的“x”表示端口的序号,而小写的“n”代表位的序号;但是在程序里一定要写完整。 例如:PORTx DDRx PINx x:A、B、 C、 D PORTxn n:1~8 x:A、B、C、D

  5. ◆ IO口的设置 1)、相关寄存器 PORTx:IO口数据寄存器 DDRx :IO口方向控制寄存器 PINx :IO口数据输入引脚电平读取寄存器 输出控制信号用PORTx,读取外部输入的管脚电平用PINx,在做相应操作之前要用DDRx寄存器对相应IO口的数据方向进行设置。具体设置如下表:

  6. 端口引脚配置

  7. 例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口的使用还有很多要注意的地方, 远比我们暂时讲的复杂的多,在后续课程中逐步讲解。

  8. IO口总结 *ATmega16共有4个IO端口,分别是: PORTA、PORTB、PORTC、PORTD * 每个IO端口有8个IO口 PORTA:PA0~PA7 PORTB:PB0~PB7 PORTC:PC0~PC7 PORTD:PD0~PD7

  9. * 每个IO端口有3个三个控制寄存器 A口:PORTA DDRA PINA B口:PORTB DDRB PINB C口:PORTC DDRC PINC D口:PORTD DDRD PIND * 控制寄存器作用 DDRX 控制数据方向,PORTX输出数据,PINX读取引脚电平。

  10. 2、 1只LED控制系统设计 任务:利用ATmega16的一个IO口点亮一个LED 目标: 1)、学会利用ICC AVR建立一个工程的方法; 2)、掌握新建一个C程序文件并加入到新建的项目中的方法; 3)、掌握IO输出高低电平的方法; 4)、掌握在PROTEUS中绘制仿真电路图,加载程序,运行并观察运行效果的方法;

  11. 2.1硬件电路设计 1)、常规LED开关控制电路

  12. 说明: 1)、SW1用来选择LED的正极是接到电源正极上还是接到电源负极上; 2)、当SW1触电与电源正极相连时,LED点亮; 3)、当SW1触电与电源负极相连时,LED熄灭;

  13. 2)、采用ATmega16的LED开关控制电路

  14. 说明: 1、U1是ATmega16单片机; 2、R1为限流电阻; 3、D1为发光二极管; 问题:如何通过对ATmega16编程,实现用ATmega16的IO来控制LED 的亮灭呢? (我们要对ATmega16进行编程)

  15. 2.2、新建ICC AVR项目 新建项目的步骤: 1、建立一个保存项目文件的文件夹; 例如:D:\1LED 2、打开ICC AVR 软件,新建项目,更名为1LED,并保存到D:\1LED中; 3、配置项目属性; 芯片型号设置、输出文件设置、编译器路径设置 4、新建C文件,加入到项目中; 5、编写C语言代码; 6、编译 。 注意:要多做几遍,掌握新建项目的方法。

  16. 2.2、新建PROTEUS项目 新建项目的步骤: 1、建立一个保存项目文件的文件夹; 例如:D:\8LED 2、打开PROTEUS 软件,新建项目,更名为8LED,并保存到D:\8LED中; 3、绘制原理图; 4、加载程序文件; 5、运行; 6、观察结果。 注意:这个步骤要熟记、练会,这是基础。

  17. 运行结果

  18. 3、 8只LED系统设计 任务:利用ATmega16的一个IO端口点亮8个LED 目标: 1)、学会利用ICC AVR建立一个工程的方法; 2)、掌握新建一个C程序文件并加入到新建的项目中的方法; 3)、掌握IO端口输出高低电平的方法; 4)、掌握在PROTEUS中绘制仿真电路图,加载程序,运行并观察运行效果的方法;

  19. 4、 带按键控制的1只LED系统设计 任务:通过按键控制1个LED亮灭 目标: 1)、学会利用ICC AVR建立一个工程的方法; 2)、掌握新建一个C程序文件并加入到新建的项目中的方法; 3)、掌握IO输出高低电平的方法; 4)、掌握外部控制信号的读取方法; 5)、掌握在PROTEUS中绘制仿真电路图,加载程序,运行并观察运行效果的方法;

  20. 4.1、 硬件电路设计 1)、系统硬件框图

  21. 2)、系统硬件原理图

  22. 4.2、 软件设计

  23. 4.3、 仿真结果

  24. 小结 • 如何将一个口线设置成输出; • 如何将一个口线设置成输入; • 程序中如何读取口线的输入电平; • 根据读取的按键状态,控制LED的亮灭。 • 进一步熟悉了ICC AVR项目的建立、程序编写、编译; • 进一步熟悉PROTEUS中原理图的绘制与程序加载、运行。

  25. 5、 带按键控制的多只LED系统设计 任务:利用一个按键控制多个LED的亮灭 目标: 1)、进一步熟悉用ICC AVR建立工程的方法; 2)、掌握新建一个C程序文件并加入到新建的项目中的方法; 3)、掌握IO端口输出高低电平的方法; 4)、掌握在PROTEUS中绘制仿真电路图,加载程序,运行并观察运行效果的方法; 5)、掌握外部电平的读取方法,并根据外部电平状态控制多个LED的亮与灭;

  26. 5.1、 硬件电路设计 1)、系统硬件框图

  27. 2)、系统硬件原理图

  28. 4.2、 软件设计 功能要求: 1)、按键打到高电平时,LED1点亮,LED2熄灭; 2)、按键打到低电平时,LED2点亮,LED1熄灭;

  29. 程序代码: #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; }}

  30. 4.3、 仿真结果

  31. 小结 • 如何将两个口线设置成输出; • 如何将一个口线设置成输入; • 程序中如何读取口线的输入电平; • 根据读取的按键状态,控制LED的亮灭。 • 进一步熟悉了ICC AVR项目的建立、程序编写、编译; • 进一步熟悉PROTEUS中原理图的绘制与程序加载、运行。

More Related