AVR单片机一些学习笔记

发布者:暗里著迷最新更新时间:2019-11-14 来源: 51hei关键字:AVR  单片机  学习笔记 手机看文章 扫描二维码
随时随地手机看文章

下面是自己在学习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 |= (1<<2)D2置1,PORTB&= ~(1<<6)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支持四种形式的中断触发:上升沿,下降沿,任意电平变化,低电平(不带中断标志位,低电平并不影响INTF0和INTF1的值(保持为0))。INT2只支持异步的上升沿和下降沿触发(常用作唤醒MCU功能)。


35、 中断初始化步骤:配置中断触发类型(MCUCR,MCUCSR),使能对应的中断(GICR),清除对应的中断标志位(GIFR),使能全局中断(asm(“SEI”))。AVR STUDIO6中的中断写法:SIGNAL(xx){}(x为中断向量号)或者ISR(xx){}。


36、 T/C0和T/C2可产生PWM,频率发生器,外部事件计数器(仅T/C0),10位时钟预分频器,溢出和比较匹配中断源,允许用32.768kHz晶体作为独立的计数时钟源(仅T/C2)。


37、 时钟源和51单片机差不多:(CS[2:0]共八种选择),停止计数,上升沿或下降沿,10位预分频器(1/1,1/8,1/64,1/256,1/1024)。


38、 TCNT0(8位)寄存器用来存放计数数值,如果在计数器运行期间写入数值,那么在下一个定时时钟周期中会阻塞比较匹配(丢失一次TCNT0和OCR0的匹配操作)。

39、 OCR0中的数据会一直和TCNT0中的数值进行比较,如果匹配,将产生一个比较匹配的中断申请或者改变OC0的输出逻辑电平。


40、 TIMSK中的OCIE0(OutputCompare Interrupt Enable),TOIE(Timer Overflow Interrupt Enable)分别为比较匹配中断允许标志位和溢出中断允许位,当I被置位时,满足条件即可触发对应的中断。


41、 TIFR中的OCF0(OutputCompare Flag)和TOV0(Timer Overflow)分别为比较匹配标志位和定时器溢出标志位。


42、 TCCR中的WGM[1:0]决定T/C0的四种工作方式:普通模式,比较匹配时定时器清0,两种PWM模式。COM[1:0]比较匹配输出方式的作用取决于T/C0的工作方式。普通模式(WGM[1:0]=0):计数到0xFF会产生溢出中断,TOV0置1。比较匹配清0计数器CTC模式(WGM[1:0]=2):f=f(IO)/(2N(1+OCR0)),TCNT0和OCR0匹配,匹配后TCNT0清0重新计数,同时置OCF0为1,便于产生中断。


在中断中改变OCR0的值,在OC0中可以输出可变的高低电平信号。快速PWM模式(WGM[1:0]=3):f=f(IO)/(256N),TCNT0从0计数到0xFF,然后重新开始计数,如果匹配OCR0则根据COM[1:0]中的设置值分别置位或者清0OC0,以此来输出PWM波形。相位可调PWM模式(WGM[1:0]=1):双向计数器,所以最高PWM频率比快速PWM模式慢了一半。


43、 T2定时器的分频系数与T0不同,注意区别。


44、 T1定时器在读取数据时,先读低八位,再读高八位。在写入数据时,先写高八位,再写低八位。就像对高位压栈一样。


45、 由于T1可以修改计数器的上限值(TOP),所以可以产生频率可变的PWM波形,而T0/T2定时器无法做到这一点。


46、 T1的工作模式由WGM1[3:0]决定,由此可以看出T1有16种工作模式。普通模式(WGM1[3:0]=0)。CTC模式(GWM1[3:0]=4或12)。快速PWM模式(GWM1[3:0]=5,6,7,14,15)有两路同时输出,OC1A,OC1B。


47、 T1输入捕捉功能:触发信号由ICP1输入或者又模拟比较器AC0输入。触发时,TCNT1的值被写入到ICR1中置位ICF1。此外,ICNC(Input Capture NoiseCanceler)为噪声抑制功能,实现原理就是延迟4个CK检测电平变化,如果连续4个CK不变,则认为是真正的触发。ICES(Input Capture Edge Select)为触发边缘的选择,0为下降沿,1为上升沿。


