中国电子科技大学
实习总结报告
实习类型 生产实习
实习单位 电子科学学院实习基地
实习起止时间 201X年7月X日至202X年6月X日
指导教师
所在院(系) 电子科学学院
班 级 电信X班
学生姓名
学 号
202X年 6月 20日00-59 秒计时器
一、课题目的
单片微型计算机简称单片机(Microcontroller Unit),是典型的嵌入式微控制器,常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。它最早是被用在工业控制领域。
由于单片机在工业控制领域的广泛应用,单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中在很多方面单片机比专用处理器更适合应用于嵌入式系统,因此它得到了广泛的应用。事实上单片机是世界上数量最多处理器,随着单片机家族的发展壮大,单片机和专用处理器的发展便分道扬镳。
现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。 汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。
单片机作为应用最广泛的控制系统之一,具有体积小,易于控制,价格便宜,安全可靠等等优良的性能而被广泛的关注。无论是小到儿童玩具,到工业控制系统,大到航天航空系统的设计与操作之中,随处可见单片机的踪影。大学电子专业,电气专业,通信等专业开设单片机课程,对人才的培养无疑是有着重大的意义的。
本次课程设计的题目是00-59秒计时器设计,通过课程设计使学生更进一步掌握单片机原理与应用课程的有关知识,提高用C语言编程的能力,并将所学的内容加以综合;通过查阅资料,了解所学知识的应用情况;通过课程设计全面系统的了解单片机的设计方法及设计步骤,了解微机系统的基本组成及开发设计过程中需要注意的问题。
1、设计目的及意义
(1) 设计目的
1)掌握51系列单片机的基本硬件结构及工作原理;
2)掌握51系列单片机的汇编语言及基本程序设计方法;
3)学习并掌握使用51系列单片机开发控制系统的基本步骤及方法。
(2) 设计意义
学习单片机最重要的方法就是实现理论与实践相结合的学习方法。有些工程师说过,能利用单片机设计并实现电子时钟,技能基本上掌握单片机的使用。所以设计电子时钟的真正目的不在于设计出成品而投入使用,而是在于熟悉单片机的基本功能与编程来实现单片机的控制。作为大学生,以后出去就业或是继续学业,都要有一定的动手能力和实践能力,而这,便是电子计时器设计的另一个目的。
2、总体设计方案
STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。
复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。单片机由运算器、控制器、存储器、输入输出设备构成。此次课程设计所用到的单片机为STC89C52芯片。STC89C52芯片的内部硬件结构分为三大部分,简述如下:
(1)中央处理单元CPU
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM, MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
(2)存储器
具有 8K 在系统可编程Flash存储器8K字节程序存储空间;512字节数据存储空间;内带2K字节EEPROM存储空间;
表1-1 STC89C52主要功能
兼容MCS51指令系统
8K可反复擦写Flash ROM
32个双向I/O口
256*8bit内部RAM
3个16位可编程定时、计数器中断
时钟频率0-24MHZ
2个串行中断
可编程UART串行通道
2个外部中断源
共6个中断源
2个读写中断口线
3级加密位
低功耗和掉电模式
软件设置睡眠和唤醒功能
(3)输入输出功能部件
通用I/O 口(32 个),复位后为:P0/P1/P2/P3 是准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。
1)数码管工作原理及引脚图
图1-1 四位八段数码管
八段数码显示器是微机系统常用的输出设备。 多个发光二极管封装在一起的八段数
码显示器按其连接形式可分为共阳显示器和共阴显示器共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
本次基于单片机的实验板用的是四位八段数码管,四位既是四个位数,八段为算小数点在内,每一位由八个发光管组成。工作时应先位选后段选。具体如何实现位选和段选这里不再具体说明。
2)按键及引脚图
图1-2 独立按键
独立式按键是指用I/0口线构成的单个按键电路,每个独立式按键单独占有一根I/0口线,每根I/0口线上按键的工作状态不会影响其他I/O口线的工作状态,即一个按键对应着-个端口输入,每一个按键都有一个按键电路来判断其是否按下。上拉电阻确保按键松开时,I/O口线有确定的高电平。当I/O口线内部有上接电阻时,外电路可以不配置上拉电阻,可以采用查询方式或中断方式读取按键本次用的单片机开发实验板上具有4*4键盘和4个独立按键,本设计采用的是四个独立按键,当按键按下时为低电平,通过判断语句判断调用哪一个程序。
3)核心芯片STC89C52及引脚图
图1-3 STC89C52
四个独立按键分别与52单片机的P3.2,P3.3,P3.4,和P3.5相连,但案件没有按下时为高电平,当按键按下时STC89C52的输入变为低电平。数码管接在STC89C52的P0口,数码管的控制位由P1决定。因为实验板上使用的是4位8段数码管,所以在用时需要通过给单片机指令来确定到底用哪一位数码管,然后通过给P0口赋初值来实现显示。
其他电路
图1-4
二、软件编程
1、主程序的设计
首先,将需要输出的数存入存储器的一个连续空间内,共需要60个字节,分别
存储00~59的编码,程序初始化后开始执行。设计开始、暂停和清零按钮。首先输出第一个数据00,延时1S时间后,输出第二个数据01;比较输出的数据与59的大小,若比59小,则返回延时程序继续延时,然后输出;若比59大,则程序将变量重新赋值继续调用若不调用清零或停止函数则在原地循环,否则执行相应的函数并跳出循环。
2、延时程序的设计
作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,我们可以通过定时中断,计数中断和软件延时实现。本设计的延时程序由空操作指令组成,并用循环程序实现。完成延时1ms时用三条指令实现,定义时可为延时函数定义形参以实现延时可控。
3、显示程序的设计
显示程序的要点有两个:一是代码转换。因为直接驱动LED显示器的是字形码,而人们习惯的是0、1、2、…、F等字符,因此,必须将待显示的字符转换成字形码。转换用查表的方法进行。
为了实现代码转换,首先开辟一个显示缓冲区,将待显示的字符预先存放在缓冲区中。由于有4位数码管显示器,故不妨假设显示缓冲区长度为4个字节。显示缓冲区地址为DIS0~DIS3 ,DIS0单元与最左边一位数码管相对应,DIS3单元与最右边一位数码管相对应通过定义一个全局数组,并为数组初始化,通过运算算出相应的数码管应显示的数,并通过调用显示函数来显示相应的时间。
4、程序编辑
#include
sbit start1 = P3 ^ 2;
sbit stop1 = P3 ^ 3;
sbit clear1 = P3 ^ 4;
unsigned char code disp[]=
{0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80 ,0x98};
void delay(unsigned int k)
{
unsigned char i,j;
for(i=0;i