首页 单片机实验指导书

单片机实验指导书

举报
开通vip

单片机实验指导书单片机实验指导书 DTHS-A 互动式实验教学平台 山东工商学院 信息与电子工程学院 2 前 言 单片机原理及应用实验指导书,是针对自动化、电气工程及其自动化、电子信息科学与技术、电子信息工程、计算机科学与技术及通信工程等专业的学生学习《单片机原理及应用课程》而编写的,主要用于互动式单片机教学中实践环节的参考教材。 单片机及相关的应用技术是近代超大规模集成电路技术与计算机技术发展的产物,已经深入到国民经济与人民生活的各个领域。《单片机原理及应用》课程已经被几乎所有工科院校中仪器仪表、测控技术、光机电...

单片机实验指导书
单片机实验指导书 DTHS-A 互动式实验教学平台 山东工商学院 信息与电子 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 学院 2 前 言 单片机原理及应用实验指导书,是针对自动化、电气工程及其自动化、电子信息科学与技术、电子信息工程、计算机科学与技术及通信工程等专业的学生学习《单片机原理及应用课程》而编写的,主要用于互动式单片机教学中实践环节的参考教材。 单片机及相关的应用技术是近代超大规模集成电路技术与计算机技术发展的产物,已经深入到国民经济与人民生活的各个领域。《单片机原理及应用》课程已经被几乎所有工科院校中仪器仪表、测控技术、光机电一体化、电子、通信、计算机等类专业列为本科主干专业课程,是培养现代电子技术应用类专业人才的重要技术课程之一。 单片机实践是学习单片机理论的重要实践环节。通过边学习理论课边实践的教学模式,使学生在课堂理论课学习的基础上,进一步加深对理论知识的理解,学习、掌握单片机的硬件扩展技术、软件编程技术、以及小型应用系统设计技术等相关的技能,增强感性认识,促进认识的深化,培养学生科学的分析能力,使学生掌握单片机应用系统开发的基本方法与基本技能,培养学生严肃认真和实事求是的科学作风,锻炼科学实验的能力。为今后在相关领域中从事与单片机有关的设计、开发、应用等工作打下良好的基础。 本实验指导书是根据《单片机原理及应用》课程实验 教学大纲 职业生涯规划教学大纲中式烹调师教学大纲家畜饲养工教学计划新概念3教学大纲1小学数学教学大纲 的要求,以及我校单片机实验开发系统的情况由张鑫、张岩老师编写。 山东工商学院 信息与电子工程学院 I 目 录 第一章 系统概述 .....................................................................................................1 1.1 上部扩充区(简称上板) ................................................................................ 1 1.2 中部核心控制区(简称中板) ......................................................................... 2 1.3 下部常规实验区(简称下板) ......................................................................... 3 1.4 MCS-51集成开发环境 ..................................................................................... 7 第二章 单片机及其接口实验 ...............................................................................12 实验一 系统认识实验.......................................................................................... 12 实验二 程序设计实验.......................................................................................... 14 实验三 74LS138译码实验 ................................................................................... 15 实验四 P1口输入/输出实验1(控制发光二极管亮灭) ....................................... 17 实验五 P1口输入/输出实验2(控制转向灯) ..................................................... 19 实验六 P3.3口输入/P 1口输出实验 ..................................................................... 22 实验七 MCS-51单片机中断系统实验 .................................................................. 25 实验八 MCS-51单片机内部定时器,计数器实验................................................. 27 并转换实验 ...................................... 29 实验九 MCS-51单片机串行口并,串、串, 实验十 MCS-51单片机串行口双机通信实验........................................................ 31 实验十一 MCS-51单片机与PC通信实验 ............................................................ 33 实验十二 外部数据存储器扩展实验..................................................................... 39 实验十三 外部I/O口扩展实验 ............................................................................ 41 实验十四 工业顺序控制实验 ............................................................................... 43 实验十五 8255 并行口输出方波实验 ................................................................... 47 实验十六 8255并行口输入/输出实验................................................................... 49 实验十七 8255并行口模拟交通灯实验 ................................................................ 51 实验十八 8259中断控制实验 .............................................................................. 54 实验十九 8253定时器,计数器实验.................................................................... 56 实验二十 DS1302实时时钟实验 .......................................................................... 58 实验二十一 X5045P看门狗实验 .......................................................................... 67 实验二十二 D/A数模转换实验............................................................................ 69 实验二十三 A/D模数转换实验............................................................................ 71 实验二十四 8255键盘显示实验........................................................................... 75 实验二十五 LCD128×64液晶显示实验 ................................................................ 81 实验二十六 微型打印机实验 ............................................................................... 88 实验二十七 继电器控制实验 ............................................................................... 90 实验二十八 步进电机控制实验............................................................................ 92 实验二十九 直流电机调速实验............................................................................ 94 实验三十 DS18B20温度闭环实验 ....................................................................... 96 II 第一章 系统概述 DTHS-A是由耐思(NICE)科技有限公司设计制造的MCS-51单片机系统通用型实验台,它以常规实验设备的开放式实验环境为基础,增加了在线检测模式,在自定义环节融入轨迹捕捉,影射和展现实验电路搭接的全过程,为互动教学活动的展开创造了一个较为完整与规范的实践平台。 DTHS-A实验台由三个部分组成:上部为实验台扩充区,适用于课程设计及实验电路与模块的扩展;中部为实验台核心控制区,主要由通用仿真器、在线控制器、轨迹捕捉器及机电与单总线等实验模块组成;下部为实验台常规实验区,适用于基础性教学实践活动。 DTHS-A实验台支持NICE自主研发的集成开发环境,并与KEIL/MPLAB/AVRStudio 等主流开发环境无缝结合。 1.1 上部扩充区(简称上板) 1) 直流电压表 上板右上角配有数字式直流电压表,其量程为?20V;电压表左测的钮子开关用于选择电压表的检测来源。 ? 信号源测量 该钮子开关拨向“外”方向时,位于电压表下方的红孔为电压表输入端(+20V~-20V), 其黑孔为电压表直流地端(非负极性输入端),该端与本工位的“GND”己连接互通,仅适用于实验台二工位之间GND的并端,不允许加载负极性或与“GND”相冲突的信号源; ? 内置源监视 该钮子开关拨向“内”方向时,由位于钮子开关上方的2×3波段开关选择与确认当前监视源。我们强调监视源的选择应在掉电方式下进行,即在关闭直流源的前提下才能拨动波段开关选择当前监视源,否则会引发+5V、+12V、-12V之间的瞬间短接,对低压供电器件的损伤率极高,亦危及开关电源的寿命。 2) 微型打印机 上板偏左上方配有智能窗式针型打印机,位于钮子开关下方的双排八芯座为它的总线口,“STB”孔为打印命令控制端,“BUSY”为打印机忙闲标志,“ERR”为打印机出错标志。 3) 逻辑加密存储卡 存储卡正下方为该卡读写加密控制端,该卡左边为插卡口,该卡右边定义状态标志指示。 1 4) FPGA扩展 上板右下方为FPGA逻辑控制器设计与实践区域,选用Altera EPF10K10LC84-4为硬布线控制器,配有下载口,用符合Xilinx 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的下载电缆即可实现针对EPF10K10LC84-4的逻辑设计与编程。 5) 扩充区 上板左下方为自行设计区域,该区域正下方为阻容件、晶体、三极管、二极管扩充区,该区域左上方为门电路、运放等IC-14以下芯片及集成电阻的扩充区,该区域右上方为IC-40以下集成器件扩充区。 1.2 中部核心控制区(简称中板) 1) CPU单元 中板左上方为实验台CPU选择单元,目前可适配的CPU类型有MCS-51/PIC单片机、以8088为内核的微机接口。 2) 总线接口 ? 数据总线:双向,来源于仿真器。当CPU单元挂51时,它是由P0口隔离驱动后形成双向总线。 ? 地址总线:输出,来源于仿真器。当CPU单元挂51时,它的低八位由P0口驱动锁存输出;它的高八位由P2口隔离驱动输出。 ? 控制总线 , RD:输出,来源于仿真器。当CPU单元挂51时为外部数据读,受P3.7控制。 , WD:输出,来源于仿真器。当CPU单元挂51时为外部数据写,受P3.6 控制。 , ALE:输出,来源于仿真器。当CPU单元挂51时为地址锁存,受51_ALE控制。 , RESET:复位输出,高电平有效,受仿真器复位电路控制。 , MER:输出,来源于仿真器。当CPU单元挂88时为内存读,受8088CPU控制。 , MEW:输出,来源于仿真器。当CPU单元挂88时为内存写,受8088CPU控制。 , AEN:输入,总线出借控制。当CPU单元挂88时为DMA操作,受8237_AEN 控制。 , φ:时钟输出,当CPU单元挂51时,由51CPU第18脚提供。 3) 并行模块 ? LCD液晶显示 其数据线与总线接口中的D7~D0己连接互通,总线连接定义为省缺项。位于LCD正下方的使能控制端“E”,命令与数据选择端“R/S”及读写选择端“R/W”在自行设计状态定义为实验连接项。 ? 8255并行口 其数据线与仿真器中的D7~D0己连接互通。位于8255正右测的“CS”为8255选通控制端。位于LCD正下方的add1~add0为8255地址端A1~A0,位于下板“直流源指示”上方的RD、WR为8255读写控制端,在自行定义状态它们为实验连接项。 2 4) 单总线模块 单总线模块超越并行总线的寻址规则,局限于I/O端口寻址,不宜在线掌控,只能工作在自定义状态,因此在单总线模块的设计与实现中实验连接项不可省缺。 5) 闭环控制 ? 直流电机 直流电机控制单元定义了“调速”与“测速”两个端口,其中调速端为电机启停。正反转及转速控制端,它加载的模拟量范围是0~5V,2.5V时电机处停止状态,大于2.5V启动电机正转,小于2.5V启动电机反转,该端达5V或0V时电机处正转或反转最高速。至于测速端是电机当前状态与转速的反馈端,为电机按设置的参数恒定运作提供依据。在自行设计状态该两个端口定义为实验连接项。 ? 温度控制 温度控制单元定义了“调温”与“测温”两个端口,其中调温端口由5V电源控制,至于测温端口是当前温度传递端口,反馈温度参数,为加温与恒温提供依据。在自行设计状态该两个端口定义为实验连接项。 6) 步进电机 步进电机控制单元设有四拍控制端口,在自行设计状态该四端口定义为实验连接项。 7) 虚拟示波器 实验台提供了一个双通道简易示波器,适用于电位及赫兹级低频信号的测量与观察。 8) 扁平链接口 中板下方设有五个扁平链接口,其中二个20芯扁平口为检测口,其余三个8芯扁平口为地址与数据总线延伸接口。 1.3 下部常规实验区(简称下板) 1) 下板接口 ? 检测接口 下板上方二个20芯扁平口为检测口,“在线”态它为控制口,输出常规实验模块的控制信号。在自定义状态它为状态口,反馈常规实验模块的控制信号。 ? 总线接口 下板上方三个8芯扁平口为地址与数据总线链接口,该三个接口是主控区(中板)扩展寻址的桥梁,面向下板实验时必须连接。 2) 下板总线 ? 控制线 位于“直流源指示”上方的为下板自定义状态的公共控制总线,以下为它们的定义: , CLR 下板区域淸除控制,在自定义实验中连接中板RESET复位信号。 , WR 下板区域写控制,在自定义实验中连接中板控制总线单元WR写信号。 , RD 下板区域读控制,在自定义实验中连接中板控制总线单元RD读信号。 , CLK 下板区域锁存控制,在自定义实验中连接中板ALE信号。 3 ? 地址线 位于“存储器扩展单元”左下测的ADD2~ADD0为下板区域公共地址线,在自定义实验中通常连接中板A2~A0。遇单模块实验可另行定义,例如0809 A/D转换中ADD2~ADD0用于选择通道,可改接中板地址总线单元A2~A0。 ? 译码器 位于“发光二极管显示单元”正下方的138译码器亦有二种定义途径,“在线”态实验台赋于的定义是译码端口CBA与A5~A3相连,选通控制端口G2A(低电平有效)由A14控制,当A14为零时,138输出端Y7~Y0八中选一,有一个输出端为“0”,其余输出端为“1”。它的寻址范围为0~3FFFh,8000h~BFFFh。在自定义方式其选通与译码端口呈悬浮态,属译码控制不可省缺的连接项。 3) 存储器扩展 位于下板右上角为“存储器扩展单元”,它的地址与数据总线通过其上方的三个8芯扁平接口融入中板主控CPU的寻址范围,位于该单元左上测的MR、MW及MCS分别为存储器读、写和选通控制端。自定义态属实验不可省缺的连接项。在线态由在线控制器掌控,寻址范围为0~0FFFh。存储器与I/O口处同一寻址空间,用相同的控制信号,通常采用译码法分享数据寻址空间。 4) I/O口扩展 ? 16×16点阵 16×16点阵位于“存储器扩展单元”正下方,它的数据总线通过8芯扁平接口(下板上右一)与中板总线单元的D7~D0连接互通,“存储器扩展单元”左下测的ADD1~ADD0定义行与列口地址。16×16S为点阵写选通控制,自定义态属实验不可省缺的连接项。在线态由在线控制器掌控,寻址范围为0ECH~0EFH。 ? 键盘与LED显示器 实验台选用8255为并行键盘与LED显示接口,定义其A口为字形口,B口为字位与键扫口,PC2~PC0为键入口。位于并行键盘与显示扩展板左则的8255CS为8255选通控制,它的数据总线通过8芯扁平接口(下板上右一)与中板总线单元的D7~D0连接互通,“存储器扩展单元”左下测的ADD1~ADD0定义其地址线A1~A0,“串并转换单元”右边的RD、WR定义其读写控制信号,自定义态属实验不可省缺的连接项。在线态由在线控制器掌控,寻址范围为0DCH~0DFH。 ? 简易I/O口 实验台选用244为简易I/O口缓冲输入器件,该单元“G”为读选通控制,自定义态属实验不可省缺的连接项。该单元“PI7~PI0”为八位缓冲输入端口。 实验台选用273为简易I/O 口锁存输出器件,该单元“CLK”为锁存触发端,自定义态属实验不可省缺的连接项。该单元“PO7~PO0”为八位锁存输出端口。 ? A/D与D/A 并行A/D转换器ADC0809位于“调模拟电压电位器”正下方,“SC/ALE”为锁通道地址与启动A/D转换,“CLK”为A/D转换时钟,“OE”为A/D采样(读)选通,ADD1~ADD0定义当前通道地址,“自定义”态属实验不可省缺的连接项,“在线”态由在线控制器掌控,寻址范围为0E0H~0E7H,另外“EOC”为A/D转换结束标志,IN7~IN0 4 为A/D转换通道。 并行D/A转换器DAC0832位于“A/D转换单元”左边,“CS”为D/A转换器选通控制,“WR”为D/A转换器启动控制,“自定义”态属实验不可省缺的连接项,“AOUT”为D/A转换器输岀端。 ? 串并转换 并转串165位于下板左上角,它的并行输入端口通过8芯扁平接口(下板上右一)与中板总线单元的D7~D0连接互通,“SERI”与“QH”分别定义串行输岀8位移位寄存器移入与移岀位,“LOAD”为并行输入端口数据装载控制,“LOCK”为串行移位输岀控制。 串转并164位于165正下方,“DATA”为串行数据输入端,“LOCK”为并行移位输岀控制,位于164下方以H~A顺序排列的“8芯单排针”为164的并行输岀口。 ? 定时计数器 8253定时计数单元位于“串并转换”下方,它的总线口通过8芯扁平接口(下板上右一)与中板总线单元的D7~D0连接互通,“CLK2~CLK0”为定时计数时钟输入端,“OUT2~OUT0”为可编程定时计数输岀端。由“ADD1~ADD0”定义地址线A1~A0,RD、WR定义读写控制线,“8253CS”定义它的片选端。 ? 串行通信 8251串行通信单元位于“8253定时计数单元”右测,它的总线口通过8芯扁平接口(下板上右一)与中板总线单元的D7~D0连接互通,“CLK”与“T/RXC”为它的时钟输入端,“RXD”与“TXD”为它的串行接收与发送端,由“ADD0”定义地址线A0,RD、WR定义读写控制线,“8251CS”定义它的片选端。 ? 中断控制 8259中断控制单元位于“8253定时计数单元”下方,它的总线口通过8芯扁平接口(下板上右一)与中板总线单元的D7~D0连接互通,IRQ7~IRQ0为中断向量输入端,位于“8251串行通信单元”下测的“INT”与“INTA”分别为8259中断请求与中断向量读控制,由“ADD0”定义地址线A0,RD、WR定义读写控制线,位于“8253CS”右边的“8259CS”为它的片选端。 ? PACK扩展 “PACK扩展单元”位于下板左上方,可选配USB1.1、USB2.0、以太网TCP/IP、CAN-BUS等接口扩展,本实验台把“RS485远程通信”列为PACK扩展的标配模块。 5) 通用电路 ? 12位电平指示 “12位电平指示”位于下板中上方,L11~L0为12个发光二极管驱动器输入端。低电平点亮,高电平熄灭。 ? 9位电平开关 “9位电平开关”位于下板中下方,K8~K0为逻辑电平开关输出端。开关处上方吋其对应的孔端输出低电平“0”,开关处下方时与其对应的孔端输出高电平“H”。 ? 单脉冲电路 “单脉冲电路”位于138译码器右测,由AN按钮与RS触发器构成单脉冲电路, 5 毎按一次AN按钮,即可从两个插座上分别输出一个正脉冲“SP”及负脉冲“/SP”,供中断、清零、计数等实验使用。其电路如图1.3.1所示。 图1.3.1 单脉冲电路原理图 ? 音频驱动电路 位于AN按钮左边的LM386为音频信号驱动器,其下方为自锁式音频输出控制开关,上方“VIN”为音频信号输入端,音频发生器位于“存储器扩展单元”6264左边。 ? 393分频器 “393分频器”位于“8251串行通信单元”右边,该分频器淸零端受下板CLR控制,其输入频率由4.9152MHz晶体振荡源供给,分频器输岀端T0~T7的频率分别为2.4567MHz、1.2288MHz、614.4KHz、307.2KHz、153.6KHz、76.8KHz、38.4Hz、19.0Hz。其电路如图1.3.2所示。 图1.3.2 分频器电路原理图 ? 继电器控制 “继电器控制”位于D/A转换器左上方,它的输入端“JIN”加载低电平“0”时,继电器吸合,常开触点“JK”闭合,常闭触点“JB”断开,“JZ”为控制信号输入端。 ? RS232串行口 位于138译码器左测的是实验用RS232串行口,它的“TXD”和“RXD”分别为TTL电平级的串行发送与串行接收端。 ? 电压调节器 在下板A/D转换上方。实验台提供二路0~5V模拟电压调节器,适用于A/D与V/F转换等对电压有调节需求的实验。 6 ? 逻辑门电路 在下板138译码器下方左右两测提供了“与”、“或”、“非”三种基本门电路,它们之间的相互串接可形成自定义态实验所需的控制电路。 6) 实验扩充 ? 锁式扩展 在下板逻辑电平开关上方设有一个IC-40芯以下可编程器件的扩展单元,它既适用于I/O接口器件的扩展,亦可作为CPU的扩展区,让学生设计一个简易的单片机控制器。 ? 转接单元 在下板逻辑电平开关上方左右两测设有两个“转接单元”,构造了一个扁平八芯、单排八芯及八位插孔之间的并行互通电路,以实现不同接口之间的相互转接。 1.4 MCS-51集成开发环境 DTHS-A实验台支持NICE自主研发的集成开发环境(IDE)。 (1)打开实验设备后面的蓝色空气开关; (2)打开实验设备中板的直流电源开关; (3)进入NICE集成开发环境进行程序输入与调试。 NICE集成开发环境使用简介: (1)进入NICE集成开发环境 双击桌面上的集成开发环境图标,如图1.4.1所示。 图1.4.1 IDE图标 7 (2)设置串行通信口 双击桌面上的集成开发环境图标后,出现串行通信口设置界面。串行口默认为“串口1”,波特率设置为57600,如图1.4.2所示。点击确认按钮。进入IDE主界面,如图1.4.3所示。 图1.4.2 串行通信口设置 图1.4.3 IDE主界面 (3)新建、保存文件 文件?新建,如图1.4.4所示。输入汇编语言程序文件,保存文件,保存文件类型为汇编文件(*.ASM)。保存文件路径为:E:\A51\。(在E盘应建立A51文件夹) 8 图1.4.4 新建、保存文件设置界面 (4)编辑 图1.4.5 编辑界面 (5)编译、连结源程序。编译无误后,装载程序运行。 1.4.6 编译、连结、装载程图序界面 编译、连结、装载程序也可通过工具栏中的快捷图标实现。如图1.4.7所示。 图1.4.7 编译、连结、装载程序快捷图标 9 (6)调试运行程序 图1.4.8 调试运行界面 (7)建立、打开、编辑工程界面 图1.4.9 建立、打开、编辑工程界面 (8)设置仿真模式、串行通信口界面 仿真模式包括硬件仿真、软件方针;串行通信口包括选择硬件串行通信口、设置串行通信口波特率、重新连结等。如图1.4.10所示。 图1.4.10 设置仿真模式、串行通信口界面 (9)调试窗口、查看存储器内容、查看编译连结信息、示波器界面 视图菜单中包括调试窗口,可以查看变量、寄存器、存储器内容,事件跟踪窗口,查看编译连结信息,逻辑示波器。如图1.4.11所示。 调试窗口可在汇编环境下,产生反汇编代码,在C51环境下,产生汇编与反汇编代码。 10 图1.4.11 调试窗口、查看存储器内容、查看编译连结信息、示波器界面 (10)窗口设置 窗口设置中可实现窗口的层叠、平铺(横、竖),查看前一个窗口、后一个窗口,关闭窗口等功能。如图1.4.12所示。 图1.4.12 窗口设置 (11)工具栏中的快捷图标 鼠标放到工具栏中的快捷图标,系统可自动指示快捷图标的功能。工具栏中的快捷图标指示如图1.4.13所示。 图1.4.13工具栏中的快捷图标指示 11 第二章 单片机及其接口实验 实验一 系统认识实验 一、实验目的 熟悉DTHS-A单片机同步教学互动实验系统的环境,学习并掌握其使用方法。 二、实验内容 n 计算N个数据的和,即。 Y,X,K,1K 其中Xk分别放在片内RAM区30H-35H单元中,N=6,求和的结果Y放在片内RAM 区03H(R3, 高位),04H(R4, 低位)单元中。 验证:32H+41H+01H+56H+11H+03H=00DEH 95H+01H+02H+44H+48H+12H=0136H 54H+F6H+1BH+20H+04H+C1H=024AH 三、实验要求 根据实验内容编写一个程序,并在实验系统上调试和验证程序。 程序参考如下: ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV R0, #30H MOV R3, #00H MOV R4, #00H MOV R7, #06H ST1: MOV A, @ R0 INC R0 ADD A, R3 MOV R3, A MOV A, R4 ADDC A , #00H MOV R4, A DJNZ R7, ST1 SJMP $ END 12 四、实验步骤 1. 打开实验设备后面的蓝色空气开关; 2. 打开实验设备中板的直流电源开关; 3. 进入NICE集成开发环境 4. 新建文件?输入汇编语言源程序?保存文件到E:\A51\?编译连接装载(有错误返回源程序修改)?设置存储器窗口(视图—存储空间—CPU内部存储区)?在30H,35H单元中输入6个求和数据?全速运行?暂停运行(或复位),在CPU内部存储区查看结果。 5. 熟悉IDE环境,学会使用。练习调试程序、单步运行、宏单步运行,学会查看、修改存储器的内容。 13 实验二 程序设计实验 一、实验目的 熟悉MCS-51单片机指令系统,学习并掌握MCS-51单片机程序的调试方法。 二、实验内容 1. 将片内RAM 30H单元中的两位压缩BCD码转换成二进制数送到片内RAM 40H单元中。 2(编制程序将片内RAM的30H,4FH单元中的内容传送至片外RAM的2000H开始的单元中。 3. 设MCS-51单片机内部RAM起始地址为30H的数据块中共存有64个无符号数,编制程序使它们按从小到大的顺序排列。 三、实验要求 根据实验内容编写程序,并在IDE环境中调试和验证。 四、实验步骤 1. 打开实验设备后面的蓝色空气开关; 2. 打开实验设备中板的直流电源开关; 3. 进入NICE集成开发环境 4. 新建文件?输入汇编语言源程序?保存文件到E:\A51\?编译连接装载(有错误返回源程序修改)?全速运行?查看结果。 5. 进一步熟悉IDE环境,学会使用。练习调试程序:单步运行、宏单步运行、全速运行,学会查看、修改存储器的内容。 五、实验程序 略 14 实验三 74LS138译码实验 一、实验目的 74LS138是很常见地址译码逻辑芯片,了解与掌握其基本用法。 二、预备知识 74LS138是低电平有效的3线-8线译码器,数据分配器。 管脚功能描述:VCC是电源。GND接地。A、B、C是地址输入,A是低地址,C是高地址。G1、/G2A、/G2B是控制输入,当G1为“1”并且/G2A和G2B同时为“0”时,138输出端Y7~Y0八中选一,有一个输出端为“0”,其余输出端为“1”。否则Y0,Y7为全“1”。74LS138内部电路及引脚图如图2.3.1所示。 图 2.3.1 74LS138的管脚图和逻辑图 注:实验台对译码器的使能控制端/G2B已连接直流地,GND,~G1已连接VCC。 三、实验内容 1. 通过单片机P1.2~P1.0控制74LS138译码器的使能及译码输入端口,控制其译码输 出端口(Y7~Y0)。 2. 把译码输出端口Y7~Y0连接到L7~L0八位LED电平指示输入端口,验证74LS138 的逻辑译码功能。 四、实验连线 1. 74LS138译码单元/G2A连接GND,C、B、A分别连接P1.2、P1.1、P1.0。 2. 74LS138译码单元Y7~Y0分别连接L7~L0。 15 五、实验步骤 1. 译码控制 改变译码输入端CBA(P1.2~P1.0),与Y7~Y0相对应的L7~L0发光二极管八中选 一,其中一位灯亮,其余灯灭。逻辑关系如表2.3.1所示。 表2.3.1 138译码器控制逻辑关系 输入 输出 C B A 0 0 0 Y0有效,L0亮,其余灯灭 0 0 1 Y1有效,L1亮,其余灯灭 0 1 0 Y2有效,L2亮,其余灯灭 0 1 1 Y3有效,L3亮,其余灯灭 1 0 0 Y4有效,L4亮,其余灯灭 1 0 1 Y5有效,L5亮,其余灯灭 1 1 0 Y6有效,L6亮,其余灯灭 1 1 1 Y7有效,L7亮,其余灯灭 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,观察发光二极管移位点亮情况。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、实验参考程序 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H ST1: CLR A MLOOP: MOV P1,A CALL DELAY INC A JNB ACC.3,MLOOP SJMP ST1 DELAY: MOV R7,#0 DL1: MOV R6,#0 DJNZ R6,$ DJNZ R7,DL1 RET END 16 实验四 P1口输入/输出实验1(控制发光二极管亮灭) 一、实验目的 1. 学习P1口的使用方法; 2. 学习延时子程序的编写。 二、实验预备知识 1. P1口对准双向口,每一位都可独立地定义为输出或输入。 2. 本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz)*指令所需机器周 期数*循环次数,在系统时间允许的情况下可以采用此方法。 三、实验内容 P1口作为输出口,接八个发光二极管,编写程序,使发光二极管循环点亮。 四、实验电路 图2.4.1 P1口亮灯电路图 五、程序流程 图2.4.2 程序流程图 17 六、实验步骤 1. 实验连线 P1.7~P1.0连至L7~L0。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,观察发光二极管闪亮移位情况。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 七、思考 1. 计算延时时间。 2. 改变延时常数,使发光二极管闪亮时间改变。 3. 修改程序,使发光二极管闪亮移位方向改变。 八、实验参考程序 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV P1,#0FFH ;送P1口 MOV A,#0FEH ;L0发光二极管点亮 MLOOP: MOV P1,A LCALL DELAY ;延时 RL A ;左移位 SJMP MLOOP ;循环 DELAY: MOV R6,#0A0H ;延时 D1: MOV R7,#0FFH DJNZ R7,$ DJNZ R6,D1 RET END 18 实验五 P1口输入/输出实验2(控制转向灯) 一、实验目的 进一步了解P1口的使用,学习汇编语言的编程方法与调试技巧。 二、实验内容 P1.0接高电平、P1.1接低电平时,右转向灯闪亮;P1.0接低电平、P1.1接高电平时左转向灯闪亮;否则转向灯关闭。 三、实验电路 图2.5.1 P1口控制转向灯电路图 四、程序流程 图2.5.2 程序流程图 19 五、实验步骤 1. 实验连线 P1.1、P1.0分别连接K1、K0,P1.7~P1.4分别连接L11、 L8、 L5、 L2。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,拨动K1、K0,观察转弯灯正确闪亮。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、实验参考程序 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H PX00: MOV P1,#0FFH ;初始化 PX03: MOV A,P1 MOV B,A ANL A,#03H CJNE A,#01H,PX01 ;满足只是P1.0为高条件吗? JB 00H,PX04 ;闪烁标志位 CLR P1.4 CLR P1.5 ;开右灯 SETB P1.6 SETB P1.7 ;关左灯 MOV R2,#20H LCALL DELAY ;延时 SETB 00H ;置标志位 LJMP PX03 ;继续查状态 PX04: SETB P1.4 SETB P1.5 SETB P1.6 ;关灯 SETB P1.7 MOV R2,#20H LCALL DELAY ;延时 CLR 00H ;清标志位 AJMP PX03 ;继续查状态 PX01: CJNE A,#02H,PX02 ;满足只是P1.1为高条件吗? 20 JB 01H,PX05 ;判标志位 SETB P1.4 SETB P1.5 ;开左灯 CLR P1.6 CLR P1.7 ;关右灯 MOV R2,#20H ;延时 LCALL DELAY SETB 01H ;置标志位 LJMP PX03 ;继续查状态 PX05: SETB P1.4 SETB P1.5 SETB P1.6 ;关灯 SETB P1.7 MOV R2,#20H LCALL DELAY ;延时 CLR 01H ;清标志位 LJMP PX03 ;继续查状态 PX02: SETB P1.4 SETB P1.5 SETB P1.6 ;关灯 SETB P1.7 LJMP PX03 ;继续 DELAY: PUSH 02H ;延时 DEL2: PUSH 02H DEL3: PUSH 02H DEL4: DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END 21 实验六 P3.3口输入/P 1口输出实验 一、实验目的 1. 掌握P1口、P3口的简单使用方法。 2. 学习延时程序的编写和使用。 二、实验内容 1. P3口做输入口,外接一脉冲,每输入一个脉冲,P1口按十六进制加一。 2. P1口做输出口,编写程序,使P1口接的8 个发光二极管L1—L8按16进制加一方 式点亮发光二极管。 三、实验说明 P3口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结构可知:当P3口作为输入口时,必须先对它置高电平,使内部MOS管截止,因内部上拉电阻是20KΩ—40KΩ,故不会对外部输入产生影响。若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。 四、实验电路 图2.6.1 P3.3口输入,P 1口输出电路图 五、程序流程 22 图2.6.2 程序流程图 六、实验步骤 1. 实验连线 P3.3连接K0,P1.7~P1.0分别连接L7~L0。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,观察发光二极管闪亮移位情况。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 七、实验参考程序 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H J100: MOV A,#00H J101: JB P3.3,J101 MOV R2,#20H LCALL DELAY JB P3.3,J101 ;P3.3电平为低吗? J102: JNB P3.3,J102 MOV R2,#20H LCALL DELAY JNB P3.3,J102 ;P3.3电平高吗? INC A ;加1 PUSH ACC CPL A ;取反 23 MOV P1,A ;驱动发光二极管 POP ACC AJMP J101 ;循环 DELY: PUSH 02H DEL2: PUSH 02H DEL3: PUSH 02H ;延时 DEL4: DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END 24 实验七 MCS-51单片机中断系统实验 一、实验目的 学习并掌握MCS-51外部中断技术的的使用和编程方法。 二、实验内容 INT0端接单次脉冲发生器。按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转。 根据实验内容编写一个程序,并在实验系统上调试和验证。 三、实验说明 1. 外部中断的初始化设置共有三项内容:中断总允许EA=1、外部中断允许EXi=1(i=0或1)、中断方式设置。中断请求信号由引脚INT0(P3.2)和INT1(P3.3)引入。 2. 中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。 3. 编中断服务程序应注意: (1)保护进入中断时的状态,并在退出中断之前恢复进入的状态。一般中断程序进入时应保护PSW、ACC以及中断程序使用但非其专用的寄存器。 (2)必须在中断程序中设定是否允许中断重入,即设置EX0位。 四、实验电路 INT0端接单次脉冲发生器,CPU的P10接发光二极管L0。 图2.7.1 MCS-51单片机中断系统实验电路图 五、程序流程 25 图2.7.2 程序流程图 六、实验步骤 1. 实验连线 单片机的P3.2连接单脉冲单元SP,单片机的P1.0连接发光二极管单元L0。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,每按动一次单脉冲按钮观察发光二极管闪亮情况,闪亮时间。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 七、实验参考程序 LED BIT P1.0 LEDBUF BIT 20H ORG 0000H LJMP START ORG 0003H LJMP INT00 ORG 0030H START: MOV SP, #60H CLR LEDBUF CLR LED MOV TCON, #01H ; 外部中断0下降沿触发 MOV IE, #81H ; 打开外部中断允许位(EX0)及总中断允许位(EA) OK: LJMP OK INT00: PUSH PSW ; 保护现场 CPL LEDBUF ; 取反LED MOV C, LEDBUF MOV LED, C POP PSW ; 恢复现场 RETI END 26 实验八 MCS-51单片机内部定时器,计数器实验 一、实验目的 学习并掌握MCS-51内部计数器的使用和编程方法。 二、实验内容 使用MCS-51内部定时/计数器,定时一秒钟,CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。 根据实验内容编写一个程序,并在实验仪器上调试和验证。 三、实验电路 图2.8.1 MCS-51单片机内部定时器,计数器实验电路图 四、程序流程 图2.8.2 程序流程图 27 五、实验步骤 1. 实验连线 CPU的P10接发光二极管L0。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,连续按动单次脉冲产生电路的按键,观察发光二极管闪亮情况。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、实验参考程序 TICK EQU 10000 ; 10000 X 100US = 1S T100US EQU 156 ; 100US时间常数(6M) C100US EQU 30H ; 100US记数单元 LEDBUF BIT 20H ORG 0000H LJMP START ORG 000BH LJMP T0INT ORG 0030H START: MOV SP, #60H MOV TMOD, #02H ; 定时器0,方式2 MOV TH0, #T100US MOV TL0, #T100US MOV IE, #10000010B ; EA=1, IT0 = 1 SETB TR0 ; 开始定时 CLR LEDBUF CLR P1.0 MOV C100US, #27H ;#HIGH(TICK) MOV C100US+1, #10H ;#LOW(TICK) LOOP: MOV C, LEDBUF MOV P1.0, C SJMP LOOP T0INT: PUSH PSW MOV A, C100US+1 JNZ GOON DEC C100US GOON: DEC C100US+1 MOV A, C100US ORL A, C100US+1 JNZ EXIT ; 100US 记数器不为0, 返回 MOV C100US, #27H ; #HIGH(TICK) MOV C100US+1, #10H ; #LOW(TICK) CPL LEDBUF ; 100US 记数器为0, 重置记数器,取反LED EXIT: POP PSW RETI END 28 实验九 MCS-51单片机串行口并,串、串,并转换实验 一、实验目的 1. 掌握串并转换器件74LS164/74LS165应用。 2. 掌握串并转换程序的编写要点。 二、实验内容 利用MCS-51单片机P1.0、P1.1实现并转串、串转并,并把串转并的数据送到发光二极管单元显示。 三、实验说明 并转串的数据口通过LOAD控制电路实现并行数据的装载,并转串的CLK由P1.0控制产生;串转并的串行输入端口DATA与并转串的串行输出端口相连,它的CLK由P1.1控制产生,形成并入串出、串入并出送发光二极管显示。 四、实验电路 图2.9.1 并,串、串,并转换电路图 五、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 29 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 把并转串单元的LOCK和串转并单元的LOCK连接至P1.0。 3) 把并转串单元的QH连接串转并单元的DATA。并转串单元的LOAD连接OR 或门输出端,其输入端分别连接译码器输出端Y5和控制总线单元的WR。 4) 将CLR连接至控制总线单元的RESET。 5) 用8芯排线把串转并单元的8位并行数据口H~A连接到发光二极管单元L7~L0。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,通过并入串出的方式向74LS165循环发送数据,再将74LS165 的数据以串入并出的方式显示到发光二极管,观察L7~L0发光二极管是否对应点亮。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、实验参考程序 CS165 EQU 0FFE8H CLK EQU P1.0 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H CLR CLK MOV A,#7FH STA1: CALL TRXD CALL DELAY RR A SJMP STA1 TRXD: MOV DPTR,#CS165 ;指165并行口 MOVX @DPTR,A ;装载并行数据 MOV R7,#8 TLOOP: CPL CLK NOP NOP NOP CPL CLK NOP NOP NOP DJNZ R7,TLOOP RET DELAY: MOV R6,#0 DL0: MOV R5,#0 DJNZ R5,$ DJNZ R6,DL0 RET END 30 实验十 MCS-51单片机串行口双机通信实验 一、实验目的 1. 掌握串行口工作方式的程序设计,掌握单片机通信程序编制方法。 2. 了解实现串行通信的硬环境,数据 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 的协议,数据交换的协议。 3. 掌握双机通信的原理和方法。 二、实验内容 1. 利用MCS-51单片机串行口,实现双机通信。 2. 本实验将K0~K3作为发送的数据,并将接收到的数据通过L0~L3显示。 三、实验电路 图2.10.1 MCS-51串行口双机通信电路图 四、实验步骤 1. 实验连线 1) 将P1.0~P1.3连接发光二极管L0~L3用于显示接收数据。 2) 将P1.4~P1.7连接逻辑电平开关K0~K3用于发送数据。 3) 将1号机的P3.0(RXD)连接到2号机的P3.1(TXD)。 4) 将1号机的P3.1(TXD)连接到2号机的P3.0(RXD)。 5) 连接1号机和2号机的GND。 2. 实验程序的编写、装载与运行 编写串行发送与接收程序,编译、连接,并分别装载到1号机和2号机,用全速方 式运行程序。 3. 观察运行结果 拨动K0~K3发送数据,观察L0~L3发光二极管显示。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 五、实验参考程序 31 ORG 0000H LJMP START ORG 0023H LJMP UARTINT ORG 0030H START: MOV SP, #60H CALL INIT MLOOP: CALL SEND SJMP MLOOP INIT: MOV TMOD,#20H ;设置T1为方式2 MOV SCON,#50H ;设置串口位方式1 MOV TH1,#0FDH ;设置波特率为9600 MOV TL1,#0FDH MOV PCON,#00H SETB EA SETB ES SETB TR1 ;定时器1开始计数 RET SEND: CLR ES CLR TI MOV A,P1 ANL A,#0F0H MOV SBUF,A ;发送 JNB TI,$ CLR TI SETB ES RET UARTINT:JB RI,RECEIVE CLR TI RETI RECEIVE:CLR RI PUSH ACC MOV A,SBUF ANL A,#0F0H ORL A,#0FH SWAP A MOV P1,A POP ACC RETI END 32 实验十一 MCS-51单片机与PC通信实验 一、实验目的 1. 掌握串行口工作方式的程序设计,掌握单片机通信程序编制方法。 2. 了解实现串行通信的硬环境,数据格式的协议,数据交换的协议。 3. 掌握双机通信的原理和方法。 二、实验内容 1. 利用MCS-51单片机串行口,实现双机通信。 2. 本实验将1号实验机键盘上键入的数字显示到2号实验机的数码管上。 三、实验电路 图2.11.1 MCS-51单片机与PC通信电路图 四、程序流程 图2.11.2 程序流程图 33 五、实验步骤 1. 实验连线 1) 将P3.0、P3.1分别连接到232单元的RXD、TXD 2) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 3) 将ADD1、ADD0分别连接地址总线单元的A1、A0。 4) 键盘显示单元的8255 CS连接译码器输出端Y5。 5) 下板左上方的WR、RD分别连接中板控制总线单元的WR、RD。 6) 用9芯通信线连续232单元的通信口与PC机串口。 2. 实验程序的编写、装载与运行 编写串行发送与接收程序,编译、连接,并分别装载,用全速方式运行程序,并在 PC机运行串口调试软件,设置9600波特率、选择正确的串口并打开。 3. 观察运行结果 1) 单片机发送、PC机接收:按实验台的数字键0~F发送,PC机的串口调试软件 显示接收到的数据; 2) PC机发送、单片机接收:在PC机的串口调试软件发送00~FF数字,实验台数 码管显示接收到的数据。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、实验参考程序 CS8255 EQU 0FFEFH OUTSEG EQU 0FFECH ;字形控制口 OUTBIT EQU 0FFEDH ;字位/键扫控制口 IN_KEY EQU 0FFEEH ;键盘读入口 LEDBUF EQU 7EH ;显示缓冲 ORG 0000H LJMP START ORG 0023H LJMP UARTINT ORG 0030H START: MOV SP,#60H ;给堆栈指针赋初值 MOV DPTR,#CS8255 MOV A,#89H ;命令字:A,B输出、C输入 MOVX @DPTR,A ;8255初始化 CALL INIT MOV LEDBUF-0,#11H MOV LEDBUF-1,#10H MOV LEDBUF-2,#10H MOV LEDBUF-3,#10H 34 MOV LEDBUF-4,#10H MOV LEDBUF-5,#10H MOV LEDBUF-6,#10H MOV LEDBUF-7,#10H MOV B,#0 MLOOP: CALL LEDKEY CJNE A,#10H,LED0 LED0: JNC MLOOP JB B.0,LED2 LED1: MOV LEDBUF-0,A MOV LEDBUF-1,#10H INC B SJMP MLOOP LED2: MOV LEDBUF-1,A INC B MOV A,LEDBUF-0 SWAP A ORL A,LEDBUF-1 CALL SEND SJMP MLOOP INIT: MOV TMOD,#20H ;设置T1为方式2 MOV SCON,#50H ;设置串口位方式1 MOV TH1,#0FDH ;设置波特率为9600 MOV TL1,#0FDH MOV PCON,#00H SETB EA SETB ES SETB TR1 ;定时器1开始计数 RET SEND: CLR ES CLR TI MOV SBUF,A ;发送 JNB TI,$ CLR TI SETB ES RET UARTINT:JB RI,RECEIVE CLR TI RETI RECEIVE:CLR RI MOV A,SBUF PUSH B MOV B,A SWAP A ANL A,#0FH ANL B,#0FH MOV LEDBUF-4,A 35 MOV LEDBUF-5,B POP B RETI ;显示、键扫消抖程序 LEDKEY: CALL DISP ;显示 CALL GETKEY ;得到键盘扫描码 MOV R4,A ;键消抖处理程序 MOV R1,#48H MOV A,@R1 MOV R2,A INC R1 MOV A,@R1 MOV R3,A MOV A,R4 XRL A,R3 MOV R3,04H ;R4 MOV R4,02H ;R2 JZ XGE10 MOV R2,#88H MOV R4,#88H ;键盘消抖延迟参数 XGE10: DEC R4 MOV A,R4 XRL A,#82H JZ XGE11 MOV A,R4 XRL A,#0EH JZ XGE11 MOV A,R4 JZ XGE12 MOV R4,#20H DEC R2 SJMP XGE13 XGE12: MOV R4,#0FH XGE11: MOV R2,04H ;R4 NOP NOP MOV R4,03H ;R3 XGE13: MOV R1,#48H MOV A,R2 MOV @R1,A INC R1 MOV A,R3 MOV @R1,A MOV A,R4 JB ACC.5,XG113 JB ACC.4,XG113 MOV DPTR,#KEYCODE 36 MOVC A,@A+DPTR XG113: RET ;显示子程序 DISP: PUSH DPL PUSH DPH SETB RS1 MOV R0,#LEDBUF MOV R2,#80H MOV DPTR,#LEDMAP DISP2: MOV A,@R0 MOVC A,@A+DPTR PUSH DPL PUSH DPH MOV DPTR,#OUTSEG MOVX @DPTR,A MOV A,R2 MOV DPTR,#OUTBIT MOVX @DPTR,A POP DPH POP DPL MOV R7,#3 ;显示防闪 DISPDL: MOV R6,#00H DJNZ R6,$ DJNZ R7,DISPDL CLR C RRC A ;右移显示 MOV R2,A DEC R0 JNZ DISP2 CLR RS1 POP DPH POP DPL RET ;键扫子程序 GETKEY: SETB RS1 MOV R2,#10000000B MOV R3,#08H MOV R0,#00H LGEP1: PUSH DPL PUSH DPH MOV DPTR,#OUTBIT MOV A,R2 MOVX @DPTR,A RR A MOV R2,A MOV DPTR,#IN_KEY MOVX A,@DPTR 37 POP DPH POP DPL ANL A,#07H JNZ LGEP0 INC R0 DJNZ R3,LGEP1 XGEP33: MOV A,#20H XGEP3: MOV R2,A MOV A,#0FH PUSH DPL PUSH DPH MOV DPTR,#OUTBIT MOVX @DPTR,A POP DPH POP DPL MOV A,R2 CLR RS1 SJMP RETURN LGEP0: CPL A JB ACC.0,XGEP0 MOV A,#00H SJMP LGEPP XGEP0: JB ACC.1,XGEP1 MOV A,#08H SJMP LGEPP XGEP1: JB ACC.2,XGEP33 MOV A,#10H LGEPP: ADD A,R0 SJMP XGEP3 RETURN: RET ;字形表 LEDMAP: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;0~7 DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH ;8~F DB 0FFH,0CH ;' ','P.' ;键值表 KEYCODE:DB 07H,04H,08H,05H,09H,06H,0AH,0BH DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH END 38 实验十二 外部数据存储器扩展实验 一、实验目的 1. 了解数据存储器扩展方法。 2. 掌握数据存储器的寻址方法。 二、实验内容 使用一片6264 SRAM,作为数据存储器,对其进行读写。 三、实验电路 图2.12.1 MCS-51单片机扩展数据存储器电路图 四、实验步骤 1. 实验连线 1) 把存储器扩展单元的MCS连接地址总线单元的A15。 2) 把存储器扩展单元的MW、MR分别连接控制总线单元的WR、RD。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 打开数据存储器窗口,用单步方式运行,程序先向0000~000FH单元依次填入 80~8FH,再将0000~000FH单元传送到0020~002FH。 五、实验参考程序 ORG 0000H LJMP START ORG 0030H 39 START: MOV SP, #60H MOV A,#80H MOV DPTR,#0000H ;0000~000F写入数据 LOOP1: MOVX @DPTR,A INC DPTR INC A CJNE A,#90H,LOOP1 MOV R2,#00H ;源地址 MOV R3,#00H MOV R4,#00H ;目的地址 MOV R5,#20H MOV R6,#00H ;数据长度 MOV R7,#0FH SE22: MOV DPL,R3 MOV DPH,R2 ;建立源程序首址 MOVX A,@DPTR ;取数 MOV DPL,R5 MOV DPH,R4 ;目的地首址 MOVX @DPTR,A ;传送 CJNE R3,#0FFH,LO42 INC R2 LO42: INC R3 ;源地址加1 CJNE R5,#0FFH,LO43 INC R4 LO43: INC R5 ;目地址加1 CJNE R7,#00H,LO44 CJNE R6,#00H,LO45 ;字节数减1 SJMP $ LO44: DEC R7 SJMP SE22 LO45: DEC R7 DEC R6 SJMP SE22 ;未完继续 END 40 实验十三 外部I/O口扩展实验 一、实验目的 学习在单片机系统中扩展简单I/O口的基本方法。 二、实验内容 MCS-51系列单片机对外部设备的访问(即I/O口输入,输出操作)的基本要求是“输入缓冲、输出锁存”。实验中开关量K7~K0的输入经74LS244八位缓冲输入接口实现,74LS273作为锁存输出接口,控制L7~L0八个发光二极管的亮灭。 三、实验电路 图2.13.1 MCS-51单片机扩展外部I/O口电路图 四、程序流程 图2.13.2 程序流程图 41 五、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 244缓冲输入单元的G连接OR或门输出端,该或门的输入端分别连接下板译 码单元的Y5和中板控制总线单元的RD;273锁存输出单元的CLK连接NOR 或非门输出端,该或非门的输出端分别连接下板译码单元的Y5和中板控制总 线单元的WR。 3) 74LS244缓冲输入PI7~PI0分别连接K7~K0,74LS273锁存输出PO7~PO0分别 连接L7~L0。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,拨动K7~K0,观察L7~L0发光二极管是否对应点亮。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、实验参考程序 CS244 EQU 0FFE8H CS273 EQU 0FFE8H ORG 0000H LJMP START 0H ORG 003 START: MOV SP, #60H ST1: MOV DPTR,#CS244 MOVX A,@DPTR ;取出244状态 MOV DPTR,#CS273 MOVX @DPTR,A ;送273驱动发光二极管 SJMP ST1 END 42 实验十四 工业顺序控制实验 一、实验目的 掌握工业顺序控制程序的简单编程,熟悉中断的概念和编程方法。 二、预备知识 在工业控制中,像冲压、注塑、轻纺、制瓶等生产过程,都是一些断续生产过程,按某种程序有规律地完成预定的动作,对这类断续生产过程的控制称顺序控制,例注塑机工艺过程大致按“合模?注射?延时?开模?产伸?产退”顺序动作,用单片机最易实现。 三、实验内容 MCS-51单片机的P1.6~P1.0控制注塑机的七道工序,现模拟控制七只发光二极管的点亮,高电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,高电平启动。P3.3为外故障输入模拟开关,P3.3为0时不断报警。P1.7为报警声音输出,设定6道工序只有一位输出,第七道工序三位有输出。 四、实验说明 实验中用外部中断,,编中断服务程序的关键是: 1. 保护进入中断时的状态,并在退出中断之前恢复进入的状态。 2. 必须在中断程序中设定是否允许中断重入,即设置EX0位。 一般中断程序进入时应保护PSW、ACC以及中断程序使用但非其专用的寄存器,本实验中未涉及。 五、实验电路 43 图2.14.1 工业顺序控制电路图 六、程序流程 图2.14.2 程序流程图 七、实验步骤 1. 实验连线 1) P3.4、P3.3分别连接K0、K1,P1.6~P1.0分别连接L6—L0,P1.7连SIN(音频 44 输入端)。 2) K1、K2开关拨在高电平位置(钮子开关拨向下方)。 3) 按下音频驱动单元自锁式按钮开关(处开位置)。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 1) 用全速方式开始运行程序,此时应在等待开工状态。 2) K0拨至低电平位置,各道工序应正常运行。 3) K1拨至低电平位置,应有声音报警(人为设置故障)。 4) K1拨至高电平位置,即排除故障,程序应从报警的那道工序继续执行。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 八、思考 修改程序,使每道工序中有多位输出。 九、实验参考程序 ORG 0000H LJMP START ORG 0013H LJMP PO16 ORG 0030H START: MOV SP, #60H PO10: MOV P1,#7FH ORL P3,#00H PO11: JNB P3.4,PO11 ;开工吗? ORL IE,#84H ORL IP,#01H MOV PSW,#00H ;初始化 MOV SP,#53H PO12: MOV P1,#7EH ;第一道工序 ACALL PO1B MOV P1,#7DH ;第二道工序 ACALL PO1B MOV P1,#7BH ;第三道工序 ACALL PO1B MOV P1,#77H ;第四道工序 ACALL PO1B MOV P1,#6FH ;第五道工序 ACALL PO1B 45 MOV P1,#5FH ;第六道工序 ACALL PO1B MOV P1,#0FH ;第七道工序 ACALL PO1B SJMP PO12 PO16: MOV B,R2 ;保护现场 PO17: MOV P1,#7FH ;关输出 MOV 20H,#0A0H ;振荡次数 PO18: SETB P1.7 ;振荡 ACALL PO1A ;延时 CLR P1.7 ;停振 ACALL PO1A ;延时 DJNZ 20H,PO18 ;不为0转 CLR P1.7 ACALL PO1A ;停振 JNB P3.3,PO17 ;故障消除吗? MOV R2,B ;恢复现场 RETI PO1A: MOV R2,#06H ACALL DELAY ;延时 RET PO1B: MOV R2,#30H ACALL DELAY ;延时 JNB P3.4,$ RET DELAY: PUSH 02H DEL2: PUSH 02H DEL3: PUSH 02H ;延时 DEL4: DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END 46 实验十五 8255 并行口输出方波实验 一、实验目的 掌握可编程I/O接口芯片8255的接口原理使用,熟悉对8255初始化编程和输入,输出软件的设计方法。 二、实验内容 在8255的PA.PB.PC口用万用表可测出每个口的高低电平变化。或用示波器观察PA.PB.PC的输出波形。 三、程序流程 图2.15.1 程序流程图 四、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 8255并行口的CS连接译码器输出端Y2,位于LCD下方的add1、add0分别连 接A1、A0;8255的读写信号RD、WR(位于下板发光二极管显示单元左侧) 分别连接控制总线单元RD、WR(位于中板控制总线单元)。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,用示波器测量PA、PB、PC任意一位端口的方波输出。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 47 五、实验参考程序 PORTA EQU 0FFD0H PORTB EQU 0FFD1H PORTC EQU 0FFD2H CS8255 EQU 0FFD3H ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H ST1: MOV DPTR,#CS8255 MOV A,#80H MOVX @DPTR,A ;8255初始化 MOV A,#55H ;一位隔一位高电平 LO15: MOV DPTR,#PORTA MOVX @DPTR,A MOV DPTR,#PORTB MOVX @DPTR,A MOV DPTR,#PORTB MOVX @DPTR,A ;PA.PB.PC口送入 MOV R2,#40H ;延时 CALL DELAY CPL A ;取反 SJMP LO15 ;循环 DELAY: PUSH 02H DEL2: PUSH 02H DEL3: PUSH 02H ;延时 DEL4: DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END 48 实验十六 8255并行口输入/输出实验 一、实验目的 1、掌握8255的工作原理及8255和单片机的接口方法 2、掌握8255A的工作方式和编程方法。 二、实验内容 用8255 PA通过逻辑电平开关作输入口,PB通过发光二极管作输出口。 三、实验电路 图2.16.1 MCS-51外扩8255 PA口输入/PB口输出实验 四、程序流程 图2.16.2 程序流程图 49 五、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 8255并行口的CS连接译码器输出端Y2。位于LCD下方的add1、add0分别连 接A1、A0;8255的读写信号RD、WR(位于下板发光二极管显示单元左侧) 分别连接控制总线单元RD、WR(位于中板控制总线单元)。 3) 8255并行口的PA7~PA0分别连接K7~K0、PB7~PB0分别连接L7~L0。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,拨动K7~K0,观察L7~L0发光二极管是否对应点亮。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、实验参考程序 PORTA EQU 0FFD0H PORTB EQU 0FFD1H PORTC EQU 0FFD2H CS8255 EQU 0FFD3H ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H ST1: MOV DPTR,#CS8255 MOV A,#90H MOVX @DPTR,A ;8255初始化 ST2: MOV DPTR,#PORTA MOVX A,@DPTR ;PA口状态取出 MOV DPTR,#PORTB MOVX @DPTR,A ;送PB口 SJMP ST2 END 50 实验十七 8255并行口模拟交通灯实验 一、实验目的 进一步掌握8255的工作原理以及编程方法。 二、实验内容 用8255作输出口,控制12个发光二极管燃灭,模拟交通灯管理。 三、程序流程 图2.17.1 程序流程图 四、编程提示 1. 通过8255控制发光二极管。PB3、PB0、PA5、PA2对应黄灯,PB1、PA6、PA3、 PA0对应红灯,PB2、PA7、PA4、PA1对应绿灯,模拟交通灯的管理。 2. 交通路灯的亮灭规律:东西路口的绿灯亮南北路口的红灯亮,东西路口方向通 车。延时等待后,东西路口绿灯熄灭,黄灯开始闪烁。闪烁若干次后,东西路 口红灯亮南北路口绿灯亮,南北路口方向开始通车,延时等待后,南北路口绿 灯熄灭,黄灯开始闪烁。闪烁若干次后,切换到东西路口方向,重复以上过程。 3. 程序中设定好8255的工作模式,三个端口均工作在方式0,并处于输出状态。 4. 系统使用的发光二极管为共阴极,逻辑0点亮、逻辑1熄灭。 五、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 8255并行口的CS连接译码器输出端Y2。位于LCD下方的add1、add0分别连 接A1、A0;8255的读写信号RD、WR(位于下板发光二极管显示单元左侧) 51 分别连接控制总线单元RD、WR(位于中板控制总线单元)。 3) 8255并行口的PB3~PB0分别连接L11~L8、PA7~PA0分别连接L7~L0。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行方式下,初始态为四个路口的红灯全亮之后,东西路口的绿灯亮南 北路口的红灯亮,东西路口方向通车。延时一段时间后东西路口的绿灯熄灭,黄灯 开始闪耀。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口 方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪耀。闪耀若干 次后,再切换到东西路口方向,之后重复以上过程。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、实验参考程序 PORTA EQU 0FFD0H PORTB EQU 0FFD1H PORTC EQU 0FFD2H CS8255 EQU 0FFD3H ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV DPTR,#CS8255 MOV A,#88H MOVX @DPTR,A ;8255初始化 MOV DPTR,#PORTA MOV A,#0B6H MOVX @DPTR,A INC DPTR MOV A,#0DH MOVX @DPTR,A ;点亮4个红灯 MOV R2,#25H ;延时 LCALL DELAY JOD0: MOV DPTR,#PORTA MOV A,#75H MOVX @DPTR,A INC DPTR MOV A,#0DH MOVX @DPTR,A ;东西绿灯亮,南北红灯亮 MOV R2,#55H LCALL DELAY ;延时 MOV R7,#05H ;闪烁次数 JOD1: MOV DPTR,#PORTA MOV A,#0F3H MOVX @DPTR,A INC DPTR MOV A,#0CH 52 MOVX @DPTR,A ;东西黄灯亮,南北红灯亮 MOV R2,#20H LCALL DELAY ;延时 MOV DPTR,#PORTA MOV A,#0F7H MOVX @DPTR,A INC DPTR MOV A,#0DH MOVX @DPTR,A ;南北红灯亮 MOV R2,#20H LCALL DELAY ;延时 DJNZ R7,JOD1 ;闪烁次数未到继续 MOV DPTR,#PORTA MOV A,#0AEH MOVX @DPTR,A INC DPTR MOV A,#0BH MOVX @DPTR,A ;东西红灯亮,南北绿灯亮 MOV R2,#55H LCALL DELAY ;延时 MOV R7,#05H ;闪烁次数 JOD2: MOV DPTR,#PORTA MOV A,#9EH MOVX @DPTR,A INC DPTR MOV A,#07H MOVX @DPTR,A ;东西红灯亮,南北黄灯亮 MOV R2,#20H LCALL DELAY ;延时 MOV DPTR,#PORTA MOV A,#0BEH MOVX @DPTR,A INC DPTR MOV A,#0FH MOVX @DPTR,A ;东西红灯亮 MOV R2,#20H LCALL DELAY ;延时 DJNZ R7,JOD2 ;闪烁次数未到继续 LJMP JOD0 ;循环 DELAY: PUSH 02H ;延时 DEL2: PUSH 02H DEL3: PUSH 02H DEL4: DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END 53 实验十八 8259中断控制实验 一、实验目的 1、了解8259中断控制器的基本结构和工作原理; 2、掌握8259中断控制器和单片机系统的连接方法; 3、掌握8259中断控制器的应用和编程方法。 二、实验内容 利用8259芯片作为中断管理器,编制程序,用中断的方式,实现循环点亮发光二极管。 三、实验电路 图2.18.1 MCS-51单片机外扩8259中断控制器电路图 四、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 将下板右上角ADD0(8259 A0)连接中板地址总线单元的A0。 3) 8259 CS(位于8259单元IRQ6上方)连接译码器输出端Y0。 4) 下板左上方的WR、RD分别连接中板控制总线单元的WR、RD。 5) 8259 INTA(位于中板控制总线单元)连接或门输出端,该或门输入端分别连 接译码单元Y0和控制总线单元RD。 6) 8259 INTR(位于中板控制总线单元)连接非门输入端,该非门输出端连接单 片机P3.2。 7) 8259单元IRQ7连接单脉冲信号SP(位于下板LED点阵单元左侧)。 8) 单片机P1.0~P1.3分别连接发光二极管单元L0~L3。 54 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 以全速方式运行程序,按SP单脉冲按钮,L0~L3移位点亮。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 五、实验参考程序 CS8259I EQU 0FFC0H CS8259O EQU 0FFC1H ORG 0000H LJMP START ORG 0003H AJMP INT59 ORG 0030H START: MOV SP, #60H MOV DPTR,#CS8259I MOV A,#13H MOVX @DPTR,A MOV DPTR,#CS8259O MOV A,#08H MOVX @DPTR,A MOV A,#09H MOVX @DPTR,A MOV A,#7FH MOVX @DPTR,A SETB IT0 SETB EX0 SETB EA MOV A,#11H SJMP $ INT59: PUSH ACC MOV DPTR,#CS8259I MOV A,#20H MOVX @DPTR,A POP ACC CLR IE0 CPL A MOV P1,A CPL A RL A NOP NOP NOP RETI END 55 实验十九 8253定时器,计数器实验 一、实验目的 学会8253芯片和单片机接口原理和方法,掌握8253定时器,计数器的工作方式和编程原理。 二、实验内容 8253的0通道工作在方式3,产生方波。 三、实验电路 图2.19.1 MCS-51单片机外扩8253定时器,计数器电路图 四、程序流程 图2.19.2 程序流程图 五、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 8253定时计数器选通信号8253CS连接译码单元Y2输出孔,CLK0连接分频单 56 元T2,读写信号RD、WR(位于下板左上角)分别连接控制总线单元的RD、WR (位于中板控制总线单元)。 3) 8253地址线ADD1、ADD0(位于下板右上角)分别连接地址总线单元的A1、 A0(位于中板地址总线单元)。 4) 外设接口的CLR(393分频器主复位)连接中板控制总线单元的RESET。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行状态下,用示波器测量8253定时计数单元的OUT0,应有方波输出。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、思考 改变8253电路,将T3进行分频,采用计数器0和计数器2两级级联的方式,输出 一个周期为1秒的方波。 七、实验参考程序 CS8253 EQU 0FFD3H COUNT0 EQU 0FFD0H COUNT1 EQU 0FFD1H COUNT2 EQU 0FFD2H ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV DPTR,#CS8253 MOV A,#36H MOVX @DPTR,A ;置8253工作方式 MOV DPTR,#COUNT0 MOV A,#00H ;启动8253方波 MOVX @DPTR,A MOV A,#10H MOVX @DPTR,A SJMP $ ;结束 END 57 实验二十 DS1302实时时钟实验 一、实验目的 1、了解DS1302的基本结构、工作原理; 2、熟悉DS1302和单片机系统的连接方法; 3、掌握DS1302实时时钟的基本编程方法。 二、实验内容 利用DS1302实时时钟,设计程序在LCD液晶显示器上,显示年、月、日、星期、时、分、秒。 三、实验电路 C210.1uF BT13VVCCU2118VCC2VCC127X1SCLKSCLKX136X2I/OI/O32.768KHz45GNDRSTRSTR2110KDS1302 R2210KVCCR2310K 图2.20.1 MCS-51单片机外扩DS1302实时时钟电路图 四、实验步骤 1. 实验连线 1) 将DS1302单元的SCLK、I/O、RST分别连接单片机的P3.2、P3.3、P3.5。 2) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 3) 将液晶显示单元的R/W、RS分别连接地址总线单元的A1、A0。 4) 液晶显示单元的E连接或非门输出端,该或非门输入端分别连接译码器输出端 Y6和与门输出端,该与门输入端分别连接中板控制总线单元的WR、RD。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 以全速方式运行程序,观察LCD液晶显示,应显示年、月、日、星期、时、分、秒。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 58 五、实验参考程序 I_YEAR DATA 12H ;DS1302的年寄存器为8位,只能处理00~99 I_MONTH DATA 02H I_DAY DATA 20H I_WEEK DATA 03H I_HOUR DATA 18H I_MIN DATA 12H I_SEC DATA 00H SCLK BIT P3.2 IO BIT P3.3 RST BIT P3.5 RC_ADDR DATA 48H RC_DATA DATA 47H YEAR DATA 46H MONTH DATA 45H WEEK DATA 44H DAY DATA 43H HOUR DATA 42H mintue DATA 41H second DATA 40H LCD EQU 0FFF0H WRICODE EQU LCD+0 ;写命令 WRDATA EQU LCD+1 ;写数据 COUNT EQU 34H ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H ;CALL INITRC ;初次使用置时钟初值,以后可注销此行 CALL INIT ;DS1302初始化 ;初始化 LGS0: MOV A,#30H ;30H--基本指令操作 LCALL SEND_I MOV A,#01H ;清除显示 LCALL SEND_I LCALL DELAY2 LCALL DELAY2 MOV A,#06H ;指定在资料写入或读取时,光标的移动方向 LCALL SEND_I MOV A,#0CH ;开显示,关光标,不闪烁 LCALL SEND_I MLOOP: CALL READRC ;读时钟 MOV DPTR,#TAB1 ;显示汉字和字符 MOV COUNT,#16 MOV A,#80H LCALL SEND_I 59 MLOOP1: CLR A MOVC A,@A+DPTR LCALL SEND_D INC DPTR DJNZ COUNT,MLOOP1 MOV A,#0D0H LCALL SEND_D MOV A,#0C7H LCALL SEND_D MOV A,#0C6H LCALL SEND_D MOV A,#0DAH LCALL SEND_D MOV A,week WK1: CJNE A,#01H,WK2 MOV A,#0D2H ;星期一 LCALL SEND_D MOV A,#0BBH LCALL SEND_D AJMP WKEND WK2: CJNE A,#02H,WK3 MOV A,#0B6H ;星期二 LCALL SEND_D MOV A,#0FEH LCALL SEND_D AJMP WKEND WK3: CJNE A,#03H,WK4 MOV A,#0C8H ;星期三 LCALL SEND_D MOV A,#0FDH LCALL SEND_D AJMP WKEND WK4: CJNE A,#04H,WK5 MOV A,#0CBH ;星期四 LCALL SEND_D MOV A,#0C4H LCALL SEND_D AJMP WKEND WK5: CJNE A,#05H,WK6 MOV A,#0CEH ;星期五 LCALL SEND_D MOV A,#0E5H LCALL SEND_D AJMP WKEND WK6: CJNE A,#06H,WK7 MOV A,#0C1H ;星期六 LCALL SEND_D 60 MOV A,#0F9H LCALL SEND_D AJMP WKEND WK7: MOV A,#0C8H ;星期日 LCALL SEND_D MOV A,#0D5H LCALL SEND_D WKEND: MOV COUNT,#10 MOV A,#20H MLOOP2: LCALL SEND_D DJNZ COUNT,MLOOP2 MOV A,#'2' ;DS1302仅支持8位年份寄存器,高位年份固定 LCALL SEND_D MOV A,#'0' LCALL SEND_D MOV A,YEAR ANL A,#0F0H SWAP A ADD A,#30H LCALL SEND_D MOV A,YEAR ANL A,#0FH ADD A,#30H LCALL SEND_D MOV A,#0C4H LCALL SEND_D MOV A,#0EAH LCALL SEND_D MOV A,MONTH ANL A,#0F0H SWAP A ADD A,#30H LCALL SEND_D MOV A,MONTH ANL A,#0FH ADD A,#30H LCALL SEND_D MOV A,#0D4H LCALL SEND_D MOV A,#0C2H LCALL SEND_D MOV A,DAY ANL A,#0F0H SWAP A ADD A,#30H LCALL SEND_D MOV A,DAY 61 ANL A,#0FH ADD A,#30H LCALL SEND_D MOV A,#0C8H LCALL SEND_D MOV A,#0D5H LCALL SEND_D MOV A,#20H LCALL SEND_D LCALL SEND_D MOV A,HOUR ANL A,#0F0H SWAP A ADD A,#30H LCALL SEND_D MOV A,HOUR ANL A,#0FH ADD A,#30H LCALL SEND_D MOV A,#':' LCALL SEND_D MOV A,mintue ANL A,#0F0H SWAP A ADD A,#30H LCALL SEND_D MOV A,mintue ANL A,#0FH ADD A,#30H LCALL SEND_D MOV A,#':' LCALL SEND_D MOV A,second ANL A,#0F0H SWAP A ADD A,#30H LCALL SEND_D MOV A,second ANL A,#0FH ADD A,#30H LCALL SEND_D MOV COUNT,#8 MOV A,#20H MLOOP3: LCALL SEND_D DJNZ COUNT,MLOOP3 AJMP MLOOP ;DS1302初始化 62 INIT: MOV RC_ADDR,#8EH MOV RC_DATA,#00H LCALL WRITE ;允许写1302 MOV RC_ADDR,#90H MOV RC_DATA,#0A6H LCALL WRITE ;1302充电,充电电流1.1MA RET ;读取当前时钟 READRC: MOV RC_ADDR,#8DH LCALL READ ;读出年 MOV year,A MOV RC_ADDR,#8BH LCALL READ ;读出星期 MOV week,A MOV RC_ADDR,#89H LCALL READ ;读出月 MOV month,A MOV RC_ADDR,#87H LCALL READ ;读出日 MOV day,A MOV RC_ADDR,#85H LCALL READ ;读出小时 MOV hour,A MOV RC_ADDR,#83H LCALL READ ;读出分钟 MOV mintue,A MOV RC_ADDR,#81H LCALL READ ;读出秒 MOV second,A RET ;时钟初始化 INITRC: MOV RC_ADDR,#8EH MOV RC_DATA,#00H LCALL WRITE ;允许写1302 MOV RC_ADDR,#80H MOV RC_DATA,#80H LCALL WRITE ;1302停止振荡 MOV year,#I_YEAR MOV RC_ADDR,#8CH MOV RC_DATA,year LCALL WRITE ;年值送入1302 MOV month,#I_MONTH MOV RC_ADDR,#88H MOV RC_DATA,month LCALL WRITE ;月值送入1302 MOV day,#I_DAY MOV RC_ADDR,#86H 63 MOV RC_DATA,day LCALL WRITE ;日值送入1302 MOV week,#I_WEEK MOV RC_ADDR,#8AH MOV RC_DATA,week LCALL WRITE ;星期值送入1302 MOV hour,#I_HOUR MOV RC_ADDR,#84H MOV RC_DATA,hour LCALL WRITE ;小时值送入1302 MOV mintue,#I_MIN MOV RC_ADDR,#82H MOV RC_DATA,mintue LCALL WRITE ;分钟值送入1302 MOV second,#I_SEC MOV RC_ADDR,#80H MOV RC_DATA,second LCALL WRITE ;1302晶振开始振荡 MOV RC_ADDR,#8EH MOV RC_DATA,#80H LCALL WRITE ;禁止写入1302 RET ;写1302程序 WRITE: CLR RST NOP CLR SCLK NOP SETB RST NOP MOV A,RC_ADDR MOV R4,#8 WRITE1: RRC A ;送地址给1302 NOP NOP CLR SCLK NOP NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE1 CLR SCLK 64 NOP MOV A,RC_DATA MOV R4,#8 WRITE2: RRC A NOP ;送数据给1302 CLR SCLK NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE2 CLR RST RET ;读1302程序 READ: CLR RST NOP CLR SCLK NOP SETB RST NOP MOV A,RC_ADDR MOV R4,#8 READ1: RRC A ;送地址给1302 NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP NOP CLR SCLK NOP NOP DJNZ R4,READ1 MOV R4,#8 READ2: CLR SCLK NOP ;从1302中读出数据 NOP NOP MOV C,IO 65 NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB SCLK NOP DJNZ R4,READ2 MOV RC_DATA,A CLR RST RET ;写数据子程序 SEND_D: PUSH DPL PUSH DPH LCALL delay1;CHKBUSY MOV DPTR,#WRDATA MOVX @DPTR,A POP DPH POP DPL RET ;写指令子程序 SEND_I: PUSH DPL PUSH DPH LCALL delay1;CHKBUSY MOV DPTR,#WRICODE MOVX @DPTR,A POP DPH POP DPL RET DELAY2: MOV R6,#0CH DEL21: MOV R7,#18H DEL22: DJNZ R7,DEL22 DJNZ R6,DEL21 RET DELAY1: MOV R6,#80H DJNZ R6,$ RET TAB1: DB "DS1302实时时钟 " END 66 实验二十一 X5045P看门狗实验 一、实验目的 1、了解X5045P的基本结构、工作原理; 2、熟悉X5045P和系统的接线方法; 3、掌握X5045P看门狗的编程方法。 二、实验内容 执行死循环模拟程序走死或跑飞,验证X5045P作为看门狗的作用。 三、实验电路 U61VCC18CSCS/WDIVCC27SOSORESETRESET36WPWPSCKSCK45GNDSISI X5045C61 0.1uF 图2.21.1 MCS-51单片机外扩X5045P看门狗电路图 四、实验步骤 2. 实验连线 1) X5045P看门狗单元CS、SO、SI、SCK分别连接单片机P1.0、P1.1、P1.2、P1.3。 2) X5045P看门狗单元WP连接+5V(写配置允许)。 3) X5045P看门狗单元RESET连接发光二极管L0(用于观察RESET信号),并将 RESET连接逻辑电平开关单元K0,置K0为高电平上拉(K0拨向下方)。 3. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 4. 观察运行结果 以全速方式运行程序,程序初始化看门狗,再执行死循环模拟程序走死或跑飞,当 看门狗定时器溢出时,X5045P启动复位信号,观察L0发光二极管状态。 5. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 五、实验参考程序 SCK BIT P1.3 SI BIT P1.2 SO BIT P1.1 CS BIT P1.0 67 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H LCALL WRITES ;配置X5045 SJMP $ WRITES: CLR SCK CLR CS MOV A,#06H ;写允许 LCALL AWRITE SETB CS CLR CS MOV A,#01H ;WRSE LCALL AWRITE MOV A,#00H ;1.4S LCALL AWRITE CLR CS SETB CS RET AWRITE: MOV R3,#08H WRITE01:CLR SCK RLC A MOV SI,C ;SI SETB SCK DJNZ R3,WRITE01 CLR SI RET END 68 实验二十二 D/A数模转换实验 一、实验目的 1. 了解D/A转换与单片机的接口方法。 2. 了解D/A转换芯片0832的性能及编程方法。 3. 了解单片机系统中扩展D/A转换芯片的基本方法。 二、实验内容 利用0832 D/A数模转换输出方波。 三、实验电路 图2.22.1 MCS-51单片机外扩DAC0832电路图 四、程序流程 图2.22.2 程序流程图 69 五、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) DA0832单元的CS、WR分别连接下板译码单元的Y5和中板控制总线单元的 WR。 3) DA0832单元的AOUT为数模转换输出,可接电压表观测电压或接入示波器观 测波形。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 以全速方式运行程序,用示波器测量AOUT输出端,观察其输出波形。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、思考 修改程序,使DAC0832的AOUT输出锯齿波、三角波等。 七、实验参考程序 CS0832 EQU 0FFE8H DA0V EQU 00H DA5V EQU 0FFH ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV DPTR,#CS0832 MLOOP: MOV A,#DA0V MOVX @DPTR,A CALL DELAY ;可断点到此行测AOUT电压 MOV A,#DA5V MOVX @DPTR,A CALL DELAY ;可断点到此行测AOUT电压 SJMP MLOOP DELAY: MOV R7,#20H DL1: MOV R6,#00H DJNZ R6,$ DJNZ R7,DL1 RET END 70 实验二十三 A/D模数转换实验 一、实验目的 1. 掌握A/D转换与单片机的接口方法。 2. 了解A/D芯片0809转换性能及编程方法。 3. 通过实验了解单片机如何进行数据采集。 二、实验内容 利用实验台上的0809做A/D转换实验,实验台上的W1电位器提供模拟量输入。编制程序,将模拟量转换成数字量。 三、实验说明 A/D转换器大致分有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近式A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。 实验用ADC0809属第二类,是8位8路A/D转换器。每采集一次一般需100μs。由于ADC0809 A/D转换器转换结束后会自动产生EOC信号(高电平有效),取反后将其与MCS-51的INT0相连,可以用中断方式读取A/D转换结果。 四、实验电路 图2.23.1 MCS-51单片机外扩ADC0809电路图 五、程序流程 71 图2.23.2 程序流程图 六、实验步骤 1. 实验连线 4) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 5) AD0809单元的SC/ALE连接NOR或非门输出端,该或非门的输入端分别连接 译码器输出端Y4和写控制信号WR;AD0809单元的OE连接NOT非门输出 端,该非门输入端连接OR或门输出端,该或门输入端分别连接译码器输出端 Y4和读控制信号RD。 6) AD0809的读写信号RD、WR(位于下板发光二极管显示单元左侧)分别连接 控制总线单元RD、WR(位于中板控制总线单元)。 7) 外设接口的CLR(393分频器主复位)连接中板控制总线单元的RESET。 8) AD0809单元的CLK连接T3、采集通道IN0连接0~5V模拟电压输出端。 9) 将ADD2、ADD1、ADD0(位于下板右上方)分别连接地址总线单元的A2、 A1、A0。 10) 键盘显示单元的8255 CS连接译码器输出端Y5。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 以单步或断点方式运行程序,显示器显示“0809 XX”,旋动模拟电压电位器,改变IN0的模拟量,数码管显示采集值。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 七、实验参考程序 CS0809 EQU 0FFE0H CS8255 EQU 0FFEFH ;键盘显示单元的8255控制口 OUTSEG EQU 0FFECH ;字形控制口 OUTBIT EQU 0FFEDH ;字位/键扫控制口 72 LEDBUF EQU 7EH ;显示缓冲 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV DPTR,#CS8255 MOV A,#89H ;命令字:A,B口输出 MOVX @DPTR,A ;8255初始化 MOV LEDBUF-0,#0 MOV LEDBUF-1,#8 MOV LEDBUF-2,#0 MOV LEDBUF-3,#9 MOV LEDBUF-4,#10H MOV LEDBUF-5,#10H MOV DPTR,#CS0809 ADC1: MOVX @DPTR,A ;0809的通道2采样 MOVX A,@DPTR ;取出采样值 MOV B,A ;拆送显示缓冲区 SWAP A ANL A,#0FH ANL B,#0FH MOV LEDBUF-6,A MOV LEDBUF-7,B CALL DISP SJMP ADC1 ;循环 DISP: PUSH DPL ;显示子程序 PUSH DPH SETB RS1 MOV R0,#LEDBUF MOV R2,#80H MOV DPTR,#LEDMAP DISP2: MOV A,@R0 MOVC A,@A+DPTR PUSH DPL PUSH DPH MOV DPTR,#OUTSEG MOVX @DPTR,A MOV A,R2 MOV DPTR,#OUTBIT MOVX @DPTR,A POP DPH 73 POP DPL MOV R7,#3 ;显示防闪 DISPDL: MOV R6,#90H DJNZ R6,$ DJNZ R7,DISPDL CLR C RRC A ;右移显示 MOV R2,A DEC R0 JNZ DISP2 CLR RS1 POP DPH POP DPL RET LEDMAP: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;字形表 DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH END 74 实验二十四 8255键盘显示实验 一、实验目的 1、掌握键盘扫描和LED数码管显示器的工作原理、接口电路设计方法和编程方法。 2、进一步掌握8255并行接口芯片的应用方法。 二、实验内容 利用8255并行接口扩展键盘器,把通过键盘输入的键码在八位数码管上显示出来。 三、实验说明 本实验台设有一个5×4的键盘(8255板插在实验台下部提供的键扫显示接口上),高电平扫描键按。注意延时去抖。 四、实验电路 图2.24.1 MCS-51单片机通过8255外扩键盘/显示器电路图 75 五、程序流程 图2.24.2 程序流程图 六、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 将ADD1、ADD0分别连接地址总线单元的A1、A0。 3) 键盘显示单元的8255 CS连接译码器输出端Y5。 4) 下板左上方的WR、RD分别连接中板控制总线单元的WR、RD。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 以全速方式运行程序,按数据键,显示器显示相应数字;按功能键清显示。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 七、实验参考程序 CS8255 EQU 0FFEFH OUTSEG EQU 0FFECH ;字形控制口 OUTBIT EQU 0FFEDH ;字位/键扫控制口 IN_KEY EQU 0FFEEH ;键盘读入口 LEDBUF EQU 7EH ;显示缓冲/回车前光标位置 LEDBUFR EQU 77H ;回车后光标位置 BLNPNT EQU 50H ;闪动指针单元 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV DPTR,#CS8255 76 MOV A,#89H ;命令字:A,B输出、C输入 MOVX @DPTR,A ;8255初始化 ;清显示缓冲单元 LDEGD: MOV BLNPNT,#LEDBUF MOV A,#10H MOV R0,#LEDBUFR LEGS: MOV @R0,A INC R0 CJNE R0,#LEDBUF,LEGS INC A ;送待令符“P.” MOV @R0,A LEDT: CALL XEG2 ;调闪动显示、键扫消抖子程序 CJNE A,#10H,LEG0;比较键值 LEG0: JNC LDEGD ;如果是功能键则返回闪动的“P.” ACALL XEG3 ;送当前LED光标闪动单元 SJMP LEDT ;完成送数操作返回显示键扫入口 ;刷新光标单元调正闪动指针 XEG3: MOV R4,A ;暂存键值 MOV R0,#BLNPNT ;光标单元 MOV A,@R0 MOV R1,A MOV A,R4 ;恢复键值 MOV @R1,A MOV A,#LEDBUFR ;回车后光标位置 CJNE A,01H,XG30 ;R1 DEC R1 MOV A,#LEDBUF ;回车前光标位置 SJMP XG31 XG30: DEC R1 MOV A,R1 XG31: MOV @R0,A RET ;闪动显示子程序 XEG2: MOV R6,#80H XGE0: ACALL XGEL ;显示、键扫消抖程序 JNB ACC.5,XGX0 DJNZ R6,XGE0 MOV R0,#BLNPNT MOV A,@R0 MOV R0,A MOV A,@R0 MOV R7,A MOV A,#10H MOV @R0,A MOV R6,#30H XGE1: ACALL XGEL JNB ACC.5,XGEX1 ;显示、键扫消抖程序 77 DJNZ R6,XGE1 MOV A,R7 MOV @R0,A SJMP XEG2 XGEX1: MOV R6,A MOV A,R7 MOV @R0,A MOV A,R6 XGX0: RET ;显示、键扫消抖程序 XGEL: CALL DISP ;显示 CALL GETKEY ;得到键盘扫描码 MOV R4,A ;键消抖处理程序 MOV R1,#48H MOV A,@R1 MOV R2,A INC R1 MOV A,@R1 MOV R3,A MOV A,R4 XRL A,R3 MOV R3,04H ;R4 MOV R4,02H ;R2 JZ XGE10 MOV R2,#88H MOV R4,#88H ;键盘消抖延迟参数 XGE10: DEC R4 MOV A,R4 XRL A,#82H JZ XGE11 MOV A,R4 XRL A,#0EH JZ XGE11 MOV A,R4 JZ XGE12 MOV R4,#20H DEC R2 SJMP XGE13 XGE12: MOV R4,#0FH XGE11: MOV R2,04H ;R4 NOP NOP MOV R4,03H ;R3 XGE13: MOV R1,#48H MOV A,R2 MOV @R1,A INC R1 78 MOV A,R3 MOV @R1,A MOV A,R4 JB ACC.5,XG113 JB ACC.4,XG113 MOV DPTR,#KEYCODE MOVC A,@A+DPTR XG113: RET ;显示子程序 DISP: PUSH DPL PUSH DPH SETB RS1 MOV R0,#LEDBUF MOV R2,#80H MOV DPTR,#LEDMAP DISP2: MOV A,@R0 MOVC A,@A+DPTR PUSH DPL PUSH DPH MOV DPTR,#OUTSEG MOVX @DPTR,A MOV A,R2 MOV DPTR,#OUTBIT MOVX @DPTR,A POP DPH POP DPL MOV R7,#3 ;显示防闪 DISPDL: MOV R6,#90H DJNZ R6,$ DJNZ R7,DISPDL CLR C RRC A ;右移显示 MOV R2,A DEC R0 JNZ DISP2 CLR RS1 POP DPH POP DPL RET ;键扫子程序 GETKEY: SETB RS1 MOV R2,#10000000B MOV R3,#08H MOV R0,#00H LGEP1: PUSH DPL PUSH DPH MOV DPTR,#OUTBIT 79 MOV A,R2 MOVX @DPTR,A RR A MOV R2,A MOV DPTR,#IN_KEY MOVX A,@DPTR POP DPH POP DPL ANL A,#07H JNZ LGEP0 INC R0 DJNZ R3,LGEP1 XGEP33: MOV A,#20H XGEP3: MOV R2,A MOV A,#0FH PUSH DPL PUSH DPH MOV DPTR,#OUTBIT MOVX @DPTR,A POP DPH POP DPL MOV A,R2 CLR RS1 SJMP RETURN LGEP0: CPL A JB ACC.0,XGEP0 MOV A,#00H SJMP LGEPP XGEP0: JB ACC.1,XGEP1 MOV A,#08H SJMP LGEPP XGEP1: JB ACC.2,XGEP33 MOV A,#10H LGEPP: ADD A,R0 SJMP XGEP3 RETURN: RET ;字形表 LEDMAP: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH DB 0FFH,0CH,89H,7FH,0BFH ;键值表 KEYCODE:DB 07H,04H,08H,05H,09H,06H,0AH,0BH DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH END 80 实验二十五 LCD128×64液晶显示实验 一、实验目的 1. 掌握单片机与液晶显示器之间接口设计与编程。 2. 学会点阵式液晶显示器显示汉字或图形的方法。 二、实验内容 编制程序,利用液晶自带的字库显示文字、图形。 三、实验电路 图2.25.1 MCS-51单片机外扩LCD128×64液晶显示器电路图 四、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 将液晶显示单元的R/W、RS分别连接地址总线单元的A1、A0。 3) 液晶显示单元的E连接或非门输出端,该或非门输入端分别连接译码器输出端 Y6和与门输出端,该与门输入端分别连接中板控制总线单元的WR、RD。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 以全速方式运行程序,液晶显示器显示相应汉字或图形。 4. 终止运行 81 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 五、实验参考程序 LCD EQU 0FFF0H WRICODE EQU LCD+0 ;写命令 WRDATA EQU LCD+1 ;写数据 RDSTAT EQU LCD+2 ;读状态 RDDATA EQU LCD+3 ;读数据 LCD_X EQU 30H LCD_Y EQU 31H LCD_X1 EQU 32H LCD_Y1 EQU 33H COUNT EQU 34H COUNT1 EQU 35H COUNT2 EQU 36H COUNT3 EQU 37H LCD_DATA EQU 38H LCD_DATA1 EQU 39H LCD_DATA2 EQU 3AH ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H ;初始化 LGS0: MOV A,#30H ;30H--基本指令操作 LCALL SEND_I MOV A,#01H ;清除显示 LCALL SEND_I LCALL DELAY2 LCALL DELAY2 MOV A,#06H ;指定在资料写入或读取时,光标的移动方向 LCALL SEND_I MOV A,#0CH ;开显示,关光标,不闪烁 LCALL SEND_I LGS1: MOV DPTR,#TAB1 ;显示汉字和字符 MOV COUNT,#40H MOV A,#80H LCALL SEND_I LGS11: CLR A MOVC A,@A+DPTR LCALL SEND_D INC DPTR DJNZ COUNT,LGS11 LCALL DELAY3 LGS2: MOV A,#01H LCALL SEND_I 82 LCALL DELAY2 LCALL DELAY2 MOV LCD_DATA1,#0AAH ;显示点阵 MOV LCD_DATA2,#0AAH LCALL LAT_DISP LCALL DELAY3 MOV LCD_DATA1,#55H MOV LCD_DATA2,#55H LCALL LAT_DISP LCALL DELAY3 LGS3: MOV A,#34H LCALL SEND_I MOV A,#30H LCALL SEND_I MOV DPTR,#TAB3 ;显示汉字和字符 MOV COUNT,#40H MOV A,#80H LCALL SEND_I LGS31: CLR A MOVC A,@A+DPTR LCALL SEND_D INC DPTR DJNZ COUNT,LGS31 LCALL DELAY3 LGS4: MOV A,#01H LCALL SEND_I LCALL DELAY2 LCALL DELAY2 MOV LCD_DATA1,#0FFH ;显示点阵 MOV LCD_DATA2,#00H LCALL LAT_DISP LCALL DELAY3 MOV LCD_DATA1,#00H MOV LCD_DATA2,#0FFH LCALL LAT_DISP LCALL DELAY3 LGS5: MOV DPTR,#TAB5 ;显示图形 LCALL PHO_DISP LCALL DELAY3 LCALL DELAY3 MOV A,#34H LCALL SEND_I MOV A,#30H LCALL SEND_I LJMP LGS1 PHO_DISP: MOV LCD_X,#80H ;全屏显示图形子程序 83 MOV LCD_Y1,#80H MOV COUNT3,#02H PHO_DISP1: MOV LCD_X1,LCD_X MOV COUNT2,#20H PHO_DISP2: MOV COUNT1,#08H PHO_DISP3: LCALL WR_ZB CLR A MOVC A,@A+DPTR LCALL SEND_D INC DPTR CLR A MOVC A,@A+DPTR LCALL SEND_D INC DPTR INC LCD_X1 DJNZ COUNT1,PHO_DISP3 MOV LCD_X1,LCD_X INC LCD_Y1 DJNZ COUNT2,PHO_DISP2 MOV LCD_X,#88H MOV LCD_Y1,#80H DJNZ COUNT3,PHO_DISP1 MOV A,#36H LCALL SEND_I MOV A,#30H LCALL SEND_I RET CLRRAM: MOV LCD_DATA1,#00H ;GDRAM写0子程序 MOV LCD_DATA2,#00H LCALL LAT_DISP RET LAT_DISP: MOV LCD_X,#80H ;显示点阵子程序 MOV LCD_Y1,#80H MOV COUNT3,#02H LAT_DISP1: CLR F0 MOV LCD_X1,LCD_X MOV COUNT2,#20H LAT_DISP2: MOV COUNT1,#08H LAT_DISP3: JB F0,LAT_DISP32 MOV LCD_DATA,LCD_DATA1 84 AJMP LAT_DISP31 LAT_DISP32: MOV LCD_DATA,LCD_DATA2 LAT_DISP31: LCALL WR_ZB MOV A,LCD_DATA LCALL SEND_D MOV A,LCD_DATA LCALL SEND_D INC LCD_X1 DJNZ COUNT1,LAT_DISP3 MOV LCD_X1,LCD_X INC LCD_Y1 CPL F0 DJNZ COUNT2,LAT_DISP2 MOV LCD_X,#88H MOV LCD_Y1,#80H DJNZ COUNT3,LAT_DISP1 MOV A,#36H LCALL SEND_I MOV A,#30H LCALL SEND_I RET WR_ZB: MOV A,#34H LCALL SEND_I MOV A,LCD_Y1 LCALL SEND_I MOV A,LCD_X1 LCALL SEND_I MOV A,#30H LCALL SEND_I RET SEND_D: PUSH DPL ;写数据子程序 PUSH DPH LCALL CHKBUSY MOV DPTR,#WRDATA MOVX @DPTR,A POP DPH POP DPL RET SEND_I: PUSH DPL ;写指令子程序 PUSH DPH LCALL CHKBUSY MOV DPTR,#WRICODE MOVX @DPTR,A POP DPH POP DPL 85 RET CHKBUSY:PUSH ACC ;测忙碌子程序 CHKING: CLR A MOV DPTR,#RDSTAT MOVX A,@DPTR JB ACC.7,CHKING POP ACC RET DELAY3: MOV R5,#16H DEL31: MOV R6,#0FFH DEL32: MOV R7,#0FFH DEL33: DJNZ R7,DEL33 DJNZ R6,DEL32 DJNZ R5,DEL31 RET DELAY2: MOV R6,#0CH DEL21: MOV R7,#18H DEL22: DJNZ R7,DEL22 DJNZ R6,DEL21 RET TAB1: DB " 山东工商学院 " DB "同步教学互动系统" DB " DTHS-A单片机 " DB " www.ccec.edu.cn" TAB3: DB "LCD 内置二级字库" DB "~!@#$%^&*()_+|{}" DB "使用更方便更灵活" DB "????????" TAB5: DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,3FH,0C0H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,0FFH,0E0H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,0FFH,0F0H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,0FFH,0F0H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,01H,0FFH,0F8H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,01H,0FFH,0F8H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,01H,0FFH,38H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,01H,8CH,58H,00H DB 00H,00H,00H,1CH,00H,00H,00H,00H,00H,00H,00H,00H,01H,77H,0F8H,00H DB 0FFH,0F0H,00H,1FH,00H,00H,00H,00H,00H,00H,00H,00H,01H,0CEH,78H,00H DB 0FFH,0E0H,00H,3FH,00H,00H,00H,00H,00H,00H,00H,00H,01H,0CEH,78H,00H DB 3FH,0C0H,00H,3FH,00H,00H,00H,00H,00H,00H,00H,00H,00H,0FFH,0FCH,00H DB 3EH,00H,00H,1FH,00H,00H,00H,00H,00H,00H,00H,00H,00H,0FFH,0FCH,00H DB 3EH,00H,00H,1EH,00H,00H,00H,00H,00H,00H,00H,00H,00H,0FFH,0FEH,00H DB 3EH,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,01H,0FFH,3EH,00H DB 3EH,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,01H,0DCH,3FH,00H DB 3EH,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,03H,80H,1FH,00H DB 3EH,00H,00H,00H,00H,30H,00H,00H,00H,00H,00H,00H,07H,80H,1FH,80H DB 3EH,00H,01H,0F7H,0FCH,0FEH,0FFH,8FH,0F1H,0FFH,0BFH,0E0H,0FH,00H,1FH,0C0H 86 DB 3EH,00H,07H,0F7H,0FBH,0FFH,0FFH,8FH,0F1H,0FFH,0BFH,0E0H,0FH,00H,1FH,0E0H DB 3EH,00H,07H,78H,0FFH,8FH,1FH,81H,0F0H,0FEH,1FH,80H,1FH,00H,0FH,0F0H DB 3EH,00H,0EH,78H,0FFH,0FH,8FH,81H,0F0H,1FH,0EH,00H,3EH,00H,07H,0F0H DB 3EH,00H,0CH,78H,0FEH,0FH,8FH,81H,0F0H,1FH,0CH,00H,3EH,00H,07H,0F0H DB 3EH,00H,1CH,0F8H,0FCH,0FH,8FH,81H,0F0H,1FH,9CH,00H,7CH,00H,07H,0F0H DB 3EH,00H,1CH,0F8H,0FCH,0FH,8FH,81H,0F0H,0FH,0DCH,00H,7CH,00H,03H,0F8H DB 3EH,00H,18H,0F8H,0FCH,0FH,8FH,81H,0F0H,0FH,0F8H,00H,7CH,00H,03H,0F8H DB 3EH,00H,18H,0F8H,0FCH,0FH,8FH,81H,0F0H,07H,0F0H,00H,7CH,00H,03H,0F8H DB 3EH,00H,31H,0F0H,0FCH,0FH,8FH,81H,0F0H,07H,0F0H,00H,78H,00H,03H,0F8H DB 3EH,00H,31H,0F0H,0FCH,0FH,8FH,81H,0F0H,03H,0F0H,00H,7CH,00H,07H,0F8H DB 3EH,00H,31H,0F0H,0FCH,0FH,8FH,81H,0F0H,07H,0F8H,00H,0FEH,00H,0FH,0F8H DB 3EH,00H,33H,0F1H,0FCH,0FH,8FH,81H,0F0H,07H,0F8H,03H,0FFH,00H,1FH,0F8H DB 3EH,00H,33H,0F3H,0FCH,0FH,8FH,81H,0F0H,0EH,0FCH,07H,0FFH,80H,1FH,0F8H DB 3EH,00H,73H,0E3H,0FCH,0FH,8FH,81H,0F0H,0EH,0FCH,0FH,0FFH,0C0H,1FH,0FCH DB 3EH,00H,73H,0E3H,0FCH,0FH,8FH,83H,0F0H,1CH,7CH,0FH,0FFH,0E0H,1FH,0FEH DB 3EH,00H,0F3H,0E7H,0FCH,0FH,8FH,83H,0F0H,18H,3EH,0FH,0FFH,0E0H,1FH,0FFH DB 3EH,00H,0F3H,0C6H,0FCH,0FH,8FH,87H,0F0H,18H,3EH,0FH,0FFH,0C0H,3FH,0FFH DB 3EH,01H,0F3H,0CEH,0FCH,0FH,8FH,87H,0F0H,38H,1FH,0FH,0FFH,0C0H,7FH,0FFH DB 7FH,0FFH,0F3H,0FFH,0FFH,3FH,0FFH,0FEH,0FFH,0FEH,7FH,0EFH,0FFH,0FFH,0FFH,0FEH DB 0FFH,0FFH,0F1H,0FFH,0FFH,7FH,0F7H,0FCH,0FFH,0FEH,7FH,0FFH,0FFH,0FFH,0FFH,0F8H DB 0FFH,0FFH,0E0H,0F7H,0FFH,7FH,0F3H,0F8H,0FFH,0FEH,7FH,0E7H,0FFH,0FFH,0FFH,0E0H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,7FH,0C0H,1FH,0C0H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,0FH,80H,0FH,80H DB 00H,00H,00H,00H,00H,00H,00H,04H,00H,00H,00H,00H,00H,00H,04H,00H DB 00H,00H,20H,00H,01H,80H,00H,04H,00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,20H,00H,02H,00H,03H,04H,00H,00H,00H,00H,00H,00H,00H,00H DB 00H,03H,21H,80H,04H,00H,01H,9CH,00H,00H,00H,00H,00H,00H,00H,00H DB 00H,06H,30H,0C0H,0CH,20H,00H,0FFH,00H,08H,00H,00H,00H,00H,00H,00H DB 00H,18H,10H,40H,18H,20H,02H,0F9H,00H,08H,00H,00H,00H,00H,02H,00H DB 00H,34H,10H,00H,33H,20H,03H,89H,00H,08H,00H,50H,10H,00H,82H,00H DB 00H,44H,10H,00H,6DH,80H,03H,1DH,00H,09H,00H,70H,70H,1DH,82H,00H DB 00H,0C4H,1FH,00H,07H,0FEH,01H,79H,00H,8EH,00H,61H,90H,37H,02H,00H DB 00H,06H,0F8H,00H,0EH,06H,01H,09H,00H,0B8H,00H,0E3H,10H,00H,06H,00H DB 00H,03H,89H,00H,79H,0CCH,00H,7EH,00H,0E2H,03H,0A2H,10H,00H,0CH,00H DB 00H,06H,0AH,00H,41H,98H,00H,08H,00H,8EH,06H,22H,10H,00H,08H,00H DB 00H,3AH,0AH,00H,43H,00H,00H,08H,00H,0BAH,00H,7AH,11H,00H,18H,00H DB 01H,0E3H,0EH,40H,4FH,78H,00H,0FH,0E0H,83H,00H,0EAH,11H,00H,10H,00H DB 0FH,06H,0CH,40H,0BH,0C8H,00H,0F8H,01H,81H,01H,0A2H,11H,00H,00H,00H DB 00H,0EH,3CH,40H,03H,08H,1FH,88H,00H,01H,03H,26H,1FH,00H,00H,00H DB 00H,3AH,07H,0C0H,0EH,0D8H,00H,08H,00H,01H,00H,24H,00H,00H,00H,00H DB 00H,1AH,00H,0C0H,18H,78H,00H,08H,00H,01H,00H,20H,00H,00H,60H,00H DB 00H,0EH,00H,00H,07H,0CFH,00H,08H,00H,00H,00H,00H,00H,00H,00H,00H DB 00H,04H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H END 87 实验二十六 微型打印机实验 一、实验目的 1、了解微型打印机的工作原理; 2、熟悉微型打印机与单片机系统的连接方法; 3、掌握打印机的编程技巧。 二、实验内容 使用微型打印机打印自行定义的字符或汉字。 三、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 微型打印机的STB连接或门输出端,该或门输入端分别连接译码单元Y0和写 控制信号WR。 3) 微型打印机的BUSY连接单片机P1.0。 4) 微型打印机的D7..D0用8芯扁平线连接中板数据总线单元的D7..D0。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 以全速方式运行程序,令打印机打印字符。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 四、实验参考程序 STB EQU 0FFC0H BUSY BIT P1.0 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV DPTR,#TAB MOV R7,#0 MLOOP: MOV A,R7 MOVC A,@A+DPTR INC R7 88 CJNE A,#255,PLOOP SJMP $ PLOOP: CALL PRINT SJMP MLOOP ;打印输出子程序 PRINT: PUSH DPL PUSH DPH PUSH ACC JB BUSY,$ ;忙闲检测 POP ACC MOV DPTR,#STB MOVX @DPTR,A POP DPH POP DPL RET ;打印字符表格 TAB: DB 0DH,0AH DB 1BH,38H,4,"同步教学互动系统",10 DB 1BH,38H,6,"DTHS-A",1BH,38H,0,"单片机",10 DB 1BH,38H,0,"淄博耐思公司",10 DB 1BH,38H,0,"山东工商学院",10,10,10,10,10,10 DB 0FFH END 89 实验二十七 继电器控制实验 一、实验目的 掌握继电器控制的基本方法和编程。 二、实验内容 利用P1.0输出高低电平,控制继电器的开合,以实现对外部装置的控制。 三、预备知识 现代自动化控制设备都存在一个电子与电气电路的互相联结问题,一方面要使电子电路的控制信号能够控制电器电路的执行元件(电动机、电磁铁、电灯等),另一方面又要为电子电路和电气电路提供良好的电隔离,以保护电子电路和人身的安全,电子继电器便能完成这一桥梁作用。 本实验采用JZC-23F型继电器,其控制电压为5V。继电器电路中一般要在继电器的线圈两头加一个二极管以吸收继电器线圈断电时产生的反电势,防止干扰。 四、实验电路 图2.27.1 MCS-51单片机外控制继电器电路图 五、实验步骤 1. 实验连线 单片机P1.0连接继电器JIN孔,继电器JZ端接地,JK、JB分别连接L0、L1发光 二极管。 2. 实验程序的编写、装载与运行 编制程序,使P1.0电平变化,低电平时继电器吸合,常开触点接上,L0点亮,L1 熄灭,高电平时继电器不工作,常闭触点闭合,L0熄灭,L1点亮。 3. 观察运行结果 继电器循环吸合、断开,L0、L1发光二极管对应点亮与熄灭。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 90 六、实验参考程序 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H ST1: CLR P1.0 CALL DELAY SETB P1.0 CALL DELAY SJMP ST1 DELAY: MOV R7,#0DH ;延时子程序 DL1: MOV R6,#0F7H DL2: MOV R5,#8EH DJNZ R5,$ DJNZ R6,DL2 DJNZ R7,DL1 RET END 91 实验二十八 步进电机控制实验 一、实验目的 1. 了解步进电机工作原理; 2. 掌握步进电机控制系统的硬件设计方法; 3. 熟悉步进电机驱动程序的设计与调试,提高单片机应用系统设计和调试的能力。 二、实验内容 MCS-51单片机通过8255控制步进电机。步进电机驱动电路由一片ULN2003AN(7位OC门驱动器)来驱动步进电机,同时驱动4只LED发光二极管显示各相状态。 由于步进电机某相长时间通电将引起电机发热(如自锁时),用户在电机空闲时应注意将各相电流断开。 三、预备知识 步进电机驱动原理是通过对它每相线圈中的电流和顺序切换来使电机作步进式旋转。驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速,单片机控制步进电机最适合。 四、实验电路 图2.28.1 MCS-51单片机外控制步进电机电路图 五、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) 8255并行口的CS连接译码器输出端Y2,位于LCD下方的add1、add0分别连 接A1、A0。 92 3) 8255的读写信号RD、WR(位于下板发光二极管显示单元左侧)分别连接控制 总线单元RD、WR(位于中板控制总线单元)。 4) 8255并行口的PA0,PA1,PA2,PA3分别连接步进电机控制单元的BA,BB,BC,BD。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 在全速运行程序后,观察步进电机转动情况。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 六、思考 修改程序,改变步进电机的转向、转速。 七、实验参考程序 CS8255 EQU 0FFD3H PORTA EQU 0FFD0H ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV DPTR,#CS8255 MOV A,#80H MOVX @DPTR,A ;8255初始化 MOV DPTR,#PORTA MOV A,#11001100B STA1: MOVX @DPTR,A RR A CALL DELAY SJMP STA1 DELAY: MOV R6,#80H DLP: MOV R7,#0 DJNZ R7,$ DJNZ R6,DLP RET END 93 实验二十九 直流电机调速实验 一、实验目的 1. 熟悉直流电机的驱动原理。 2. 熟悉直流电机调速的方法。 3. 了解红外耦合传感器的工作原理和使用方法。 4. 掌握DAC0832芯片的接口设计和应用方法,提高实时控制系统的设计和调试能力。 二、实验内容 1. 用0832 D/A转换电路后的输出经放大后驱动直流电机。 2. 编制程序改变0832输出经放大后的方波信号的占空比来控制电机转速。本实验中 D/A输出为双极性输出,因此电机可以正反向旋转。 三、实验电路 图2.29.1 MCS-51单片机外控制直流电机调速电路图 四、实验步骤 1. 实验连线 1) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 2) DA0832单元的CS、WR分别连接下板译码单元的Y5和中板控制总线单元的 WR。 94 3) DA0832单元的AOUT连接直流电机“调速”端,并按下直流电机单元按钮。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 以全速方式运行程序,观察直流电机,应在“停止”、“反转”、“停止”、“正转”状 态下循环工作。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 五、实验参考程序 CS0832 EQU 0FFE8H ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV DPTR,#CS0832 MOV A,#70H MLOOP1: MOVX @DPTR,A CALL DELAY ;可断点到此行测AOUT电压 INC A CJNE A,#90H,MLOOP1 MLOOP2: MOVX @DPTR,A CALL DELAY DEC A CJNE A,#70H,MLOOP2 SJMP MLOOP1 DELAY: MOV R7,#00H DL1: MOV R6,#00H DJNZ R6,$ DJNZ R7,DL1 RET END 95 实验三十 DS18B20温度闭环实验 一、实验目的 学习闭环控制系统的基本概念,掌握温度采集的一种方法。 二、实验目的 编写程序,实现温度闭环控制,使温度稳定在某一设定范围。 三、程序流程 图2.30.1 程序流程图 四、实验步骤 1. 实验连线 1) 单片机的P3.3连接DS18B20单元的“测温(DQ)”端(位于中板左侧)。 2) 译码连接:译码器的G2A连接NAND与非门输出端,该与非门的输入端分别 连接A15、A14,译码器的输入端CBA分别连接A5~A3。 3) 将ADD1、ADD0分别连接地址总线单元的A1、A0。 4) 键盘显示单元的8255 CS连接译码器输出端Y5。 5) 下板左上方的WR、RD分别连接中板控制总线单元的WR、RD。 6) 单片机的P1.0连接继电器输入端JIN孔,继电器中心端JZ接+5V,JK连接温 控单元“调温”。 2. 实验程序的编写、装载与运行 编写程序,编译、连接并装载到实验台,用全速方式运行程序。 3. 观察运行结果 以全速方式运行程序,LED显示器高二位显示设定值,另外两位显示实测值。当设 96 定值低于实测值时,加温指示灯灭,温度自然冷却;当设定值高于实测值时,加温 指示灯亮,启动加温;待实测温度高于等于设定温度时,加温指示灯灭,停止加温。 4. 终止运行 按“暂停图标”,使系统无条件退出该程序的运行返回待令状态。 五、实验参考程序 CS8255 EQU 0FFEFH ;键盘显示单元的8255控制口 OUTSEG EQU 0FFECH ;字形控制口 OUTBIT EQU 0FFEDH ;字位/键扫控制口 IN_KEY EQU 0FFEEH ;键盘读入口 LEDBUF EQU 7EH ;显示缓冲 TEMPER_L EQU 36H ;存放读出温度低位数据 TEMPER_H EQU 35H ;存放读出温度高位数据 TEMPER_NUM EQU 60H ;存放转换后的温度值 FLAG1 BIT 00H DQ BIT P3.3 ;单总线控制端口 RELAY BIT P1.0 ORG 0000H LJMP START ORG 0030H START: MOV SP, #60H MOV DPTR,#CS8255 MOV A,#89H ;命令字:A,B口输出 MOVX @DPTR,A ;8255初始化 MOV LEDBUF-0,#00H MOV LEDBUF-1,#00H MOV LEDBUF-2,#10H MOV LEDBUF-3,#10H MOV LEDBUF-4,#10H MOV LEDBUF-5,#10H MOV LEDBUF-6,#10H MOV LEDBUF-7,#10H SETB RELAY MOV B,#0 MLOOP: LCALL GET_TEMPER ;从DS18B20读出温度数据 LCALL TEMPER_COV ;转换读出的温度数据并保存 ;温度比较 MOV A,LEDBUF-0 SWAP A ORL A,LEDBUF-1 CJNE A,TEMPER_NUM,LED3 LED3: JNC LED4 SETB RELAY ;停止加温 SJMP LEDP LED4: CJNE A,TEMPER_NUM,LED5 SJMP LEDP LED5: CLR RELAY ;开始加温 SJMP LEDP LEDP: PUSH B 97 MOV A,TEMPER_NUM MOV B,A ;拆送显示缓冲区 SWAP A ANL A,#0FH ANL B,#0FH MOV LEDBUF-4,A MOV LEDBUF-5,B POP B LCALL LEDKEY CJNE A,#0AH,LED0 LED0: JNC MLOOP JB B.0,LED2 LED1: MOV LEDBUF-0,A MOV LEDBUF-1,#10H INC B SJMP MLOOP LED2: MOV LEDBUF-1,A INC B MOV A,LEDBUF-0 SWAP A ORL A,LEDBUF-1 SJMP MLOOP ;读出转换后的温度值 GET_TEMPER: SETB DQ ;定时入口 BCD: LCALL INIT_1820 JB FLAG1,S22 LJMP BCD ;若DS18B20不存在则返回 S22: LCALL DISP MOV A,#0CCH ;跳过ROM匹配------0CC LCALL WRITE_1820 MOV A,#44H ;发出温度转换命令 LCALL WRITE_1820 NOP LCALL DISP CBA: LCALL INIT_1820 JB FLAG1,ABC LJMP CBA ABC: LCALL DISP MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ;发出读温度命令 LCALL WRITE_1820 LCALL READ_18200 RET ;读DS18B20的程序,从DS18B20中读出一个字节的数据 READ_1820: MOV R2,#8 RE1: CLR C SETB DQ NOP 98 NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#3 DJNZ R3,$ MOV C,DQ MOV R3,#11 DJNZ R3,$ RRC A DJNZ R2,RE1 RET ;写DS18B20的程序 WRITE_1820: MOV R2,#8 CLR C WR1: CLR DQ MOV R3,#3 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#11 DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 SETB DQ RET ;读DS18B20的程序,从DS18B20中读出两个字节的温度数据 READ_18200: MOV R4,#2 ;将温度高位和低位从DS18B20中读出 MOV R1,#36H ;低位存入36H(TEMPER_L),高位存入35H(TEMPER_H) RE00: MOV R2,#8 RE01: CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#3 DJNZ R3,$ MOV C,DQ MOV R3,#11 DJNZ R3,$ RRC A DJNZ R2,RE01 99 MOV @R1,A DEC R1 DJNZ R4,RE00 RET ;将从DS18B20中读出的温度数据进行转换 TEMPER_COV: MOV A,#0F0H ANL A,TEMPER_L ;舍去温度低位中小数点后的四位温度数值 SWAP A MOV TEMPER_NUM,A MOV A,TEMPER_L JNB ACC.3,TEMPER_COV1 ;四舍五入去温度值 INC TEMPER_NUM TEMPER_COV1: MOV A,TEMPER_H ANL A,#07H SWAP A ADD A,TEMPER_NUM MOV TEMPER_NUM,A ; 保存变换后的温度数据 LCALL BIN_BCD RET ;将16进制的温度数据转换成压缩BCD码 BIN_BCD:MOV DPTR,#TEMP_TAB MOV A,TEMPER_NUM MOVC A,@A+DPTR MOV TEMPER_NUM,A RET TEMP_TAB: DB 00H,01H,02H,03H,04H,05H,06H,07H DB 08H,09H,10H,11H,12H,13H,14H,15H DB 16H,17H,18H,19H,20H,21H,22H,23H DB 24H,25H,26H,27H,28H,29H,30H,31H DB 32H,33H,34H,35H,36H,37H,38H,39H DB 40H,41H,42H,43H,44H,45H,46H,47H DB 48H,49H,50H,51H,52H,53H,54H,55H DB 56H,57H,58H,59H,60H,61H,62H,63H DB 64H,65H,66H,67H,68H,69H,70H,71H DB 72H,73H,74H,75H,76H,77H,78H,79H DB 80H,81H,82H,83H,84H,85H,86H,87H DB 88H,89H,90H,91H,92H,93H,94H,95H DB 96H,97H,98H,99H ;DS18B20初始化程序 INIT_1820: SETB DQ NOP CLR DQ MOV R0,#80H TSR1: DJNZ R0,TSR1 ;延时 SETB DQ MOV R0,#25H ;96US TSR2: DJNZ R0,TSR2 100 JNB DQ,TSR3 LJMP TSR4 ;延时 TSR3: SETB FLAG1 ;置标志位,表示DS1820存在 LJMP TSR5 TSR4: CLR FLAG1 ;清标志位,表示DS1820不存在 LJMP TSR7 TSR5: MOV R0,#6BH ;200US TSR6: DJNZ R0,TSR6 ;延时 TSR7: SETB DQ RET ;重新写DS18B20暂存存储器设定值 RE_CONFIG: JB FLAG1,RE_CONFIG1 ;若DS18B20存在,转RE_CONFIG1 RET RE_CONFIG1: MOV A,#0CCH ;发SKIP ROM命令 LCALL WRITE_1820 MOV A,#4EH ;发写暂存存储器命令 LCALL WRITE_1820 MOV A,#00H ;TH(报警上限)中写入00H LCALL WRITE_1820 MOV A,#00H ;TL(报警下限)中写入00H LCALL WRITE_1820 MOV A,#7FH ;选择12位温度分辨率 LCALL WRITE_1820 RET ;显示、键扫消抖程序 LEDKEY: CALL DISP ;显示 CALL GETKEY ;得到键盘扫描码 MOV R4,A ;键消抖处理程序 MOV R1,#48H MOV A,@R1 MOV R2,A INC R1 MOV A,@R1 MOV R3,A MOV A,R4 XRL A,R3 MOV R3,04H ;R4 MOV R4,02H ;R2 JZ XGE10 MOV R2,#88H MOV R4,#88H ;键盘消抖延迟参数 XGE10: DEC R4 MOV A,R4 XRL A,#82H JZ XGE11 MOV A,R4 XRL A,#0EH JZ XGE11 MOV A,R4 101 JZ XGE12 MOV R4,#20H DEC R2 SJMP XGE13 XGE12: MOV R4,#0FH XGE11: MOV R2,04H ;R4 NOP NOP MOV R4,03H ;R3 XGE13: MOV R1,#48H MOV A,R2 MOV @R1,A INC R1 MOV A,R3 MOV @R1,A MOV A,R4 JB ACC.5,XG113 JB ACC.4,XG113 MOV DPTR,#KEYCODE MOVC A,@A+DPTR XG113: RET ;显示子程序 DISP: PUSH DPL PUSH DPH SETB RS1 MOV R0,#LEDBUF MOV R2,#80H MOV DPTR,#LEDMAP DISP2: MOV A,@R0 MOVC A,@A+DPTR PUSH DPL PUSH DPH MOV DPTR,#OUTSEG MOVX @DPTR,A MOV A,R2 MOV DPTR,#OUTBIT MOVX @DPTR,A POP DPH POP DPL MOV R7,#90H ;显示防闪 DJNZ R7,$ CLR C RRC A ;右移显示 MOV R2,A DEC R0 JNZ DISP2 CLR RS1 POP DPH POP DPL RET ;键扫子程序 102 GETKEY: SETB RS1 MOV R2,#10000000B MOV R3,#08H MOV R0,#00H LGEP1: PUSH DPL PUSH DPH MOV DPTR,#OUTBIT MOV A,R2 MOVX @DPTR,A RR A MOV R2,A MOV DPTR,#IN_KEY MOVX A,@DPTR POP DPH POP DPL ANL A,#07H JNZ LGEP0 INC R0 DJNZ R3,LGEP1 XGEP33: MOV A,#20H XGEP3: MOV R2,A MOV A,#0FH PUSH DPL PUSH DPH MOV DPTR,#OUTBIT MOVX @DPTR,A POP DPH POP DPL MOV A,R2 CLR RS1 SJMP RETURN LGEP0: CPL A JB ACC.0,XGEP0 MOV A,#00H SJMP LGEPP XGEP0: JB ACC.1,XGEP1 MOV A,#08H SJMP LGEPP XGEP1: JB ACC.2,XGEP33 MOV A,#10H LGEPP: ADD A,R0 SJMP XGEP3 RETURN: RET ;字形表 LEDMAP: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;0~7 DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH ;8~F DB 0FFH,0CH ;' ','P.' ;键值表 KEYCODE:DB 07H,04H,08H,05H,09H,06H,0AH,0BH DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH END 103 知识,就是一切 有人问,知识是什么?知识又意味着什么呢? 知识可以丰富我们的精神生活,使我们变的 充实.知识也是财富,有了知识,就可以拥有财富.世界首富比尔盖茨之所以富有, 是靠他的天赋和知识,才创造财富. 知识是什么?知识就是力量,美国的海伦幼时因病丧失了视觉和听觉,但她并没有向命运屈服。最后,知识使她坚强的活下去. 最后,经过她的努力,她成为了一个优秀的学者和作家. 有知识的人,会受到尊重。这是我深有体会的,我想读者们也是吧.打个比方,在学校里,成绩好的就是权力最高的,有知识的就会受到尊重;没有知识(成绩差的),不但不能受到尊重,可能周围的人还会在背后说他.当然了,成绩差不一定就代表一切,就说我们班吧,成绩差的人倒是有一大堆,但有些人的“ 名声”可是很大的哦,他们朋友多得数不胜数,差不多七年级七个班都是他们的好朋友,有些人还跟初二初三的人打交道! 104 为什么人们尊重有知识的人呢?有知识的人,通常都阅读过大量的书籍.一些人生的道理、道德在书中都有.人类早在几亿年前就诞生了,到现在,人们仍然在不断学习,不断获取知识。知识使人们的精神文明更富足. 古人云:书中自有黄金屋,书中自有颜如玉.是的,学好了知识,什么都会有的. 现在我们是人生中的黄金时代,在这个黄金时代,如果不好好利用,虚度光阴后悔的将是你自己. 我想:我以上说的大多人都是知道的,关键是自己,不要被任何物质给诱惑,现在我们要知道是,学习最重要.知识,就是一切,如果因为现在的虚度光阴,漫不经心,最后,便会一事无成,后悔莫及! 105
本文档为【单片机实验指导书】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_751406
暂无简介~
格式:doc
大小:918KB
软件:Word
页数:157
分类:理学
上传时间:2017-09-27
浏览量:12