51单片机数字钟设计实习报告.docx

上传人:b****3 文档编号:4659468 上传时间:2022-12-07 格式:DOCX 页数:15 大小:316.05KB
下载 相关 举报
51单片机数字钟设计实习报告.docx_第1页
第1页 / 共15页
51单片机数字钟设计实习报告.docx_第2页
第2页 / 共15页
51单片机数字钟设计实习报告.docx_第3页
第3页 / 共15页
51单片机数字钟设计实习报告.docx_第4页
第4页 / 共15页
51单片机数字钟设计实习报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

51单片机数字钟设计实习报告.docx

《51单片机数字钟设计实习报告.docx》由会员分享,可在线阅读,更多相关《51单片机数字钟设计实习报告.docx(15页珍藏版)》请在冰豆网上搜索。

51单片机数字钟设计实习报告.docx

51单片机数字钟设计实习报告

51单片机数字钟设计实习报告

 

 

目录

一.设计方案:

3

二.设计内容:

3

三.相关总线及芯片介绍:

3

1.SPI总线:

3

2.74LS595芯片:

5

3.实验箱电路图:

6

四.系统软件程序设计:

6

五.设计程序:

8

六.程序调试及显示:

11

七.实习心得:

12

八.参考文献:

13

一.设计方案:

通过单片机内部的计数/定时器,采用软件编程来实现时钟计数,一般称为软时钟,这种方法的硬件线路简单,系统的功能一般与软件设计相关,通常用在对时间精度要求不高的场合。

二.设计内容:

这里采用应用广泛的C51作为时钟控制芯片,利用单片机内部的定时/计数器T0实现软时钟的目的。

首先将T0设定工作于定时方式,对机器周期计数形成基准时间(50ms),然后用另一个定时/计数器T1对基准时间计数形成秒,秒计60次形成分,分计60形成小时,小时计到12或者24。

通过外部中断实现12进制与24进制的切换。

最后通过数码管把它们的内容在相应的位置显示出来,达到时、分、秒计时的功能。

三.相关总线及芯片介绍:

1.SPI总线:

SPI(SerialPeripheralInterface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。

外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。

SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:

串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。

由于SPI系统总线一共只需3~4位数据线和控制即可实现与具有SPI总线接口功能的各种I/O器件进行接口,而扩展并行总线则需要8根数据线、8~16位地址线、2~3位控制线,因此,采用SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。

由此可见,在MCS51系列等不具有SPI接口的单片机组成的智能仪器和工业测控系统中,当传输速度要求不是太高时,使用SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。

     利用SPI总线可在软件的控制下构成各种系统。

如1个主MCU和几个从MCU、几个从MCU相互连接构成多主机系统(分布式系统)、1个主MCU和1个或几个从I/O设备所构成的各种系统等。

在大多数应用场合,可使用1个MCU作为控机来控制数据,并向1个或几个从外围器件传送该数据。

从器件只有在主机发命令时才能接收或发送数据。

其数据的传输格式是高位(MSB)在前,低位(LSB)在后。

当一个主控机通过SPI与几种不同的串行I/O芯片相连时,必须使用每片的允许控制端,这可通过MCU的I/O端口输出线来实现。

但应特别注意这些串行I/O芯片的输入输出特性:

首先是输入芯片的串行数据输出是否有三态控制端。

平时未选中芯片时,输出端应处于高阻态。

若没有三态控制端,则应外加三态门。

否则MCU的MISO端只能连接1个输入芯片。

其次是输出芯片的串行数据输入是否有允许控制端。

因此只有在此芯片允许时,SCK脉冲才把串行数据移入该芯片;在禁止时,SCK对芯片无影响。

若没有允许控制端,则应在外围用门电路对SCK进行控制,然后再加到芯片的时钟输入端;当然,也可以只在SPI总线上连接1个芯片,而不再连接其它输入或输出芯片。

对于不带SPI串行总线接口的MCS-51系列单片机来说,可以使用软件来模拟SPI的操作,包括串行时钟、数据输入和数据输出。

对于不同的串行接口外围芯片,它们的时钟时序是不同的。

对于在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件,一般应将其串行时钟输出口P1.1的初始状态设置为1,而在允许接收后再置P1.1为0。

这样,MCU在输出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至MCS-51单片机的P1.3口(模拟MCU的MISO线),此后再置P1.1为1,使MCS-51系列单片机从P1.0(模拟MCU的MOSI线)输出1位数据(先为高位)至串行接口芯片。

至此,模拟1位数据输入输出便宣告完成。

此后再置P1.1为0,模拟下1位数据的输入输出……,依此循环8次,即可完成1次通过SPI总线传输8位数据的操作。

对于在SCK的下降沿输入数据和上升沿输出数据的器件,则应取串行时钟输出的初始状态为0,即在接口芯片允许时,先置P1.1为1,以便外围接口芯片输出1位数据(MCU接收1位数据),之后再置时钟为0,使外围接口芯片接收1位数据(MCU发送1位数据),从而完成1位数据的传送。

2.74LS595芯片:

74595的数据端:

QA--QH:

八位并行输出端,可以直接控制数码管的8个段。

QH':

级联输出端。

我将它接下一个595的SI端。

SI:

串行数据输入端。

74595的控制端说明:

/SCLR(10脚):

低点平时将移位寄存器的数据清零。

通常我将它接Vcc。

SCK(11脚):

上升沿时数据寄存器的数据移位。

QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。

(脉冲宽度:

5V时,大于几十纳秒就行了。

我通常都选微秒级)

RCK(12脚):

上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。

通常我将RCK置为低点平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。

我通常都选微秒级),更新显示数据。

/G(13脚):

高电平时禁止输出(高阻态)。

如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。

比通过数据端移位控制要省时省力。

注:

1)74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。

74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。

2)74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。

这在串行速度慢的场合很有用处,数码管没有闪烁感。

3)595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,在正常使用时SCLR为高电平,G为低电平。

从SER每输入一位数据,串行输595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,如下面的真值表,在正常使用时SCLR为高电平,G为低电平。

从SER每输入一位数据,串行输入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。

入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。

3.实验箱电路图:

图1.实验箱电路

四.系统软件程序设计:

1.主程序:

先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和中断处理模块,当有外部中断按下时,则转入相应的功能程序。

2.数码管显示模块:

本实验有8个数码管,从右到左为时、横线、分、横线、秒。

在本系统中数码管显示利用SPI总线进行传输显示。

3.定时器/计数器T0中断服务程序:

T0用于计时,选中方式一,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加一。

秒单元加到60则对分单元加一,同时秒单元清0;分单元加到60则对时单元加一,同时分单元清0;时单元加到12则对时单元清0,标志一天时间计满。

在对各单元计数的同时,把他们的值放到存储器单元的指定位置。

4.外部中断服务程序:

对小时进行12进制与24进制切换。

5.流程图如下:

开始

开始

N

定时器T0初始化

Y

计数自加

开中断

N

调用显示子程序

N

计数单元清零

Y

恢复现场

进入中断处理程序

返回

恢复现场

图2.主程序图3.中断处理程序1

记录外部中断次数

显示初始化

查表取字型码

奇数

偶数

延时显示

切换至24进制

切换至12进制

N

恢复现场

返回

数据显示

图4.数据显示模块图5.外部中断处理程序

五.设计程序:

ENAEQUP2.0

ENBEQUP2.1

ENCEQUP2.2

CLKEQUP1.0

DINEQUP1.1

COUNTEQU0FH

CISHUEQU2EH

ORG0000H

AJMPMAIN

ORG0003H

AJMPINT0

ORG000BH

AJMPI0

MAIN:

MOVCOUNT,#0

MOVCISHU,#12

CALLL2

WAIT:

LCALLIN

LCALLXIANSHI

SJMPWAIT

L2:

MOVR3,#0AH

MOVR4,#55

MOVR5,#59

MOVR6,#11

MOVTMOD,#11H

MOVTH0,#03CH

MOVTL0,#0B0H

SETBIT0

SETBEX0

SETBET0

SETBEA

SETBTR0

RET

IN:

MOVA,R6

MOVB,#0AH

DIVAB

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOV6FH,A

MOVA,B

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOV6EH,A

MOVA,#0BFH

MOV70H,A

MOVA,R5

MOVB,#0AH

DIVAB

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOV72H,A

MOVA,B

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOV71H,A

MOVA,#0BFH

MOV73H,A

MOVA,R4

MOVB,#0AH

DIVAB

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOV75H,A

MOVA,B

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOV74H,A

RET

XIANSHI:

CLRENA

SETBENB

SETBENC

MOVR1,6EH

LOOP3:

MOVA,@R1

MOVR0,#08H

LOOP2:

LCALLLOOP

INCR1

CJNER1,#76H,LOOP3

SETBENA

RET

I0:

DJNZR3,LOOP1

MOVR3,#14H

INCR4

CJNER4,#60,LOOP1

MOVR4,#0

INCR5

CJNER5,#60,LOOP1

INCR6

MOVR5,#0

MOVA,R6

CJNEA,CISHU,LOOP1

MOVR6,#0

LOOP1:

MOVTH0,#03CH

MOVTL0,#0B0H

SETBTR0

RETI

LOOP:

RLCA

MOVDIN,C

NOP

NOP

SETBCLK

NOP

NOP

CLRCLK

DJNZR0,LOOP

RET

INT0:

INCCOUNT

MOVA,COUNT

MOVB,#2

DIVAB

MOVA,B

CJNEA,#0,L3

L1:

MOVCISHU,#12

RETI

L3:

MOVCISHU,#24

RETI

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

六.程序调试及显示:

1.输入源程序

输入源程序时,应以西文方式输入字母和符号,且中文注释前要加分号。

2.对源程序进行汇编和纠错

根据自动汇编提供的错误信息逐条纠正错误,直至汇编信息提示“错误(0)”、“汇编结束”。

3.确定调试方案

在调试程序前一定要认真分析源程序,明确各功能程序运行的预期结果。

然后结合源程序应达到的结果,确定出如何通过某些关键参数和实验现象检验程序运行结果正确与否。

例如:

程序运行过程中路径的变化、累加器A内容的变化、其他特殊寄存器内容的变化等。

并针对具体的分析和观察对象选择较合适的调试方法。

如单步运行、跟踪运行、连续运行、快速运行至光标处、设置断点等调试方法。

4.调试程序

(1)调试主程序。

主程序运行后,在无任何外部中断时观察有无显示,时钟是否工作,其时、分、秒显示的变化过程是否正确。

若运行结果不正确,首先应根据程序运行的实际现象分析判断哪些因素可引起相关故障,再通过调试方法逐一认证和排除。

例如:

若定时/计数器的初始化出错,则时钟将不能工作;若显示程序出错,则将不能正确显示时钟单元内容;若定时/计数器中断服务子程序出错,则其显示数据的变化规律将不正常。

(2)调试子程序。

在调试主程序时,必然要调用相关的功能子程序。

因此,首先应明确子程序的具体功能,通过对子程序的分析,确定子程序的入口、出口参数及相关标识位的状态,然后在满足入口条件的状态下,设法检查从主程序进入子程序,再由子程序返回到主程序的运行过程。

可采用跟踪运行或运行至光标处的方法,检查从主程序进入子程序内部的运行过程,再通过单步运行等方法检查子程序内部的运行情况和返回主程序的过程。

通过反复调试,发现并排除软件与硬件存在的各类问题,以满足系统设计的预期目的。

5.下载实验箱运行

将程序下载到实验箱上显示及调试。

如图6所示:

图6.下载

七.实习心得:

一周的实习很快就过去了,在一周时间里,我从上课对单片机知识的懵懵懂懂的,到实习后,略有感悟,总的来说迈出了很大一步。

之前,学过C语言,掌握还不错,对编程并不陌生。

所以此次实习关键在于单片机的汇编语言。

学过C这样高级语言之后,我感觉汇编语言有点难,全是缩写,虽然精炼但是不好记忆。

于是在实习过程中,我认真看了一遍书本和笔记,并请教了不少同学。

我们的实习题目是外部中断记录,涉及中断,计时,显示等主要模块。

于是我通过回忆,了解计时原理,定时器初始化(选择定时器),启动定时器,1秒定时。

其中1秒定时的计算方法在我看了好多遍之后有所了解。

之前发生过定时不时一秒的情况,经过研究发现时频率设定的不对。

在实验机箱上有两个槽,可用来记录中断次数,并进行12进制与24进制的切换,经我们几个同学的讨论研究,还是很顺利的做了出来。

显示程序是老师给的,其中你若要改显示的数字或者符号,需要改的就是最后一行TAB后面的数值大小,我们实验机箱是共阴极,所以需要FFH减去共阳极的数值。

当然最后这个程序做出来了,但还有不少可以更改的地方。

在实习完的一周之内我又下功夫的看了一遍课本。

总之,一周实习很充实,在这里要感谢下付老师和李老师的指导,对于我们的问题能耐心详细解答并分析什么原因。

实习过去了,希望在后面的单片机学习中能与老师多多交流,更上一个台阶。

八.参考文献:

《单片微型计算机与接口技术》李群芳肖看张士军第4版电子工业出版社

《单片机原理与应用》谢维成杨加国

《微机原理及接口技术实验指导》刘海波张锡鹤机械工业出版社

《单片机课程设计实例指导》————李飞北京航空航天出版社

《51单片机应用实例详解》————杨欣清华大学出版社

《MCS:

51单片机原理及接口技术》马家辰哈尔滨工业大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1