用单片机汇编语言实例编写程序 使单片机实验箱上的八只发光二极管左循环点亮2次,再右循环2次,这样交替出现5次

2012单片机原理与接口技术实验_大学生考试网
2012单片机原理与接口技术实验
实 验 指 导 书单片机原理与接口技术编者: 陈青华中科技大学武昌分校信息系 2011 年 3 月 目录第一章 系统概述 .............................................................................................................................................. 4 第二章 实验指导 ........................................................................................................................................ 148 一、实验指导说明 .................................................................................................................................. 148 二、软件实验部分 .................................................................................................................................. 148 实验一 清零程序 .......................................................................................................................... 159 实验二 拆字程序 ............................................................................................................................ 20 实验三 拼字程序 ............................................................................................................................ 21 实验四 数据区传送子程序 ............................................................................................................ 21 实验五 数据排序实验 .................................................................................................................... 22 实验六 查找相同数个数 ................................................................................................................ 23 实验七 无符号双字节快速乘法子程序 ........................................................................................ 24 实验八 多分支程序 ........................................................................................................................ 25 实验九 脉冲计数(定时/计数器实验) ....................................................................................... 27 实验十 电脑时钟(定时器、中断综合实验) ................................................................................. 31 三、硬件实验部分 .................................................................................................................................... 39 实验一 P1 输出口亮灯实验 ........................................................................................................... 41 实验二 P1 口输出转向灯实验 ....................................................................................................... 42 实验三 用 P3 口输入,用 P1 口输出实验 .................................................................................... 46 实验四 工业顺序控制实验 ............................................................................................................ 48 实验五 8255 A,B,C 口输出方波实验 ................................................................................... 51 实验六 8255 PA 开关输入,PB 口输出显示实验..................................................................... 52 实验七 8255 模拟交通信号灯控制过程实验 ............................................................................... 54 实验八 简单 I/O 接口扩展实验 ..................................................................................................... 57 实验九 A/D 转换实验 .................................................................................................................... 59 实验十 D/A 转换实验 .................................................................................................................... 62 实验十一 用 8279 扩展键盘、显示接口实验 .............................................................................. 65 *实验十二 用 8255 连接标准打印机接口实验 ............................................................................ 69 *实验十三 用微型打印机打印字符/ 曲线/ 汉字实验 ................................................................ 71 *实验十四 DS12887 日历时钟芯片应用实验 .............................................................................. 75 实验十五 I? 存储卡读写实验 ...................................................................................................... 87 C *实验十六 ISD1420 语音芯片录音实验 ....................................................................................... 96 *实验十七 ISD1420 语音芯片放音实验 ..................................................................................... 100 实验十八 单片机外接继电器控制实验 ...................................................................................... 103 实验十九 单片机控制步进电机实验 .......................................................................................... 105 实验二十 单片机扩展 8253 产生方波实验 ................................................................................ 109 实验二十一 单片机控制微型直流电机调速实验 ..................................................................... 111 实验二十二 单片机控制 16*16 点阵 LED 显示实验 ...............................................................114 实验二十三 单片机连接 128*64 点阵 LCD 液晶显示器实验 .................................................119 实验二十四 单片机扩展 8250 串行接口实验 .......................................................... 12832 实验二十五 单片机扩展 8251 串口与 PC 机通讯实验 ..................................................... 135 实验二十六 单片机用 RS232/RS485 串行发送数据实验(双机通讯).......................... 1422 实验二十七 实验二十八单片机用 RS232/RS485 串行接收数据实验(双机通讯)................................ 149 单片机接温度压力传感器实验 ............................................................................ 151实验项目(一)软件实验 (1)清零程序;(2)拆字程序;(3)拼字程序;(4)数据区传送子程序;(5) 数据排序实验;(6)查找相同数据个数;(7)无符号双字节快速乘法子程序;(8)多 分支程序;(9)脉冲计数实验;(10)电脑时钟实验。 (二)硬件实验 (1)P1 口输出亮灯实验;(2)P1 口输出转弯灯实验;(3)用 P3 口输入,用 P1 口 输出实验;(4)工业顺序控制实验;(5)8255 A,B,C 口输出方波实验;(6)8255 PA 开关输入,PB 口输出显示实验;(7)8255 模拟交通信号灯控制过程实验;(8)简单 I/O 接口扩展实验;(9)A/D 转换实验;(10)D/A 转换实验;(11)用 8279 扩展键盘、 显示接口实验;*(12)用 8255 连接标准打印机接口实验;*(13)用微型打印机打印字 符/ 曲线/ 汉字实验;*(14)DS12887 日历时钟芯片应用实验;(15)I?C 存储卡读写实 验;*(16)ISD1420 语音芯片录音实验;*(17)ISD1420 语音芯片放音实验;(18)单 片机外接继电器控制实验;(19)单片机控制步进电机实验;(20)单片机扩展 8253 产 生方波实验; (21)单片机控制微型直流电机调速实验; (22)单片机控制 16*16 点阵 LED 显示实验;(23)单片机连接 128*64 点阵 LCD 液晶显示器实验;(24)单片机扩展 8250 串行接口实验; (25) 单片机扩展 8251 串口与 PC 机通讯实验; (26) 单片机用 RS232/RS485 串行发送数据实验(双机通讯);(27)单片机用 RS232/RS485 串行接收数据实验(双机 通讯);(28)单片机接温度压力传感器实验; 注:实验项目前打*星号为选配扩展卡实验。DICE-3000 型 51/96 通用单片机仿真器相 关介绍详见 DICE-3000 型使用说明或本实验指导书的相关介绍。3 第一章系统概述一:恒科 超想-3000 仿真机的使用方法:在桌面点击“HK-51 系列仿真开发系统”出现如下画面: 1、 “新建”/“打开”一个 ASM 汇编源程序 2、 “编译/汇编! ”ASM 文件,生成包括 HEX 16 进制文件在内的系列文档。 如果编译没有通过,则根据提示修改程序的语法错误,直到编译成功。 3、插入仿真头到应用板上,通电后用“单步”或“连续”运行,观察 CPU 内部 RAM,各个 特殊功能寄存器内容的变化,以及应用板上设计的显示等变化。如果达不到设计效果和要 求,则需要重新考虑修改程序上的逻辑错误,直到完善为止。 要想了解更多超想-3000 仿真机的使用方法, 请查阅 《单片机原理及其接口技术实验》 朱 定 华 编 著 教 材 附 录 A ( 超 想 -3000 仿 真 机 使 用 说 明 )图 1-1 HK-51 系列仿真开发系统仿真软件窗口图示4 2 源文件的建立和打开 建立新文件 执行“文件/新文件”菜单命令或单击工具栏按钮即出现一个源文件编辑窗口,您可以在 编辑窗口中输入源程序代码,完成后用“文件/存储”命令将文件存到磁盘上。如果源文件是 新建立的` Super image-3000 Win98 则会弹出文件列表框要求您输入要保存的文件名,再单击 “保存”即可。 打开一个文件 执行“文件/打开文件”菜单命令或单击工具栏按钮即出现打开文件列表框,您可用鼠标 直接点击显示在列表框内文件名或者也可在输入框内直接输入,再单击“打开”按钮,屏幕 即出现一个文件编辑窗口,显示您选取的文件内容。 编译单个源程序文件 当您已经建立或打开了一个源程序文件,您就可以使用“编译/文件编译、连接、装载” 命令或单击工具栏按钮即可对当前源文件进行编译、连接,如果源文件存在错误,即弹出“编 译连接产生错误”对话框,单击“OK”,编译错误信息便出现在“编译连接信息”窗口,双击 错误信息行,光标便自动跳转到源文件编辑窗口的出错行,以便您进行修改。如果源程序文 件没有错误,即弹出“编译、连接成功”对话框。 编译、连接成功6.2 源文件的装载在源文件编辑窗口或已打开工程文件后即可用“编译/编译、连接、装载”菜单命令或 单击工具栏按钮即可对当前源文件或当前工程组进行编译、连接,并装载到 ROM。 当源文件通过编译并生成目标代码时,您可直接将其目标代码(*.OMF *.HEX *.BIN *.OBJ *.O)装入 ROM,方法是执行“编译/装载”菜单命令或单击工具栏按 钮,再选择要装载的代码文件。例如 demo.asm 已通过编译并生成代码,您可直接装载 demo.omf 文件。如果装载的文件不含调试信息,调试窗口则以反汇编方式显示。 您也可用此方法装载从编程器上读取的代码文件。 注意:当源文件经过修改,必须使用 重新编译装载。无论您使用何种方法装载,系统均提示编译、连接成功。 单击“OK”确认后,即打开调试窗口。使用调试窗口调试源程序您可以在程序调试窗口中对用户程序设置或清除断点、开始或中止仿真、进行单步操作 以及观察变量等。5 菜单及其命令菜 单 用 途 文件菜单 建立、打开、保存源文件,关闭当前窗口,输出列表表文件,退出 IDE 编辑菜单 对活动窗口有关内容进行编辑 编译菜单 源程序编译、连接、装载,浏览模块,设置编译选项 调试菜单 单步、断点、连续运行方式,增加变量,程序复位,程序暂停,设置 PC。 工程菜单 建立、打开、编辑、关闭工程,打开工程文件列表。 设置菜单 设置仿真模式及通讯端口。 视图菜单 查看调试、寄存器、存储器、变量、编译信息窗口。 窗口菜单 层叠、平铺及关闭所有窗口,选择已打开的窗口。 帮助菜单 显示关于 Super image-3000 的版本信息。 菜单及其用途列表 (1) 文件菜单 建立一个新的源文件。 弹出对话框,选取列表中的文件或在输入框输入文件名,单击“打开”,文件编辑窗 口即显示该文件内容。 关闭 关闭当前的活动窗口。 将当前编辑窗口中的文件存到磁盘上。 另存为 将当前编辑窗口中的文件换成另一个文件名再存盘。 输出列表文件 将当前 ROM 地址空间的代码保存为?LST 列表文件。 弹出文件列表对话框,输入要保存的文件名并单击“保存”。 执行该命令可退出 Super image-3000 Win98。 (2) 编辑菜单 注意:编辑菜单为 Super image-3000 Win98 的动态菜单,当激活不同的窗口时该菜单命 令也随之变化;关闭所有窗口后该菜单也自动关闭。现以源文件编辑窗口为例向您说明该菜 单(假设已激活源文件编辑窗口)。该菜单的其它命令将在以后的章节为您详细说明。我们特 别建议您使用 IDE 快捷菜单。 使用该命令能恢复文件编辑中最后一次所做的修改。 清除编辑窗口中选定的文件,并放置在剪贴板上。只有在选定文本后,这一命令才有效。 放置在剪帖板上的文件始终保留在那里,直到新内容替换掉它们。 使用该命令可将选定的文本复制到剪贴板上。只有在选定文本后,这一命令才有效。 复制到剪贴板上的文本将替换掉先前的内容 。 使用该命令可以将剪贴板内容插入到当前编辑窗口的光标位置。如果在编辑窗口中已选 定内容。使用该命令可用剪贴板上的内容替换掉选定的内容。 如果剪贴板上无内容,这一命令将是无效的。 使用该命令可以在当前编辑窗口中查找文本字符串。 该命令包含两参数,您可选择使用: Whole Word 整字匹配6 Match Case 区分大小写 查找下一个 Ctrl+L 使用该命令可以继续查找在“查找”命令中指定的文本。 使用该命令可以跳转到编辑窗口中指定的行。 字体 对编辑窗口中的文本进行字体、字号、颜色等设置。 刷新 重新显示当前编辑窗口。 (3) 编译菜单 编译、连接 对当前编辑窗口源文件或当前工程组进行编译、连接,生成目标代码。 编译、连接、装载 Ctrl+F9 对当前编辑窗口源文件或当前工程组进行编译、连接,并将生成的目标代码装入 ROM。 装载 F3 将磁盘上存在的目标代码直接装入 ROM。 浏览模块 Ctrl+F3 该命令可在调试窗口中浏览源文件内容,通常适用于浏览工程组中的源文件。 编译选项 使用该命令您可设置源文件编译的各选项。 (4) 调试菜单 连续运行 F9 执行该命令便开始连续运行用户程序,当遇到断点或按下 Esc 暂停键时停止。 运行到指定地址 F5 以连续方式运行程序,运行到指定的地址停下。如果在源文件方式下调试,可以选择符 号地址。 运行到光标处 F4 以连续方式运行程序,运行到光标所在行停下。如果光标移在非执行语句行,将不响应此命 令。 单步运行 F7 逐步运行用户程序,遇到调用子程序,则跟踪进入子程序运行。 宏单步运行 F8 逐步运行用户程序,遇到调用子程序,一步执行完整个过程而不进入子程序运行。 自动单步 以连续单步方式运行用户程序。 自动宏单步 以连续宏单步方式运行用户程序。7 增加变量 Ctrl+F5 将程序中想要观察的变量增加到变量窗口,在程序运行时您要随时观察变量的内容。 设置或清除断点 Ctrl+F8 当光标移到调试窗口可执行语句行时,可以用该命令设置断点,重复该命令也可清除断 点。 技巧:将鼠标移到调试窗口的可执行语句行左侧,单击鼠标即可设置断点。重复此操作 也可清除断点。 浏览断点 执行此命令即弹出对话框,您可通过对话框查看断点个数、断点所在的模块、断点地址、 断点在源文件中的行号,您也可用此命令增加或清除断点。 清除所有断点 该命令可清除各个调试模块中所有设置的断点。 复位 Ctrl+F2 该命令可对(目标系统)CPU 复位,同时将 PC 指针回复到装载文件的初始值(如 0000)。 重新开始运行 将当前 PC 置初始值(如 0000)后再以连续方式运行。 暂停 Esc 该命令可停止当前程序的运行(适用于连续运行、自动单步/自动宏单步运行方式),返回 待令状态。 夭折处理 强制停下当前正在运行的程序。一般来讲,“暂停”命令即可停止,如果正在运行和程序 无法用“暂停”命令停止,可使用此命令。 设置 PC 将当前 PC 指针指向您输入的地址。如果在源文件方式下调试,可以选择符号地址。 PC=当前地址 将 PC 指针指向当前光标所在的可执行语句行。 (5) 工程菜单 新建 打开文件列表框,创建新工程文件。 打开 弹出文件列表框,打开已存在的工程文件。 编辑 打开对话框,增加或删除工程中的文件。 关闭 关闭当前使用的工程文件。 文件列表8 打开工程文件列表对话框,可指定编辑工程中的源文件。 (6) 设置菜单 仿真模式 打开对话框,可对仿真 CPU、RAM、ROM 读写控制等选项进行设置。 通讯端口选择 选择与仿真器实际连接的通讯端口。 重新连接 通讯失败、检查硬件连接或重新选择通讯端口后,该命令可重新进行通讯测试。 (7) 视图菜单 调试 打开程序调试窗口。如果未装载程序,可看到随机代码。 寄存器 打开寄存器窗口。您可对该窗口进行增加、删除操作。 存储空间 1/2 IDE 允许同时打开两窗口,可在该窗口切换查看程序存储器、数据存储器、CPU 内部存 储器、特殊寄存器等内容。 变量 打开变量窗口,可随时观察变量的变化。 编译连接信息 打开编译连接信息窗口,可查看源文件编译是否有错。 (8)窗口菜单 层叠 以重叠方式排列已打开的窗口,但保持每窗口的标题栏都可见。 水平平铺 把已打开的窗口水平排列,使已打开的窗口都可见。 垂直平铺 把已打开的窗口垂直排列,使已打开的窗口都可见。 关闭所有窗口 关闭所有已打开的窗口。 选择“窗口”菜单下已打开窗口的名称及编号可以激活该窗口。 (9) 帮助菜单 关于 显示关于 Super image-3000 Win98 集成开发环境的版本信息,及 Win98 环境与 DOS 环境 下编辑器伪指令使用上的区别。9 二、TOP系列编程器使用的简要说明 TOP2005 型编程器具有体积小巧,功耗低 ,可靠性高的特点,是专为开发单片机和烧写各类存 储器而设计的通用机型。 TOP2005 采用 USB 通用串口与 PC 机连接通信,传输速率高,抗干扰性能好,可靠性能极高,而 且无需外接电源,特别适合电池供电的笔记本电脑外出使用。 其特点: 1.可支持 2?5~6?5V 的器件; 2.使用 USB 接口电源,不必外接电源; 3.通过 USB 通用串口与 PC 机连接,传送速率 12mh/s; 4.即适合电池供电的笔记本电脑使用,也适合台式机使用; 5.完善的过电流保护,有效地保护编程器和器件不受损害; 6.USB 负载能力检测(0 至 10 级); 7.全插脚检查,可以检查出任意一个插脚的的接触状态; 8.40 针进口万能锁紧插座; 9.在 WINOWS98SE/ME/200O/XP 下运行; 10.塑料机壳,体积小,重量轻,功耗低; 11.可自动探测厂家和型号; 12.单片机定时,编程速度与计算机无关; 一:芯片操作 1?1 常规步骤 连接好 TOPwin,电源指示灯 (红色)亮; 运行&TOPWin,exe&;工作指示灯 (绿色)亮; 在主菜单中选择&文件&,装载数据到文件缓冲区; 如下图所示:找到文件夹,选择 HEX 类型(ASM 文件编译后生成的 16 进制文件)文件。 10 二: 将芯片插在插座上并锁紧,准各对器件进行读写操作。 &操作&莱单: 选择型号,对应的工具按钮为&型号&,执行后弹出&选择厂家/型号&窗口: 芯片型号的选择过程按照:类型一)生产厂家一)型号的顺序确定芯片型号。 如下图所示:●在首行&查找&右边键入关键字,如&51&,这一步可以省略。 ●在&类别&框中选择芯片类型,如电擦除存储器; ● 在&制造厂家&列表框中选择生产厂家,例如选择 &ATMEL&; ●在&器件型号&列表框中选择芯片 型号。例如选择&AT89C52&。11 如果选择的是存储器,可以按&探测厂家代码&取得 2 字节代码,第一字节代表生产厂家,第二字节 代表型号。 然后,按&确认&进入读写操作。 2.读写器件:对应的工具按钮为&读写&,由于芯片的类型 不同,相应的读写窗口也略有不同。分别叙述如下: 1?读写并口存储器 以 89c52 为例,在&选择厂家/型号&窗口中选择 类型 电擦除存储器 选择厂家 ATMEL 器见型号 AT89C52 按&确认&键,弹出单片机读写窗口如下:●写器件: 写器件操作是把缓冲区内的数据烧写到芯片申。文件开始地址和器件开始地址默认为 0,隐含烧写 该器件的全部单元,数据长度最大可达六位十六进制 (HEX)数字,最大地 址空间 8M。用户也可以根拥需要对开始地址进行修改,达到部分烧写的目的。 写器件过程由进展条直观显示,烧写过程中,程序自动进行校验,如碰到不能写入的单元时,将退 出写操作,并显示出错地址、缓冲区数据和芯片数据内容。 特别注意: 器件在写之前必须特别要注意芯片型号不能搞错, 由于芯片类型不同, 使用的编程电压可能不一样, 否则会损坏器件或设备。确认所有设置正确无误后,将待编程的器件插到器件插座上,拉平锁紧扳手。 ●读器件: 将芯片中的全部数据读入缓冲区,分页显示到数据窗口,读出过程由进展条直观显示。用户可对读 出的数据进行修改,存盘(文件格式必须与芯片内的固化文件格式一致)。 ●擦除:12 擦除芯片存储器的全部内容,擦除后全为&FF&。只有电擦除器件可以用这个命令,EPROM 需用紫外 线擦除。 ●检查空片: 器件在写入之前,要检查是否空片。空片的每&-个字节都是&FF&(十六进制)。检查过程由进展条直 观显示,当发现非空单元,将退出检空操作,并显示非空单元的地址和数据。 该操作检查 EPROM 的所有地址空间,与设置的器件开始地址和数据长度无关。EPROM 可用紫外灯照 射后冉枪查,仍通不过则器件己损坏。 ●校对数据: 该操作把缓冲区内的数拥与芯片中的数据进行比较,校对由进展条直观显示,当遇到校对出错的单 元时,将退出校对操作,并显示出错单元的地址、缓冲区数据私芯片数据。 为了确保写入到器件的数据正确,&写器件&操作包含了校对,无须重复操作。 ●加保护: 很多 EEPROM 和 FLASHROM 具有保护功能。加保护后的器件只能读,不能写,必须经过解保护才能冉 写。该操作--般应用在写操作完成后使用。 ●解保护: 与加保护相反。 ●读厂家: 取得 z 字节代码,第一字节代表生产厂家,第二字节代表型号。 ●写速度: 不同厂家的产品编程速度可能不一样,既使同一厂家的产品,其型号不同编程速度也可能不一样。一般 可设为标准速度。 ● &自动&编程操作 该操作根据&组合操作&框内的选择自动完成对器件的编程操作,可提高芯片的编程效率。13 第二章一、实验指导说明实验指导本实验指导是为适应各大、 中专院校开设单片机原理与应用方面的课程需做大量软、 硬件实验的需 要而编写的.完成本实验指导中的实验,可使学生基本掌握 MCS-5l 单片机的结构原理、接口技术、程序 设计技巧。手册中详细叙述了各实验的目的、内容,列出了接线图、程序结构框图和清单。免除了主讲 教师和实验辅导老师为设计、准备调试实验线路和实验程序所需的工作量,节约了宝贵的时间。 1. 所有硬件实验程序已固化在程序存储器 EEPROM 中,选择 UP 模式(SW1),我们可以脱机实 验,从小键盘输入相应实验序号,再按 FV/EX 即可运行该实验程序;也可采用联机实验,将实验系统 与 PC 机通过 DJ-2008 仿真器相连,联机调试所有实验程序。 2. 实验接线图上的粗实线表示用户在实验时要用导线连接起来。 3. 所有实验都是相互独立的,次序上也没有固定的先后关系,在使用本书进行教学时,教师可根据该 校(院)的教学要求,选择相应实验。 4. 对同一问题的解决办法往往不是唯一的,欢迎用户在使用本书过程中提出更为优秀的实验方案, 指出错误和不足,希望用户反馈给我们,以便及时修改。二、软件实验部分软件实验部分是为了配合教材中单片机汇编语言教学而设计的相关实践操作内容, 软件部分的实验 主要以对存储器中的数据进行操作为主, 并不涉及过多的显示处理、 接口处理, 操作时以输入汇编程序, 运行并检验操作结果为主要实验过程, 软件实验部分既可以在实验箱中操作, 也可以在无实验箱的情况 下用单片机模拟调试程序完成,其主要目的是掌握 51 单片机的指令系统和提高汇编编程的能力。 读者也可以自行设计相关的程序,并在实验条件下进行调试和验证以拓展编程能力。软件实验部分 本书提供了十个验证实验程序以供实验时选择使用。14 实验一清零程序1,实验目的: 掌握汇编语言设计和调试方法,熟悉键盘操作。 2,实验内容: 把 2000H~20FFH 的内容清零。 3,实验程序框图:4,实验步骤: 用连续或单步方式运行程序,检查 2000~20FF 中执行程序前后的内容变化。 5,思 考: 假使把 2000H~2100H 中的内容改成 FF,,如何修改程序。6,程序清单: ORG 0000H LJMP SE01 ORG 0640H SE01: MOV R0,#00H MOV DPTR,#2000H LOO1: CLR A MOVX @DPTR,A INC DPTR INC R0 CJNE R0,#00H,LOO1 LOOP: SJMP LOOP END; (0000H)送 DPTR ;0 送(DPTR) ;DPTR+1 ;字节数(寄存器内容)加 1 ;不到 FF 个字节再返回清零15 实验二拆字程序l,实验目的: 掌握汇编语言设计和调试方法。 2,实验内容: 把 2000H 的内容拆开,高位送 2001H 低位,低位送 2002H 低位,2001H、2002H 高位清零, 一般本程序用于把数据送显示缓冲区时用。 3,实验程序框图:4,实验步骤: 用连续或单步方式运行程序,检查 2000H~2002H 中内容变化情况。 5,思 考: 如何用断点方式调试本程序。6,程序清单:;把指定字节的高低位拆开分别存放,多用于显示子程序 ORG 0000H LJMP SE02 ORG 0660H SE02: MOV DPTR,#2000H MOVX A,@DPTR MOV B,A ; (2000)→A→B SWAP A ;交换 ANL A,#0FH ;屏蔽高位 INC DPTR MOVX @DPTR,A ;送 2001H INC DPTR MOV A,B ANL A,#0FH ; (2000)内容屏蔽高位 MOVX @DPTR,A ;送 2002H LOOP: SJMP LOOP END16 实验三拼字程序1,实验目的: 进一步掌握汇编语言设计和调试方法。. 2,实验内容: 把 H 的低位分别送入 2002H 高低位,一般本程序用 于把显示缓冲区的数据取出拼装成一字节。 3,实验程序框图: 4,实验步骤:单步或用断点方式运行程序,检查 2002H 内容变化情况。 5, 程序清单: ORG 0000H LJMP START ORG 0680H MOV DPTR,#2000H MOVX A,@DPTR ANL A,#0FH SWAP A MOV B,A INC DPTR MOVX A,@DPTR ANL A,#0FH ORL A,B INC DPTR MOVX @DPTR,A SJMP $ ENDSTART:; (2000H)内容屏蔽高位 ;交换 ;保存 ; (2000H)内容送 A ;屏蔽高位 ;或 ;送 2002H实验四数据区传送子程序1,实验目的: 掌握 RAM 中的数据操作。 2,实验内容: 把 R2.R3 源 RAM 区首址内的 R6.R7 字节数据传送到 R4.R5 目的 RAM 区。 3,实验程序框图: 4,实验步骤: 在 R2.R3 中输入源首址(例如 0000H) ,R4.R5 中输入目 的地址(例如 2000H),R6.R7 中输入字节数(例如 lFFFH),运行程序,检查 0000H~lFFFH 中内容是否和 2000H~3FFFH 中内容完全一致。 5,程序清单: ORG 0000H LJMP SE2217 SE22:LO42:LO43:LOOP: LO44: LO45:ORG 07B0H MOV DPL,R3 MOV DPH,R2 MOVX A,@DPTR MOV DPL,R5 MOV DPH,R4 MOVX @DPTR,A CJNE R3,#0FFH,LO42 INC R2 INC R3 CJNE R5,#0FFH,LO43 INC R4 INC R5 CJNE R7,#00H,LO44 CJNE R6,#00H,LO45 SJMP LOOP NOP DEC R7 SJMP SE22 DEC R7 DEC R6 SJMP SE22 END;建立源程序首址 ;取数 ;目的地首址 ;传送;源地址加 1;目的地址加 1 ;字节数减 1;未完继续实验五数据排序实验熟悉 51 指令系统,掌握程序设计方法。 编写并调试一个排序子程序,其功能为用冒泡法将内 存 RAM 中几个单字节无符号的正整数,按从小到大 的次序重新排列。1,实验目的: 2,实验内容:3,程序框图: 4,实验步骤:将 RAM 50H~5AH 中放入不等的数据,用断点方法运行 本实验程序后检查 50H~5A 中的内容是否按从小到大的 次序排列。 5,思 考:修改程序把 50H~5AH 中内容从大到小排列。6,程序清单: ORG 0000H LJMP QUE18 ORG 09B0H QUE: MOV R3,#50H QUE1: MOV A,R3 MOV R0,A MOV R7, #0AH CLR 00H MOV A, @R0 QL2 : INC R0 MOV R2,A CLR C MOV 22H,@R0 CJNE A,22H,QL3 SETB C QL3: MOV A,R2 JC QL1 SETB 00H XCH A,@R0 DEC R0 XCH A,@R0 INC R0 QL1: MOV A,@R0 DJNZ R7,QL2 JB 00H,QUE1 LOOP: SJMP LOOP END;指针送 R0 ;长度送 R7 ;清标志位;相等吗?;大于交换位置;大于交换位置;一次循环中有交换继续 ;无交换退出实验六查找相同数个数熟悉汇编语言编程。 在 FH 的 N 个单元中填入零, 运行本 程序后检查 2100H 中是否为 N。 3,实验程序框图: 4,实验步骤: 在 FH 的几个单元中填入零, 运行本 程序后检查 2100H 中是否是几个单元数。 5,思考: 修改程序,查找其它内容。 6,程序清单: 1,实验目的: 2,实验内容:ORG 0000H LJMP L5800 ORG 0AA0H L5800: MOV R0,#10H MOV R1,#00H MOV DPTR,#2000H;查找 16 个字节19 L5811: MOVX A,@DPTR CJNE A,#00H,L5816 INC R1 L5816: INC DPTR DJNZ R0,L5811 MOV DPTR,#2100H MOV A,R1 MOVX @DPTR,A L581E: SJMP L581E END;取出内容与 00H 相等吗? ;取出个数加 1 ;未完继续;相同数的个数送 2100H实验七无符号双字节快速乘法子程序1,实验目的: 掌握 MCS-51 汇编语言程序设计方法。 2,预备知识: 本程序利用单字节的乘法指令,根据下面的公式进行乘法运算的。 (R2R3)*(R6R7)=((R2)* =(R2)*(R6)* +(R3))*((R6)* +R7)) +(R3)*(R7)+((R2)*(R7)+(R3)*(R6))*3,实验内容: 将(R2R3)和(R6R7)中双字节无符号整数相乘,积送 R4 R5 R6 R7 中。 4,实验程序框图: 5,实验步骤: 在 R2R3 和 R6R7 中输入无符号整数,断点或单步运行本实验程序后检查 R4 R5 R6 R7 中内容。 6,程序清单: ORG 0000H LJMP QKUL ORG 0970H QKUL: MOV A,R3 MOV B,R7 MUL AB XCH A,R7 MOV R5,B MOV B,R2 MUL AB ADD A,R5 MOV R4,A CLR A ADDC A,B MOV R5,A MOV A,R6 MOV B,R3 MUL AB ADD A,R4;R3*R7 ;R7=(R3*R7)低字节 ;R5=(R3*R7)高字节 ;R2*R7;R5=(R2*R7)高字节;R3*R620 XCH A,R6 XCH A,B ADDC A,R5 MOV R5,A MOV PSW.5,C ;存 CY MOV A,R2 MUL AB ;R2*R6 ADD A,R5 MOV R5,A CLR A MOV ACC.0,C MOV C,PSW.5 ;加上次加法的进位 ADDC A,B MOV R4,A LOOP: SJMP LOOP END实验八多分支程序1,实验目的: 掌握汇编语言的编程。 2,实验内容: 编写程序,根据送入的数据转移运行。 3,实验程序框图: 4,实验步骤:在 20H 中分次送入 00.01.02.03,每次运行程序 后,观察数码管上数字循环情况。 5,程序清单 ORG 0000H LJMP MEMS ORG 0A10H MEMS: MOV A,#43H MOV DPTR,#0FF20H MOVX @DPTR,A MOV A,20H MOV DPTR,#KKKK ;散转地址 RL A ; (20)*2 JMP @A+DPTR ;转到(20)*2+DPTR KKKK: AJMP MEMSP0 AJMP MEMSP1 AJMP MEMSP2 SJMP MEMSP3 MEMSP0: MOV 20H,#0C0H ;0 字循环 LJMP SOX0 MEMSP1: MOV 20H,#0F9H ;1 字循环 LJMP SOX0 MEMSP2: MOV 20H,#0A4H ;2 字循环21 LJMP SOX0 MEMSP3: MOV 20H,#0B0H ;3 字循环 LJMP SOX0 ORG 0DA0H SOX0: MOV A,20H MOV R0,#22H MOV R1,#21H MOVX @R0,A MOV A,#01H SOX1: cpl a MOVX @R1,A cpl a MOV R2,#20H LCALL DELY RL A ; 显示字程序 SJMP SOX1 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 END22 实验九脉冲计数(定时/计数器实验)1, 实验目的: 熟悉单片机内部定时/计数器功能,掌握初始化编程方法。 2, 实验内容 :把定时器 0 外部输入的脉冲进行计数,并送显示器显示3, 实验程序框图:4, 实验接线图:23 5, 实验步骤: 用插针把 8MHZ 插孔和 T 插孔连接, P3.4 依次接 T0~T7 或单脉冲输出孔, 执行程序, 观察数码管上计数脉冲的速度及个数。 6, 思考: 修改程序使显示器上可显示到 999999 个脉冲个数。 7, 程序清单:SE15:LO29:ZOY0:LO30:ORG 0000H LJMP SE15 ORG 06E0H MOV SP,#53H MOV P2,#0FFH MOV A,#43H MOV DPTR,#0FF20H MOVX @DPTR,A MOV TMOD,#05H MOV TH0,#00H MOV TL0,#00H SETB TR0 MOV R2,TH0 MOV R3,TL0 LCALL ZOY0 MOV R0,#79H MOV A,R6 LCALL PTDS MOV A,R5 LCALL PTDS MOV A,R4 LCALL PTDS LCALL SSEE SJMP LO29 CLR A MOV R4,A MOV R5,A MOV R6,A MOV R7,#10H CLR C MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV A,R6 ADDC A,R6;定时计数器初始化 ;开计数器;取出 TH0,TL0 内容 ;二转十进制;送显示缓冲区 ;显示 ;循环计数;0 送 R4 R5 R6 ;R2 R3 左移,移出的 ;最高位送 CY;(R4 R5 R6)*2 送 R4 R5 R624 DA A MOV R6,A MOV A,R5 ADDC A,R5 DA A MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A DJNZ R7,LO30 RET;十进制调整;循环 16 次PTDS:MOV R1,A ACALL PTDS1 MOV A,R1 SWAP A PTDS1: ANL A,#0FH MOV @R0,A INC R0 RET SSEE: SSE2: SETB RS1 MOV R5,#05H MOV 30H,#20H MOV 31H,#7EH MOV R7,#06H MOV R1,#21H MOV A,30H CPL A MOVX @R1,A MOV R0,31H MOV A,@R0 MOV DPTR,#DDFF MOVC A,@A+DPTR MOV R1,#22H MOVX @R1,A MOV A,30H RR A MOV 30H,A DEC 31H MOV A,#0FFH MOVX @R1,A;拆送显示缓冲区;换工作区SSE1:;字位送入;取字形代码 ;字形送入 ;右移;关显示25 DDFF:DJNZ R7,SSE1 ;6 位显示完了吗? DJNZ R5,SSE2 ;5 次显示完了吗? CLR RS1 RET DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH END26 实验十电脑时钟(定时器、中断综合实验)1,实验目的:熟悉 MCS-5l 定时器和中断初始化编程方法,了解定时器的应用实时程序的设计与调 试技巧。 编写程序,从实验系统键盘上输入时间初值,用定时器产生 0.lS 定时中断,对时钟计数 器计数,并将数值实时地送数码管显示。2,实验内容:3,实验程序框图4,实验步骤:连续运行程序,在键盘上输入时间初值,按执行键 F0/EX 执行,数码管实时显示时 间值。5,思考: (1)电子钟走时精度和程序中那些常数有关? (2)修改程序使定时器工作方式改变,调节有关参数,进一步提高精度。 6,程序清单CHK0:ORG 0000H LJMP CHK0 ORG 000BH LJMP CLOCK ORG 0030H MOV SP,#60H MOV 7EH,#11H MOV 7DH,#10H MOV 7CH,#10H27 MOV 7BH,#10H MOV 7AH,#10H MOV 79H,#10H MOV A,#43H MOV DPTR,#0FF20H MOVX @DPTR,A MOV R0,#59H MOV A,#7EH MOVX @R0,A LCALL LCK0 ;键扫,显示字程序 LCALL PTDS0 ;显示缓冲区放数子程序 MOV TMOD,#01H ORL IE,#82H MOV TL0,#0E6H MOV TH0,#0DBH ;定时中断初始化 MOV 23H,#00H SETB TR0 ;开定时 LOO5: LCALL SSEE LCALL PTDS0 SJMP LOO5 ;循环 PTDS0: MOV R0,#79H MOV A,22H ACALL PTDS MOV A,21H ACALL PTDS MOV A,20H ACALL PTDS RET PTDS: MOV R1,A ;拆送显示缓冲区 ACALL PTDS1 MOV A,R1 SWAP A PTDS1: ANL A,#0FH MOV @R0,A INC R0 RET CLOCK: MOV TL0,#0E6H ;恢复初值 MOV TH0,#0DBH PUSH PSW PUSH ACC SETB 0D3H ;保护 INC 23H ;0.1 秒 1 MOV A,23H CJNE A,#64H,DONE ;1 秒到吗? DONE:SSEE: SSE2:SSE1:MOV 23H,#00H ;清 0.1 秒单元 MOV A,22H INC A ;秒加 1 DA A MOV 22H,A ;十进制调整 CJNE A,#60H,DONE ;60 秒到了吗? MOV 22H,#00H ;秒单元清零 MOV A,21H INC A DA A ;分加 1,十进制调整 MOV 21H,A CJNE A,#60H,DONE ;60 分到了吗? MOV 21H,#00H ;分单元清零 MOV A,20H INC A DA A ;时加 1,十进制调整 MOV 20H,A CJNE A,#24H,DONE ;24 小时到了吗? MOV 20H,#00H ;时单元清零 POP ACC ;退栈 POP PSW RETI ;返回 ORG 0D50H SETB RS1 ;换工作区 MOV R5,#05H MOV 30H,#20H MOV 31H,#7EH MOV R7,#06H MOV R1,#21H MOV A,30H CPL A MOVX @R1,A ;字位送入 MOV R0,31H MOV A,@R0 MOV DPTR,#DDFF MOVC A,@A+DPTR ;取字形代码 MOV R1,#22H MOVX @R1,A ;字形送入 MOV A,30H ;右移 RR A MOV 30H,A DEC 31H MOV A,#0FFH MOVX @R1,A ;关显示29 DDFF:X3:X31:X30:X2: X0:X1 :DJNZ R7,SSE1 ;六位显示完了吗? DJNZ R5,SSE2 ;5 次显示完了吗? CLR RS1 RET DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH ORG 1D00H MOV R4,A MOV R0,#59H MOVX A,@R0 MOV R1,A MOV A,R4 MOV @R1,A CLR A POP DPH POP DPL MOVC A,@A+DPTR INC DPTR CJNE A,01H,X30 CLR A MOVC A,@A+DPTR MOVX @R0,A INC DPTR PUSH DPL PUSH DPH RET DEC R1 MOV A,R1 SJMP X31 MOV R6,#50H ACALL XLE JNB ACC.5,XX0 DJNZ R6,X0 MOV R6,#20H MOV R0,#59H MOVX A,@R0 MOV R0,A MOV A,@R0 MOV R7,A MOV A,#10H MOV @R0,A ACALL XLE JNB ACC.5,XX1 DJNZ R6,X130 XX1:XX0: XLE:X10:X12: x11: X13:MOV A,R7 MOV @R0,A SJMP X2 MOV R6,A MOV A,R7 MOV @R0,A MOV A,R6 RET ACALL DIS ACALL KEY MOV R4,A MOV R1,#48H MOVX A,@R1 MOV R2,A INC R1 MOVX A,@R1 MOV R3,A MOV A,R4 XRL A,R3 MOV R3,04H MOV R4,02H JZ X10 MOV R2,#88H MOV R4,#88H DEC R4 MOV A,R4 XRL A,#82H JZ X11 MOV A,R4 XRL A,#0EH JZ X11 MOV A,R4 ORL A,R4 JZ X12 MOV R4,#20H DEC R2 SJMP X13 MOV R4,#0FH MOV R2,04H MOV R4,03H MOV R1,#48H MOV A,R2 MOVX @R1,A INC R131 LS3:DIS:LS2:LS1:LS0:KEY:LP1:MOV A,R3 MOVX @R1,A MOV A,R4 RET DB 07H,04H,08H,05H,09H,06H,0AH DB 0BH,01H,00H,02H,0FH,03H,0EH DB 0CH,0DH PUSH DPH PUSH DPL SETB RS1 MOV R0,#7EH MOV R2,#20H MOV R3,#00H MOV DPTR,#LS0 MOV A,@R0 MOVC A,@A+DPTR MOV R1,#22H MOVX @R1,A MOV A,R2 CPL A DEC R1 MOVX @R1,A CPL A DEC R0 DJNZ R3,LS1 CLR C RRC A MOV R2,A JNZ LS2 INC R1 MOV A,#0FFH MOVX @R1,A CLR RS1 POP DPL POP DPH RET DB 0C0H,0F9H,0A4H,0B0H,99H,92H DB 82H,0F8H,80H,90H,88H,83H,0C6H DB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH SETB RS1 MOV R2,#0FEH MOV R3,#08H MOV R0,#00H MOV A,R232 XP33: XP3: LP0:XP0:XP1:XP2: LPP:LX0:XP35: LCK0:MOV R1,#21H MOVX @R1,A RL A MOV R2,A MOV R1,#23H MOVX A,@R1 CPL A ANL A,#0FH JNZ LP0 INC R0 DJNZ R3,LP1 MOVX A,@R1 JB ACC.4,XP33 MOV A,#19H SJMP XP3 MOV A,#20H CLR RS1 RET CPL A JB ACC.0,XP0 MOV A,#00H SJMP LPP JB ACC.1,XP1 MOV A,#08H SJMP LPP JB ACC.2,XP2 MOV A,#10H SJMP LPP JB ACC.3,XP33 MOV A,#18H ADD A,R0 CLR RS1 CJNE A,#10H,LX0 JNC XP35 MOV DPTR,#LS3 MOVC A,@A+DPTR RET LCALL X2 JNC LCK1 LCALL X3 MOV R1,#7EH SJMP LCK0 CJNE A,#16H,LCK0LCK1:33 LCK2:CLK3:CLK4: EXIT:MOV A,7AH SWAP A ORL A,79H MOV 22H,A CJNE A,#60H,LCK2 JNC EXIT MOV A,7CH SWAP A ORL A,7BH MOV 21H,A CJNE A,#60H,CLK3 JNC EXIT MOV A,7EH SWAP A ORL A,7DH MOV 20H,A CJNE A,#24H,CLK4 JNC EXIT RET AJMP LCK0 END34 三、硬件实验部分硬件实验部分是为了配合教材中单片机原理和接口技术而设计的相关实践操作内容。 硬件部分的实验主要以对单片机编程,并实现具体的设计功能为主要实验过程,如通过单 片机的输出口控制 LED 发光、实现并口的扩展、掌握外接键盘接口电路工作原理等等。硬 件部分的实验要涉及外部的接口和模拟电路,本书所提供的硬件实验中所用到的外部电路 都已设计在实验箱的电路中了, 操作时只要连接几根电线, 将外部电路与相关的接口连通, 再输入相应的程序,即可运行并检验操作结果。硬件实验部分一般要在实验箱上操作完成,而配合硬件实验的汇编程序当然也可以先 在无实验箱的情况下用单片机模拟调试程序调试通过,并在具有真实外部相关电路的实验 箱上进行最终实验。硬件实验部分的主要目的是掌握 51 单片机的硬件系统工作原理和提 高单片机软硬件系统的综合设计能力。读者也可以自行设计相关的程序,并在实验条件下进行调试和验证以提高硬件设计和 应用的综合能力。硬件实验部分本书提供了十八个验证实验程序以供实验时选择使用。35 实验一P1 输出口亮灯实验1, 实验目的: (l)学习 P1 口的使用方法; (2)学习延时子程序的编写。 2, 实验顶备知识: (l) ,Pl 口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位 写入“1”,该位才能作为输入。 (2) ,本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz)*指令所需机器周期数*循环次数, 在系统时间允许的情况下可以采用此方法。 3, 实验内容: P1 口输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。 4, 实验程序框图:5, 实验接线图(共连 8 根线) :36 6, 实验步骤:P1.0~P1.7 用插针连至 L1~L8,运行程序后,观察发光二极管闪亮移位情况。7, 思考: 改变延时常数,使发光二极管闪亮时间改变。 修改程序,使发光二极管闪亮移位方向改变。 8, 程序清单 ORG 0000H LJMP SE18 ORG 0790H MOV P1, #0FFH MOV A, #0FEH MOV P1, A LCALL SE19 RL A SJMP LO33 ORG MOV MOV DJNZ DJNZ RET END 07A0H R6, #0A0H R7, #0FFH R7, LO35 R6, LO36SE18: LO34: LO33:;送 P1 口 ;L1 发光二极管点亮 ;延时 ;左移位 ;循环SE19: LO36: LO35:;延时37 实验二P1 口输出转向灯实验1,实验目的: 进一步了解 P1 口的使用,学习汇编语言编程方法及调试技巧。 2, 实验内容: P1.0 开关接 5V,右转弯灯闪亮,P1.1 开关接 5V 时左转弯灯闪亮,P1.0,P1.1 开关同 时接 5V 或接地时,转弯灯均不闪亮。 3,实验程序框图:4,实验接线图(共连 8 根线) :38 5,实验步骤:P1.0 接 K1,P1.1 接 K2,P1.4~P1.7 接 L1、L4、L7、L10,连续运行本程序,应看 到转弯灯正确闪亮,在用单步方式调试本程序时需修改延时子程序, (例可把延时程 序第一个字节改成返回指令 22H) ,以便观察。6,程序清单:PX00: PX03:PX04:PX01:PX05:ORG 0000H LJMP PX00 ORG 0C30H MOV P1,#0FFH MOV A,P1 MOV B,A ANL A,#03H CJNE A,#01H,PX01 JB 00H,PX04 CLR P1.4 CLR P1.5 SETB P1.6 SETB P1.7 MOV R2,#20H LCALL DELY SETB 00H LJMP PX03 SETB P1.4 SETB P1.5 SETB P1.6 SETB P1.7 MOV R2,#20H LCALL DELY CLR 00H AJMP PX03 CJNE A,#02H,PX02 JB 01H,PX05 SETB P1.4 SETB P1.5 CLR P1.6 CLR P1.7 MOV R2,#20H LCALL DELY SETB 01H LJMP PX03 SETB P1.4 SETB P1.5 SETB P1.6;初始化;满足只是 P1.0 为高条件? ;闪烁标志位 ;开右灯 ;关左灯 ;延时 ;置标志位 ;继续查找状态;关灯;延时 ;清标志位 ;继续查找状态 ;满足只是 P1.1 为高条件吗? ;判标志位 ;开左灯 ;关右灯 ;延时 ;置标志位 ;继续查找;关灯39 SETB P1.7 MOV R2,#20H LCALL DELY CLR 01H LJMP PX03 QPX02: SETB P1.4 SETB P1.5 SETB P1.6 SETB P1.7 LJMP PX03 DELY: DEL2: DEL3: DEL4: PUSH 02H PUSH 02H PUSH 02H DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END;延时 ;清标志位 ;继续查找状态;关灯 ;继续; 延时附加:实验内容:根据 89C2051 单片机引脚排列,画出基本接线原理电路图(含电源,地,复位,晶振 等) 设计出显示 LED 各项动态效果的程序P13 P12 P11 P10 P13 P12 P11 P10 P13 P12 P11 P10VCC + C3 22uf 1K R30 C1 27P C2 27P GND XIAL 12M P34 P35 U1 1 2 3 4 5 6 7 8 9 10 VPP/Rst VCC P3.0/RxD P1.7 P3.1/TxD P1.6 XTAL1 P1.5 XTAL2 P1.4 P3.2 P1.3
P1.2 P3.4 P1.1 P3.5 P1.0 GND P3.7 89C 18 17 16 15 14 13 12 11P16 R1 P15 P16 P15 P14 P13 P12 P11 P10 P37 R2 P14 R3 D3 D2 D1R4 R5 R6 R7 D5P16 R8 P15 D8R11 R12 R13 R14 D12P16 R15 P15 D15R18 R19 R20 R21 D19D4D6R9 P14D9D11D13R16 D16 P14D18D20D7R10D10D14R17D17D21GNDVCC Q1 KVCC Q2 KVCC Q4 K40 练习程序:ORG AJMP ORG MAIN: LP1: MOV DPTR,#TAB ACALL INC ACALL SETB CLR CLR ACALL CLR CLR SETB ACALL CLR SETB CLR AJMP Delay_1s LED0 DISPLAY P3.4 P3.5 P3.7 DISPLAY P3.4 P3.5 P3.7 DISPLAY P3.4 P3.5 P3.7 LP1 A A,@A+DPTR P1,A DPTR MOVC MOV INC RET ;----------------------------Delay_1S: MOV LOOP7: LOOP6: MOV NOP NOP DJNZ DJNZ RET ;-----------------------------TAB: DB DB END 0FEH,0FDH,0FBH,0F7H,0EFH 0DFH,0BFH,07FH R6,LOOP6 R7,LOOP7 R7,#0FFH R6,#0FFH 0000H MAIN 0100HDISPLAY:CLR;------------------------------41 实验三用 P3 口输入,用 P1 口输出实验1,实验目的: 掌握 P3 口,P1 口简单使用。 2,实验内容: P3.3 口输入一脉冲, PI 口按 16 进制加一方式点亮发光二极管。 3,实验程序框图:4, 实验接线图(共接 9 根线) :5,实验步骤: P3.3 用接针连至 K1 P1.0~P1.7 插针连至 L1~L8,K1 拨动一次,L1~L8 发光二极 管按 16 进制方式加一点亮。 6,思 考: 修改程序,使发光二极管以左移方式点亮。42 7,程序清单:J100: J101:J102:DELY: DEL2: DEL3: DEL4:ORG 0000H LJMP J100 ORG 0810H MOV A, #00H JB P3.3, J101 MOV R2, #10H LCALL DELY JB P3.3, J101 JNB P3.3, J102 MOV R2, #10H LCALL DELY JNB P3.3, J102 INC A PUSH ACC CPL A MOV P1, A POP ACC AJMP J101 PUSH 02H PUSH 02H PUSH 02H DJNZ R2, DEL4 POP 02H DJNZ R2, DEL3 POP 02H DJNZ R2, DEL2 POP 02H DJNZ R2, DELY RET END;P3.3 电平为低吗?;P3.3 电平为高吗? ;加 1 ;取反 ;驱动发光二极管 ;循环;延时实用例子43 实验四工业顺序控制实验1,实验目的:掌握工业顺序控制程序的简单编程,中断的使用。 2,实验预备知识:在工业控制中,象冲压、注塑、轻纺、制瓶等生产过程,都是一些继续生产过程,按某 种顺序有规律地完成预定的动作,对这类继续生产过程的控制称顺序控制, 象注塑机工艺过程大致按 “合 模→注射→延时→开模→产伸→产退”顺序动作,用单片机最易实现。 3,实验内容:由 P1.0~1.6 控制注塑机的七道工序,现模拟控制七只发光二极的点亮,低电平有效,设 定每道工序时间转换为延时,P3.4 为开工启动开关,高电平启动。P3.3 为外部故障输入模拟开关,低 电平报警,P1.7 为报警声音输出,设定 6 道工序只有一位输出,第七道工序三位有输出。 4,实验程序框图:5,实验接线图(共连 10 根线) :44 6,实验步骤:JP 向下短接,按图接好连线。执行程序,把 K1 接到低电平,观察发光二极管点亮情况, 确定工序执行是否正常,然后把 K2 置为低电平,看是否有声音报警,恢复中断 1.报警停,又从刚才报警时 一道程序执行下去。可用单步、单步跟踪,非全速断点、全速断点,连续执行功能调试软件,直到符合自 己程序设计要求为止。 7,思考:修改程序,使每道工序中有多位输出。 8,程序清单:PO10: PO11:PO12:ORG 0000H LJMP PO10 ORG 0013H LJMP PO16 ORG 0190H MOV P1,#7FH ORL P3,#00H JNB P3.4,PO11 ;开工吗? ORL IE,#84H ORL IP,#04H MOV PSW,#00H ;初始化 MOV SP,#53H MOV P1,#7EH ;第一道工序 ACALL PO1B MOV P1,#7DH ;第二道工序45 PO16: PO17: PO18:PO19:PO1A:PO1B:ACALL PO1B MOV P1,#7BH ACALL PO1B MOV P1,#77H ACALL PO1B MOV P1,#6FH ACALL PO1B MOV P1,#5FH ACALL PO1B MOV P1,#0FH ACALL PO1B SJMP PO12 MOV B,R2 MOV P1,#7FH MOV 20H,#0A0H SETB P1.7 ACALL PO1A CLR P1.7 ACALL PO1A DJNZ 20H,PO18 CLR P1.7 ACALL PO1A JNB P3.3,PO17 MOV R2,B RETI MOV R2,#10H ACALL DELY RET MOV R2,#06H ACALL DELY RET MOV R2,#30H ACALL DELY RET PUSH 02H PUSH 02H PUSH 02H DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H;第三道工序 ;第四道工序 ;第五道工序 ;第六道工序 ;第七道工序;保护现场 ;关输出 ;振荡次数 ;振荡 ;延时 ;停振 ;延时 ;不为 0 转 ;停振 ;故障消除吗? ;恢复现场;延时 1;延时 2;延时 3DELY: DEL2: DEL3: DEL4:;延时46 DJNZ R2,DELY RET END实验五8255A,B,C 口输出方波实验1,实验目的:掌握可编程 I/O 接口芯片 8255 的接口原理使用,熟悉对 8255 初始化编程和输入/输出软件 的设计为法。 2,实验内容:在 8255 的 A,B,C 口用万用表可测出每个口线的高低电平变化。 3,实验程序框图:4, 实验步骤:执行程序,用万用表测量 8255A.B.C 口应有高低电平变化(或用 8255A.B.C 口分别用插针 连至 Ll~L8,观察发光二极管变化情况)。 5,程序清单:SE09:LO15:ORG 0000H LJMP SE09 ORG 0580H MOV DPTR,#0FF2BH MOV A,#80H MOVX @DPTR,A MOV A,#55H MOV DPTR,#0FF28H MOVX @DPTR,A INC DPTR MOVX @DPTR,A INC DPTR MOVX @DPTR,A MOV R2,#10H;8255 初始化 ;一位隔一位高电平;A、B、C 口送入 ;延时47 DELY: DEL2: DEL3: DEL4:LCALL DELY CPL A SJMP LO15 ORG 05A0 PUSH 02H PUSH 02H PUSH 02H DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END;取反 ;循环;延时实验六8255PA 开关输入,PB 口输出显示实验1,实验目的:掌握单片机系统中扩展外围芯片的方法,了解 8255 芯片的结构及编程方法。 2,实验内容:用 8255 PA 口作开关量输入口,PB 口作输出口。 3,实验程序框图:4,实验接线图(共接 16 根线) :48 5,实验步骤:8255PA0~PA7 接 Kl~K8,PB0~PB7 接 L1~L8 运行程序,按 K1~K8,观察 L1~L8 发光 二极管是否对应点亮。 6,程序清单:SE17:LO32:ORG 0000h LJMP SE17 ORG 0770H MOV DPTR,#0FF2BH MOV A,#90H MOVX @DPTR,A MOV DPTR,#0FF28H MOVX A,@DPTR INC DPTR MOVX @DPTR,A SJMP LO32 END;8255 初始化 ;PA 口状态读出 ;送 PB 口49 实验七8255 模拟交通信号灯控制过程实验1, 实验目的:进一步了解 8255 芯片的结构及编程方法,学习模拟交通信号灯控制的实现方法。 2, 2,实验内容:用 8255 做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。 3,实验程序框图:4,实验接线图(共接线 12 根) :5,实验步骤:8255 PA7~PA0 PB3~PB0 接发光二极管 L5~L12、L1~L4。执行程序,初始态为四个 路口的红灯全亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后东 西路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北 路口方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,再切换到50 东西路口方向,之后重复以上过程。 6,程序清单:JOD0:JOD3:JOD1:ORG 0000H LJMP JOD0 ORG 0BB0H MOV SP,#60H MOV DPTR,#0FF2BH MOV A,#88H MOVX @DPTR,A MOV DPTR,#0FF28H MOV A,#0B6H MOVX @DPTR,A INC DPTR MOV A,#0DH MOVX @DPTR,A MOV R2,#25H LCALL DELY MOV DPTR,#0FF28H MOV A,#75H MOVX @DPTR,A INC DPTR MOV A,#0DH MOVX @DPTR,A MOV R2,#55H LCALL DELY MOV R7,#05H MOV DPTR,#0FF28H MOV A,#0F3H MOVX @DPTR,A INC DPTR MOV A,#0CH MOVX @DPTR,A MOV R2,#20H LCALL DELY MOV DPTR,#0FF28H MOV A,#0F7H MOVX @DPTR,A INC DPTR MOV A,#0DH MOVX @DPTR,A MOV R2,#20H LCALL DELY;8255 初始化;点亮 4 个红灯 ;延时;东西绿灯亮,南北红灯亮 ;延时 ;闪烁次数;东西黄灯亮,南北红灯亮 ;延时;南北红灯亮 ;延时51 JOD2:DELY: DEL2: DEL3: DEL4:DJNZ R7,JOD1 MOV DPTR,#0FF28H MOV A,#0AEH MOVX @DPTR,A INC DPTR MOV A,#0BH MOVX @DPTR,A MOV R2,#55H LCALL DELY MOV R7,#05H MOV DPTR,#0FF28H MOV A,#9EH MOVX @DPTR,A INC DPTR MOV A,#07H MOVX @DPTR,A MOV R2,#20H LCALL DELY MOV DPTR,#0FF28H MOV A,#0BEH MOVX @DPTR,A INC DPTR MOV A,#0FH MOVX @DPTR,A MOV R2,#20H LCALL DELY DJNZ R7,JOD2 LJMP JOD3 ORG 0C30H PUSH 02H PUSH 02H PUSH 02H DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END;闪烁次数未到继续;东西红灯亮,南北绿灯亮 ;延时 ;闪烁次数;东西红灯亮,南北黄灯亮 ;延时;东西红灯亮 ;延时 ;闪烁次数未到继续 ;循环;延时52 实验八l,实验目的:简单 I/O 接口扩展实验(1)学习单片机系统中扩展简单 I/O 口的方法。 (2)学习数据输入输出程序的编制方法。 2,实验内容: 利用 74LS244 作为输入口,读取开关状态,并将此状态,通过 74LS273 再驱动发光二极管显 示出来。 3,实验程序框图:4,实验接线图(共接线 16 根) :53 5,实验步骤:Y0~Y7 接 K1~K8,Q0~Q7 接 L1~L8,CS1 接 FF80H,CS2 接 FF90H,JX0 接 JX7, 执行程序,按动 K1~K8,观察 L1~L8 是否对应点亮。 6,思考: 可否用 273 输入,244 输出。 7,程序清单: ORG 0000H LJMP GOD0 ORG 0B80H MOV DPTR, #8000H MOVX A, @DPTR MOV DPTR, #9000H MOVX @DPTR, A SJMP GOD0 ENDGOD0:;取出 244 状态 ;送 273 驱动发光二极管54 实验九A/D 转换实验1, 实验目的: (1)掌握 A/D 转换与单片机接口的方法; (2)了解 A/D 芯片 0809 转换性能及编程方法; (3)通过实验了解单片机如何进行数据采集。 2,实验内容:利用实验系统上的 0809 做 A/D 转换器,实验系统上的电位器提供模拟量输入,编制程 序,将模拟量转换成数字,通过数码管显示出来。 3,实验接线图(共接线 2 根) :4,实验程序框图:55 5,实验步骤:把 0809 的零通道 INT0 用插针接至 AOUT1 孔,CS4 接 FF80H,JX0 接 JX6,8MHZ 接 T, 运行程序,数码管上显示 0809.XX,,后二位显示当前采集的电压转换的数字量,调节 W1,该二位将随着 电压变化而相应变化。 6,思考:修改程序,用其它通道轮流采样显示。 7,程序清单:ORG 0000H LJMP SE11 ORG 05A0H SE11: MOV SP,#53H MOV A,#43H MOV DPTR,#0FF20H MOVX @DPTR,A MOV 7EH,#00H MOV 7DH,#08H MOV 7CH,#00H MOV 7BH,#09H MOV 7AH,#10H MOV 79H,#10H LO18: LCALL SSEE MOV A,#00H MOV DPTR,#8000H MOVX @DPTR,A MOV R7,#0FFH LO17: DJNZ R7,LO17 MOVX A,@DPTR MOV R0,#79H LCALL PTDS SJMP LO18 ORG 05D0H PTDS: MOV R1,A ACALL PTDS1 MOV A,R1 SWAP A PTDS1: ANL A,#0FH MOV @R0,A INC R0 RET ORG 0D50H SSEE: SETB RS1 MOV R5,#05H;显示缓冲区初值 ;显示;0809 的 0 通道采样 ;延时 ;取出采样值;采样值送显示缓冲区 ;拆送显示缓冲区;换工作区56 SSE2:SSE1:DDFF:MOV 30H,#20H MOV 31H,#7EH MOV R7,#06H MOV R1,#21H MOV A,30H CPL A MOVX @R1,A ;字位送入 MOV R0,31H MOV A,@R0 MOV DPTR,#DDFF MOVC A,@A+DPTR ;取字形代码 MOV R1,#22H MOVX @R1,A ;字形送入 MOV A,30H RR A ;右移 MOV 30H,A DEC 31H MOV A,#0FFH MOVX @R1,A ;关显示 DJNZ R7,SSE1 ;六位显示完了吗? DJNZ R5,SSE2 ;5 次显示完了吗? CLR RS1 RET DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH END57 实验十实验目的:D/A 转换实验(1)了解 D/A 转换与单片机的接口方法; (2)了解 D/A 转换芯片 0832 的性能及编程方法; (3)了解单片机系统中扩展 D/A 转换芯片的基本方法; 2,实验内容: 利用 0832 输出一个从 0V 开始逐渐升至 5V 再降至 0V 的可变电压。 3,实验接线图(共接线 2 根) :3, 实验程序框图:58 4,实验步骤: 把 0832 译码线 CS5 接至 FF80H,JX0 接 JX2,运行程序,数码管上显示不断加大或减 小的数字量,用万用表测试 D/A 输出孔 AOUT 应也能测出不断加大或减小的电压值。 5,思考: 修改程序,使能产生锯齿波。 6,程序清单: ORG 0000H LJMP SE13 ORG 05E0H SE13: MOV SP,#53 MOV A,#43H MOV DPTR,#0FF20H MOVX @DPTR,A MOV 7EH,#00H MOV 7DH,#08H MOV 7CH,#03H MOV 7BH,#02H ;显示缓冲区初值 LO20: MOV R6,#00H LO21: MOV DPTR,#8000H MOV A,R6 MOVX @DPTR,A ;送 0832 转换 MOV R0,#79H LCALL PTDS LCALL SSEE ;显示 MOV R2,#08H LCALL DELYA ;延时 INC R6 ;加 1 CJNE R6,#0FFH,LO21 ;不到 FF 继续加 LO22: MOV DPTR,#8000H DEC R6 MOV A,R6 ;减 1 送 0832 转换 MOVX @DPTR,A MOV R0,#79H LCALL PTDS LCALL SSEE ;显示 MOV R2,#08H LCALL DELYA ;延时 CJNE R6,#00H,LO22 ;不为 0 继续减 SJMP LO20 ;循环 ORG 0620H PTDS: MOV R1,A ;拆送显示缓冲区 LCALL PTDS1 MOV A,R1 SWAP A PTDS1: ANL A,#0FH MOV @R0,A59 INC R0 RET ORG 0D50H SSEE: SETB RS1 ;换工作区 MOV R5,#05H SSE2: MOV 30H,#20H MOV 31H,#7EH MOV R7,#06H SSE1: MOV R1,#21H MOV A,30H CPL A MOVX @R1,A ;字位送入 MOV R0,31H MOV A,@R0 MOV DPTR,#DDFF MOVC A,@A+DPTR ;取字形代码 MOV R1,#22H MOVX @R1,A ;字形送入 MOV A,30H RR A ;右移 MOV 30H,A DEC 31H MOV A,#0FFH MOVX @R1,A ;关显示 DJNZ R7,SSE1 ;六位显示完了吗? DJNZ R5,SSE2 ;五次显示完了吗? CLR RS1 RET DDFF: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH DELYA: PUSH 02H DELYB: PUSH 02H DELYC: PUSH 02H DELYD: DJNZ R2,DELYD LCALL SSEE ;调显示子程序 POP 02H DJNZ R2,DELYC POP 02H DJNZ R2,DELYB POP 02H DJNZ R2,DELYA ;延时 RET END60 实验十一用 8279 扩展键盘、显示接口实验1,实验目的:掌握 8051 系统中,扩展 8279 键盘显示接口的方法。 2,实验内容:按下数字键,数码管上应相应能显示数字,按下功能键,能相应执行其它程序。 3,实验接线图(共有单连线 1 根,排线三个)4,实验程序框图:5,.实验步骤:把 CS6 孔用插针连至 FF80H,JSL 接 JS,JRL 接 JR,JOUT 接 JLED,JK 置外接(实验 完后置系统),运行程序,数码管上显示 P,按下数字键,数码管上应能显示相应数字,按下功能键,数码管上显 示相应的 0 字 l 字 2 字循环。61 6,思考:修改程序,高四位数码管显示数字当地址看待,按功能键 1 后,按下的数字只显示在后二位上,当 数据看待,功能键 2 和功能键 3 当地址加一和减一键使用。 7,程序清单:H900:H901:H902: H903:H904:H905:H906:ORG 0000H LJMP H900 ORG 00D0H MOV SP,#53H MOV DPTR,#8001H MOV A,#00H ; MOVX @DPTR,A MOV A,#32H MOVX @DPTR,A MOV A,#0DFH MOVX @DPTR,A MOVX A,@DPTR JB ACC.7,H901 MOV A,#85H MOVX @DPTR,A MOV DPTR,#8000H MOV A,#0c8H MOVX @DPTR,A INC DPTR MOV A,#85H MOVX @DPTR,A MOV 30H,#85H MOV 31H,#40H MOV DPTR,#8001H MOVX A,@DPTR ANL A,#07H CJNE A,#00H,H904 AJMP H903 MOV DPTR,#8000H MOVX A,@DPTR MOV B,A ;取出键值 MOV R1,#00H MOV DPTR,#GOJZ MOV A,#00H MOVC A,@A+DPTR CJNE A,B,H906 AJMP H907 INC DPTR INC R1;8279 方式字写入 ;分频;清缓冲区;字形送入;字位送入,显示 P;有键按下吗?;查键值表是否相同 ;转数字外处理程序 ;键表地址加 1 ;查找次数加 162 MOV A,R1 JB ACC.4,H908 ;是功能键吗? AJMP H905 ;继续查找 H908: MOV R1,#00H MOV DPTR,#GOJZ1 H909: MOV A,#00H MOVC A,@A+DPTR ;功能键键值取出 CJNE A,B,H90A ;键值相等吗? AJMP H90B ;转功能键处理子程序 H90A: INC DPTR INC R1 MOV A,R1 JNB ACC.2,H909 ;继续查找 AJMP H900 ;无键按下返回 H907: MOV A,30H MOV DPTR,#8001H ;字位送入 8279 MOVX @DPTR,A MOV A,R1 MOV R0,31H MOV @R0,A INC 31H ;字形缓冲区加 1 MOV DPTR,#ZOE0 MOVC A,@A+DPTR ;取出字形代码 MOV DPTR,#8000H MOVX @DPTR,A ;送入 8279 显示 DEC 30H ;字位加 1 MOV A,30H CJNE A,#7fH,H90C ;显示到第 8 位,从头显示 AJMP H902 H90C: AJMP H903 H90B: MOV DPTR,#CKEY3 ;功能键散转处理 MOV A,R1 RL A ADD A,R1 JMP @A+DPTR CKEY3: LJMP L240 LJMP L241 LJMP L242 LJMP H900 GOJZ: DB 0C9H,0C1H,0D1H,0E1H,0C8H,0D8H,0E8H,0C0H,0D0H DB 0E0H,0F0H,0F8H,0F1H,0F9H,0E9H,0D9H GOJZ1: DB 0F2H,0FAH,0F3H,0FBH ZOE0: DB 0CH,9FH,4AH,0BH,99H,29H,28H,8FH,08H,09H,88H DB 38H,6CH,1AH,68H,0E8H63 L240: L241: L242: L245: L246:DELY: DEL2: DEL3: DEL4:ORG 0E41H MOV R5,#0CH LJMP L245 MOV R5,#9FH LJMP L245 MOV R5,#4AH MOV R6,#80H MOV A,R6 MOV DPTR,#8001H MOVX @DPTR,A MOV A,R5 MOV DPTR,#8000H MOVX @DPTR,A MOV R2,#20H LCALL DELY MOV A,#0FFH MOVX @DPTR,A INC R6 CJNE R6,#88H,L246 AJMP L245 RET PUSH 02H PUSH 02H PUSH 02H DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END;0 字循环 ;1 字循环 ;2 字循环;字位送入 8279;字形送入 8279 ;延时 ;关显示 ;下一位显示 ;不到最后一位继续64 *实验十二用 8255 连接标准打印机接口实验1, 实验目的: 掌握扩展芯片 8255 实验应用,通用打印机的初始化编程知识。 2, 实验内容: 编制程序,使用通用打印机打印 RAM 区中的 ASCII 码字符。 3,实验程序框图:4,实验接线图(打印机接口用电缆 1 根) :5,实验步骤: 把通用打印机接口用电缆联接到 DJ51 系列实验系统的 PRINT 即 CZ4 插座上,执行程 序,通用打印机打印一行 ASCII 码字符。 6,思考: 修改或编写程序,使通用打印机打印汉字。 7,程序清单:DOE0:ORG 0000H MOV DPTR,#0FF2BH65 DOE1:MOV A,#88H MOVX @DPTR,A MOV DPTR,#0FF2AH MOV A,#01H MOVX @DPTR,A MOVX A,@DPTR JB ACC.4,DOE1 MOV DPL,R0 MOV DPH,R1 MOVX A,@DPTR INC DPTR MOV R0,DPL MOV R1,DPH MOV DPTR,#0FF28H MOVX @DPTR,A MOV DPTR,#0FF2AH MOV A,#00H MOVX @DPTR,A MOV A,#01H MOVX @DPTR,A DJNZ R2,DOE1 DJNZ R3,DOE1 SJMP $ END;8255 控制命令送入 ;关打印机;打印机忙吗?;取数 ;DPTR 加 1;送打印机;开始打印 ;字节打完吗?66 *实验十三用微型打印机打印字符/ 曲线/ 汉字实验1,实验目的: 了解微型打印机和 8051 系统联接方法,掌握编程技巧。 2,实验内容: 微型打印机打印年,月,日和“启东”,及曲线。 3,实验预备知识:GP-l6 打印机自带单片微型计算机,便于和各种 CPU 的微型计算机或智能化仪器仪 表联机,采用标准 CENTRONICS 并行接口信号,逻辑电平为标准 TTL 电平。 4,实验程序框图:5,实验接线图(打印机接口专用电缆 1 根) :6,实验步骤: 把 GP-16 微型打印机接口用电缆联接至实验系统的 PRINT 即 CZ4 插座上, 2000H 在 输入曲线点阵数据。执行程序,打印机打印。67 7,思考:试让打印机打印你的名字。 8,程序清单: ORG 0000H D1E0: MOV SP,#53H MOV DPTR,#0FF2BH MOV A,#88H MOVX @DPTR,A ;8255 初始化 A、B 口输出 C 口输入 ACALL D1E2 ;打印空格和#号 ACALL D1E3 ;换行 MOV R6,#0A6H ;取代码偏移量 MOV R7,#0DH ;13 个代码 D1E1: MOV A,R6 MOVC A,@A+PC ;取代码 ACALL D1E4 ;打印 INC R6 DJNZ R7,D1E1 ;未完继续 ACALL D1E3 ACALL D1E2 ;再打印一行#和空格 ACALL D1E3 ACALL D1EA ;设置行间距子程序 ACALL D1E5 ;图形命令子程序 MOV R6,#68H ACALL D1E6 ;取代码偏移量 ACALL D1E5 ;打印上部图形 MOV R6,#8CH ACALL D1E6 ;打印下部图形 ACALL D1E7 ACALL D1E7 ;回车换行 MOV DPTR,#2000H ;曲线数据存放地址 MOV R6,#14H ACALL D1E8 ;取曲线数据 MOV R7,#0DH` ;行数 D1E9: MOV R6,#09H ;列数 ACALL D1E8 DJNZ R7,D1E9 ;取曲线数据 SJMP $ D1E3: MOV A,#0AH ;打印完吗? ACALL D1E4 ;换行子程序 RET D1E7: MOV A,#0DH ;回车子程序 ACALL D1E4 RET D1EA: MOV A,#1BH68 ACALL D1E4 MOV A,#31H ACALL D1E4 ;ESC I n(n=0) MOV A,#00H ;行间距=0 ACALL D1E4 ACALL D1E3 RET D1E6: MOV R7,#24H D1EB: MOV A,R6 MOVC A,@A+PC ACALL D1E4 ;36 个图形代码送打印机 INC R6 DJNZ R7,D1EB ACALL D1E3 RET D1E8: MOV A,#1BH ACALL D1E4 MOV A,#27H ACALL D1E4 ;ESC/ m n1 n2 nk CR 命令 MOV A,R6 ACALL D1E4 ; (R6)=m D1EC: MOVX A,@DPTR INC DPTR ; (DPTR)=n1 n2 nk ACALL D1E4 DJNZ R6,D1EC ACALL D1E7 ;CR 命令 RET D1E5: MOV A,#1BH ACALL D1E4 MOV A,#4BH ACALL D1E4 ;ESC K n1 n2 MOV A,#24H ;图形打印命令 ACALL D1E4 MOV A,#00H ACALL D1E4 RET D1E2: MOV R7,#07H D1ED: MOV A,#23H ACALL D1E4 ;打印 7 个#号和空格 MOV A,#20H ACALL D1E4 DJNZ R7,D1ED RET D1E4: PUSH DPH69 D1EE:PUSH DPL PUSH ACC MOV DPTR,#0FF2AH MOVX A,@DPTR JB ACC.4,D1EE ;打印机忙吗? POP ACC MOV DPTR,#0FF28H MOVX @DPTR,A ;送打印机 MOV DPTR,#0FF2BH MOV A,#00H MOVX @DPTR,A MOV A,#01H MOVX @DPTR,A ;产生 STB 后沿 POP DPL POP DPH RET DB 23H,20H,39H,34H,8CH,31H,32H,8DH,33H,30H,8EH DB 20H,23H ;#94 年 12 月 30 日# DB 00H,00H,00H,7FH,3FH,22H,22H,0A2H,0E2H,62H DB 22H,22H,22H,3EH,7FH,20H,00H,00H ;“字”部代码 DB 00H,00H,00H,00H,20H,21H,27H,3FH,79H,0E1H,0BFH DB 27H,21H,21H,23H,61H,20H,00H ;“东”字上部代码 DB 00H,03H,06H,0FCH,0FCH,7FH,3EH,22H,22H,22H,22H DB 22H,22H,3FH,7FH,20H,00H,00H ;“字”部代码 DB 00H,00H,00H,00H,04H,0CH,0B8H,70H,22H,02H,0FEH DB 0FEH,00H,40H,38H,1EH,08H,00H ;“字”部代码 END70 *实验十四DS12887 日历时钟芯片应用实验一、实验目的 1、了解日历钟芯片 DS12887A 的工作原理。 2、掌握单片机与日历钟芯片的扩展、编程。 二、实验内容 1、利用实验系统键盘设置日历、时钟。 2、利用 MC3 的静态显示器显示年、月、日。 3、利用实验系统的显示器显示时、分、秒。 三、编程指南 1、定义 F0/EX 键为读取显示当前已设置的日历、时钟。定义 SCAL 键为日历设置、定义 STEP 键为时 钟设置。 2、/IRQ 为日中断请求。 3、DS12887 内部地址分配。4、DS12887 的控制和状态寄存器。 ⑴ 寄存器 A(控制寄存器)71 ⑵ 寄存器 B(控制寄存器)⑶ 寄存器 C(状态寄存器,只读)⑷ 寄存器 D(内部锂电池状态标志,只读)四、实验接线图(共接单线 1 根,20 芯排线一根) :72 五、实验步骤 (1)连 CZ7(主板)→CZ1(MC3),P3.2→/IRQ(MC3)。 (2)运行程序 CLOCK.ASM,主机提示&SE――&等待键输入,① 如按 F0/EX,则读取显示当前已设置 的日历钟。② 如按数字键、再按 SCAL 键,则重新设置日历,例如设置日历为 2002 年 02 月 22 日,只 需输入 02 02 22 即可,20 为固定设置,不需输入。 六、程序框图七、程序清单 ORG 0000H ;this is a program of data&clock AJMP START0 ; ORG 0003H LJMP rddatewait START0: MOV SP,#81H MOV A,#43H MOV DPTR,#0FF20H73 MOVX @DPTR,A CLR EA SETB IT0 ACALL BUF MOV R0,#59H MOV A,#7EH MOV @R0,A START: LCALL X2 JNC FUN LCALL X3 DB 79H,7EH SJMP START FUN: CJNE A,#16H,FUN1 AJMP RDCLOCKWAIT ;RD-TIME FUN1: CJNE A,#17H,FUN2 LCALL DATE ;SET-DATE CALL BUF AJMP START FUN2: CJNE A,#1EH,START LCALL TIME ;SET TIME CALL BUF AJMP START ;----- ---------------------------------------------------------------------rdclockwait: acall rddate1 setb ea setb ex0 rdclockcon: mov dptr,#800ah movx a,@dptr jb 0e7h,rdcl读时间 mov r0,#52save 数据 to dis-显示---------------------------------------------------------------------DATE: mov r0,#77eh,7dh=year 20 x.x,7ch,7bh=yu x.x,7ah,79h=day x.x mov r1,#5555h=year,54h=yu,53h=7eh...79h,save to 55h,54h,h write to ds12887 day unit RET time: mov r0,#77eh,7dh=hour x.x,7ch,7bh=minutes ;x.x,7ah,79h=second x.x mov r1,#5252h=hour 51h=minutes 50h=se;7eh...79h,save to 52h,51h,50设置 ds12887 时间74 RET ;---------------------------------------------------------------------rddatewait: push dpl push dph push acc push 00h push 01h push 02h push 79h push 7ah push 7bh push 7ch push 7dh push 7eh mov dptr,#800ch movx a,@clr int rddatecon: mov dptr,#800ah movx a,@dptr jb 0e7h,rdd读 date mov r0,#55数据转换显示 pop 7eh pop 7dh pop 7ch pop 7bh pop 7ah pop 79h pop 02h pop 01h pop 00h pop acc pop dph pop dpl reti rddate1: mov dptr,#800ah movx a,@dptr jb 0e7h,rddate1读 date mov r0,#55save 数据 to dis-显示 ret75 ; ----------------------------------------------------------------------------------wrint: clr a mov dptr,#8001h movx @dptr,a mov dptr,#8003h movx @dptr,a mov dptr,#8005h movx @dptr,a ret setdate: mov r0,#53h mov dptr,#800ah movx a,@dptr mov a,#27h movx @dptr,a inc dptr mov a,#80h movx @dptr,a acall wrint mov dptr,#8007day mov a,@r0 movx @dptr,a inc dptr inc r0 mov a,@r0 movx @dptr,yu inc dptr inc r0 mov a,@r0 movx @dptr,a mov dptr,#800bh mov a,#222h movx @dptr,a ret settime: mov r0,#50h mov dptr,#800ah movx a,@dptr mov a,#27h movx @dptr,a inc dptr mov a,#80h movx @dptr,a acall wrint mov dptr,#8000h mov a,@r076 movx @dptr,a inc r0 inc dptr inc dptr mov a,@r0 movx @dptr,a inc r0 inc dptr inc dptr mov a,@r0 movx @dptr,a mov dptr,#800bh mov a,#222h movx @dptr,a ret rddate: mov dptr,#8007h movx a,@dptr mov 53h,rd day inc dptr movx a,@rd yu mov 54h,a inc dptr movx a,@rd year mov 55h,a ret rdtime: mov dptr,#8000h movx a,@dptr mov 50h,rd second inc dptr inc dptr movx a,@rd minutes mov 51h,a inc dptr inc dptr movx a,@rd hour mov 52h,a ret savebuff: ;mov r0,#52h mov r1,#7eh mov r2,#03h savebuff1 : mov a,@r0 swap a anl a,#0fh mov @r1,a77 dec r1 mov a,@r0 anl a,#0fh mov @r1,a dec r1 dec r0 djnz r2,savebuff1 ret picktime: mov r2,#03h picktime1: mov a,@r0 ;r0:7EH,r1:55h/52h swap a dec r0 orl a,@r0 mov @r1,a dec r0 dec r1 djnz r2,picktime1 ret BUF: MOV 7EH,#05H MOV 7DH,#0EH MOV 7CH,#14H MOV 7BH,#14H MOV 7AH,#10H MOV 79H,#10H RET X3: MOV R4,A MOV R0,#59H MOV A,@R0 MOV R1,A MOV A,R4 MOV @R1,A CLR A POP DPH POP DPL MOVC A,@A+DPTR INC DPTR CJNE A,01H,X30 CLR A MOVC A,@A+DPTR X31: MOV @R0,A INC DPTR PUSH DPL PUSH DPH RET78 X30:DEC R1 MOV A,R1 SJMP X31 X2: MOV R6,#50H X0: ACALL XLE JNB ACC.5,XX0 DJNZ R6,X0 MOV R6,#20H MOV R0,#59H MOV A,@R0 MOV R0,A MOV A,@R0 MOV R7,A MOV A,#10H MOV @R0,A X1: ACALL XLE JNB ACC.5,XX1 DJNZ R6,X1 MOV A,R7 MOV @R0,A SJMP X2 XX1: MOV R6,A MOV A,R7 MOV @R0,A MOV A,R6 XX0: RET XLE: ACALL DIS ACALL KEY 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 MOV R4,02H JZ X10 MOV R2,#88H MOV R4,#88H X10: DEC R4 MOV A,R479 XRL A,#82H JZ X11 MOV A,R4 XRL A,#0EH JZ X11 MOV A,R4 ORL A,R4 JZ X12 MOV R4,#20H DEC R2 SJMP X13 X12: MOV R4,#0FH x11: MOV R2,04H MOV R4,03H X13: MOV R1,#48H MOV A,R2 MOV @R1,A INC R1 MOV A,R3 MOV @R1,A MOV A,R4 RET LS3: DB 07H,04H,08H,05H,09H,06H,0AH DB 0BH,01H,00H,02H,0FH,03H,0EH DB 0CH,0DH DIS: PUSH DPH PUSH DPL SETB RS1 MOV R1,#21H MOV A,#00H MOVX @R1,A MOV R0,#7EH MOV R2,#20H MOV R3,#00H MOV DPTR,#LS0 LS2: MOV A,@R0 MOVC A,@A+DPTR MOV R1,#22H MOVX @R1,A MOV A,R2 DEC R1 CPL A MOVX @R1,A CPL A80 DEC R0 LS1: DJNZ R3,LS1 CLR C RRC A MOV R2,A JNZ LS2 INC R1 MOV A,#0FFH MOVX @R1,A CLR RS1 POP DPL POP DPH RET LS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92H DB 82H,0F8H,80H,90H,88H,83H,0C6H DB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH KEY: SETB RS1 MOV R2,#0FEH MOV R3,#08H MOV R0,#00H LP1: MOV A,R2 MOV R1,#21H MOVX @R1,A RL A MOV R2,A MOV R1,#23H MOVX A,@R1 CPL A ANL A,#0FH JNZ LP0 INC R0 DJNZ R3,LP1 MOVX A,@R1 JB ACC.4,XP33 MOV A,#19H SJMP XP3 XP33: MOV A,#20H XP3: CLR RS1 RET LP0: CPL A JB ACC.0,XP0 MOV A,#00H SJMP LPP XP0: JB ACC.1,XP181 MOV A,#08H SJMP LPP XP1 : JB ACC.2,XP2 MOV A,#10H SJMP LPP XP2: JB ACC.3,XP33 MOV A,#18H LPP: ADD A,R0 CLR RS1 CJNE A,#10H,LX0 LX0: JNC XP35 MOV DPTR,#LS3 MOVC A,@A+DPTR XP35: RET DISQ: mov a,#02h mov r0,#80h mov @r0,a mov 7fh,#00h MOV R1,#08H MOV R0,#79H MOV DPTR,#TAB LOOP: MOV A,@R0 MOVC A,@A+DPTR MOV SBUF,A JNB TI,$ CLR TI INC R0 DJNZ R1,LOOP RET TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH DB 6FH,7CH,39H,5EH,79H,71H,40H,73H END82 实验十五I? 存储卡读写实验 C1,实验目的: (1)熟悉 IC 卡(I? 存储卡简称)工作原理及 I? 总线结构。 C C (2)利用单片机的 I/O 口线 P3.0、P3.1 产生 I2C 总线 SCL、SDA。 2,实验内容: 本实验以 AT24C01A 卡为例,根据 AT24C01A 卡的读写时序编写读写卡的程序,把写入 IC 卡的数 据读到系统内存 4000H~407EH 单元中。 3,编程指南 (1)AT24C01A 卡是一种 E2PROM 存储卡,容量为 128× 8bit ,采用 I? 总线结构,其卡的结构及 C 引脚排列见下图(2)操作状态开始和停止的定义(3)数据的有效性关系83 (4)数据传送确认(5)写操作(6)读操作4,实验接线图(共接 5 根线) :84 5,实验步骤 (1)插卡方法:把 IC 卡芯片面向前、向下轻轻插入 IC 卡座。 (2)P3.0~SCL,P3.1~SDA. (3) P1.0~P1.2 →L1~L3, P1.0→INS, P1.0 作为插卡识别信号, 发光二极管 L1 作为 IC 卡插入指示灯, 灯亮表明 IC 卡插入正确,P1.1 (4)作为 IC 卡写信号指示,发光二极管 L2 作为 IC 卡写信号指示灯,灯亮表明 IC 卡正在写,P1.2 作 为 IC 卡读信号指示,发光二极管 (5)L3 作为 IC 卡读信号指示灯,灯亮表明 IC 卡正在读。 (6)编程流程:(7)运行程序:IC? ASM 程序即可,如读写正确系统应显示“ICGOOD”,内存 4000H~407EH 单元中应85 为 55、56、57……d3(H)内容,否则应显示“IC-ERR”。 6,程序清单:ORG 0000H SCL EQU 0B0H ;IC2401,byte-wr SDA EQU 0B1H ;------------------------------------------------------START: MOV SP,#53H MOV A,#43H MOV DPTR,#0FF20H MOVX @DPTR,A MOV A,#1FH INC DPTR MOVX @DPTR,A INC DPTR MOV A,#0CEH MOVX @DPTR,A JB P1.0,$ LCALL DL10MS JB P1.0,START LCALL DL10MS MOV R0,#00H MOV R1,#55H conw1: push 00R0 IS IC CAR WR ADDRESS push 01R1 IS IC CAR I/O DATA CPL P1.1 ;WR-LED LCALL WR2401_1W ;Byte Wr CJNE R5,#00H,DISPERR pop 01h pop 00h inc r0 inc r1 cjne r0,#7fh,conw1 SETB P1.1 MOV R0,#00H ;R0 IS RD ADDRESS mov dptr,#H----407FH]=55,56,57,.................... conr1: push 00h CPL P1.2 ;RD-LED LCALL RD2401_1W CJNE R5,#00H,DISPERR pop 00h movx @dptr,a inc dpl86 inc r0 cjne r0,#7fh,conr1 SETB P1.2 condisp: lcall disp sjmp condisp DISPERR: CALL DISP1 SJMP DISPERR DISP1: mov 7eh,#01h mov 7dh,#0ch mov 7ch,#10h mov 7bh,#0Eh mov 7ah,#14h mov 79h,#14h AJMP DISP2 DL10MS: MOV R7,#14H ;0AH DL0: MOV R6,#0FFH DJNZ R6,$ DJNZ R7,DL0 RET DISP: mov 7eh,#01h mov 7dh,#0ch mov 7ch,#09h mov 7bh,#00h mov 7ah,#00h mov 79h,#0dh DISP2: MOV R0,#7EH MOV R2,#20H MOV R3,#00H MOV DPTR,#TAB LS2: MOV A,@R0 MOVC A,@A+DPTR MOV R1,#22H MOVX @R1,A MOV A,R2 DEC R1 CPL A MOVX @R1,A CPL A DEC R0 DJNZ R3,$ CLR C RRC A87 MOV R2,A JNZ LS2 INC R1 MOV A,#0FFH MOVX @R1,A RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H,8FH ;******************************************************** WR2401_1W: ;R0 IS ADDR,R1 IS DATA LCALL C_A2401 ;WR FIX ADDRESS AND ;PROGRAM ADDRESS TO IC CJNE R5,#00H,WR2401_ERROR MOV A,R1 ;WR DATA TO IC MOV R5,#08H WR2401_BIT: CLR SCL RLC A JNC CLR_SDA SETB SDA SJMP WR_NEXT_BIT CLR_SDA: CLR SDA WR_NEXT_BIT: LCALL DY SETB SCL LCALL DY DJNZ R5,WR2401_BIT CLR SCL LCALL DY SETB SCL LCALL DY JB SDA,WR2401_ERROR LCALL STOP2401 ;WR TIME LCALL DY LCALL DY MOV R5,#00H RET WR2401_ERROR: MOV R5,#5AH RET ;-------------------------------------------------DY: MOV R7,#70H;35H DJNZ R7,$88 RET START2401: SETB SDA LCALL DY SETB SCL LCALL DY CLR SDA LCALL DY CLR SCL LCALL DY RET STOP2401: CLR SCL ; LCALL DY CLR SDA LCALL DY SETB SCL LCALL DY SETB SDA LCALL DY RET ;--------------------------------------------------------C_A2401: ;R0 ADDR LCALL STOP2401 LCALL DY LCALL START2401 MOV A,#0A0H ;WR2401 MOV R5,#08H CONT2401: CLR SCL RLC A JNC CA_CLR_SDA SETB SDA SJMP CA_CONT_NEXT CA_CLR_SDA: CLR SDA CA_CONT_NEXT: LCALL DY SETB SCL LCALL DY DJNZ R5,CONT2401 CLR SCL LCALL DY SETB SCL89 LCALL DY JB SDA,C_A_ERROR MOV R5,#08H MOV A,R0 ;R0 INPUT ADDR ADDR2401: CLR SCL RLC A JNC AD_CLR_SDA SETB SDA SJMP AD_CONT_NEXT AD_CLR_SDA: CLR SDA AD_CONT_NEXT: LCALL DY SETB SCL LCALL DY DJNZ R5,ADDR2401 CLR SCL LCALL DY SETB SCL LCALL DY JB SDA,C_A_ERROR LCALL DY CLR SCL LCALL DY MOV R5,#00H RET C_A_ERROR: MOV R5,#5AH RET ;-------------------------------------------------------------------------RD2401_1W: ;SUEI JI RD ,R0 INPUT ADDR,OUTPUT WORD,IN ACC LCALL C_A2401 ;KONG WR,SET FIRST ADDRESS CJNE R5,#00H,RD2401_ERROR LCALL START2401 ;START MOV R5,#08H ;DEVICE ADDERS MOV A,#0A1H RD_CONT2401: CLR SCL RLC A JNC RD24_CLR_SDA SETB SDA SJMP RD_CONT2401_NEXT RD24_CLR_SDA:90 CLR SDA RD_CONT2401_NEXT: LCALL DY SETB SCL LCALL DY DJNZ R5,RD_CONT2401 CLR SCL LCALL DY SETB SCL JNB SDA,RD_CONT_OK ;ACK LCALL STOP2401 SJMP RD2401_ERROR RD_CONT_OK: ;READ DATA CLR SCL MOV R5,#08H CLR A RD24_BIT: SETB SCL LCALL DY JNB SDA,RD24_0_DATA SETB C SJMP RD24_NEXT_BIT RD24_0_DATA: CLR C RD24_NEXT_BIT: CLR SCL LCALL DY RLC A DJNZ R5,RD24_BIT SETB SCL LCALL DY CLR SCL LCALL DY LCALL STOP2401 MOV R5,#00H RET RD2401_ERROR: ;OUTPUT IS IN ACC MOV R5,#5AH RET ;-------------------------------------------------------------------END91 *实验十六ISD1420 语音芯片录音实验1,实验目的: (1) ,熟悉语音芯片 ISD1420 录音工作原理。 (2) ,利用单片机控制语音芯片的分地址录音,增加系统的语音提示功能。 2,实验内容: 把语音芯片 ISD1420 录放音时间 20 秒分成 20 段,每段一秒,调用录音子程序,录 入语音,建立语音库。 3,编程指南: (1) ,ISD1420 引脚及功能。(2) ,ISD1420 地址功能表地址模式: A0-A7 地址输入有双重功能,根据地址中的 A6,A7 的电平状态决定功能。如果 A6,A7 有一个是 低电平, A0~A7 输入全解释为地址位, 作为起始地址用。 根据 PLAYL、 PLAYE 或 REC 的下降沿信号,92 地址输入被锁定。 A0-A7 由低位向高位排列,每位地址代表 125 毫秒的寻址,160 个地址覆盖 20 秒的语音范围 (160*0.125s=20s) 。 录音及放音功能均从设定的起始地址开始, 录音结束由停止键操作决定, 芯片内部自动在该段的结 束位置插入结束标志(EOM) ;而放音时芯片遇到 EOM 标志即自动停止放音。 (3) ,IS1420 语音分段及控制代码4,实验接线图(共接 10 根线) :5,实验步骤: (1) ,连 CZ1(MC2)到 CZ7(主板) 。 (2) ,把 KC 开关拨向 MC 一侧,选择单片机控制方式,如开关向下则为 HC 方式,即手动控制方 式。 (3) ,启动录音程序 REC? ASM,在 REC-LED 点亮期间,用嘴对准麦克风 MIC 进行语音录音,总共 点亮 20 次,每次 1S。例如依次录入语音 0~19,20 个十进制数。 6, 程序清单:93 ORG 0000H START: MOV SP,#53H mov r7,#00h start1: ACALL ZH ACALL RECODE MOV R2,#10H ;30h CALL DELY inc r7 cjne r7,#14h,start1 SJMP $ RECODE: MOV DPTR,#8000H MOV A,#0FFH MOVX @DPTR,A ;STOP R/P MOV R2,#0FH ACALL DELY ;20MS MOV A,40H ;REC CODE MOVX @DPTR,A CALL D500MS CALL D500MS MOV A,#0FFH MOVX @DPTR,A ;STOP REC MOV R2,#40H ACALL DELY ;20MS RET ZH: MOV A,R7 ;R0 IS SEGMENT ADDRESS:0,1,2,.... RL A MOV DPTR,#TAB MOVC A,@A+DPTR MOV 40H,A RET TAB: DB 40H,41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH,4CH DB 4DH,4EH,4FH DB 50H,51H,52H,53H,54H,55H,56H,57H,58H,59H,5AH,5BH,5CH DB 5DH,5EH,5FH DB 60H,61H,62H,63H,64H,65H,66H,67H D500MS: MOV R5,#05H DL1: LCALL D100MS DJNZ R5,DL1 RET D100MS: MOV R6,#0c0H94 DL2: DL3:MOV R4,#0FFH DJNZ R4,DL3 DJNZ R6,DL2 RET DELY: PUSH 02H LP2: PUSH 02H LP1: PUSH 02H LP0: DJNZ R2,LP0 POP 02H DJNZ R2,LP1 POP 02H DJNZ R2,LP2 POP 02H DJNZ R2,DELY RET END95 *实验十七ISD1420 语音芯片放音实验1,实验目的: (1) ,熟悉语音芯片 ISD1420 放音工作原理。 (2) ,利用单片机控制语音芯片的分地址放音,增加系统的语音提示功能。 2,实验内容:语音录入结束后,根据段地址,调用放音子程序,还原原来录入语音信号。 3,实验接线图(共接 10 根线) :4,实验步骤: (1) ,连 CZ1(MC2)到 CZ7(主板) 。 (2) ,把 KC 开关拨向 MC 一侧,选择单片机控制方式,如开关向下则为 HC 方式,即手动控制方 式。 (3) ,R7 寄存器存放段地址 0~13H,先在 R7 中设定段地址,启动放音程序 PLAY?ASM,播放设 定地址语音。例 R7=0AH,播放语音为“10” ,R7=13H,播放语音为“19” ,?? 5,程序清单:(PLAY.ASM)ORG 0000H START: MOV SP,#60H START1: ACALL Z

我要回帖

更多关于 单片机汇编语言实例 的文章

 

随机推荐