




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、附录附录A 一个单片机的应用项目一个单片机的应用项目 自动打铃机的设计自动打铃机的设计 A.1 项目任务项目任务A.2 硬件设计硬件设计A.3 软件设计软件设计A.4 项目实验项目实验A.5 项目仿真项目仿真A.1 项目任务项目任务A.1.0 设计要求设计要求A.1.1 基本要求基本要求A.1.2 强化要求强化要求A.1.0 设计要求设计要求 项目的任务是利用单片机作为核心控制电路,设计一项目的任务是利用单片机作为核心控制电路,设计一个自动打铃机。基本要求如下:个自动打铃机。基本要求如下:(1要求所设计的单片机自动打铃机具有准确的计时功要求所设计的单片机自动打铃机具有准确的计时功能,能够像电子
2、钟一样按时、分、秒格式显示实时时间。能,能够像电子钟一样按时、分、秒格式显示实时时间。(2能根据用户要求的时间点自动按时打铃,该项目以能根据用户要求的时间点自动按时打铃,该项目以大学的自动打铃控制为例,除要求自动打铃外,还要大学的自动打铃控制为例,除要求自动打铃外,还要求能自动播放音乐和早操、课间操节目。具体控制时间如求能自动播放音乐和早操、课间操节目。具体控制时间如作息时间表所示见表作息时间表所示见表A.1)。)。(3设置两个时间调校校时和校分按键,分别用来设置两个时间调校校时和校分按键,分别用来调校时和分,以保证自动打铃机的时间与标准时间相符。调校时和分,以保证自动打铃机的时间与标准时间相
3、符。 表表A.1A.1 大学作息时间表大学作息时间表 时 间 作 息 时 间 作 息 6:20 起 床 12:0014:15 午 休 6:256:40 播放音乐、早操 14:1614:20 播放音乐 6:407:20 洗漱、早餐 14:2514:30 预 备 7:207:40 早 读 14:3015:15 上课:第五节 7:407:50 预 备 15:2516:10 第六节 7:508:35 上课:第一节 16:2017:05 第七节 8:459:30 第二节 17:1518:00 第八节 9:359:40 课间操 18:0018:30 晚 餐 9:459:50 预 备 19:2019:30
4、预 备 9:5010:35 上课:第三节 19:3021:30 晚自习 10:4511:30 第四节 23:00 熄 灯 11:3012:00 午 餐 A.1.1 基本要求基本要求 如果读者只是把这个项目作为单如果读者只是把这个项目作为单片机课程的综合实训的话,只要求能片机课程的综合实训的话,只要求能在单片机开发装置或单片机实验箱在单片机开发装置或单片机实验箱上按设计要求成功完成实验则可。上按设计要求成功完成实验则可。对于没有单片机开发设备的读者,只对于没有单片机开发设备的读者,只要求能利用仿真软件要求能利用仿真软件Proteus成成功完成仿真即可。功完成仿真即可。A.1.2 强化要求强化要求
5、 如果读者有兴趣把这个项目做成一个实际样如果读者有兴趣把这个项目做成一个实际样机的话,则要求读者在能成功完成实训或仿真调机的话,则要求读者在能成功完成实训或仿真调试的基础上,再增加电源电路、实际的驱动电路试的基础上,再增加电源电路、实际的驱动电路、机壳等,设计出印刷电路板、机壳等,设计出印刷电路板PCB,并完成,并完成PBC的制作和元器件安装,用带有的制作和元器件安装,用带有FPROM且与且与MCS-51系列兼容的单片机如系列兼容的单片机如AT89C52代替实验用代替实验用的单片机,并用编程器将源程序写入单片机的的单片机,并用编程器将源程序写入单片机的FPROM中,与其他元件一起安装到电路板上
6、,中,与其他元件一起安装到电路板上,配上机壳,构成独立的自动打铃机,达到可以投配上机壳,构成独立的自动打铃机,达到可以投入实际应用的目的。入实际应用的目的。A.2 硬件设计硬件设计A.2.1 总体设计总体设计A.2.2 实时时钟电路设计实时时钟电路设计A.2.3 显示电路设计显示电路设计A.2.4 控制电路设计控制电路设计A.2.1 总体设计总体设计 首先需要利用单片机设计一个实时时钟,首先需要利用单片机设计一个实时时钟,然后根据控制时间即作息时间建立一个然后根据控制时间即作息时间建立一个数据区作为控制字码表,存放在数据区作为控制字码表,存放在ROM中。在中。在此基础上,设计控制程序,在时钟每
7、计时此基础上,设计控制程序,在时钟每计时1秒秒钟时查看一遍数据区,检查数据区中所设置钟时查看一遍数据区,检查数据区中所设置的时间是否与需要控制打铃或广播的时间点的时间是否与需要控制打铃或广播的时间点相同,若相同,则通过单片机的相同,若相同,则通过单片机的I/O端口输出端口输出控制信号。控制信号。 A.2.2 实时时钟电路设计实时时钟电路设计 选择通过选择通过MCS-51内部定时器内部定时器T0 产生中断来产生中断来实现计时。设定定时器实现计时。设定定时器T0工作在定时工作方式工作在定时工作方式1,每,每100ms0.1s产生一次中断,每产生一次产生一次中断,每产生一次T0中断,就利用软件将基准
8、中断,就利用软件将基准0.1s时间计数单元进时间计数单元进行累加计数一次。当定时器行累加计数一次。当定时器T0产生产生10次中断时,次中断时,就获得了就获得了1s信号,这时秒计数单元加信号,这时秒计数单元加1,同理,同理,由软件对分计数单元和时计数单元进行时间计数由软件对分计数单元和时计数单元进行时间计数,从而得到秒、分、时的时间值,并通过,从而得到秒、分、时的时间值,并通过LED数数码管显示电路显示出来。码管显示电路显示出来。定时器初值的确定定时器初值的确定 选择单片机的晶振频率为选择单片机的晶振频率为fosc = 6MHz,则时钟周期为,则时钟周期为1/6s,机器周期为,机器周期为2s。所
9、以定时器。所以定时器T0工作在方式工作在方式1下产生下产生0.1s的定时,所需的定时器初值为的定时,所需的定时器初值为3CB0H,为,为了确保了确保T0能准确定时能准确定时0.1s,在,在T0中断服务中断服务程序中重装定时器初值时,修正为程序中重装定时器初值时,修正为3CBDH,在运行中可根据误差情况进一步调整。,在运行中可根据误差情况进一步调整。 A.2.3 显示电路设计显示电路设计 为了按时、分、秒的格式显示实时时间为了按时、分、秒的格式显示实时时间,需要使用,需要使用6只只LED数码显示管本项目采数码显示管本项目采用共阴极用共阴极LED数码管)。为了减少硬件开数码管)。为了减少硬件开销,
10、提高系统可靠性和降低成本,选择销,提高系统可靠性和降低成本,选择LED数码管的显示方式为动态扫描显示。数码管的显示方式为动态扫描显示。由于驱动由于驱动LED数码管需要一个字形口和一数码管需要一个字形口和一个字位口,为此,采用并行个字位口,为此,采用并行I/O接口芯片接口芯片8155对单片机进行对单片机进行I/O口扩展。口扩展。 选择选择8155的的B口作为字形口,将口作为字形口,将B口经口经74LS07和所有和所有LED的的a、b、c、d、e、f、g、h引线相连;引线相连;8155的的A口作为字位口,口作为字位口,其中的其中的6个引脚经个引脚经74LS07分别和分别和6个个LED的的控制端控制
11、端G相连。单片机工作时通过相连。单片机工作时通过8155的的B口输出字形码,再通过口输出字形码,再通过A口输出字位码以控口输出字位码以控制被选中的一个制被选中的一个LED点亮。当与时、分、点亮。当与时、分、秒对应的字形码轮流输出时,相应的字位秒对应的字形码轮流输出时,相应的字位码从左到右轮流选中码从左到右轮流选中LED,打铃机的实时,打铃机的实时时间就可以逐次在时间就可以逐次在LED上动态显示。上动态显示。 A.2.4 控制电路设计控制电路设计1 1时间调校电路时间调校电路2 2输出控制电路输出控制电路3 3自动打铃机硬件接线图自动打铃机硬件接线图4 4自动打铃机硬件接线图说明自动打铃机硬件接
12、线图说明5 5图图A.1A.1中中81558155的端口地址分析的端口地址分析1 1时间调校电路时间调校电路 选择采用外部中断请求来进行时间调校选择采用外部中断请求来进行时间调校。将。将“校时按键和校时按键和“校分按键分别接到校分按键分别接到单片机的单片机的P3.3和和P3.2引脚,每当用引脚,每当用户按下一次时间调校按键,便会产生一次外户按下一次时间调校按键,便会产生一次外部中断请求,单片机响应中断后,在中断服部中断请求,单片机响应中断后,在中断服务程序中对相应的计时单元进行加务程序中对相应的计时单元进行加1。若加。若加至超过计时基制,通过程序控制计时单元清至超过计时基制,通过程序控制计时单
13、元清0,这样只用加,这样只用加1控制就可以进行校时。控制就可以进行校时。 2输出控制电路输出控制电路 选取单片机的选取单片机的P1.0引脚用于连接电铃驱动引脚用于连接电铃驱动电路,电路,P1.4引脚用于连接广播设备驱动电路。引脚用于连接广播设备驱动电路。在项目实验调试阶段,电铃和广播设备用发光在项目实验调试阶段,电铃和广播设备用发光二极管代替,将发光二极管的负端与输出引脚二极管代替,将发光二极管的负端与输出引脚连接,使用低电平驱动。连接,使用低电平驱动。 连接连接P1.0的发光二极管绿色亮表示打的发光二极管绿色亮表示打铃,灭则表示不打铃。铃,灭则表示不打铃。 连接连接P1.4的发光二极管红色亮
14、表示打的发光二极管红色亮表示打开广播设备,灭则表示停止广播。开广播设备,灭则表示停止广播。 3 自动打铃机硬件接线图自动打铃机硬件接线图 图图A.1 A.1 自动打铃机硬件接线图自动打铃机硬件接线图 4 自动打铃机硬件接线图说明自动打铃机硬件接线图说明 在图在图A.1中,所用的单片机型号为中,所用的单片机型号为8031,因为采,因为采用单片机开发实验装置进行试验时,所加载的源程序用单片机开发实验装置进行试验时,所加载的源程序是存放在实验装置的是存放在实验装置的RAM存储器中的,无需用到单存储器中的,无需用到单片机的片内片机的片内ROM,所以在项目设计实验阶段只要使,所以在项目设计实验阶段只要使
15、用无用无ROM型的型的8031单片机即可。单片机即可。 实验成功后,需要做成实用的打铃机时,若仍采实验成功后,需要做成实用的打铃机时,若仍采用用8031,则需要给,则需要给8031扩展片外扩展片外ROM,现在由于具,现在由于具有片内有片内ROMEPROM、E2PROM或或FPEROM的的单片机价格不高,因而,实际应用时,通常直接选用单片机价格不高,因而,实际应用时,通常直接选用与与MCS-51兼容的具有片内兼容的具有片内FPROM的单片机如的单片机如AT89C51、AT89C52等)。等)。 5 图图A.1中中8155的端口地址分析的端口地址分析 当当IO/= 1时,单片机选择时,单片机选择8
16、155作为作为I/O口,口,8155的的端口地址为:端口地址为:8000H 命令命令/状态口状态口8001H A口字位口)口字位口)8002H B口字形口)口字形口)8003H C口未使用)口未使用)8004H 定时器定时器/计数器低字节未使用)计数器低字节未使用)8005H 定时器定时器/计数器高字节未使用)计数器高字节未使用)8008HFFFDH 8155重叠重叠I/O地址地址5 图图A.1中中8155的端口地址分析的端口地址分析 当当IO/= 0时,单片机选择时,单片机选择8155中的中的RAM存存储器工作,储器工作,RAM的地址为:的地址为:0000H00FFH 8155基本基本RAM
17、地址地址0100H7FFFH 8155重叠重叠RAM地址地址 在该应用项目中,只用到在该应用项目中,只用到8155其中的其中的命令命令/状态口、状态口、A口和口和B口。未使用口。未使用8155中中的的RAM存储器。存储器。A.3 软件设计软件设计A.3.1 程序的总体设计程序的总体设计A.3.2 程序流程图设计程序流程图设计A.3.3 源程序设计源程序设计A.3.1 程序的总体设计程序的总体设计 程序的总体设计主要是根据通过硬件设计所程序的总体设计主要是根据通过硬件设计所确定的硬件电路以及编程需要,进行单片机的确定的硬件电路以及编程需要,进行单片机的资源分配、引脚定义以及设计出控制字、控制资源
18、分配、引脚定义以及设计出控制字、控制码等。包括如下内容:码等。包括如下内容:1 1设计时间控制字设计时间控制字2 2ROMROM资源分配资源分配3 3RAMRAM资源分配资源分配1 1设计时间控制字设计时间控制字 为了能在控制程序中识别出应在何时进行何种控制为了能在控制程序中识别出应在何时进行何种控制,时间控制字可采用如图,时间控制字可采用如图A.2所示的格式。所示的格式。图图A.2 时间控制字的格式时间控制字的格式 每个控制字的字长为每个控制字的字长为4个字节,以每两个控制字为一个字节,以每两个控制字为一组,每组需要占用组,每组需要占用8个个ROM存储单元。控制字中的时、分存储单元。控制字中
19、的时、分、秒为需要做出控制启动或关闭装置的时间点,控、秒为需要做出控制启动或关闭装置的时间点,控制码则用于指示该做何种控制。制码则用于指示该做何种控制。 由于在硬件设计时,选取单片机的由于在硬件设计时,选取单片机的P1.0用作用作电铃的开启和关闭,电铃的开启和关闭,P1.4用作广播的开启和关闭用作广播的开启和关闭,电铃和广播用发光二极管代替,而且使用低电,电铃和广播用发光二极管代替,而且使用低电平驱动,所以只要从平驱动,所以只要从P1.0引脚输出低电平引脚输出低电平0,就可,就可以开启电铃;输出高电平以开启电铃;输出高电平1,就可以关闭电铃。,就可以关闭电铃。 于是启动电铃和关闭电铃的控制码可
20、以分别于是启动电铃和关闭电铃的控制码可以分别设计为设计为FEH1111 1110B和和FFH1111 1111B)。同理,启动广播设备和关闭广播设备的控制)。同理,启动广播设备和关闭广播设备的控制码可以分别设计为码可以分别设计为EFH1110 1111B和和FFH1111 1111B),如表),如表A.2所示。所示。 控制码的设计控制码的设计表表A.2A.2控制码的定义及其功能控制码的定义及其功能 控制码 功能 对应的输出引脚与状态 FEH 启动电铃 P1.0 = 0 EFH 启动广播 P1.4 = 0 FFH 关闭装置 P1.0 = 1,P1.4 = 1 00H 数据区结束 根据作息时间表见
21、表根据作息时间表见表A.1的具体控制时间的具体控制时间,按图,按图A.2的格式和表的格式和表A.2的定义,编出所有的控制的定义,编出所有的控制字,并依照控制时间的先后为顺序依次存入字,并依照控制时间的先后为顺序依次存入ROM的数据区中,构成由控制字组成的控制字码表,控的数据区中,构成由控制字组成的控制字码表,控制码为制码为00H时,表示数据区的结束。时,表示数据区的结束。时间控制字的设计时间控制字的设计例如:例如: “6:20 起起 床,启动电铃持续响铃床,启动电铃持续响铃15秒秒的时间控制字为:的时间控制字为:FE062000 FF062015 2 2ROMROM资源分配资源分配 由于单片机
22、初始或复位时,程序计数器由于单片机初始或复位时,程序计数器PC的内的内容为容为0000H,所以,所以ROM的的0000H应作为主程序的入应作为主程序的入口地址。又由于项目中需用到外部中断口地址。又由于项目中需用到外部中断0、外部中断、外部中断1和和T0中断,因而,需要将中断,因而,需要将ROM的的0003H、0013H和和000BH留作相应的中断入口。留作相应的中断入口。 为此,主程序安排跳转到为此,主程序安排跳转到ROM的的0050H以后的以后的单元。数据区的入口地址,可以在整个程序编写完单元。数据区的入口地址,可以在整个程序编写完成,并进行汇编后,再视已经占用多少成,并进行汇编后,再视已经
23、占用多少ROM单元而单元而定。对于本应用项目,估计不含数据区的程序空间定。对于本应用项目,估计不含数据区的程序空间小于小于1000H,因而,将数据区的起始地址设定为,因而,将数据区的起始地址设定为1010H。如若不然,再根据实际情况加以调整。如若不然,再根据实际情况加以调整。 2 2ROMROM资源分配资源分配 对于本应用项目,估计不含数据区对于本应用项目,估计不含数据区的程序空间小于的程序空间小于1000H,因而,将数据,因而,将数据区的起始地址设定为区的起始地址设定为1010H。如若不然。如若不然,再根据实际情况加以调整。按照表,再根据实际情况加以调整。按照表A.1及表及表A.2编写出的数
24、据表以及数据区在编写出的数据表以及数据区在ROM中所分配的地址如表中所分配的地址如表A.3所示。所示。 表表A.3A.3时间控制字数据区时间控制字数据区 地 址 数 据 ( 时 间 控 制 字 ) 1010H 1017H FE 062000 FF062015 1018H 101FH E F062500 FF064000 1020H 1027H FE 072000 FF072010 1028H 102FH FE 074000 FF074015 1030H 1037H FE 075000 FF075010 1038H 103FH FE 083500 FF083510 1040H 1047H FE
25、084500 FF084510 1048H 104FH FE 093000 FF093010 1050H 1057H E F093500 FF094000 1058H 105FH FE 094500 FF094515 1060H 1067H FE 095000 FF095010 1068H 106FH FE 103500 FF103510 1070H 1077H FE 104500 FF104510 1078H 107FH FE 113000 FF113010 1080H 1087H FE 141500 FF141515 表表A.3A.3时间控制字数据区续)时间控制字数据区续) 地 址 数 据
26、 ( 时 间 控 制 字 ) 1088H 108FH E F141600 FF142000 1090H 1097H FE 142500 FF142515 1098H 109FH FE 143000 FF143010 10A 0H 10A 7H FE 151500 FF151510 10A 8H 10A FH FE 152500 FF152510 10B 0H 10B 7H FE 161000 FF161010 10B 8H 10B FH FE 162000 FF162010 10C 0H 10C 7H FE 170500 FF170510 10C 8H 10C FH FE 171500 FF1
27、71510 10D 0H 10D 7H FE 180000 FF180010 10D 8H 10D FH FE 192000 FF192015 10E 0H 10E 7H FE 193000 FF193010 10E 8H 10E FH FE 213000 FF213010 10F0H 10F7H FE 230000 FF230015 10F8H 00( 数 据 区 结 束 ) 3 3RAMRAM资源分配资源分配 程序中所用到的单片机片内程序中所用到的单片机片内RAM数据存储单数据存储单元分配如下。元分配如下。26H: 0.1s计数单元计数单元 27H: 秒计数单元秒计数单元 28H: 分计数
28、单元分计数单元 29H: 时计数单元时计数单元2AH: 计时单元指针初值计时单元指针初值 2BH: 存放秒计数基制存放秒计数基制2CH: 存放分计数基制存放分计数基制 2DH: 存放时计数基制存放时计数基制2EH: 数据区地址暂存单元数据区地址暂存单元 3AH: 控制码存储单元控制码存储单元3BH、3CH: 数据暂存单元数据暂存单元 4AH4FH: 显示缓冲区显示缓冲区5AH: 堆栈栈底堆栈栈底A.3.2 程序流程图设计程序流程图设计1 1主程序流程图主程序流程图2 2中断服务程序流程图中断服务程序流程图3 3显示子程序流程图显示子程序流程图4 4T0T0中断服务程序流程图中断服务程序流程图5
29、 5控制子程序流程图控制子程序流程图1 1主程序流程图主程序流程图图图A.3 主程序流程图主程序流程图 主程序中主要完成的初始化工作主程序中主要完成的初始化工作(18155初始化:主要是向初始化:主要是向8155写入命令字,写入命令字,将将8155的的A口、口、B口的工作方式设置为基本口的工作方式设置为基本I/O口口,并将它们均设置为输出,因而,需要写入,并将它们均设置为输出,因而,需要写入8155的命令字为的命令字为03H。(2设置堆栈指针:单片机堆栈指针的初始值设置堆栈指针:单片机堆栈指针的初始值为为07H,如果不作改变,堆栈将占用第,如果不作改变,堆栈将占用第1组工作组工作寄存器的区域,
30、为了方便编程时使用该组工作寄寄存器的区域,为了方便编程时使用该组工作寄存器,并且避免与位寻址区和已经分配了的存器,并且避免与位寻址区和已经分配了的RAM单元冲突,决定将堆栈指针初始值设为单元冲突,决定将堆栈指针初始值设为5AH。(3设置定时器工作方式:在实时时钟设计设置定时器工作方式:在实时时钟设计时,已选定定时器时,已选定定时器T0为工作方式为工作方式1,所以应写,所以应写入定时器工作方式寄存器入定时器工作方式寄存器TMOD的控制字为的控制字为01H。(4设置定时器初值及启动定时器:根据前设置定时器初值及启动定时器:根据前面的分析,定时器初值为面的分析,定时器初值为3CB0H。在主程序。在主
31、程序中只要将中只要将3CH送入送入TH0,B0H送入送入TL0则可。则可。送完定时初值后,只要令定时器控制寄存器送完定时初值后,只要令定时器控制寄存器TCON中的中的TR0位为位为1,便可以启动,便可以启动T0工作。工作。主程序中主要完成的初始化工作主程序中主要完成的初始化工作(5设置中断允许方式:在本项目中用到设置中断允许方式:在本项目中用到T0中断和中断和 、 这两个外部中断,为了这两个外部中断,为了开放它们,应向中断允许控制寄存器写入的开放它们,应向中断允许控制寄存器写入的控制字为控制字为87H。 、 用于通过用于通过“校时按键和校时按键和“校分按键进行时间调校,因而,中断方式校分按键进
32、行时间调校,因而,中断方式应选择为电平触发方式。由于位于中断标志应选择为电平触发方式。由于位于中断标志寄存器寄存器TCON中的中断触发方式控制位的缺省中的中断触发方式控制位的缺省值为值为0,即已选择为电平触发方式,所以无需,即已选择为电平触发方式,所以无需改变改变TCON的内容。的内容。INT0INT1INT0INT1主程序中主要完成的初始化工作主程序中主要完成的初始化工作、图图A.4 A.4 、 中断服务程序流程图中断服务程序流程图INT0INT12 2 中断服务程序流程图中断服务程序流程图设计中断服务程序的注意事项:设计中断服务程序的注意事项:(1 1由于由于 、 的中断入口地的中断入口地
33、址分别为址分别为0003H0003H和和0013H0013H,它们之间的空,它们之间的空间无法放下相应的中断服务程序,所以间无法放下相应的中断服务程序,所以编程时需要在上述地址安排长转移指令编程时需要在上述地址安排长转移指令跳转到各自的中断服务程序实际存放地跳转到各自的中断服务程序实际存放地址。址。 INT0INT1(2进入中断服务程序后,首先需要关中断进入中断服务程序后,首先需要关中断,目的是保证用户每按一次时间调校按键,相,目的是保证用户每按一次时间调校按键,相应计时单元的计时值只递增一次而不是多次。应计时单元的计时值只递增一次而不是多次。这是因为这是因为 、 这两个外部中断的这两个外部中
34、断的中断方式选择为电平触发方式,在此方式下,中断方式选择为电平触发方式,在此方式下,CPU响应中断后,如果外部中断源不能及时响应中断后,如果外部中断源不能及时撤除它在撤除它在 或或 上的低电平,就会上的低电平,就会使相应中断标志位使相应中断标志位IE0或或IE1保持为保持为1,从而导,从而导致致CPU错误地重复响应中断,因而,进入中错误地重复响应中断,因而,进入中断服务程序时,需要先暂时关闭中断。断服务程序时,需要先暂时关闭中断。INT0INT0INT1INT1设计中断服务程序的注意事项:设计中断服务程序的注意事项:(3消除按键抖动的目的是为了准确识别消除按键抖动的目的是为了准确识别用户的按键
35、动作,确认用户按下并释放按键用户的按键动作,确认用户按下并释放按键后,才算是一次按键动作,如果用户按住按后,才算是一次按键动作,如果用户按住按键不放,就一直等待。由于键不放,就一直等待。由于“校时和校时和“校校分按键是与单片机的分按键是与单片机的P3.3和和P3.2引脚连接引脚连接的,所以编程时,可使用如下指令实现等待的,所以编程时,可使用如下指令实现等待按键释放:按键释放: JNB P3.3, $ 或或 JNB P3.2, $设计中断服务程序的注意事项:设计中断服务程序的注意事项:(4程序在完成对相应计时单元进行加程序在完成对相应计时单元进行加1或加或加至超过计时基制对相应的计时单元清至超过
36、计时基制对相应的计时单元清0的工作的工作后,及时调用显示子程序的目的是使用户能即后,及时调用显示子程序的目的是使用户能即时看到校时的结果。时看到校时的结果。(5程序在中断返回前开中断是为了把进入程序在中断返回前开中断是为了把进入中断服务程序时,关中断了的中断服务程序时,关中断了的 或或 中中断重新打开,为响应用户下一次的时间调校做断重新打开,为响应用户下一次的时间调校做准备。准备。INT0INT1设计中断服务程序的注意事项:设计中断服务程序的注意事项:3显示子程序流程图显示子程序流程图 图图A.5 显示子程序流程图显示子程序流程图 设计显示子程序需要考虑的问题设计显示子程序需要考虑的问题 (1
37、需要显示的实时时间数值,存放需要显示的实时时间数值,存放在在29H时计数单元)、时计数单元)、28H分计数单分计数单元和元和27H秒计数单元秒计数单元3个计时单元中个计时单元中,每个计时单元为两个,每个计时单元为两个BCD数。为了便于数。为了便于显示时读取这些数据,显示子程序首先需显示时读取这些数据,显示子程序首先需要将要将3个计时单元中的个计时单元中的BCD数逐一分开,数逐一分开,并按时、分、秒的顺序分别存入并按时、分、秒的顺序分别存入4AH4FH共共6个单元中的显示缓冲区中。个单元中的显示缓冲区中。 (2本项目使用共阴极本项目使用共阴极LED数数码管,为了将待显示的时间值转换码管,为了将待
38、显示的时间值转换为相应的字形码,需要事先在为相应的字形码,需要事先在ROM中建立好一个共阴中建立好一个共阴LED字形码表。字形码表。从显示缓冲区读出的待显示数据通从显示缓冲区读出的待显示数据通过查表指令转换成字形码。过查表指令转换成字形码。设计显示子程序需要考虑的问题设计显示子程序需要考虑的问题 (3采用动态显示方式。显示一遍时、分采用动态显示方式。显示一遍时、分、秒的过程是:按、秒的过程是:按4AH4FH的顺序逐一读出的顺序逐一读出显示缓冲区中的数据,转换成字形码后,逐个显示缓冲区中的数据,转换成字形码后,逐个从从8155的字形口的字形口B口送至口送至LED的字形码输的字形码输入脚,每送出一
39、个字形码便从入脚,每送出一个字形码便从8155的字位口的字位口A口送出相应的字位码,于是被字位码选口送出相应的字位码,于是被字位码选中的中的LED就会显示出相应的字形。字位码设计就会显示出相应的字形。字位码设计成从左到右轮流选中成从左到右轮流选中LED数码管,这样便可以数码管,这样便可以将时、分、秒从左到右显示在将时、分、秒从左到右显示在6个个LED数码管数码管上。每个的显示控制过程相同,因而,在程序上。每个的显示控制过程相同,因而,在程序中采用循环结构来编程。中采用循环结构来编程。设计显示子程序需要考虑的问题设计显示子程序需要考虑的问题 (4由于各个由于各个LED数码管是逐位轮数码管是逐位轮
40、流点亮的,如果轮流点亮的过程太快,流点亮的,如果轮流点亮的过程太快,人眼无法看清。所以每点亮一个人眼无法看清。所以每点亮一个LED数数码管,都需要适当延时一小段时间才行码管,都需要适当延时一小段时间才行,程序中选择的延时时间为,程序中选择的延时时间为1ms。 设计显示子程序需要考虑的问题设计显示子程序需要考虑的问题 (5考虑到考虑到6个个LED的字形码输入脚的字形码输入脚是一一对应并接在一起的,所以当第是一一对应并接在一起的,所以当第1个个LED显示完后,在送第二个字形码但尚显示完后,在送第二个字形码但尚未送出第二个字位码时,会导致该字形未送出第二个字位码时,会导致该字形码在第码在第1个个LE
41、D上显示。为了避免发生这上显示。为了避免发生这种现象,保证显示的准确性,在每个种现象,保证显示的准确性,在每个LED显示之前都进行显示之前都进行“关显示操作。关显示操作。设计显示子程序需要考虑的问题设计显示子程序需要考虑的问题4 4T0T0中断服务程序流程图中断服务程序流程图图图A.6 T0A.6 T0中断服务程序流程图中断服务程序流程图 设计设计T0中断服务程序注意事项中断服务程序注意事项 (1进入进入T0中断服务程序时必须首先进行现场保护中断服务程序时必须首先进行现场保护,对主程序中的累加器和有关的工作寄存器的内容加以,对主程序中的累加器和有关的工作寄存器的内容加以保护,在中断返回时,再予
42、以恢复。保护,在中断返回时,再予以恢复。 (2由于由于T0中断服务程序是因为中断服务程序是因为T0产生计数溢出才产生计数溢出才执行的,因而,为了保证执行的,因而,为了保证T0能不断产生能不断产生0.1S基准时间基准时间信号,每次进入信号,每次进入T0中断服务程序时,都要重装中断服务程序时,都要重装T0的定的定时初值,而且这时重装的应是修正过的初值,如前所述时初值,而且这时重装的应是修正过的初值,如前所述,在本项目中,此值为,在本项目中,此值为3CBDH。 (3每当计时每当计时1s,就要调用一次控制子程序,以实,就要调用一次控制子程序,以实现每隔现每隔1s就通过控制子程序查看一遍由时间控制字组就
43、通过控制子程序查看一遍由时间控制字组成的数据区,使打铃控制误差不会超过成的数据区,使打铃控制误差不会超过1s。5 5控制子程序流程图控制子程序流程图 图图A.7 A.7 控制子程序流程图控制子程序流程图 控制子程控制子程序的主要功能序的主要功能是每调用一次是每调用一次,就查看一遍,就查看一遍存放时间控制存放时间控制字的数据区,字的数据区,检查每个控制检查每个控制字所设置的时字所设置的时间是否与现行间是否与现行时间相同,若时间相同,若相同,则通过相同,则通过P1口输出控制口输出控制信号。信号。A.3.3 源程序设计源程序设计 起始程序起始程序 主程序主程序 中断服务程序中断服务程序 中断服务程序
44、中断服务程序 显示子程序显示子程序 T0中断服务程序中断服务程序 控制子程序控制子程序 字形码表字形码表 控制字码码表控制字码码表INT0INT1起始程序起始程序; 起始程序:起始程序:; 编号编号 指令指令 注释注释1ORG0000H2LJMPMAIN ; 转主程序转主程序3ORG 0003H4LJMP BREAK0; 转转 中断中断5 ORG 000BH6 LJMP CLOCK ; 转定时器转定时器T0中断中断7ORG 0013H8LJMP BREAK1; 转转 中断中断 注:其中的编号是为了便于书中引用说明而加,注:其中的编号是为了便于书中引用说明而加,编译源程序时应把它们去掉。编译源程
45、序时应把它们去掉。INT0INT1主程序主程序; 主程序:主程序:9ORG0050H10 MAIN: MOVA, #03H; 8155初始化命令字初始化命令字11MOV DPTR, #8000H; 8155命令口地址命令口地址12MOVX DPTR, A; 向向8155写入命令字写入命令字13MOV SP, #5AH; 栈底移至栈底移至5AH14MOV 2BH, #60H ; 秒计数基制秒计数基制15MOV 2CH, #60H ; 分计数基制分计数基制16MOV 2DH, #24H ; 时计数基制时计数基制17MOV TMOD, #01H ; 定时器工作方式定时器工作方式118MOV TH0,
46、 #3CH ; 置置T0初值初值19MOV TL0, #0B0H20MOV IE, #87H; 允许中断允许中断21 SETB TR0 ; 启动定时器启动定时器T022 LOOP: LCALL DISP; 调用显示子程序调用显示子程序23 LJMP LOOP ; 循环循环 中断服务程序中断服务程序; 中断服务程序中断服务程序: 24 BREAK0:CLR EX0; 关闭关闭 中断中断25 JNB P3.2, $ ; 消除按键抖动消除按键抖动, 等待按键释放等待按键释放26 INC 28H ; 分单元加分单元加127 MOV A, 28H ; 十进制调整十进制调整28 ADD A, #00H29
47、 DA A30 MOV 28H, A31 SUBB A, #60H; 不等于计数基制转不等于计数基制转NEXT132 JC NEXT133 MOV 28H, #00H ; 相等相等, 分单元清分单元清034 NEXT1: LCALL DISP ; 调用显示子程序调用显示子程序35 SETB EX0; 开放开放 中断中断36 RETI ; 中断返回中断返回INT0INT0INT0INT0 中断服务程序中断服务程序; 中断服务程序中断服务程序: 37 BREAKl: CLREXl ; 关闭关闭 中断中断38JNB P3.3, $ ; 消除按键抖动消除按键抖动, 等待按键释放等待按键释放39INC
48、29H ; 时单元加时单元加140MOV A, 29H ; 十进制调整十进制调整41ADD A, #00H42DA A43MOV 29H, A44SUBB A, #24H ; 不等于计数基制转不等于计数基制转NEXT245JC NEXT246MOV 29H, #00H ; 相等相等, 时单元清时单元清047 NEXT2: LCALL DISP ; 调用显示子程序调用显示子程序48SETB EXl; 开放开放 中断中断49RETI ; 中断返回中断返回INT1INT1INT1INT1显示子程序显示子程序; 显示子程序显示子程序: 50 DISP:MOV R0, #4FH; 准备向缓冲区放数准备向
49、缓冲区放数51MOV A, 27H; 取秒值取秒值52ACALL PUTT; 放秒值放秒值53MOV A, 28H; 取分值取分值54ACALL PUTT; 放分值放分值55MOV A, 29H ; 取小时值取小时值56ACALL PUTT; 放小时值放小时值57MOV R0, #4AH; 指向显示缓冲区首地址指向显示缓冲区首地址58MOV R2, #0DFH ; 从左边第一位开始显示从左边第一位开始显示59 DISP1: MOV DPTR, #8002H ; 字形口地址字形口地址60MOV A, #00H ; 熄灭码熄灭码61MOVX DPTR, A ; 关显示关显示显示子程序显示子程序60
50、MOV A, #00H ; 熄灭码熄灭码61MOVX DPTR, A ; 关显示关显示62MOV A, R0 ; 取显示缓冲区中的数取显示缓冲区中的数63MOV DPTR, #SEGTAB ; 指向字形码表首指向字形码表首64MOVC A, A+DPTR; 查表查表, 找字形码找字形码65MOV DPTR, #8002H; 字形口地址字形口地址66MOVX DPTR, A; 送出字形码送出字形码67MOV A, R2; 取字位码取字位码68MOV DPTR, #8001H; 字位口地址字位口地址69MOVXDPTR, A; 显示一位数字显示一位数字70MOV R3, #00H; 计数延时初值计
51、数延时初值71 DISP2: DJNZ R3, DISP2; 延时一段时间延时一段时间1ms)显示子程序显示子程序71 DISP2: DJNZ R3, DISP2; 延时一段时间延时一段时间1ms)72INCR0; 修改显示缓冲区指针修改显示缓冲区指针73RRA; 为显示下一位做准备为显示下一位做准备74MOV R2, A; 存字位码存字位码75JBACC.7, DISPl; 不到最后一位不到最后一位, 则继续则继续76RET; 显示完显示完6位位, 返回返回77 PUTT: MOV Rl, A; 暂存暂存78ACALL PUTTl; 低低4位先放入缓冲区位先放入缓冲区79MOV A, R1;
52、 取出原数取出原数80SWAP A; 高高4位放入低位放入低4位中位中81 PUTT1: ANL A, #0FH ; 屏蔽高屏蔽高4位位82MOV R0, A; 放进显示缓冲区放进显示缓冲区83DECR0 ; 缓冲区地址指针减缓冲区地址指针减184RET T0中断服务程序中断服务程序; T0中断服务程序中断服务程序: 85 CLOCK: PUSH PSW; 保护现场保护现场86PUSH ACC87SETB RS0; 选择工作寄存器组选择工作寄存器组188MOV TH0, #3CH ; 重装定时器重装定时器T0初值初值89MOV TL0, #0BDH90INC 26H; 0.1s单元加单元加19
53、1MOV A, 26H ; 取取0.1s单元内容单元内容92CJNE A, #0AH, DONE1 ; 不等于不等于10, 转转DONE193MOV 26H, #00H ; 等于等于10, 则清则清094MOV R0, #27H ; 指向秒计数单元指向秒计数单元95MOV R1, #2BH ; 指向秒计数基制单元指向秒计数基制单元96MOV R3, #03H; 循环循环3次次(秒、分、时秒、分、时)97 CLOCK1:MOV A, R0; 取计时单元的值取计时单元的值T0中断服务程序中断服务程序97 CLOCK1:MOV A, R0; 取计时单元的值取计时单元的值98ADD A, #01H;
54、计时单元加计时单元加199DA A; 十进制调整十进制调整100MOV R0, A; 送回计时单元送回计时单元101MOV 3BH, Rl; 取计时基制取计时基制102CJNE A, 3BH, NEXT3 ; 不等于计时基制不等于计时基制, 转出转出103MOV R0, #00H; 相等相等, 则计时单元清则计时单元清0104INC R0; 计时单元指针加计时单元指针加1105INC R1; 时间基制单元指针加时间基制单元指针加1106DJNZ R3, CLOCK1 ; 秒、分、时共秒、分、时共3次循环次循环107 NEXT3: ACALL CTRL; 调用控制子程序调用控制子程序108 DO
55、NE1: POPACC; 恢复现场恢复现场109POP PSW110RETI; 中断返回中断返回 控制子程序控制子程序; 控制子程序控制子程序111 CTRL: MOV DPTR, #100CH; 指向控制字码表首址前指向控制字码表首址前4单元单元112MOV 2EH, DPL; 暂存指针低暂存指针低8位地址位地址113 CTRL1: MOV DPL, 2EH; 取出指针低取出指针低8位地址位地址114MOV R3, #04H; 控制字码表指针加控制字码表指针加1次数次数115 CTRL2: INC DPTR; 控制字码表指针加控制字码表指针加1116DJNZ R3, CTRL2; 指针指向下
56、一个控制字指针指向下一个控制字117MOV 2EH, DPL; 暂存指针低暂存指针低8位位118MOV R3, #03H; 核对时、分、秒共核对时、分、秒共3次次119CLRA120MOVC A, A+DPTR ; 取控制码取控制码121JZ DONE2; 若若A0, 则数据区结束则数据区结束122MOV 3AH, A ; 保护控制码保护控制码123MOV R1, #2AH; 设置计时单元指针设置计时单元指针124 CTRL3: INC DPTR ; 修改控制字码表指针修改控制字码表指针控制子程序控制子程序124 CTRL3: INC DPTR ; 修改控制字码表指针修改控制字码表指针125D
57、EC R1 ; 修改计时单元指针修改计时单元指针126CLR A; 准备查表准备查表127MOVC A, A+DPTR ; 读取控制字时间值读取控制字时间值128MOV 3CH, A ; 暂存暂存129MOV A, R1; 读取计时单元时间值读取计时单元时间值130CJNE A, 3CH, CTRL1; 比较时间值是否相等比较时间值是否相等131DJNZ R3, CTRL3; 3次循环次循环132MOV A, 3AH ; 3次比较相等次比较相等, 恢复控制码恢复控制码133MOV P1, A ; 由由Pl口输出口输出, 执行控制执行控制134 DONE2: RET; 子程序返回子程序返回字形码
58、表字形码表; 字形码表字形码表: SEGTAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH136 DB 07H, 7FH, 6FH控制字码码表控制字码码表; 控制字码表控制字码表: 137ORG 1010H138DB0FEH, 06H, 20H, 00H, 0FFH, 06H, 20H, 15H139DB0EFH, 06H, 25H, 00H, 0FFH, 06H, 40H, 00H140DB0FEH, 07H, 20H, 00H, 0FFH, 07H, 20H, 10H141DB0FEH, 07H, 40H, 00H, 0FFH, 07H, 40H, 15H1
59、42DB0FEH, 07H, 50H, 00H, 0FFH, 07H, 50H, 10H143DB0FEH, 08H, 35H, 00H, 0FFH, 08H, 35H, 10H144DB0FEH, 08H, 45H, 00H, 0FFH, 08H, 45H, 10H145DB0FEH, 09H, 30H, 00H, 0FFH, 09H, 30H, 10H146DB0EFH, 09H, 35H, 00H, 0FFH, 09H, 40H, 00H控制字码码表控制字码码表146DB0EFH, 09H, 35H, 00H, 0FFH, 09H, 40H, 00H147DB0FEH, 09H, 45H
60、, 00H, 0FFH, 09H, 45H, 15H148DB0FEH, 09H, 50H, 00H, 0FFH, 09H, 50H, 10H149DB0FEH, 10H, 35H, 00H, 0FFH, 10H, 35H, 10H150DB0FEH, 10H, 45H, 00H, 0FFH, 10H, 45H, 10H151DB0FEH, 11H, 30H, 00H, 0FFH, 11H, 30H, 10H152DB0FEH, 14H, 15H, 00H, 0FFH, 14H, 15H, 15H153DB0EFH, 14H, 16H, 00H, 0FFH, 14H, 20H, 00H154D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 各方责任沟通协议
- 互助学习保证金合同
- 农业种植协议范本
- 媒体广告供货合同
- 国外市场承包合同
- 自支撑磷酸钒钠基全电池:设计原理、制备工艺与电化学性能的深度剖析
- 高中化学 第四章 非金属及其化合物 4.2 富集在海水中的元素-氯教学实录3 新人教版必修1
- 2025年发电机组、内燃发电机组及旋转式变流机合作协议书
- 2025年金属波纹管膨胀节(铝)项目发展计划
- 七年级生物上册第一单元生物和生物圈第二章了解生物圈第一节生物与环境的关系习题6新版新人教版
- 人教版2024-2025学年数学八年级下学期 16.2二次根式的乘除法同步练习【基础练】(含答案)
- 《儿童绘本创编与应用》课件 第1讲 儿童绘本-绪论
- 2025年天翼云解决方案架构师认证考试指导题库-下(多选、判断题)
- 2024年甘肃省白银市中考数学试卷(附答案)
- 煤矿机电维护工职业技能理论考试题库150题(含答案)
- 《走进汽车》课件
- 中国充电桩行业运营趋势及投资价值评估研究报告
- 2025年小红书品牌博主合作合同
- 2025年华能铜川照金煤电有限公司招聘笔试参考题库含答案解析
- 2025年危化企业安全教育培训计划
- 《HR的成长之路》课件
评论
0/150
提交评论