ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:345.19KB ,
资源ID:11172582      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11172582.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(AVR单片机笔记.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

AVR单片机笔记.docx

1、AVR单片机笔记AVR单片机笔记说明:主要使用的编译环境为IAR,使用AVR的 ATmega16 和128目录IO 2时钟: 2MCU 控制寄存器 MCUCR 2MCU 控制和状态寄存器MCUCSR 2看门狗定时器控制寄存器WDTCR 3外部中断控制寄存器A EICRA 4外部中断控制寄存器B EICRB 4外部中断屏蔽寄存器 EIMSK 4外部中断标志寄存器 EIFR 5中断矢量表 5在IAR环境中AVR中断程序的格式 6定时器 6定时器/计数器0和2: 6定时器/计数器1和3: 7使用IAR调试注意事项 7IIC(TWI) 8o8515.h头文件 10IOPort A-G:都含有内部上拉电

2、阻数据:PORTA-G;方向DDRA-G;PINA-G时钟:XTAL 分频控制寄存器 XDIV MCU 控制寄存器 MCUCRMCU 控制和状态寄存器MCUCSR Bit 4 JTRF: JTAG 复位标志通过JTAG 指令AVR_RESET 可以使JTAG 复位寄存器置位,并引发MCU 复位,并使JTRF 置位。上电复位将使其清零,也可以通过写”0” 来清除。 Bit 3 WDRF: 看门狗复位标志看门狗复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。 Bit 2 BORF: 掉电检测复位标志掉电检测复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。 Bit 1

3、 EXTRF: 外部复位标志外部复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。 Bit 0 PORF: 上电复位标志上电复位发生时置位。只能通过写”0” 来清除。看门狗定时器控制寄存器WDTCR Bits 7.5 Res: 保留保留位,读操作返回值为零。 Bit 4 WDCE: 看门狗修改使能清零WDE 时必须先置位WDCE,否则不能禁止看门狗。一旦置位,硬件将在紧接的4 个时钟周期之后将其清零。请参考有关WDE 的说明来禁止看门狗。工作于安全级别1 和2时也必须置位WDCE 以修改预分频器的数据,如P 54 “ 改变看门狗定时器配置的时间序列” 所示。 Bit 3 WDE:

4、 看门狗使能WDE为1“时,看门狗使能,否则看门狗将被禁止。只有在WDCE为1“时WDE才能清零。以下为关闭看门狗的步骤:1. 在同一个指令内对WDCE 和WDE 写1“,即使WDE 已经为1“。2. 在紧接的4 个时钟周期之内对WDE 写0”。工作于安全级别2 时是永远无法禁止看门狗定时器的。参见 P 54 “ 改变看门狗定时器配置的时间序列” 。 Bits 2.0 WDP2, WDP1, WDP0: 看门狗定时器预分频器2, 1, 和0WDP2、WDP1 和WDP0 决定看门狗定时器的预分频器,如Table 22 所示。外部中断控制寄存器A EICRA外部中断控制寄存器B EICRB外部中

5、断屏蔽寄存器 EIMSK外部中断标志寄存器 EIFR中断矢量表在IAR环境中AVR中断程序的格式中断向量的使用IAR中定义中断函数的格式是 / #pragma vector=中断向量 _interrupt void 中断服务程序名(void) /中断处理程序 / 中断的初始化要另外加入代码,可在主程序内加入。如下是各个中断函数的定义。关中断函数_disable_interrupt(); / disable all interrupts开中断_enable_interrupt(); / re-enable interrupts例如:#pragma vector=INT0_vect _interr

6、upt void INT0_Server(void) 定时器ATmega128有4个定时器;ATmega16有3个定时器 ATmega128: 的T/C0和2都是8位的;T/C1和3都是16位的;T/C1、2、3共用一个预分频模块,但它们可以有不同的分频设置ATmega16: T/C0 、2是一个通用的单通道8 位定时器/ 计数器模块;T/C1是16位的定时器,可以实现精确的程序定时( 事件管理)、波形产生和信号测量;T/C1 与T/C0 共用一个预分频模块,但它们可以有不同的分频设置定时器/计数器0和2:T/C2和T/C0基本是一样的,以T/C0为例。T/C0 是一个通用的,单通道8 位定时

7、器/ 计数器模块。其主要特点如下: 单通道计数器 比较匹配发生时清除定时器( 自动加载) 无毛刺的相位修正PWM 频率发生器 10 位时钟预分频器 溢出和比较匹配中断源(TOV0 和OCF0) 允许外部32kHz 钟振作为时钟T/C(TCNT0);计数序列由T/C 控制寄存器 (TCCR0);输出比较寄存器(OCR0)为8位寄存器;中断请求信号位于定时器中断标志寄存器TIFR;定时器中断屏蔽寄存器TIMSK 双缓冲的输出比较寄存器OCR0 一直与T/C 的数值进行比较。比较的结果可用来产生PWM波,或在输出比较引脚OC0上产生变化频率的输出。比较匹配事件还将设置比较标志OCF0。此标志可以用来

8、产生输出比较中断请求。定时器/计数器1和3:16位的T/C 可以实现精确的程序定时(事件管理)、波形产生和信号测量。其主要特点如下 真正的16 位设计(即允许16 位的PWM) 3 个独立的输出比较单元 双缓冲的输出比较寄存器 一个输入比较单元 输入捕捉噪声抑制器 比较匹配发生时清除寄存器(自动重载) 无毛刺的相位修正PWM 可变的PWM 周期 频率发生器 外部事件计数器 10 个独立的中断源(TOV1、OCF1A、 OCF1B、 OCF1C、 ICF1、 TOV3、 OCF3A、 OCF3B、OCF3C 和ICF3)使用IAR调试注意事项使用IAR调试时必须注意在下图linker选项中的fo

9、rmat中勾选第一个,如图所示。IIC(TWI)此笔记中介绍的两款AVR的集成外设中都有IIC(TWI)集成模块TWI是公司自己开发的,其实和IIC类似,这里简要介绍一下,具体还要参考相关器件的手册所有在TWI 总线上传送的地址包均为 9 位,包括 7 位地址位、1 位READ/WRITE 控制位与1 位应答位。如果READ/WRITE 为1,则执行读操作;否则执行写操作。从机被寻址后,必须在第九个SCL (ACK) 周期通过拉低SDA 作出应答。若该从机忙或有其它原因无法响应主机,则应该在ACK 周期保持SDA 为高。然后主机可以发出STOP 状态或REPEATED START 状态重新开始

10、发送。地址包包括从机地址与分别称为SLA+R 或SLA+W 的READ 或WRITE 位。地址字节的MSB 首先被发送。从机地址由设计者自由分配,但需要保留地址0000 000作为广播地址。当发送广播呼叫时,所有的从机应在ACK 周期通过拉低SDA 作出应答。当主机需要发送相同的信息给多个从机时可以使用广播功能。当Write 位在广播呼叫之后发送,所有的从机通过在ACK 周期通过拉低SDA 作出响应。所有的从机接收到紧跟的数据包。注意在整体访问中发送Read 位没有意义,因为如果几个从机发送不同的数据会带来总线冲突。所有形如1111 xxx 格式的地址都需要保留,以便将来使用。TWI 协议允许

11、总线上由多个主机。特别要注意的是即使有多个主机同时开始发送数据,也要保证发送正常进行。多主机系统中有两个问题: 算法必须只能允许一个主机完成传送。当其余主机发现它们失去选择权后应停止传送。这个选择过程称为仲裁。当竞争中的主机发现其仲裁失败,应立即转换到从机模式检测是否被获得总线控制权的的主机寻址。事实上多主机同时传送时不应该让从机检测到,即不许破坏数据在总线上的传送。 不同的主机可能使用不同的SCL 频率。为保证传送的一致性,必须设计一种同步主机时钟的方案。这会简化仲裁过程。总线的线与功能用来解决上述问题。将所有的主机时钟进行与操作,会生成组合的时钟,其高电平时间等于所有主机中最短的一个;低电

12、平时间则等于所有主机中最长的一个。所有的主机都监听SCL,使其可以有效地计算本身高/ 低电平与组合SCL 信号高/ 低电平的时间差异。下图是多主机SCL 的同步示意图:输出数据之后所有的主机都持续监听SDA 来实现仲裁。如果从SDA 读回的数值与主机输出的数值不匹配,该主机即失去仲裁。要注意只有当一个主机输出高电平的SDA,而其它主机输出为低,该主机才会失去仲裁,并立即转为从机模式,检测是否被胜出的主机寻址。失去仲裁的主机必须将SDA 置高,但在当前的数据或地址包结束之前还可以产生时钟信号。仲裁将会持续到系统只有一个主机。这可能会占用许多比特。如果几个主机对相同的从机寻址,仲裁将会持续到数据包

13、。注意不允许在以下情况进行仲裁: 一个REPEATED START 状态与一个数据位。 一个STOP 状态与一个数据位。 一个REPEATED START 状态与一个STOP 状态。应用软件应考虑上述情况,保证不会出现这些非法仲裁状态。这意味着在多主机系统中,所有的数据传输必须由相同的SLA+R/W 与数据包组合组成。换句话说:所有的传送必须包含相同数目的数据包,否则仲裁结果无法定义。TWI模块介绍:SCL 与SDA为MCU的 TWI接口引脚。引脚的输出驱动器包含一个波形斜率限制器以满足TWI 规范。引脚的输入部分包括尖峰抑制单元以去除小于50 ns 的毛刺。当相应的端口设置为SCL 与SDA

14、 引脚时,可以使能I/O 口内部的上拉电阻,这样可省掉外部的上拉电阻。TWI工作于主机模式时,比特率发生器控制时钟信号SCL的周期。具体由TWI状态寄存器TWSR的预分频系数以及比特率寄存器TWBR设定。当TWI工作在从机模式时,不需要对比特率或预分频进行设定,但从机的CPU 时钟频率必须大于TWI 时钟线SCL 频率的16倍。注意,从机可能会延长SCL 低电平的时间,从而降低TWI 总线的平均时钟周期。SCL 的频率根据以下的公式产生: TWBR = TWI比特率寄存器的数值 TWPS = TWI 状态寄存器预分频的数值Note: TWI 工作在主机模式时,TWBR 值应该不小于10。否则主

15、机会在SDA 与 SCL 产生错误输作为提示信号。问题出现于TWI 工作在主机模式下,向从机发送Start + SLA + R/W 的时候( 不需要真的有从机与总线连接)。注意:TWCR中的bit7:TWINT 标志位:当TWI 完成当前工作,希望应用程序介入时TWINT 置位。若SREG 的I 标志以及TWCR寄存器的TWIE 标志也置位,则MCU 执行TWI中断例程。当TWINT置位时, SCL 信号的低电平被延长。TWINT 标志的清零必须通过软件写1”来完成。执行中断时硬件不会自动将其改写为0”。要注意的是,只要这一位被清零, TWI 立即开始工作。因此,在清零TWINT 之前一定要首

16、先完成对地址寄存器TWAR,状态寄存器TWSR,以及数据寄存器TWDR 的访问。使用TWI的总结(参考ATmega128使用手册) 当TWI 完成一次操作并等待反馈时,TWINT 标志置位。直到TWINT 清零,时钟线SCL 才会拉低。 TWINT标志置位时,用户必须用与下一个TWI总线周期相关的值更新TWI寄存器。例如, TWDR 寄存器必须载入下一个总线周期中要发送的值。 当所有的TWI 寄存器得到更新,而且其它挂起的应用程序也已经结束, TWCR 被写入数据。写 TWCR 时, TWINT 位应置位。对TWINT 写1”清除此标志。TWI将开始执行由TWCR 设定的操作。o8515.h头

17、文件#ifndef _io8515_h#define _io8515_h#warning This header file may not be current. Please use io8515v.h instead/* Converted from Atmel provided header file for * ImageCraft ICCAVR compiler */* Analog Comparator Control and Status Register */#define ACSR (*(volatile unsigned char *)0x28)/* UART Baud R

18、ate Register */#define UBRR (*(volatile unsigned char *)0x29)/* UART Control Register */#define UCR (*(volatile unsigned char *)0x2A)/* UART Status Register */#define USR (*(volatile unsigned char *)0x2B)/* UART I/O Data Register */#define UDR (*(volatile unsigned char *)0x2C)/* SPI Control Register

19、 */#define SPCR (*(volatile unsigned char *)0x2D)/* SPI Status Register */#define SPSR (*(volatile unsigned char *)0x2E)/* SPI I/O Data Register */#define SPDR (*(volatile unsigned char *)0x2F)/* Input Pins, Port D */#define PIND (*(volatile unsigned char *)0x30)/* Data Direction Register, Port D */

20、#define DDRD (*(volatile unsigned char *)0x31)/* Data Register, Port D */#define PORTD (*(volatile unsigned char *)0x32)/* Input Pins, Port C */#define PINC (*(volatile unsigned char *)0x33)/* Data Direction Register, Port C */#define DDRC (*(volatile unsigned char *)0x34)/* Data Register, Port C */

21、#define PORTC (*(volatile unsigned char *)0x35)/* Input Pins, Port B */#define PINB (*(volatile unsigned char *)0x36)/* Data Direction Register, Port B */#define DDRB (*(volatile unsigned char *)0x37)/* Data Register, Port B */#define PORTB (*(volatile unsigned char *)0x38)/* Input Pins, Port A */#d

22、efine PINA (*(volatile unsigned char *)0x39)/* Data Direction Register, Port A */#define DDRA (*(volatile unsigned char *)0x3A)/* Data Register, Port A */#define PORTA (*(volatile unsigned char *)0x3B)/* EEPROM Control Register */#define EECR (*(volatile unsigned char *)0x3C)/* EEPROM Data Register

23、*/#define EEDR (*(volatile unsigned char *)0x3D)/* EEPROM Address Register */#define EEAR (*(volatile unsigned int *)0x3E)#define EEARL (*(volatile unsigned char *)0x3E)#define EEARH (*(volatile unsigned char *)0x3F)/* Watchdog Timer Control Register */#define WDTCR (*(volatile unsigned char *)0x41)

24、/* T/C 1 Input Capture Register */#define ICR1 (*(volatile unsigned int *)0x44)#define ICR1L (*(volatile unsigned char *)0x44)#define ICR1H (*(volatile unsigned char *)0x45)/* Timer/Counter1 Output Compare Register B */#define OCR1B (*(volatile unsigned int *)0x48)#define OCR1BL (*(volatile unsigned

25、 char *)0x48)#define OCR1BH (*(volatile unsigned char *)0x49)/* Timer/Counter1 Output Compare Register A */#define OCR1A (*(volatile unsigned int *)0x4A)#define OCR1AL (*(volatile unsigned char *)0x4A)#define OCR1AH (*(volatile unsigned char *)0x4B)/* Timer/Counter 1 */#define TCNT1 (*(volatile unsi