48、 模拟比较器(正极AIN0和负极AIN1),SFIOR(Special Funciton IO Register)中的ACME(Analog Comparator Multiplexer Enable)模拟比较多路使能,置1并且ADC失能,比较器负极接到ADC的多路开关。置0,比较器负极接到AIN1。


ACSR(AnalogComparator Control and Status Register)模拟比较器控制和状态寄存器。ACD(AnalogControl Disable)置1时,切断模拟比较器的开关。在改变设置时,应先失能ACIE,禁止产生模拟器比较中断。ACO(Analog Comparator Output)模拟比较器输出。ACIS[1:0](AnalogComparator Interrupt Select)模拟比较器中断模式选择。


49、 AVCC为ADC模块的独立电源。参考电源可选择片内2.56V,AVCC或者外部参考电源。


50、 ADMUX(ADC多路复用选择寄存器),ADLAR(ADC LeftAdjust Result)结果左对齐。ADCSRA(ADC控制和状态寄存器A),ADEN,ADC使能位。ADSC(ADC Start Conversion)开始转换位。ADATE(ADC Auto Trigger Enable)自动触发开始转换,信号源由SFIOR的ADTS位决定。ADPS[2:0]预分频选择位。


51、 如果AVREF接到外部电源,那么就不能使用内部参考电源。


52、 ADC模块在使能ADATE(自动触发转换)后,利用T0的溢出中断来触发开始转换,一定要开启T0的中断允许位(TOIE0),否则无法触发转换。


53、 一次正常的ADC转换过程需要13个采样时钟,假定ADC采样时钟频率为200kHZ,那么最高的采样频。率为200kHZ/13=15.384kHZ,所以由香农定理,被测信号的最高频率为7.7kHZ。


54、 通用同步/异步串行接收/发送器(Universal Synchronous and Asynchronous Serial Recevier andTransimitter)支持四种工作模式:普通异步模式、双倍速异步模式、主机同步模式和从机同步模式。UCSRC中的UMSEL(U Mode Select)位用于选择同步或异步模式。UCSRA中的U2X用于控制是否使用倍速模式。


55、 波特率计算公式:BAUD=fosc/(16(UBRR+1))。


56、 UCSRA中的UDRE(U Data Register Empty)置1时(数据寄存器为空),UDR才能够被写入,一旦被写入,硬件自动将其中的内容送到TXD上串行移出。RXD和TXD均可以产生相应的中断,并在进入中断后标志自动清0。


57、 由于UBRRH (U Baud Rate Register)和UCSRC的物理地址相同,只是在最高位URSEL的不同,而写操作和读操作的对象不同。当URSEL为0时,对象为UBRRH;当URSEL为1时,对象为UCSRC。(读UCSRC时,需要连续读两次才能得到结果,第一次读的是UBRRH的值)。


58、 USART的初始化包括:设置波特率,使能接收和发送器,设置帧格式。


数据发送:while(!(UCSRA& (1 << UDRE))); UDR = data;UDRE在UDR被写入值后被硬件自动清0,如果在UDR空中断没有对UDR赋值,那么UDRE没有清0,退出中断后会再次触发中断。但是TXC中断可以硬件自动清0TXC标志


数据接收:while(!(UCSRA & (1 << RXC)));data = UDR;RXC在UDR数据被读出后被硬件自动清0,所以在RXC中断时必须读取UDR,以清0RXC。或者手动清0RXC


TXD和RXD功能由TXEN和RXEN的设置来开启和关闭


59、 如果UCSRA中的FE,PE,DOR在RXC中断中需要读出进行错误检测,那么一定要先读UCSRA再读UDR


60、 串行外设接口(Serial Peripheral Interface,SPI.飞思卡尔公司提出),两线串行接口(Two-wireSerial Interface,TWI)。SPI一般有四根信号线:MOSI,MISO,SCLK,/SS.可以想象一下主机和从机从MOSI到MISO收尾相连形成环(本质就是串行移位呗~),当数据全部交换完毕后,主机拉高/SS,停止SPI传输。这就是为什么SPI比TWI(I2C)快的原因:因为数据是全双工,并且数据走不同的通道。


61、 SPI有四种工作模式,取决于同步时钟的极性(Clock Polariy)和同步时钟的相位(Clock Phase)2个参数。


62、 SPI的主机方式最高速率为(CK/2),从机方式最高速率为(CKI/4)

