AVR学习记录和例子

上传人:飞****9 文档编号:132946276 上传时间:2020-05-22 格式:PDF 页数:31 大小:496.72KB
返回 下载 相关 举报
AVR学习记录和例子_第1页
第1页 / 共31页
AVR学习记录和例子_第2页
第2页 / 共31页
AVR学习记录和例子_第3页
第3页 / 共31页
AVR学习记录和例子_第4页
第4页 / 共31页
AVR学习记录和例子_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《AVR学习记录和例子》由会员分享,可在线阅读,更多相关《AVR学习记录和例子(31页珍藏版)》请在金锄头文库上搜索。

1、 atmega128 最小系统板 原理图 最小系统板 原理图 PCB文件 文件 PROTEL格式 格式 attach 123808 attach atmega128 最小系统板 原理图 PCB 文件 PROTEL 格式 AVR H128CAN AT90CAN128 HEADER BOARD WITH ICSP AND JTAG CONNECTOR 学 A 标 签 a习 VR AVR tmega128 最小系统板 原理图 PCB 来 源 原 创 系统 分类 单片 机 分 用户 类 点击查看原文 发表评论 阅读全文 262 回复 0 发表于 2009 6 4 11 39 25 1 AVR学习记录和

2、例子学习记录和例子 AVR 单片机学习的点点滴滴 下来很大决心才开始学 AVR 单片机 在网络上找 了很多书籍 例程 也购买了前段时间比较热门的书籍 深入浅出 AVR 单片机 也许是自己天生不如人吧 还是不得要领 只能自己厚着薄脸请教同事 方得点 点 根据其意 就是要程序模块化设计 将一个大的程序按功能分割成一些小模块 特点 各 模块相对独立 功能单一 结构清晰 接口简单 控制了程序设计的复杂性 提高元件的可靠性 缩短 开发周期 避免程序开发的重复劳动 易于维护和功能扩充 开发方法 自上向下 逐步分解 以 MEGA32 ICCV7 for AVR 为工具 并把学习的过程记录下来 MEGA32

3、是一款比较常 用的 AVR 单片机 例子一 建立总模板 打开 ICCV7 for AVR 新建工程 在工程里添加 main c main h 两个总工程文件 其中 main c 为所有程序汇总 main h 汇总总工程的头文件 在 h 头文件中加入 ifndef systen h 和 define systen h 是为了避免重复编译 如下 Main c include main h 包含总头文件 void main void init devices AVR 硬件初始化 while 1 循环 led light led disp main h ifndef systen h define s

4、ysten h define M8 1 define M16 2 define M32 3 define M64 4 define M128 5 define CPU TYPE M32 定义 MCU 时钟频率 define F CPU 14745600 define F CPU 7372800 包含系统头文件 请根据实际需要进行裁减 pragma REGPARMS if CPU TYPE M128 include endif if CPU TYPE M64 include endif if CPU TYPE M32 include endif if CPU TYPE M16 include e

5、ndif if CPU TYPE M8 include endif include include include include include include include include define const code 系统数据类型定义 ifndef TRUE define TRUE 1 endif ifndef FALSE define FALSE 0 endif ifndef NULL define NULL 0 endif define MIN a b ab a b define ABS x x 0 x x typedef unsigned char uint8 定 义可移植

6、的无符号 8 位整数关键字 typedef signed char int8 定 义可移植的有符号 8 位整数关键字 typedef unsigned int uint16 定 义可移植的无符号 16 位整数关键字 typedef signed int int16 定 义可移植的有符号 16 位整数关键字 typedef unsigned long uint32 定 义可移植的无符号 32 位整数关键字 typedef signed long int32 定 义可移植的有符号 32 位整数关键字 包含工程头文件 请根据需要进行裁减 include devices h include led h

7、 一下为工程变量 端口定义 以下为工程配置 endif end 例子二 软件延时 建立软件延时 delay c delay h 并加到工程中 delay c include main h 1us extern void delay us uint8 u uint8 i for i 177 u 0 u while i 1ms extern void delay ms uint16 m for m 0 m delay us 10 1s extern void delay s uint16 s s s 40 for s 0 s delay ms 100 delay h ifndef delay h

8、define delay h 1us extern void delay us uint8 u 1ms extern void delay ms uint16 m 1s extern void delay s uint16 s endif 例子三 7 段共阳数码管的显示 7 段共阳数码管的显示例子是学习 AVR 单片机的端口操作 AVR端口是真正的双向端口 不像 51 伪双向 这也是AVR的一项优势 只是操作 时大家注意DDRn就可以了 真正双向端口在模拟时序方面不如伪双向的方便 DDRn PORTn PINn 解释 n为端口号 ABCDE DDRn 控制端口是输入还是输出 0 为输入 1 为