26、gned int *)0x4C)#define TCNT1L (*(volatile unsigned char *)0x4C)#define TCNT1H (*(volatile unsigned char *)0x4D)/* Timer/Counter 1 Control and Status Register */#define TCCR1B (*(volatile unsigned char *)0x4E)/* Timer/Counter 1 Control Register */#define TCCR1A (*(volatile unsigned char *)0x4F)/* Ti

27、mer/Counter 0 */#define TCNT0 (*(volatile unsigned char *)0x52)/* Timer/Counter 0 Control Register */#define TCCR0 (*(volatile unsigned char *)0x53)/* MCU general Control Register */#define MCUCR (*(volatile unsigned char *)0x55)/* Timer/Counter Interrupt Flag register */#define TIFR (*(volatile uns

28、igned char *)0x58)/* Timer/Counter Interrupt MaSK register */#define TIMSK (*(volatile unsigned char *)0x59)/* General Interrupt Flag Register */#define GIFR (*(volatile unsigned char *)0x5A)/* General Interrupt MaSK register */#define GIMSK (*(volatile unsigned char *)0x5B)/* Stack Pointer */#defin

29、e SP (*(volatile unsigned int *)0x5D)#define SPL (*(volatile unsigned char *)0x5D)#define SPH (*(volatile unsigned char *)0x5E)/* Status REGister */#define SREG (*(volatile unsigned char *)0x5F)/* General Interrupt MaSK register */ #define INT1 7#define INT0 6/* General Interrupt Flag Register */#de

30、fine INTF1 7#define INTF0 6/* Timer/Counter Interrupt MaSK register */#define TOIE1 7#define OCIE1A 6#define OCIE1B 5#define TICIE1 3#define TOIE0 1/* Timer/Counter Interrupt Flag register */#define TOV1 7#define OCF1A 6#define OCF1B 5#define ICF1 3#define TOV0 1/* MCU general Control Register */ #define SRE 7#define SRW 6#define SE 5#define SM 4#define ISC11 3#define ISC10 2#define ISC01 1#define ISC00 0/* Timer/Counter 0 Control Register */#defin

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1