63、 数据寄存器SPDR。在读SPDR时,读取的是缓冲寄存器内容;写SPDR时,写到移位寄存器中。一旦将数据写入SPDR,硬件自动传输一次SPI通信,如果中断允许,则进入SPI中断。


64、 SPI速率一般为1MHZ,最高可达10MHZ


65、 TWI工作在被控模式时,CPU频率fcpuclock必须大于TWI时钟线SCL频率的16倍。SCL的频率: (在主机模式下,TWBR应大于10.另外特别需要注意的一点: 指的不是4的TWPS次方,应该是按照分频表格,将表格中的1,4,16,64替换 整体)


66、 TWINT中断标志位,当其被置位时,时钟线SCL被拉低,并且执行中断向量时,标志不会清0,只能靠手动软件清0。


67、 如果TWINT被置位,表示正在传送数据,此时如果写入TWDR,那么TWWC(写冲突)会被置位。也就是说当TWINT被置位时,TWDR应该保持稳定,这和I2C的协议是一致的。


68、 TWAR(地址寄存器)的高7位用于存储自己的地址,最后一位TWGCE(TWI General Call Recognition Enable)为地址匹配成功使能位。如果地址匹配成功,将会产生一次TWI中断


69、 在I2C的TWI寄存器设置中,不能使用|赋值,必须整体赋值


70、 CKOPT当系统频率较高时或者要求抗干扰能力强,设置为1。如果系统频率低,设置为0,这样可以减少电流的损耗。


71、 片内EEPROM,执行读操作时,CPU停止运行4个时钟周期。而在执行写操作时,CPU停止运行2个时钟周期。

关键字:AVR  单片机  学习笔记 引用地址:AVR单片机一些学习笔记

上一篇:avr单片机mega32之ADC程序
下一篇:avr单片机汇编参考程序

推荐阅读最新更新时间:2024-11-08 00:08

基于单片机SPI器件的串口控制
   0 引 言   串行外设接口(Serial Peripheral InteRFace,SPI)是一种高速同步串行输入/输出端口,近年来广泛应用于移位寄存器、D/A转换器、A/D转换器、串行E2PROM、LED显示驱动器等外部设备的扩展。SPI接口可以共享,便于组成带多个SPI接口器件的系统。其传送速率可编程,连接线少,具有良好的扩展性。    1 SPI接口介绍   SPI是摩托罗拉公司推出的一种同步串行通信接口,用于微处理器、微控制器和外围扩展芯片之间的串行连接,现已发展成为一种工业标准。目前,各半导体公司推出了大量的带有SPI接口的具有各种各样功能的芯片,如RAM,E2PROM,FLASH ROM,A/D转换器、D
[单片机]
一种基于单片机的实用在线式UPS电路详解
  UPS(UninterruptiblePowerSystem)交流 电源 越来越广泛地应用于国民经济的各个领域。本文将介绍一种实用的简单在线式UPS。    UPS电源 的基本结构   将220V电网电压经全桥整流提供直流是实际应用中最为广泛的变流方案,但会使电网产生严重畸变的非正弦电流而危害电网。较为理想的方法是采用功率因数校正措施。控制器采用功率因数校正控制芯片UC3855A/B。   市电-- 蓄电池 切换电路   它由两个迟滞比较器组成,市电经过整流,分压与由5V基准电压分压得到的电压相比较,输出接到51单片机4脚。   (1)当市电电压大于170V   51单片机当检测到4脚电平为高电平,市电工作指示灯亮起
