了解单片机最小系统;
了解keil软件操作,程序下载及调试方法;
掌握单片机外部电路使用;
掌握键盘和数码管显示编程方法;
应用单片机开发板进行实验开发;
AT89S51采用40引脚双列直插封装(DIP)形式,内部由CPU,4kB的ROM,256 B的RAM,2个16b的定时/计数器TO和T1,4个8 b的工/O端I:IP0,P1,P2,P3,一个全双功串行通信口等组成。特别是该系列单片机片内的Flash可编程、可擦除只读存储器(E~PROM),使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用。AT89S51提供了高度灵活和低成本的解决办法。充分利用他的片内资源,即可在较少外围电路的情况下构成功能完善的超声波测距系统。
2、STC89C52单片机功能及特点
STC89C52是由8K可反复擦写Flash ROM,32个双向I/O口,256x8bit内部RAM,3个16位可编程定时/计数器中断,时钟频率0-24MHz,2个串行中断,可编程UART串行通道,2个外部中断源,共6个中断源,2个读写中断口线,3级加密位,低功耗空闲和掉电模式,软件设置睡眠和唤醒功能。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
1、复位电路
在电路中,使用电阻给电容充电,使电容的电压缓慢上升一直到VCC,在还没有到VCC时,芯片复位脚近似低电平,但是芯片复位,接近VCC时,芯片复位脚近高电平,导致芯片停止复位,此时复位完成,整个电路循环运行.这个电路就叫做复位电路。开关复位电路如上图所示。
在电路上电时候或电压波动不稳定的时候,当给单片机上电那一瞬间,电压有在几微秒内(有的是几毫秒内)不是直接跳变到5V的而是一个直线上升的阶段,这时候,单片机不能正常工作,需要复位电路给它延时以等到电压稳定。这叫上电复位。
图1
2、晶振电路
晶振使用12MHZ。时钟周期是机器周期的12倍,机器周期是晶振频率的倒数,1/12MHz = 1/12us那么时钟周期就是12*(1/12us)=1us。单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片机的一切指令的执行都是建立在单片机晶振提供的时钟频率。晶振的两端并联上合适的电容它就会组成并联谐振电路。这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,也就是晶振电路。
图2
3、键盘和中断
键盘扫描原理:
检测时,先送一列为低电平,其余几列全为高电平,然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电平,则我们便可确认当前被按下的键是哪一行哪一列的,用同样的方法轮流送各列一次低电平,轮流检测一次各行是否变成低电平,这样即可检测完所有的按键,当有键被按下时便可判断出按下的键是哪一个键。
图3
中断原理:
⑴ 当单片微机内部或外部有中断申请时,CPU能及时响应中断,停下正在执行的任务,转去处理中断服务子程序,中断服务处理后能回到原断点处继续处理原先的任务;
⑵ 当有多个中断源同时申请中断时,应能先响应优先级高的中断源,实现中断优先级的控制;
⑶ 当低优先级中断源正在享用中断服务时,若这时优先级比它高的中断源也申请中断,要求能停下低优先级中断源的服务程序转去执行更高优先级中断源的服务程序,实现中断嵌套,并能逐级正确返回原断点处。
4、数码管
静态显示驱动原理:
静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O口进行驱动。静态驱动的优点就是编程简单,显示亮度高,缺点是占用I/O口多。实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
动态显示驱动原理:
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
图4
本软件不需要安装,只要直接点击这个图标即可。
MCU Type 选择STC89C52RC 将生成的文件Open File 然后我的电脑点击右键找到管理设备管理器端口然后看显示的是哪个COM口。最后点击Download 单片机的开关在显示连接时再打开。
2.2Keil软件
点开图标UV3;
点击add close即可在界面上编译即可。
并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。
串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。
串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。
异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。
异步通信的数据格式 :
异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。
同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。
2、定时器
定时/计数器的工作原理:
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;
如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
GATE:门控位。
C/T:定时/计数模式选择位。
M1M0:工作方式设置位。
TF1(TCON.7):T1溢出中断请求标志位。
TR1(TCON.6):T1运行控制位。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
TR0(TCON.4):T0运行控制位,其功能与TR1类同。
3、中断
一、中断的概念
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。
MCS-51单片机的中断系统结构
引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。
80C51的中断系统有5个中断源(8052有 6个) ,2个优先级,可实现二级中断嵌套 。
TCON的中断标志
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
SCON的中断标志
RI(SCON.0),串行口接收中断标志位。
TI(SCON.1),串行口发送中断标志位。
中断允许控制
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断0允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA (IE.7), CPU中断允许(总允许)位。
中断优先级控制
PX0(IP.0),外部中断0优先级设定位;
PT0(IP.1),定时/计数器T0优先级设定位;
PX1(IP.2),外部中断0优先级设定位;
PT1(IP.3),定时/计数器T1优先级设定位;
PS (IP.4),串行口优先级设定位;
PT2 (IP.5) ,定时/计数器T2优先级设定位。
数码管
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起。其原理图如下。
图3-1数码管图
其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。可以看出两个编码的各位正好相反。
2.DS1302的结构和工作原理
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
2.1 引脚功能及结构
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。
2.2数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
2.4 DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。
此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
编程思想
1.数据输出
从P0口输出段选码,从P1口输出位选码,数码管就会显示出数字来。
2.计时功能的实现与中断服务程序
时间的运行依靠定时中断子程序对时钟单元数值为进行进位调整来实现的。计数器T0打开后,进入计时,满50ms后,重装定时,中断一次。中断二十次后,满一秒进位,满60秒后即为1分钟,分钟单位进位,60分到了后,时单位进位,24小时满后,清0;通过扫描程序送数码管显示出来,实现时钟计时功能。
图3-1 电子时钟软件流程图
这几天的实习分为两大部分,前几天进行单片机的焊接,之后老师布置作业,进行编程调试,最后进行检查。在对AT89C52单片机焊接和调试过程中,我学到了很多东西,无论是在单片机理论方面还是在电子器件焊接方面都取得了很大的进步。
在单片机焊接过程中注意以下几点:
1、注意电解电容、发光二极管、蜂鸣器的正负极性不能接反、三者均是长的管脚接正极、短的管脚接负极,如接反轻则烧毁元气件,重则发生轻微爆炸。
2、三极管8550的E、B、C、注意接法,板子上面有相应的图形形状。按照那个图形焊接。
3、焊接元气件的过程之中焊接时间应在2-4秒。焊接时间不宜过长,否则不仅会烧毁元气件、而且易使焊点容易脆裂
4、电阻焊接过程中注意相应的阻值对应,不要焊错。否则影响相应的电流大小。
5、排阻焊接过程之中公共端应该接VCC、其余管脚为相应的独立端。
6、ISP插槽应该注意方向。缺口对应板子的外面、如果接反下载线将不能接好。
7、数码管的焊接应该是有小数点的一侧在下面、接反影响数码管的显示。
焊接的顺序如下:应该先焊器件高度小的,再焊高度大的。
单片机主要包括AT89C52芯片,数码管,蜂鸣器,发光二极管,按键,12864,1206,红外接收,24c04,18b20温度传感器。
在实现某些功能时要对单片机引脚,内部结构,寄存器和原理有一定的了解和感官认识,它是怎样工作的,能干什么?单片机是一门应用性和实践性很强的学科,要是一段时间不接触就会把学会的东西忘记,因此要经常制作一些小东西,巩固单片机的一些知识点。
[1]郭天祥 51单片机C语言教程2009
[2] 华成英,童诗白 模拟电子技术基础 2006
[3] 闫石 数字电子技术基础 2006
[4] 谢自美 电子线路设计 1992
[5] 何利民 单片机应用系统设计 1993
[6] 付家才 单片机工程时间技术 2004.3
[7] 朱定华 单片机原理及接口技术 2002.11
[8] 刘湘涛 江世明 单片机原理与应用 2006
附录2系统主要程序
#include< reg52.h > /////////////////////////////////////////////////
#define uchar unsigned char
#define uint unsigned int
/////////////////////////////////////////////////
uint miaod,miaog,fend,feng,shid,shig;
uint t,num,max,temp;
////////////////////////////////////////////////
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
uchar code wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//////////////////////////////////////////////////
void delay(uint z) //如果数码管有显示太快。可以开这个延时。
{
uint x,y;
for(x=z;x >0;x--)
for(y=100;y >0;y--);
}
////////////////////////////////////////////////
void display(uchar shig,uchar shid,uchar feng,uchar fend,uchar miaog,uchar miaod)
{
P1=0X00; //消隐,防止余晖
shig=temp/10;
shid=temp%10;
feng=max/10;
fend=max%10;
miaog=num/10;
miaod=num%10;
P1=wela[0];
P0=table[miaod];
delay(2);
P1=wela[1];
P0=table[miaog];
delay(2);
P1=wela[2];
P0=0xbf;
delay(2);
P1=wela[3];
P0=table[fend];
delay(2);
P1=wela[4];
P0=table[feng];
delay(2);
P1=wela[5];
P0=0xbf;
delay(2);
P1=wela[6];
P0=table[shid];
delay(2);
P1=wela[7];
P0=table[shig];
delay(2);
}
void init()
{
TMOD=0x01;
TH0=(65535-45872)/256;
TL0=(65535-45872)%256;
ET0=1;
TR0=1;
EA=1;
num=0;
}
/*void delay(uint z) //如果数码管有显示太快。可以开这个延时。
{
uint x,y;
for(x=z;x >0;x--)
for(y=100;y >0;y--);
}*/
void main()
{
init();
while(1)
{
display(shig,shid,feng,fend,miaog,miaod);
}
}
void time0() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
t++;
if(t==20)
{
t=0;
num++;
if(num==60)
{
num=0;
max++;
if(max==60)
{
max=0;
temp++;
if(temp==24)
temp=0;
}
}
}
}
全部0条评论
快来发表一下你的评论吧 !