AVR 单片机实现 LED 灯闪烁.
ATmega16 有 4 个 8 位的双向 I/O 端口 PA, PB, PC, PD, 他们对外对应 32 个 I/O 引脚, 每一位都可以独立的用于逻辑信号的输入和输出. 在 5V 工作电压下, 输出高电平时, 每个引脚可输出达 20mA 的驱动电流; 而输出低电平时, 每个引脚可以吸收最大 40mA 的电流.
AVR系列单片机所有的 I/O 寄存器可以通过两种不同的方法来访问: 使用对 I/O 寄存器访问的IN 和 OUT 专用指令或者使用对 SRAM 访问的指令. 其中 IN, OUT 指令周期为 1 个时钟周期另外, I/O 寄存器地址范围在 $00 - $1F 之间的寄存器(前 32 个)还可以通过指令实现位操作和位判断跳转. 如: SBI(I/O寄存器指定位置 1), CBI(I/O寄存器指定位清 0), SBIS(I/O寄存器指定位为 1 跳转), SBIC(I/O寄存器指定位为 0 跳转).详细的看手册才是王道.
仿真电路简图(LED可能看不到, 另存为或者新窗口打开看吧):
测试程序, 更改可以观察不同现象, 有助理解. 和 51 的不同就是 IO 口的方向控制.
/*
* AVRGCC.c
*
* Created: 2012/5/27 18:09:54
* Author: KISSMonX
*/
#define F_CPU 4000000UL
#include
#include
int main(void)
{
【AVR 单片机实现 LED 灯闪烁.】PORTC = 0x80;// PC 口的第 0/7 位输出 "0"/"1", LED1 和 LED2 都亮.
DDRC = 0x81;// 定义 PC 口的第 0 和 7 位为输出方式
_delay_ms(2000);// 开始时两个 LED 都要亮, 持续 2s 后进入循环.
while(1)
{
_delay_ms(200);// 库函数 ms 延时函数, 0.2s
PORTC = ~PORTC;// PC 口第 0/7 位取反后输出
}
return 0;
}
推荐阅读
- 51单片机数据传送指令列表
- 单片机课程学习与感想
- 两招实现无线网络共享打印机
- AVR单片机nRF24L01发送接收驱动程序
- 华为实现数据存储“规-建-维-优”全场景自动化
- 单片机定时器之改良版:时间轮定时器
- 单片机逻辑电路与逻辑运算
- 第八节:PIC系列单片机I/O口结构
- 基于AVR单片机的AT24C01-512eeprom读写程序
- 51单片机之I^2C总线