AVR单片机嵌入式系统入门作业模板Word格式文档下载.docx
- 文档编号:21533532
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:12
- 大小:219.26KB
AVR单片机嵌入式系统入门作业模板Word格式文档下载.docx
《AVR单片机嵌入式系统入门作业模板Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《AVR单片机嵌入式系统入门作业模板Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
ATmega16是基于增强的AVRRISC结构的低功耗8位CMOS微控制器[1]。
由于其先进的指令集以及单时钟周期指令执行时间,ATmega16的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。
ATmega16AVR内核具有丰富的指令集和32个通用工作寄存器。
所有的寄存器都直接与算逻单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。
这种结构大大提高了代码效率,并且具有比普通的CISC微控制器最高至10倍的数据吞吐率。
ATmega16有如下特点:
16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512字节EEPROM,1K字节SRAM,32个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP封装)的ADC,具有片内振荡器的可编程看门狗定时器,一个SPI串行端口,以及六个可以通过软件进行选择的省电模式。
工作于空闲模式时CPU停止工作,而USART、两线接口、A/D转换器、SRAM、T/C、SPI端口以及中断系统继续工作;
掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;
在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态;
ADC噪声抑制模式时终止CPU和除了异步定时器与ADC以外所有I/O模块的工作,以降低ADC转换时的开关噪声;
Standby模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;
扩展Standby模式下则允许振荡器和异步定时器继续工作。
为了获得最高的性能以及并行性,AVR采用了Harvard结构[2],具有独立的数据和程序总线。
程序存储器里的指令通过一级流水线运行。
CPU在执行一条指令的同时读取下一条指令(在本文称为预取)。
这个概念实现了指令的单时钟周期运行。
程序存储器是可以在线编程的FLASH。
快速访问寄存器文件包括32个8位通用工作寄存器,访问时间为一个时钟周期。
从而实现了单时钟周期的ALU操作。
在典型的ALU操作中,两个位于寄存器文件中的操作数同时被访问,然后执行运算,结果再被送回到寄存器文件。
整个过程仅需一个时钟周期。
AVR存储器空间为线性的平面结构。
AVR有一个灵活的中断模块。
控制寄存器位于I/O空间。
状态寄存器里有全局中断使能位。
每个中断在中断向量表里都有独立的中断向量。
各个中断的优先级与其在中断向量表的位置有关,中断向量地址越低,优先级越高。
I/O存储器空间包含64个可以直接寻址的地址,作为CPU外设的控制寄存器、SPI,以及其他I/O功能。
映射到数据空间即为寄存器文件之后的地址0x20-0x5F。
数码管的原理
数码管按段数分为七段数码[9]管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);
按能显示多少个“8”可分为1位、2位、4位等等数码管;
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
数码管的驱动方式
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
(1)静态显示驱动:
静态驱动也称直流驱动[9]。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×
8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:
),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
(2)动态显示驱动:
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"
a,b,c,d,e,f,g,dp"
的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
数码管参数
8字高度:
8字上沿与下沿的距离。
比外型高度小。
通常用英寸来表示。
范围一般为0.25-20英寸。
长*宽*高:
长——数码管正放时,水平方向的长度;
宽——数码管正放时,垂直方向上的长度;
高——数码管的厚度。
时钟点:
四位数码管中,第二位8与第三位8字中间的二个点。
一般用于显示时钟中的秒。
恒流驱动与非恒流驱动对数码管的影响
(1)显示效果:
由于发光二极管基本上属于电流敏感器件[4],其正向压降的分散性很大,并且还与温度有关,为了保证数码管具有良好的亮度均匀度,就需要使其具有恒定的工作电流,且不能受温度及其它因素的影响。
另外,当温度变化时驱动芯片还要能够自动调节输出电流的大小以实现色差平衡温度补偿。
(2)安全性:
即使是短时间的电流过载也可能对发光管造成永久性的损坏,采用恒流驱动电路后可防止由于电流故障所引起的数码管的大面积损坏。
另外,我们所采用的超大规模集成电路还具有级联延时开关特性,可防止反向尖峰电压对发光二极管的损害。
超大规模集成电路还具有热保护功能,当任何一片的温度超过一定值时可自动关断,并且可在控制室内看到故障显示。
数码管引脚的测量
找公共共阴和公共共阳首先,我们找个电源(3到5伏)和1个1K(几百的也欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的找到一个就够了,,然后用GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。
相反用VCC不动,GND逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阳的。
也可以直接用数字万用表,红表笔是电源的正极,黑表笔是电源的负极。
七段数码管的结构及应用
数码管常识:
a、段及小数点上加限流电阻b、使用电压:
段:
根据发光颜色决定;
小数点:
根据发光颜色决定c、使用电流:
静态:
总电流80mA(每段10mA);
动态:
平均电流4-5mA峰值电流100mA上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。
DS1302的结构及工作原理
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×
8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送[20]。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
DS1302的控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;
位5至位1指示操作单元的地址;
最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;
另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
电路原理图:
单片机编程代码:
constPosition[]={0xFE,0XFD,0XFB,0XF7};
//位选
constLed[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管0~9
voidTime_Disbuffer()//显示缓冲
{
disbuff[0]=A%10;
disbuff[1]=A/10;
disbuff[2]=B%10;
disbuff[3]=B/10;
}
#pragmainterrupt_handlertime0:
20//T0比较匹配中断
voidtime0(void)
{
Time_Disbuffer();
if(++posit>
3)posit=0;
PORTA=0X00;
//消隐
PORTA=Led[disbuff[posit]];
//数据
if(posit==2)PORTA=Led[disbuff[posit]]|0x80;
PORTC=Position[posit];
//位选
DelayUS(5);
//延时一段时间保持数码管亮度
}
PORTA=0X00;
消隐
DelayUS(5)延时以保证数码管的亮度
voidDS1302_Write(ucharaddr,uchardata)
uchari;
DS1302_IO_OUT;
//配置IO为输出
CLR_DS1302_REST;
//清复位,停止所有操作
CLR_DS1302_CLK;
//清时钟,准备操作
SET_DS1302_REST;
//置复位,开始操作
for(i=8;
i>
0;
i--)//此循环写入地址码
{if(addr&
0x01)
SET_DS1302_IO;
//当前位为1,置数据位
else
CLR_DS1302_IO;
//当前位为0,清数据位
}
SET_DS1302_CLK;
//产生时钟脉冲,写入数据
addr>
>
=1;
//移位,准备写入下1位
i--)//此循环写入数据码
if(data&
data>
DS1302_IO_IN;
//清输出状态
//从1302中读出数据:
//入口:
addR为读数据所在地址
//返回:
读出的数据data
charDS1302_Read(ucharaddr)
uchardata,i;
}//当前位为0,清数据位
//端口输入
i--)//此循环读出1302的数据
if(IN_DS1302_IO)
data|=0x80;
return(data);
//检查1302状态
ucharCheck_DS1302(void)
DS1302_Write(DS1302_Control,0x80);
if(DS1302_Read(DS1302_Control)==0x80)return1;
return0;
//向1302中写入时钟数据
voidDS1302_Write_Time(void)
DS1302_Write(DS1302_Control,0x00);
//关闭写保护
DS1302_Write(DS1302_Sec_Write,0x80);
//暂停
DS1302_Write(DS1302_Year_Write,time[1]);
//年
DS1302_Write(DS1302_Month_Write,time[2]);
//月
DS1302_Write(DS1302_Day_Write,time[3]);
//日
DS1302_Write(DS1302_Week_Write,time[4]);
//周
DS1302_Write(DS1302_Hour_Write,time[5]);
//时
DS1302_Write(DS1302_Min_Write,time[6]);
//分
DS1302_Write(DS1302_Sec_Write,time[7]);
//秒
//打开写保护
//从1302中读出当前时钟
voidDS1302_Read_Time(void)
time[1]=DS1302_Read(DS1302_Year_Read);
time[2]=DS1302_Read(DS1302_Month_Read);
time[3]=DS1302_Read(DS1302_Day_Read);
time[4]=DS1302_Read(DS1302_Week_Read);
time[5]=DS1302_Read(DS1302_Hour_Read);
time[6]=DS1302_Read(DS1302_Min_Read);
time[7]=DS1302_Read(DS1302_Sec_Read);
//BCD码到二进制的调整
second=((time[7]&
0x70)>
4)*10+(time[7]&
0x0f);
minute=((time[6]&
4)*10+(time[6]&
hour=((time[5]&
0x30)>
4)*10+(time[5]&
day=((time[3]&
4)*10+(time[3]&
month=((time[2]&
0x10)>
4)*10+(time[2]&
year=((time[1]&
4)*10+(time[1]&
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AVR 单片机 嵌入式 系统 入门 作业 模板