微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AVR单片机一些学习笔记

AVR单片机一些学习笔记

时间:05-30 来源:互联网 点击:

下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。

1、 AVR单片机采用RISC架构,8051单片机采用CISC架构。前者速度为后者的2~4倍,为流水线操作指令。

2、 AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器。

3、 哈佛结构,131条机器指令。

4、 延迟开机功能。

5、 内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟。

6、 FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10位ADC+模拟比较器+JTAG。

7、 堆栈指针向下增长,51单片机向上增长。

8、 程序存储器按字来访问,擦除和写入以页为单位。

9、 复位时,所有的I/O口处于没有上拉电阻的输入状态(高阻)。

10、 没有中断优先级控制寄存器,由中断向量表的地址决定优先级(地址越低,优先级越高)。

11、 PORTB |= (12)D2置1,PORTB= ~(16)D6清零。

12、 FLASH分两段:引导程序段(BootProgram Section)+应用程序段(Application Program Section)。BPS中可以使用SPM指令实现IAP功能。

13、 中断向量表位于FLASH程序存储器的最前面。

14、 I/O空间为连续的64个I/O寄存器空间,在数据存储器空间的映射地址为$0020~$005F。访问I/O寄存器的两种方式:IN,OUT指令+对SRAM访问指令。

15、 单独的AVcc用于给PORTA的ADC做AREF。

16、 13位的程序计数器PC,正好满足16KB的寻址。

17、 AVR对片内SRAM的访问需要2个时钟周期。

19、 状态寄存器SREG:

I:全局中断使能位。置1,CPU可以响应中断;清0,CPU禁止响应中断。清0时,单独的中断触发控制的值保持不变。并且中断响应后,I由硬件清0(手动置1实现中断嵌套),由RETI置1再响应其他中断。

T:位复制存储。BLD,BST。可以将通用寄存器组中的任何一位复制到T中,反过来也可以。

H:半进位标志位。用于BCD的运算。

S:符号标志位。S=N⊕V。不管溢出与否(溢出后N的表示就不正确了!),但S总是能正确的表示计算结果的符号。

V:2的补码溢出标志位。溢出时,N取反才是真正的结果符号。

N:负数标志位。直接取自运算结果的最高位。

Z:零值标志位。运算结果为0,置1。

C:进/借位标志。

20、 MCUCSR可以查看复位原因。

21、 掉电检测(BOD)复位,2.7V阈值,具有迟滞效应(间隙特性??)

22、 在FLASH的$0000H存放的是一条JMP或者RJMP指令,用来跳转到正式代码入口。$0002H~0028H(针对中断向量为一个字的,如果中断向量为两个字$0002H~0050H)存放的是中断向量表,20个中断口算上第一个复位中断为21个>,主程序开始在$002AH。

23、 硬件开发工具:软件模拟仿真器,实时在板仿真器(ICE),实时在片仿真器(JTAG)。

24、 每组I/O口配置三个寄存器用来表征他们的状态:方向控制寄存器DDRx(Data Direction Register),数据寄存器PORTn,输入引脚寄存器PINx。

25、 DDRx=1,I/O口处于推挽输出工作方式,PORTn为1输出20mA电流,为0吸纳20mA电流。DDRx = 0,I/O口处于输入工作方式,将PINx中的电平读入到DB上(PORTn用来设置是否使用内部上拉电阻,1为使用,0为不使用)在SFIOR中有一位PUD,PUD=1全部I/O上拉电阻无效,PUD =0,上拉取决于PORTn的设置。

26、 使用I/O口时,一定要先配置I/O口。首先配置DDRx,确定I/O口是输入还是输出。根据实际情况,输入时需要配置是上拉还是下拉(上拉就是默认输入是高电平,下拉就是默认输入是低电平)。

27、 I/O口输入方式时,应该读取的是PINx的值。

28、 输出口操作:

PORTA |= (1

PORTA = ~(1 PORTAx) // 位置低

PORTA ^= (1

输入口操作:

PINA (1 PORTAx) // 位读取

29、 有三个外部中断(INT0,INT1,INT2),其中INT2只支持边缘触发

30、 满足中断条件,AVR硬件自动将相应的中断标志位置1,并且由硬件自动清除(仅对于部分中断有此功能,当然也可以手动软件清除,清除的方法是写1),硬件也同时自动清除I标志位(缺省不能进行中断嵌套,SEI将I置1,使能中断嵌套功能)。

31、 退出中断后,AVR至少要再执行一条指令后才能去响应其他被挂起的中断。

32、 中断响应至少需要4个CK才能开始运行中断向量表中的跳转指令(清I,清中断标志位,压栈PC,中断向量送入PC),至于要真正开始运行用户的代码,至少需要6~7个CK。中断返回RETI也需要4个CK(弹出PC,置SREG中的I为1)。

33、 在使能中断允许位之前,最好先将对应中断源的中断标志位清除,为了防止在使能时,会立马产生一次“多余”的中断。

34、 INT0,INT1支持四种形式的中断触发:上升沿,下降沿,任意电平变化,低电平(不带中断标志位,低电平并

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top