[电源管理]
一种基于<font color='red'>单片机</font>的实用在线式UPS电路详解
DS18B20单片机数字温度计
①采用单片机设计电子温度计,选择适合的感温元件,温度测量范围-50℃~110℃; ②测量误差小于0.1℃; ③LED数码直读显示; 1.2总体方案分析 在单片机电路设计中,大多都是使用传感器,所以本次设计采用温度传感器DS18B20。整个系统由单片机控制,温度传感器采用DS18B20。DS18b20采用单总线方式与单片机相连.把采集到得温度信息传给单片机。单片机采集到的温度输出到四个数码管上进行显示。当四位数码管显示的温度超过上限值时可以实现报警功能。系统总体方案如图1-1所示。 图1-1 系统总体方案 2 电路设计2.1电路原理图 电路原理图如图2-1所示; 图2-1 电路原理图 2.2电路PCB图 电路PCB图底层
[单片机]
DS18B20<font color='red'>单片机</font>数字温度计
学习单片机的日记
经历了大一上学期我觉得大学其实好坏不在于学校而是在于个人,学校之间的差距只是在于可利用的教学资源以及环境,最重要的还是自己。个人觉得我大一要学的课程真正有用的不多,现在我是电子信息工程的一名大学生,大一所学课程有高数,大学物理,英语,体育,近代史,思修,大学物理实验,电路分析,C语言。呵呵,只有C语言,电路,高数,英语有用。其他科目我只是应付下考试,不会真心去学,因为没有兴趣。兴趣是最好的老师,没有它我觉得做什么事情都毫无意义,这就是我这个人的怪癖。利用所有闲下来的时间我准备学习单片机,单片机虽然是大二下学期的内容但我觉得它至关重要。 为什么我们要学习单片机呢?他是个什么东西呢?单片机就是一块集成芯片,但这块集成芯片具有一些
[单片机]
<font color='red'>学习</font><font color='red'>单片机</font>的日记
PC机与51系列单片机实现通信的一般方法和步骤
随着 单片机 和微机技术的不断发展,特别是网络技术在测控领域的广泛应用,由PC机和多台单片机构成的多机网络测控系统已成为单片机技术发展的一个方向。它结合了单片机在实时数据采集和微机对图形处理、显示的优点。同时,Windows环境下后台微机在数据库管理上具有明显的优势。二者结合,使得单片机的应用已不仅仅局限于传统意义上的自动监测或控制,而形成了向以网络为核心的分布式多点系统发展的趋势。本文主要介绍PC机与51系列单片机实现通信的一般方法和步骤。 硬件结构和单片机的通1S程序设计 单片机和PC机的串行通信一般采用RS-232、RS-422或B3-485总线标准接口,也有采用非标准的20nnJL电流环的。为保证通信的可靠
[单片机]
PC机与51系列<font color='red'>单片机</font>实现通信的一般方法和步骤
MSP430单片机各种寄存器总结(1)——CPU 寄存器
参考资料: 王宏波老师的PPT MSP430F6638用户手册 王宏波老师实验教程 第一章 CPU 寄存器 1.1 PC——程序计数器 取完指令后CPU根据该指令的字节数自动增量PC,因此20位的PC(R0)的值总是指向下一条要执行的指令。 PC总是指向偶地址(bit0=0) 1.2 SP——堆栈指针 CPU使用20位堆栈指针(SP,也称为R1)来存储子例程调用和中断的返回地址。 【作用】:保护现场和恢复现场。 它使用先进后出方案。 SP由用户初始化为RAM,并且始终与偶数地址对齐。 堆栈分两种: 向上增长,栈底占用较低地址,栈顶占用较高地址 : 8051 向下增长,栈底占用较高地址,栈顶占用较低地址: MS
[单片机]
MSP430<font color='red'>单片机</font>各种寄存器总结(1)——CPU 寄存器
基于单片机的温湿度采集系统的硬件设计
摘要: 采用AT89C2051 单片机为核心配置,以温湿度传感器SHT75、数码管显示、计算机监控系统等部件,通过单片机与智能传感器相连,采集并存储智能传感器的测量数据,并通过RS485 总线来实现PC 上位机与单片机控制模块半双工串行通信。微控制器AT89C2051 通过I2C 总线控制传感器的测量和数据回传,每次将采集到的5 组数据经过计算,修正及补偿后分别传送到PC 端存储和显示模块进行实时显示。经过实验测试得出结论:温度测量精度为±0.3 ℃,湿度测量精度为±2%RH,各项指标均达到了课题的设计要求。   利用AT89C2051 单片机强大的功能,同时结合智能传感器SHT75 测量温湿度有快速和使用简便等特点,设计了一
[工业控制]
基于<font color='red'>单片机</font>的温湿度采集系统的硬件设计
自制AVRISP下载型烧录器
  相对于使用一块74LS244的并行口ISP下载线,这款AVRISP的线路及原理稍为复杂。但它却有优点:串口下载性能比并口稳定,升级到3.6的固件后速度也很快,经测试16K程序8秒完成。另外,对于并口资源紧张的用户,也是一个很好的选择。
[单片机]
自制AVRISP下载型烧录器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved