单片机相关毕业设计说明_第1页
单片机相关毕业设计说明_第2页
单片机相关毕业设计说明_第3页
单片机相关毕业设计说明_第4页
单片机相关毕业设计说明_第5页
免费预览已结束,剩余45页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一章 绪论1.1 MCS-51发展状况单片机于1976年由Intel公司推出MCS-4时始,迄今已有二十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作的方方面面,几乎“无所不在,无所不为”单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,成为普林斯顿结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序

2、存储器,目前采用程序存储器和数据存储器截然分开的结构为多。本文讨论的单片机多功能定时器的核心是目前应用极为广泛的 51 系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能强等特点。不仅满足所需要求而且还有很多的功能可供开发,有着广泛的应用领域MCS-51系列单片机是美国Inter公司在1980年推出的高新能8位单片机, 它包含 51 和 52 两个子系列。对于 51 子系列,主要有8031、 8051、 8751 三种机型,它们的指令系统和芯片引脚完全兼容,仅片程序存储器有所不同, 8031 芯片不带ROM, 8051 芯片带4KB的 ROM 8751 芯片

3、带 4KB的 EPROM对于 52 子系列,有8032、 8052、 8752 三种机型。 52 子系列与 51 子系列大部分相同,不同之处在于: 52 子系列的片数据存储器曾至256B;8032 芯片不带ROM,805部8KB的ROM,8752K片带8KB的EPROM有3个16位定时器/计数器, 6 个中断源。1.2 研究的主要容目前市面上的数字时钟种类繁多, 有可爱型的, 有带计算型的, 有数码管显示的,有液晶显示的等等。( 1)本设计为巩固所学知识,对单片机的功用和软件编程进行更深入的学习。( 2)修改时间功能:a要求键入“ A”键,停止计时(显示时间不变)。b 然后依次从键盘上输入小时

4、十位、 小时个位、 分十位、 分个位、 秒十位、秒个位(键入数字时显示器上要同步显示出修改的时间值),秒个位一旦键入完毕则立即恢复计时。(3)设定闹钟功能:要求按“ B'键一次,显示以前设定的闹钟时间,如果再 按“B'键一次则跳过闹钟时间的设定,恢复计时显示。当闹钟时间到了,就响 起闹铃。4)绘制电路原理图。5)绘制主要程序流程图。1.3 时钟工作原理设计中的电子时钟的定时计数是利用了单片机部的定时/ 计数器,通过对定时 / 计数器工作方式寄存器和控制寄存器的选取, 对定时 / 计数器的初始值进行计算和编写,从而使其具有了简单的计时能力。在设定了计时单元后,通过中断软件的编写,

5、对计时单元进行无数次重复利用。有计数器对中断次数进行计数和进位,再通过接口电路将其依次显示出来。 MCS-51 单片机有两个16位的定时计数器T0 和 T1, 当工作在定时方式时,计数脉冲来自单片机部,振荡器信号12分频后做计数脉冲,美国机器周期的时间使计数器加一,由于计数脉冲的频率是固定的(即每个脉冲为 1 个机器周期的时间) ,故可通过设定计数初值来实现定时功能。如果要实现定时100?,当晶振为6MHzH,每个机器周期为2?,让T0计50个数后溢出,产生中断告诉 CPU定时,100?时间到。本实验定时器每100?中断一次,在中断服务程序中,对中断次数进行计数,100 ?计数 1000 次就

6、是1s然后再对秒计数得到分和小时值,并送入显示缓冲区,最后用LCD夜晶示出来。第二章 设计要求与方案论证2.1 设计要求本设计为巩固所学知识, 对单片机的功用和软件编程进行更深入的学习,对本次设计的电子时钟提出了以下要求。( 1)具有修改时间功能:a要求键入“ A”键,停止计时(显示时间不变)。b然后依次从键盘上输入小时十位、小时个位、分十位、分个位、秒十位、秒个位(键入数字时显示器上要同步显示出修改的时间值) ,秒个位一旦键入完毕则立即恢复计时。2)设定闹钟功能:要求按“B”键一次,显示以前设定的闹钟时间,如果再按“ B”键一次则跳过闹钟时间的设定,恢复计时显示。当闹钟时间到了,就响起闹铃。

7、( 3)合理绘制电路原理图。( 4)绘制主要程序流程图。( 5)合理编辑程序。2.2 方案论证设计的电子时钟是利用 8051 单片机部的晶振产生振荡,每秒频率为12MH,Z其精度稳定,不受外界温度和湿度的影响,但是会有如下问题出现:( 1)外界复杂的电磁环境,会影响到单片机信号的输入、输出,而且单片机部运行的机械周期也会使电子时钟的精度受到影响。方案:在电子时钟外壳装备较薄的金属薄片,屏蔽外部电磁干扰。( 2)由于芯片执行程序需要一定的时间,从而使定时计数产生误差。定时计数再未进行初始化的时候,处于原始状态,不能进行定时和计数,所以需要对定时计数器里的初始值进行计算和调整,并且选定合适的工作方

8、式。方案:通过与日常生活中常用的时钟比较,找出产生误差的原因,计算误差的大小,通过对程序的调整和初始值得设定,减小误差,使之达到使用精度。( 3)需随时对时间进行调整,要求设置键盘,并对键盘输入的稳定性进行调整。方案:采用列式键盘,按键数为 4,编辑去抖动程序。( 4)要求对时间进行动态显示,精确到秒。方案:米用LCD液晶显本器进行动态显小。( 5)接线复杂,易出现错接误接。方案:采用电路板进行连接第三章总体方案确定与实现3.1 电子时钟电路设计框图图 3.1-13.2 系统硬件该电路是由MCS805件片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路也由 MCS805惮片

9、机提供,减少芯片的使用,节约成 本,它可以对年、月、日、周、日、时、分、秒进行计时,时间显示部份采用液 晶LM016L(LCD,此次单片机数字时钟的设计采用 MCS805伪主控制芯片,并 由其定时器提供时钟,利用LCD进行时间按显示。其电路原理图如下所示:LGD1- -I'Hvcc -5, 即言RP1 : Rpcpfc'kjfi.u-1-51w.HO.gW U.WIMi umPO.NM W3H pq,wi» -u.gl 目 QhMiNJ-UlzL归C51为3叫./TOCLE 证由2Pi IW P工一阈V PJJAII F .P2AA13 PNCjqP3J0*除涉 f

10、IO:fr P?Em rajMrnFKTCP FO-&T1 f'J b而.也做FJ.设yLI *,科di .图 3.2-13.3 软件方案进行应用软件设计时采用模块化程序设计方法,其优点是:(1)每个模块程序机构简单,任务明确,易于编写,调试和修改。(2)程序可读性好,对程序的修改可局部进行,其他部分可保持不变,便于功能的扩充和版本升级。(3)对于使用频繁的子程序可以建立子程序库,便于多模块调用。(4)便于分工合作,多个程序员同时进行程序的编写和调试工作,加快软件研制进度。该程序可划分为7个模块:主程序,LCD显示模块,当前时间计时模块,输入闹钟模块,当前时间调整模块,音频报警

11、模块,数据转坏模块。第四章 硬件设计4.1 LCD显示模块在实际应用中,用户很少直接设计 LCD显示器驱动接口,一般是直接使用专用 的 LCD 显 示 驱 动 器 和 LCD 显 示 模 块 。 其 中 , LCD 显 示 模 块 LCM(Liquid Crystal Display Module )是把LCD显示器、背景光源、线路板和驱动集成电路等部件构成一个整体,作为一个独立的部件使用,具有功能较强、易于控制、 接口简单等优点, 在单片机系统中应用较多。 其部结构如图 4.1-1 所示。LCD显示模块只留一个接口与外部通信。显示模块通过这个接口接收显示命令和数据,并按指令和数据的要求进行显

12、示。外部电路通过这个接口读出显示模块的工作状态和显示数据。LCD显示模块一般带有部显示RAMK字符发生器,只要输入ASCII码就可以进行显示。LCD显示模块按功能显示可分为:LCD段式显示模块、LCD字符型显示模块、LCD图形显示块三类。液晶显示器因其功耗低、重量轻而成为便携式应用中的主流显示技术。这里所用的字符型液晶模块是一种用5x7 点阵图形来显示字符的液晶显示器,根据显示的容量可以分为 1 行 16 个字、2 行 16 个字、 2 行 20 个字等等。液晶显示有点振式和字符式两种,在这里采用字符式液晶显示器1602 来实现显示电路的功能。该设计采用液晶显示装置即把时钟信号以及温度信号同时

13、显示在液晶显示器上,不仅结构简单清新可见,而且省电也容易控制。数据的传输采用P0 口进行控制,具引脚VSS8地,VEE接VCCRS和RW E是显示器的控制端分别由单片机的引脚P1.0、P1.1、P1.3进行控制。而VD比作为液晶显示器的灰度调节引脚,接一变阻器来改变其显示的清晰度。LCD1LMQltiL图4.1-1 LM016L液晶显示器图4.1-2LCD显示电路由于1602液晶显示器是本身带有驱动模块的液晶屏,它只有并口线和 一些控制线,与单片机的连接有两种不同的方法,直接访问方式和间接访问 方式。直接访问方式就是微处理器把液晶显示模块当作存储器或I/O设备直接挂在总线上,模块8位数据总线与

14、微处理器的数据总线相连,用读操作 或 写操作信号与地址信号共同产生控制信号。4.2 CPU 80518051是ROM 16位单片机,共有40个引脚。含4K字节的ROM其主要组成如下:(1)面向控制的8位CPUffl指令系统。 2) 4K字节的程序存储器(ROMS EPROM 3) 3) 128 字节的数据存储器。(4)可编程的并行I/O 口 P0P3,有32位双向输入/输出线。( 5) 一个全双工串行口。( 6) 两个 16 位定时器 / 计数器。( 7) 五个中断源,两个优先级中断机构。( 8) 一个片时钟振荡器和时钟电路。(9)可寻址的64K字节的程序存储器和64K字节的外部数据存储器。M

15、CS-51 的片外三总线结构:1) 地址总线AB: 地址总线的宽度为 16 位, 因此外部存储器直接寻址为64K字节。16位地址总线中,由P0 口经地址锁存器提供低8位地址A0A7:P2 口直接提供高8位地址A8A15(2)数据总线:数据总线宽度为8位,由P0 口提供DAD7。(3)控制总线CB由P3 口的第二功能状态和4根独立控制线REST/EA,ALE,和/PSEN组成。其芯片结构如图 4.2-2 所示0 L (TiEXlFl. 1 E Pl . 2 L Fl . 3 E F1.4 E Fl . 5 L Fl . & L Fl 7 LRESET KXL/P3. a r i rIHT

16、0/P3, 2 I1IT1/P3. ? L ro/ps.4 T1/P3,5 WP3. & M/P3, r r KTAL2 L XTAL1 L PDIF Vss L1 7 4023333845WB635734333932ll>311301229132814"15561&2517241923n222021J VuvJ PO, O/ABOJ PO.1/AD1J PO. 2/AD2J PO. 3/AD3J F0.4/AD4J FL 5/ADSJ PD.B/AD6J PO. 7/AD73百八rd3 ALE/FROGJ PSENJ P2. 7/AD15J P2.B/AD14

17、J PL 5/AD131 P2.4/AD121 P2.3/AD11J P2, 2/AU10J P2. 1/AB9J P2, 0/AC3图 4.2-24.3引脚功能Vcc(40):电源电压GND(20):接地P0 0 (32-39) : P0 口是一个8位双向I/O接口,也即地址/数据总线复用口。 作为输出口用时,每位吸收电流的方式驱动 8个TTL逻辑门电路,对端口 P0写 “1”时,可作为高阻抗输入端用。在访问外部数据存储器时,这组口线分时转换 地址(低8位)和数据总线复用。P1 0(1-8) : P1是一个带部上拉电阻的8位双向I/O 口,P1的输出缓冲级 可驱动(吸收或输出电流)4个TTL

18、逻辑门电路,对端口写“ 1”通过部的上拉 电阻把端口拉到高电平时,此时可作输入口。作为输入品使用时,因为部存在上 拉电阻,某个引脚被外部信号拉低时会输出一个电流。与 AT89C51不同之处是, P1.0和P1.1还可以分别作为定时/计数器2的外部计数输入(P1.0/T2 )和输入 (P1.1/T2EX)P2 0(21-28) : P2是一个带有部上拉电阻的8位双向I/O 口,P2的输出缓 冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口 P2写“1”,通过 部的上拉电阻把端口拉到高电平时, 此时可作输入口。作为输入品使用时,因为 部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。

19、 在访问外部程序 存储器或16位地址的外部数据存储器(例如执行 MOVX DPTR!令)时,P2 口送 出高8位地址数据。在访问8位地址的外部数据存储器时,P2 口输出P2锁存器 的容。P3 0(10-17) : P3是一组带有部上拉电阻的8位双向I/O 口,P3 口输出缓 冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口 P3写“1”时,它 们被部上拉电阻拉高并可作为输入端口,此时,被外部拉低的P3 口将用上拉电阻输出电流。P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能, 如下表所示:端口引脚第二功能P3.0RXD (串行输入口)P3.1TXD (串行输出口)P3.

20、2INT0 (外中断0)P3.3INT1 (外中断1)P3.4T0 (定时/计数器0)P3.5T1 (定时/计数器1)P3.6WR (外部数据存储器写通道)P3.7RD (外部数据存储器读通道)表3-1 P3口的第二功能RST(9):复位信号输入端。当振荡器工作时,RST引脚出现两个机器周期以 上高电平将使单片机复位。ALE/PROG(30)地址锁存有效信号输出端。当访问片外程序存储器或数据存 储器时,ALE (地址锁存允许)输出脉冲用于锁存地址的低 8位字节,一般情况 下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟 或用于定时目的,要注意的是:每当访问外部数据存储

21、器时将跳过一个 ALE脉冲。PSEN(29):程序存储允许输出端。是片外程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个周期两次PSENt效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSENB号。EA/VPP(31):外部访匹允许。欲使 CPU仅访问外部程序存储器(地址为 0000HFFFFH, EA端必须保持低电平(接地),需注意的是:如果加密位 LB1 被编程,复位时部会锁EA端状态。如EA端为高电平(接Vcc端),CPU则执行 部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源 Vpp,当然这必须是该器件是使用

22、12V编程电压VppoXTAL1(19):振荡器反相放大器的及部时钟发生器的输入端。XTAL1(18):振荡器反相放大器的输出端。通过 XTAL1 XTAL2外接晶振后, 即可构成自激振荡器,驱动部时钟发生器向主机提供时钟信号。4.4键盘模块采用矩阵式1M键盘,其行接8051的P1 口,列接8051P3 口,如图所示:图 3.3-1键盘扫描:(1)确定是否有键按下。(2)当有键按下时,则对键进行键译码,找出按下的是那个键;当无键按 下时,即返回。(3)当按下的是数字键,则送显示缓冲单元;当按下的是功能键,即转到 对应的键服务程序。(4)去抖动:按键从开启到闭合稳定,或从闭合到完全打开,总要有数

23、毫 秒的弹跳时间(即抖动)。弹跳将引起按一次键被多次输入的误动作 为此,在键盘处理程序中,必须设法去掉抖动。可以用硬件去抖动的 方法,也可以采用硬件去抖动。第五章软件设计5.1 程序流程图图 5.1-15.2 初始值计算以毫秒为基本计数单元,采用方式0,定时器1,其计算过程如下:因为方式0采用13位计数器,8051的时钟频率为f=12MHZ,计数周期为1us,所以其最大定时时间为8192us,选择定时时间为5m6再循环200次,即得到1S 延时计数值为5ms/1us=5000 则定时器1的初值为C=M- 计数值=8192-5000=3192=C78H采用方式0故 TMOD=00H5.3 主程序

24、设计MAIN: MOV SP,#30HMOV DPTR,#0E100HMOV A,#03HMOVX DPTR,AMOV TCON,#0MOV IP,#02HMOV IE,8AHMOV TMOD,#21HMOV TH0,#3CHMOV TL0,0B0HMOV R4,#10; 设置定时器T0 的走秒用计数器MOV 71H,#0MOV 72H,#0MOV 73H,#00HMOV 74H,00HMOV CLKBCD,#0MOV CLKBCD+1,#0MOV CLKBCD+2,#0MOV CLKBCD+3,#0MOV CLKBCD+4,#0SETB TR0启动计数走秒BCDREPDISP;MOVR5,#

25、3 ; 将计时值存放区的计时值拆分并存入计时值的数据存放区为显示时间值做好准备MOV RO,#70HMOV R1,#CLKBCDCLR TRO ;暂停计数,以防出现显示错误CHAIREPI: LCALL CHAI; 开始拆分转存DJNZ R5,CHAIREPIMOV A,TL0ADD A,#31HMOV TL0,AADDC A,#0MOV TH0,ASETB TR0 ;ITLCALL STARTDISPLAY ;LCALL TESTKEY ;JZ AL;SJMP NOAL ;AL: LJMP AINOAL: LCALL GETKEY ;CJNZ A,#0AH,BKEY ;;再次启动计数走秒显示

26、时间值有键入吗?没有键入则跳转到 ALARM有键入则读入键码有键入则读入键码是 A 键吗?不是则跳转到 BKEYCLR TRO是“A”键则暂停计数走秒MOV TH0,#3CHMOV TL0,#0B0HMOV R1,#60HMOV R5,#2LCALL SETTIME继续检测有无键时间修正值“02”键?(时十位)MOV A,60HCJNZ A,#2,NINEMOV R5,#3SJMP THREENINE: MOV R5,#9THREE: LCALLSETTIME继续检测有无键时间修正值“03”或9”键?(时个位)MOV R5,#5LCALL SETTIME继续检测有无键时间修正值“0 5”键?(

27、分十位)MOV R5,#9LCALL SETTIME继续检测有无键时间修正值“0 5”键?(分个位)MOV R5,#5LCALL STETIME继续检测有无键时间修正值“0 5”键?(秒十位)MOV R5,#9LCALL SETTIME ;MOV R5,#3MOV RO,#60HMOV R1,#70HHEREP: LCALL HEDJNZ R5,HEREPSETB TR0 ;LJMP A1BEKY: CJNEA,#0BH,AL;MOV 60H,#0B0HMOV 61H,#10HMOV R5,#2MOV R0,#73HMOV R1,#62HCHAIREP: LCALL CHAIDJNZ R5,C

28、HAIREPBEKY: LCALL STARTDISPLAYLCALL TESTKEY继续检测有无键时间修正值“ 05”个位)将修正值存入7072H恢复计数走秒不是“B键则跳转到ALARM是示先前设定的闹钟时间;显示先前设定的闹钟时间;继续检测有无键入键?(秒键则显JZ BKEY1;没有键入则继续显示LCALL GERTKEY;有键入则读入键码CJNE A,#0BH,BKEY2;如果再次键入" B'键则跳过设定闹钟信问的程序段SJMP ENDBKEYBKEY2: CJNE A,#2,JJ1MOV 62H,ASJMP JJ3JJ1: JNC JJ2MOV 62H,ASJMP J

29、J3JJ2: MOV R1,#62HMOV R5,#2如果既不是“ B”键又不是“02”之间的键,则等待键入“ 02”之间的键LCALL SETTIMEJJ3: MOV R1,#63HMOVA,62H;继续检测是否为闹钟时间值“ 09”或“03”键(时个位)CJNE A,#2,NINE1MOV R5,#3SJMP THREE1NINE1: MOV R5,#9HTHREE1:LCALLSETTIME;继续检测是否为闹钟时间值“ 09”或“03”键?(时个位)MOV R5,#5LCALLSETTIME;继续检测是否为闹钟时间值“ 05”键?(分十位)MOV R5,#2;将设定的闹钟时间值存入 73

30、T 74H单元MOV R0,#62HMOV R1,#73HHEREP1: LCALL HEDJNZ R5,HEREP1BKEY3: LCALL STARTDISPLAYLCALL TESTKEY;继续检测有无键入“ B”键,以便结束闹钟时间设定JZ BKEY3LCALL GETKEYCJNE A,#0BH,BKEY3;不是“B”键则继续显示刚才设定的闹钟时间ENDBKEY: NOPA1: MOV R2,74HCJNE R2,#ALARM;判断是否有闹钟时间MOV R2,73HCJNE R2,#0,ALARMLJMP ALARM1A1ARM: MOV A,70HCJNE A,73H,NOA1AR

31、M ;判断是否到了闹铃时间MOV A,71HCJNE A,74H,NOA1ARMLCALL MUSICSJMP A1ARMINOA1ARM: CLR TR1A1ARM: LJMP REPDISP注:定时器初始化,将定时器控制寄存器TCOIS为0,设置定时器方式寄存器TMOI* 21H (#001000018即定时器0为方式1,定时器1为方式2.T0作为走秒定时器,T1作为闹钟定时器。100Ms的计数初值为3CB0H,TH0=3GHTL0=0B0H将计时值存放区70H-72H放入初始值0,将闹钟时间存放区73H-74H放入初始值0 ,将计时值BC面据存放区置初始值0,启动定时器T0,将70H小时

32、存放区拆成时十位和时个位送给计时值 BCD数据存放区,之后存入 70H,将64H, 65H合并后存入72H,恢复计数走秒。调用 A1判断是否有闹铃时间。A为键码与0BH比较,判断是否为B键,不是B键跳转到A1,是B键显示先前设定的闹铃时间。5.4 子程序设计5.4.1 键盘扫描程序设计TESTKEY:MOV R2,#6KLOOP: MOV A,R1;找出键所在列MOV DPTR,#OUTBITMOV A,#0MOVX DPTR,AMOV DPTR,#IN;读入键状态;高四位不用MOVX A,DPTRCPI AANL A,#0FHRETKEYTABLE: ;数字键码定义DB 00H,01H,04

33、H,07HDB 0FH,02H,05H,08HDB 0CH,03H,06H,09HDB 0DH,OCH,0BH,0AHDB 10H,10H,10H,10HDB 10H,10H,10H,10HGETKEY: MOV DPTR,#OUTBITMOV P2,DPHMOV R0,LOW(IN)MOV R1,#00100000B;该列有键入0FFH;键值=列4+行;R2= (R2-1) X4;R1中为读入的行值;移位找出所在行;R2=R2行值CPL AMOVX DPTR,ACPL AMOV R1,AMOVX A,R0CPL AANL A,#0FHJNZ GOON1DJNZ R2,KLOOPMOV R2,

34、#0FFHSJMP EXITGOON1: MOV R1,AMOV A,R2DCC AR1 AMOV R2,AMOV A,R1MOV R1,#4LOOP:C RRC AJC EXITINC R2DJNZ R1,LOOPCEXIT: MOV A,R2MOV DPTR,#KEYTABLEMOVC A,A+DPTRMOV R2,AWAITRELEASE: MOV DPTR,#OUTBIT ;等键释放CLR AMOVX DPTR,AMOV R6,#10CALL DELAYCALL TESTKEYJNZ WAITREICASCMOV A,R2RET5.4.2 时钟计时程序设计TORUN:DJNZ R4,B

35、ACKPUSH ACCPUSH 01HPUSH 00HADD A,#1CJNE A,#5AH,SEC1MOV 72H,#0MOV 65H,#0SJMP MINSEC: CLR CDA AMOV 72H,AMOV R0,#72HMOV R1,#65HLCALL CHAI1SJMP BACK1MIN: MOV A,72HADD A,#1CJNE A,#5AH,MIN1MOV 71H,#0MOV 63H,#0MOV 62H,#0SJMP HOURMIN1: CLR CDA AMOV 71H,AMOV R0,#71HMOV R1,#63HLCALL CHAI1SJMP BACK1HOUR: MOV A

36、,70HADD A,#1CJNE,#24H,HOUR1MOV 70H,#0MOV 61H,#0MOV 60H,#0SJMP BACK1HOUR1: CLR CDA AMOV 70H,AMOV R1,#61HLCALL CHAI1SJMP BACK1BACK1: POP 00HPOP 01HPOP ACCMOV R4,#10BACK: MOV TH0,#3CHMOV TL0,#0B0HRET5.4.3 数据转换程序设计HE: MOV A,R0 ;合并程序SWAP AINC R0ORL A,R0MOV R1,AINC R0INC R1RETCHAI: MOV A,RO ;拆字程序,目的地址增加AN

37、L A,#0F0HSWAP AMOV R1,AINC R1MOV A,R0ANL A,#0FHMOV R1,AINC R0INC R1RET5.4.4时间设置程序设计SETTIME: PUSH 01h设置实践值MOV R1,ASETTIME1: LCALL STARTDISPLAYLCALL TESTKEY检测有无键入时间修正值JZ SETTIME1没有键入时间值继续显示LCALL GETTIME有键入则读入键码POP 01HCJNE A,05H,J1MOV R1,ASJMP J2J1: JNC SETTIMEJ2: INC R1RET5.4.5 音乐闹铃程序设计MUSIC : PUSH DP

38、HPUSH DPLMOV TMO,D#11HMOV IE, #8AHSETB TR0LCALL STARTDISPLAYNO: MOV 30H, #00HNEXT: MOV DPT,R #FIRSTMOV A, 30HMOVC ,A A+DPTRMOV R2,ACJNZ A,00H,NEXT1CLR TR1POP DPLPOP DPHSETB TR0LCALL STARTDISPLAYRETNEXT: MOV A,R2ANL A,#0FHMOV R5,AMOV A,R2SWAP AANL A,#0FHMOV R5,AMOV A,R2SWAP AANL A,#0FHJNZ SINGCLR TR1

39、SJMP D1SING: DEC ACLR CRL AMOV 22H, AMOV DPT,R#TABLEMOVC ,A A+DPTRMOV THI,AMOV 21H,AMOV A,22HADD A,#1MOVC ,A A+DPTRMOV TL1,AMOV 20H,AMOV P1,ASETB ET1SETB TR1D1: LCALL DELAYCLR TR1INC 30HSJMP NEXTTISEV: PUSH ACCPUSH PSWCLR TR1MOV TL1,20HMOV TH1,21HCPL P1.0POP PSWPOP ACC取到低位字节启动定时器T1保护现场RETDELAY1: MOV

40、 R7,#3D2: MOV R4,#250D3: MOV R3,#50HD4: MOV R3,D30DJNZ R4,D3DJNZ R7,D2DJNZ R5,DELAYRETFIRST:DB 81H,81H,93H,83H,0B3H,0A3H,03HDB 81H,81H,93H,83H,0C3H,0B3H,03HDB 81H, 81H, 0F3H, 0D3H, 0B3H, 0A3H, 93HDB 0E1H, 0E1H, 0D3H, 0B3H, 0C3H, 0B3H, 03HDB 12H, 42H, 01H, 41H,DB 52H, 62H, 42H, 01H,DB 91H, 91H, 82H,

41、01H,DB 41H, 52H, 62H, 42H,DB 01H, 92H, 82H, 61H,DB 42H, 92H, 82H, 01H,DB 41H, 82H, 01H, 62H,42H, 62H, 52H, 01H, 41H41H, 62H, 82H, 94H, 01H,61H, 62H, 42H, 52H, 01H01H, 91H, 22H, 12H, 44H62H, 42H, 52H, 01H, 41H61H, 62H, 82H, 92H, 01H42H, 00HTABLE: DB 0F6, 6FH, 0F7H, 24H, 0F8H, 1BH, 0F8, 8FHDB 0F9H , 5

42、EH, 0FAH, 17H, 0FAH, 6BH, 0FBH, 08HDB 0FBH , 92H, 0FCH, 0EH, 0FCH, 4BH, 0FCH, 0AFHDB 0FDH, 0CH, 0FDH, 36H, 0FDH, 84H, 0FDH, , 0C9HEND讲解:定时器T1 的中断服务子程序。先设置定时器方式寄存器,定时器T0和T1均采用方式0.将码表(FIRST)的首地址DPTR将30H初值00送给A, MOVC A, A+DPTR查表可得A为82Ho判断歌曲是否唱完一遍,若唱完则清零 TRQ重 新开始唱(歌曲循环播放)若歌曲未唱完则跳转到ENXT1将82H分割剥离,取低位02H作为

43、节拍编码,取高位为08H作为音符编码,8-1=7, 7*2=14给A,查 表(TABLE得相对应的计数初值的高位和低位,并将计数初值的低高为存入20H, 21Ho启动定时器T1,唱一个音,(30H)加1,跳转到NEXT TISEV:将ACC PSW 进栈保护起来,从装计数初值,对 P1.0取反,出栈恢复,启动TR1,中断返回。5.5 各存储单元的功用DAT164(0E102H):段控制口(接164数据位,B 口地址)IN(0E103H):键盘输入口( C 口地址)CLKBCD:计时值的BCDR据存放区(60H-65H)LEDBUF:显示缓冲区(66H-6BH)70H: 计时值的小事存放单元计时

44、值的分钟存放单元71H72H:计时值的秒存放单元73H:闹钟小时存放单元74H:闹钟分钟存放单元5.6 调试方法设置断点,观察寄存器的值,跟踪相应的存储单元容,还可以按下F4将程序指向光标处,不断地按下 F7单步执行或按下F6宏单步执行。本设计为 实时I/O试验,因此软件调试一般用全速断点方式运行。将断点分别设在定 时器中断入口地址上,中断处理程序结束处,主程序中。分别以全速断点运 行方式开始运行,若能碰上断点,则说明程序的总体结构是正确的。5.7 误差分析时钟误差分析:启动定时器/计数去0,使之开始计时,中断后进入中断 程序。自停止计数到计数又开始,中间执行了 7条指令,也就是延迟13个单 周期,共用时间26uso这样,每个中断的总时间应为 5.026ms,而原来定时 为5ms所以,每次中断定时多了 26us,这样,可改变计数重装值,使每次中 断时间为4.974ms,加上执行7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论