单片机.docx
- 文档编号:25460358
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:15
- 大小:90.77KB
单片机.docx
《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(15页珍藏版)》请在冰豆网上搜索。
单片机
目录
摘要I
1单片机概述1
1.1单片机类别1
1.2主要功能1
1.3定时\计数器的原理1
2设计的具体实现3
2.1系统概述3
2.2 单元电路设计与分析4
3软件设计框图5
4控制程序6
5电路的调试与安装10
5.1电路调试10
5.2电路安装10
6心得体会11
参考文献12
摘要
本次课程设计的题目是用定时器控制四个发光二极管的轮流显示,显示图案为D1,D4两灯亮,再是D2,D3两灯亮,接着D2,D3亮,随后D1,D4亮,最后全都亮。
显示的方式为相向、反向、整体闪烁交替,延时时间设定为100ms、200ms、300ms。
关键字:
发光二极管,闪烁交替,延时
1单片机概述
1.1单片机类别
51单片机是对目前所有兼容Intel8031指令系统的单片机的统称。
该系列单片机的始祖是Intel的8031单片机,后来随着Flashrom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。
目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。
51单片机是基础入门的一个单片机,还是应用最广泛的一种。
需要注意的是52系列的单片机一般不具备自编程能力。
当前常用的51系列单片机主要产品有:
*Intel的:
80C31、80C51、87C51,80C32、80C52、87C52等; *ATMEL的:
89C51、89C52、89C2051等; *Philips、华邦、Dallas、Siemens(Infineon)等公司的许多产品。
1.2主要功能
8位CPU·4kbytes程序存储器(ROM)(52为8K)·256bytes的数据存储器(RAM)(52有384bytes的RAM)·32条I/O口线·111条指令,大部分为单字节指令·21个专用寄存器·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)·一个全双工串行通信口·外部数据存储器寻址空间为64kB·外部程序存储器寻址空间为64kB·逻辑操作位寻址功能·双列直插40PinDIP封装·单一+5V电源供电。
CPU:
由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:
用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:
用以存放程序、一些原始数据和表格;I/O口:
四个8位并行I/O口,既可用作输入,也可用作输出;T/C:
两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式; 五个中断源的中断控制系统;一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最高振荡频率为12M。
1.3定时\计数器的原理
16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。
当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。
显然,定时器的定时时间与系统的振荡频率有关。
因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。
如果晶振为12MHz,则计数周期为:
T=1/(12×106)Hz×1/12=1μs这是最短的定时周期。
若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如8位、13位、16位等)。
当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。
计数器在每个机器周期的S5P2期间采样引脚输入电平。
若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。
此后的机器周期S3P1期间,新的计数值装入计数器。
所以检测一个由1至0的跳变需要两个机器周期,故外部事年的最高计数频率为振荡频率的1/24。
例如,如果选用12MHz晶振,则最高计数频率为0.5MHz。
虽然对外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。
当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计满溢出,才可能中断CPU当前操作。
CPU也可以重新设置定时器工作方式,以改变定时器的操作。
由此可见,定时器是单片机中效率高而且工作灵活的部件。
综上所述,我们已知定时器/计数器是一种可编程部件,所以在定时器/计数器开始工作之前,CPU必须将一些命令(称为控制字)写入定时/计数器。
将控制字写入定时/计数器的过程叫定时器/计数器初始化。
在初始化过程中,要将工作方式控制字写入方式寄存器,工作状态字(或相关位)写入控制寄存器,赋定时/计数初值。
下面我们就提出的控制字的格式及各位的主要功能与大家详细的讲解。
控制寄存器定时器/计数器T0和T1有2个控制寄存器-TMOD和TCON,它们分别用来设置各个定时器/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。
其中,TCON寄存器中另有4位用于中断系统。
2设计的具体实现
2.1系统概述
通过模式键来改变单片机的工作模式,进行程序控制,一共有八个模式。
LED等工作在不同的模式下,有不同的现象。
加速减速开关来控制灯泡的闪亮快慢。
复位电路用来初始化芯片的工作状态。
控制电路是整个电路的核心,主要由单片机来完成。
AT89S51的管脚如图所示。
单片机执行指令是在时钟脉冲控制下进行的。
因此单片机必须外接振荡器构成时钟电路才能正常工作。
另外,还应在单片机的RES端外接电阻电容构成复位电路,当单片机运行错误时可以给一个复位信号使其复位。
单片机对接口电路的控制是由软件向单片机的I/O口来实现的。
AT89S51单片机内部有两个定时/计数器,可以用其中一个定时/计数器来对时间进行计数,而另一个可以对显示器的显示延时进行定时并通过中断把相应的数据通过I/O口送给显示器显示。
同时通过对外部按键的状态判断来进行时间的调整。
2.2 单元电路设计与分析
1、时钟电路
单片机执行指令是在脉冲控制下进行的,因此时钟信号是单片机的基本工作条件。
时钟可以由内部和外部两种方式产生,本设计采用内部方式。
如图所示,在XTAL1和XTAL2引脚上外接定时元件。
定时元件通常采用振荡器和电容组成的并联谐振电路。
X1为振荡器,C1、C2为电容。
振荡的主要频率决定于晶振,电容对振荡频率起微调作用。
其中,晶振选择12MHz
2、复位电路
一个时钟周期为振荡周期的2倍,12个时钟周期构成一个机器周期。
在RES引脚上输入一个超过两个机器周期的高电平信号,单片机就可以复位。
时钟频率为12MHz,则有效的复位信号至少应保持2us以上。
下图为单片机的复位电路
3软件设计框图
4控制程序
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
#defineSpeed12//12MHz(注意更高就不能一次得到50ms定时了)
#defineTTTT50000//50ms
#defineTH1_Init_Val(65536-Speed*TTTT/12)/256
#defineTL1_Init_Val(65536-Speed*TTTT/12)%256
sbitL1=P2^0;
sbitL2=P2^1;
sbitL3=P2^2;
sbitL4=P2^3;
sbitL5=P2^4;
sbitL6=P2^5;
sbitL7=P2^6;
sbitL8=P2^7;
bitflag1s;
voidT1_Init()//定时器1初始化
{
TMOD=0x11;
TH1=TH1_Init_Val;
TL1=TL1_Init_Val;
ET1=1;
EA=1;
TR1=1;
}
//用定时器控制四个发光二极管的轮流显示,显示图案和延时时间可按设定的规律变化,
//要求显示的方式为相向、反向、整体闪烁交替,延时时间可设定为100ms、200ms、300ms。
voidLed_Run()
{
staticucharstep;
if(!
flag1s)return;//接收定时器“flag1s”消息,没到1s返回
flag1s=0;//1s到则开始工作
step++;
switch(step)//以1s为间隔进行顺序控制
{
case1:
P2=0XFF;
L8=0;
L5=0;
break;
case2:
P2=0XFF;
break;
case3:
P2=0XFF;
L7=0;
L6=0;
break;
case4:
P2=0XFF;
break;
case5:
P2=0XFF;
break;
case6:
P2=0XFF;
L7=0;
L6=0;
break;
case7:
;break;
case8:
P2=0XFF;
break;
case9:
;break;
case10:
P2=0XFF;
L8=0;
L5=0;
break;
case11:
;break;
case12:
P2=0XFF;
break;
case13:
P2=0XFF;
break;
case14:
P2=0XFF;
L8=0;
L7=0;
L6=0;
L5=0;
break;
case15:
;break;
case16:
;break;
case17:
P2=0XFF;
case18:
;break;
case19:
;break;
default:
step=0;
break;
}
}
voidmain()//主程序
{
T1_Init();
while
(1)
{
Led_Run();
}
}
voidISR_T1()interrupt3using2//定时器1中断服务程序50ms
{
staticucharcnt1s;
TH1=TH1_Init_Val;
TL1=TL1_Init_Val;//reloadval
if(++cnt1s>=2)
{
cnt1s=0;
flag1s=1;
}
}
5电路的调试与安装
5.1电路调试
本次采用Proteus软件进行调试,进行布线,如图:
图5.1仿真图
随后将写好的程序添加到Proteus里,然后运行,会看到本次课设应该出现的结果。
5.2电路安装
程序调试完成后直接运行,可看到4只LED灯的走马灯效果。
通过这个仿真可以直观地看到按键对程序的控制、走马灯运行的结果,效果非常好。
本课程设计中用到了单片机的I/0、定时器中断等硬件功能,同时涉及到软件查询定时、中断程序、按键控制、数码管动态显示等主要程序的设计方法。
程序开始先使P2口为低电平,熄灭各LED,随后系统进入循环,当规定时间到达时,则转到对应的程序处执行。
即出现D1,D4两灯亮,再是D2,D3两灯亮,接着D2,D3亮,随后D1,D4亮,最后全都亮的效果。
6心得体会
通过这次课程设计,加强了我们动手、思考和解决问题的能力。
在整个设计过程中,我们通过这个方案包括设计了一套程序。
在设计过程中,经常会遇到这样那样的情况,就是心里想老着这样的接法可以行得通,但实际编程时,总是实现不了,因此耗费在这上面的时间用去很多。
我觉得做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各种语句的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多程序的功能,并且对于其在C语言中的使用有了更多的认识。
这次课程设计使我对C语句有了更清楚的认识,一个程序就是C语言的综合运用。
虽说这几句话在平时考试里也知道,但真正通过编写程序来实现它又使自己对其理解加深了一层,并懂得了如何去用它。
再就是平时学习时也对中断不太熟悉,也不太重视,但经过本次课设我才懂得其实中断非常有用,许多地方的功能都是由它来完成的。
这些东西仅靠平时在课本上学的那够呢?
实验除了能加深我们对平时所学的知识的理解外还能促使我们去发现许多课本上没有的东西,通过本次课程设计也使我学到了许多平时不知道的东西,会用更多的方法去解决实际问题,所以我认为做课程设计是非常必要的。
参考文献
【1】肖洪兵.跟我学用单片机.北京:
北京航空航天大学出版社,2002.8
【2】何立民.单片机高级教程.第1版.北京:
北京航空航天大学出版社,2001
【3】赵晓安.MCS-51单片机原理及应用.天津:
天津大学出版社,2001.3
【4】李广第.单片机基础.第1版.北京:
北京航空航天大学出版社,1999
【5】徐惠民、安德宁.单片微型计算机原理接口与应用.第1版.北京:
北京邮电大学出版社,1996
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机