9、输出 个人记忆方法 一比 零大所以往外挤 即 1 为输出 0 为输入 PORTn 从引脚输出信号 当DDRn为 1 时 可以通过PORTn x等端口操作语句 给引脚输出赋值 PINn 从引脚读输入信号 无论DDRn为何值 都可以通过x PINn获得端口n 的外部电平 当引脚配置为输入时 若PORTxn 为 1 上拉电阻将使能 内部上拉电阻的 使用在键盘扫描的时候还要说到 端口更详细功能及介绍以及端口第二功能请参考数据手册 端口引脚配置 DDxn PORTxn PUD in SFIOR I O 上拉电阻说明 0 0 X 输入 No 高阻态 Hi Z 0 1 0 输入 Yes被外部电路拉低时将输出

10、电流 0 1 1 输入 No高阻态 Hi Z 1 0 X 输出 No输出低电平 漏电流 1 1 X 输出 No输出高电平 源电流 如果有引脚未被使用 建议给这些引脚赋予一个确定电平 最简单的保证未 用引脚具有确定电平的方法是使能内部上拉电阻 但要注意的是复位时上拉电阻 将被禁用 如果复位时的功耗也有严格要求则建议使用外部上拉或下拉电阻 不 推荐直接将未用引脚与VCC 或GND 连接 因为这样可能会在引脚偶然作为输出时 出现冲击电流 下面我们来看例子 void port init void PORTA 0 x03 DDRA 0 x03 PORTB 0 x00 DDRB 0 x01 PORTC 0

11、 x00 DDRC 0 x00 PORTD 0 x00 DDRD 0 x00 建议赋值为零 PORTA 0 x03 DDRA 0 x03 这两句使PA口的PA1 和PA0 处于输出状态 PA7 PA 2 处于输入状态 因为先定义了PORTA 0 x30 PA1 和PA0 的内部上拉电阻也使能 了 这里的 0 x03 即二进制的 00000011 从左到右对应于Pn7 Pn0 八个IO口 通过跑马灯程序来深入理解IO口的操作 ICC AVR application builder 2006 11 21 9 20 57 Target M32 Crystal 7 3728Mhz include in

12、clude void delay unsigned char n 延时函数定义 unsigned char i j for n 0 n n 10ms for j 100 j 0 j 100us 100 10ms for i 147 i 0 i delay 100us int main void unsigned char i j k PORTA 0 xFF PA口设为输出高电平 灯灭 DDRA 0 xFF PA a 3 while 1 i 1 for j 0 j 8 j 循环 8 次 即PA0 PA7 轮流闪亮 PORTA i 反相输出 低电平有效 对应的灯亮 for k 0 k 10 k d

13、elay 100 延时 100 10 1 秒 可自行调 节 i i 1 左移一位 I的值将向下面的列表那样变化 0b00000001 PA0 0b00000010 PA1 0b00000100 PA2 0b00001000 PA3 0b00010000 PA4 0b00100000 PA5 0b01000000 PA6 0b10000000 PA7 其他IO口操作指令 void main void PORTA 0 xff DDRA 0 xff 输出 模式 IO口上拉电阻有效 1 为输出 0 为输入 PORTA 0 xf0 等 以下三条指令只对操作符号右边的数字位是一的位操作 PORTA 清零

14、0 xf0 为 01110000 即把 654 三位清零 其余数位不变 PORTA 0 x77 置一 0 xf0 为 01110111 即把 654210 六位清零 其余数位不 变 PORTA 0 x70 翻转 如果是零变成 1 是一变成 0 P 按位与 判断p的第七位是否是一 是则成立 关于 1 ADIF是一个寄存器变量 可以堪称数字 4 跟手册中的定义 包含芯片 头文件的定义是一样的 1 ADCSR 1 ADCSR 1 ADCSR void led light uint8 i for i 0 i 7 i led port BIT i 输出低电平 delay ms 200 for i 0 i

15、 7 i led port BIT i 输出低电平 delay ms 200 void led disp void uint8 i for i 0 i 16 i led disp port led seg i 输出低电平 delay ms 200 led h ifndef led h define led h define led port PORTA define led ddr DDRA define led pin PINA define led disp port PORTB extern void led light void extern void led disp void en

16、dif 其中使用单片机的 PB 口为数码管数据口 1 的数组 如下 使用 数码管计算 小软件自动生成 16 进制 0 9 16 进制 led disp 0 xC0 0 xF9 0 xA4 0 xB0 0 x99 0 x92 0 x82 0 xF8 0 x80 0 x90 2 把数组定义到 FLASH 中 使用 const unsinged char led disp 0 xC0 0 xF 9 0 xA4 0 xB0 0 x99 0 x92 0 x82 0 xF8 0 x80 0 x90 a01b2a9e7 rar 系统分类 单片机 用户分类 学习AVR 标签 AVR LED 来源 原创 点击查看原文 发表评论 阅读全文 443 回复 0 发表于 2008 7 9 14 58 21 2 AVR 硬件操作库函数硬件操作库函数 微 雪 电 子 WaveShare http www waveS 目 的 建立AVR的硬件提取库 增加各类补丁 方便系统程序移植 目标系统 基于AVR单片机 应用软件 ICCAVR 版 本 Version 1 0 圆版时间 2005 06 25 开发人员 SEE 说

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号