1、DICE598K-51单片机实验指导手册一、系统概述(一)系统简介 采用在DICE598K 主板上扩充一块 51K-CPU插件板的 方式构成51单片机实验系统。 配有二片61C256静态RAM构成系统的64K基本内存,地址范围为00000H-0FFFFH,其中00000H-00FFFH监控占用。另配一片 W27C512(64K)EP1 存放监控程序, 地址范围F0000HFFFFF。还配有一片W27C512 EP2存放实验程序,为实验系统独立运行时下载实验程序提供方便。 自带键盘、显示器,能独立运行,为实验程序调试带来方便。 配备Windows仿真调试软件,支持机器码、汇编、 C等三种语言的开
2、发和调试。 提供标准RS232异步通讯口, 以连接IBM-PC 机。 配有各种微机常用I/O接口芯片,定时/ 计数接口芯片 8253、A/D 转换接口芯片0809、D/A转换接口芯片0832、中断控制器8259、键盘显示接口8279、并行I/O 接口芯片 8255、通讯接口芯片8250、8251、485和DMA 控制器8237等。 配备键盘、数码显示、发光二极管显示、开关量、LED1616、LCD12864、温度压力、步进电机、直流电机、扬声器等输入输出设备。 带有脉冲发生器、计数器电路、单脉冲发生器等常用电路。 可以单步、断点、全速调试各实验程序。 内置开关电源,为实验提供+5V/3A、l2
3、V/0.5A直流稳压电源。 使用环境:环境温度0+40,无明显潮湿,无明显振动碰撞。 配备USB 接口的电子实验演示装置,通过编制程序,对模拟控制对象进行实时控制。(二)系统地址分配 1存贮器地址分配地址 器件 用途0000H 0FFFFH AT89S58/27C512 用户程序空间0000H 7FFFH 61C256 用户数据空间2I/O地址分配地址 扩展名称 用途0FF80H 自定义 实验用口地址0FF90H 自定义 实验用口地址0FFA0H 自定义 实验用口地址0FFB0H 自定义 实验用口地址0FFC0H 自定义 实验用口地址0FFD0H 自定义 实验用口地址0FF20H 系统 825
4、5 PA 口 键扫/字位口0FF21H 系统 8255 PB 口 字形口0FF22H 系统 8255PC 口 键入口0FF23H 系统 8255 控制口 控制口0FF28H 扩展 8255PA 口 扩展用0FF29H 扩展 8255PB 口 扩展用0FF2AH 扩展 8255PC 口 扩展用0FF2BH 扩展 8255 控制口 控制口60H EX1 实验用(三)系统接口定义1. CZ1:MAIN-COM :通讯接口;图112. CZ4:打印接口;图123. JX0,JX17为系统提供的数据总线接口;图2-34. CZ7:系统提供的扩展接口;图2-45. JX12、JX14:液晶显示接口图2-5
5、(四)通用电路简介1. LED发光二极管指示电路:实验台上包括16只发光二极管及相应驱动电路。见图2-6,Ll-L16为相应发光二极管驱动信号输入端, 该输入端为低电平“0”时发光二极管亮。图2-62. 逻辑电平开关电路:见图2-7。实验台上有8只开关Kl-K8,与之相对应的K1-K8 各引线孔为逻辑电平输出端。开关向上拨相应插孔输出高电平“l”, 向下拨相应插孔输出低电平“0”。图2-73. 单脉冲电路:实验台上单脉冲产生电路如图2-8,标有“ ”和“ ”的两个引线插孔为正负单脉冲输出端。AN为单脉冲产生开关,每拨动一次产生一个单脉冲。图2-84. 分频电路:该电路由一片74LS393 组成
6、,见图2-9。T0-T7为分频输出插孔。该计数器在加电时由RESET 信号清零。当脉冲输入为8.0MHZ 时,T0-T7输出脉冲频率依次为4.0MHZ,2.0MHZ,1.0MHZ,500KHZ ,250KHZ,125KHZ,62500HZ,31250HZ。图2-95. 脉冲发生电路:实验台上提供8MHZ 的脉冲源,见图2-10 ,实验台上标有8MHZ的插孔,即为脉冲的输出端。图2-106. 485接口电路:图2-117. 通讯接口电路图2-128. 数码管显示电路图2-139. 键盘电路图1-1410.目标CPU(SST89C58)的控制电路图1-1511.存储器控制电路图1-15二、系统安装
7、与使用(一)软件安装 1. 系统要求 Pentium、Pentium-或兼容处理器的 PC 机; Windows95/98/NT4.0/2000/XP; 16MB RAM 20MB 硬盘空间; 2. 软件安装说明运行随机光盘上DICE-51 仿真开发系统安装文件,根据提示完成软件安装,然后双击桌面上 DICE-51 仿真开发系统银环快捷图标,即可运行 DICE-51 仿真软件,关于该软件的使用参见 DICE-51.CHM 帮助文档。3. 实验演示模拟装置的软件安装说明随机的光盘中有一个电子演示装置文件夹,其中有下列文件:setup.exe 演示装置上位软件,点击后自动安装d12test.sys
8、 演示装置 USB 接口驱动程序usbtest.exe 该文件用于测试演示装置的 32 个 I/O 口。安装方法:双击 setup.exe,根据提示直至安装完毕; 然后用 USB 线将演示装置连接到 PC 机 USB 口,屏幕会提示发现新硬件,根据提示引导进行安装,当选择驱动程序时请把路径指向光盘上的 d12test.sys,并直至安装完毕。(二)硬件安装 1. 硬件安装说明 我们通过 DICE-3000 仿真器来连接实验系统和 PC 机,首先用随机串行通讯电缆连接仿真器串行口和 PC 机串行口,然后用随机扁平线连接仿真器和实验系统的 JCF(IDC34)口,从面完成实验系统与 PC 机的联机
9、。*注:实验系统上的 CZ11 串行口为用户实验串行口。 2. 实验演示模拟装置的硬件安装说明 用随机 USB 通讯线来连接 DICE-5203K 实验系统的演示模拟装置和 PC 机,首先用 USB 通讯线的扁平 USB接口与 PC 机的通用 USB 接口相连,然后用 USB 通讯线的方形 USB 接口与 DICE-5203K 实验系统演示模拟装置区的 USB 接口相连,从而完成实验演示模拟装置与 PC 机的硬件安装。 3. 系统开关设置 (1)SW1:程序空间选择开关,SW1IP,选择 CPU 内部(出厂模式),SW1UP ,选择 CPU 外部,此时可脱机运行 EPROM 中固化的程序。(2
10、)SW3、SW4、SW5:全部置 ON。KB6 开关拨向 59 一侧,把 51K-CPU 卡插到 CPU 卡座上(在 8088Unit两侧),51K-CPU 卡短路块向片外程序短接。(3)脱机使用接通实验仪电源,数码管应显示“P.- - 51”,表明实验系统处于 51 脱机状态,可通过实验系统键入相应的实验序号,再按EX/FV 键,即可全上全速执行该实验程序。例如输入数字键 0、9,连接好 A/D 实验的导线,再按EX/FV键,即可运行实验序号九的 A/D 实验程序。仿真器所接实验系统的 JCF(IDC34)口为系统通讯口,用于程序的仿真、连接、装载 。而实验系统的 CZ11口为用户实验通讯口
11、,用于实验系统与 PC 机之间的串行口通讯实验。(4)连PC 机操作用34芯导线连接线连接JF(51K-CPU卡上)和仿真器接口(在CPU卡右侧),此时数码管熄灭,自动进入连机状态,用通讯电缆连接实验系统的CZ1 口和PC 机的串口 COM1(或COM2),运行DICE- 51仿真开发系统软件,51单片机部分实验源程序在598Kasm 文件夹。三 、实验指导本实验指导是为适应各大、中专院校开设单片机原理与应用方面的课程需做大量软、硬件实验的需要而编写的.完成本实验指导中的实验,可使学生基本掌握 MCS5l 单片机的结构原理、接口技术、程序设计技巧。手册中详细叙述了各实验的目的、内容,列出了接线
12、图、程序结构框图和清单。免除了主讲教师和实验辅导老师为设计、准备调试实验线路和实验程序所需的工作量,节约了宝贵的时间。一、所有硬件实验程序已固化在程序存储器 EEPROM 中,选择 UP 模式(SW1),我们可以脱机实验,从小键盘输入相应实验序号,再按 F0/EX 即可运行该实验程序;也可采用联机实验,将实验系统与 PC 机通过 DICE-3000仿真器相连,联机调试所有实验程序。二、实验接线图上的粗实线表示用户在实验时要用导线连接起来。三、所有实验都是相互独立的,次序上也没有固定的先后关系,在使用本书进行教学时,教师可根据该校(院) 的教学要求,选择相应实验。四、对同一问题的解决办法往往不是
13、唯一的,欢迎用户在使用本书过程中提出更为优秀的实验方案,指出错误和不足,希望用户反馈给我们,以便及时修改。软件实验软件实验共提供了十个软件实验程序,通过对这些实验程序的调试,使大家熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。实验一 清零程序(一)实验目的 掌握汇编语言设计和调试方法,熟悉键盘操作。(二)实验内容 把 2000H20FFH 的内容清零。(三)实验程序框图 (四)实验步骤用连续或单步方式运行程序,检查 200020FF 中执行程序前后的内容变化。(五) 思考假使把 2000H20FFH 中的内容改成 FF,,如
14、何修改程序。(六)程序清单: 文件名:SW01.ASMORG 0000HLJMP SE01ORG 0640HSE01: MOV R0,#00HMOV DPTR,#2000H ;(0000H )送 DPTRLOO1: CLR AMOVX DPTR,A ;0 送(DPTR )INC DPTR ;DPTR+1INC R0 ;字节数加 1CJNE R0,#00H,LOO1 ;不到 FF 个字节再清LOOP: SJMP LOOPEND实验二 拆字程序(一) 实验目的 掌握汇编语言设计和调试方法。(二)实验内容把 2000H 的内容拆开,高位送 2001H 低位,低位送 2002H 低位,2001H、20
15、02H 高位清零,一般本程序用于把数据送显示缓冲区时用。(三)实验程序框图(四)实验步骤:用连续或单步方式运行程序,检查 2000H2002H 中内容变化情况。(五)思考如何用断点方式调试本程序。(六)程序清单文件名:SW02.ASMORG 0000HLJMP SE02 ORG 0660HSE02: MOV DPTR,#2000HMOVX A,DPTRMOV B,A ;(2000)ABSWAP A ;交换ANL A,#0FH ;屏蔽高位INC DPTR MOVX DPTR,A ;送 2001HINC DPTRMOV A,BANL A,#0FH ;(2000)内容屏蔽高位MOVX DPTR,A
16、;送 2002HLOOP: SJMP LOOPEND实验三 拼字程序(一)实验目的 进一步掌握汇编语言设计和调试方法。(二)实验内容 把 2000H.2001H 的低位分别送入 2002H 高低位,一般本程序用于把显示缓冲区的数据取出拼装成一字节。(三)实验程序框图 (四)实验步骤 单步或用断点方式运行程序,检查2002H 内容变化情况。 (五)实验程序清单 文件名:SW03.ASMORG 0000HLJMP START ORG 0680HSTART: MOV DPTR,#2000HMOVX A,DPTRANL A,#0FH ;(2000H)内容屏蔽高位SWAP A ;交换MOV B,A ;保
17、存INC DPTRMOVX A,DPTR ;(2000H)内容送 A ANL A,#0FH ;屏蔽高位ORL A,B ;或INC DPTRMOVX DPTR,A ;送 2002HSJMP $ END实验四 数据区传送子程序(一)实验目的 掌握RAM中的数据操作。(二)实验内容 把R2.R3源RAM区首址内的R6.R7字节数据传送到R4.R5 目的RAM区。(三)实验程序框图 (四)实验步骤 在 R2.R3 中输入源首址( 例如 0000H),R4.R5 中输入目的地址(例如 2000H),R6.R7 中输入字节数(例如lFFFH),运行程序,检查 0000HlFFFH 中内容是否和 2000H
18、3FFFH 中内容完全一致。(五)实验程序清单 文件名:SW04.ASMORG 0000HLJMP SE22ORG 07B0HSE22: MOV DPL,R3MOV DPH,R2 ;建立源程序首址MOVX A,DPTR ;取数MOV DPL,R5MOV DPH,R4 ;目的地首址MOVX DPTR,A ;传送CJNE R3,#0FFH,LO42INC R2LO42: INC R3 ;源地址加 1CJNE R5,#0FFH,LO43INC R4LO43: INC R5 ;目的地址加 1CJNE R7,#00H,LO44CJNE R6,#00H,LO45 ;字节数减 1LOOP: SJMP LOO
19、PNOPLO44: DEC R7SJMP SE22LO45: DEC R7DEC R6SJMP SE22 ;未完继续END实验五 数据排序实验(一)实验目的 熟悉51指令系统,掌握程序设计方法。(二)实验内容 编写并调试一个排序子程序,其功能为用冒泡法将内存 RAM 中几个单字节无符号的正整数,按从小到大的次序重新排列。(三)实验程序框图 (四)实验步骤 将 RAM 50H5AH 中放入不等的数据,用断点方法运行本实验程序后检查 50H5AH 中的内容是否按从小到大的次序排列。(五)实验程序清单文件名:SW05.ASMORG 0000HLJMP QUEORG 09B0HQUE: MOV R3,
20、#50HQUE1: MOV A,R3 ;指针送 R0MOV R0,AMOV R7,#0AH ;长度送 R7CLR 00H ;清标志位MOV A,R0QL2 : INC R0MOV R2,ACLR CMOV 22H,R0CJNE A,22H,QL3 ;相等吗?SETB CQL3: MOV A,R2JC QL1 ;大于交换位置SETB 00HXCH A,R0DEC R0XCH A,R0INC R0 ;大于交换位置QL1: MOV A,R0DJNZ R7,QL2JB 00H,QUE1 ;一次循环中有交换继续LOOP: SJMP LOOP ;无交换退出END实验六 查找相同数个数(一)实验目的 熟悉汇
21、编语言编程。(二)实验内容 在2000H200FH 的N个单元中填入零,运行本程序后检查 2100H中是否为N。(三)实验程序框图 (四)实验步骤 在2000H200FH 的几个单元中填入零,运行本程序后检查2100H中是否是几个单元数。 (五)思考修改程序,查找其它内容。(六)实验程序清单 文件名:SW06.ASMORG 0000HLJMP L5800ORG 0AA0HL5800: MOV R0,#10H ;查找 16 个字节MOV R1,#00HMOV DPTR,#2000HL5811: MOVX A,DPTRCJNE A,#00H,L5816 ;取出内容与 00H 相等吗?INC R1
22、;取出个数加 1L5816: INC DPTRDJNZ R0,L5811 ;未完继续MOV DPTR,#2100HMOV A,R1MOVX DPTR,A ;相同数的个数送 2100HL581E: SJMP L581EEND实验七 无符号双字节快速乘法子程序(一)实验目的 1、掌握 MCS-51 汇编语言程序及子程序设计、调试方法。2,预备知识: 本程序利用单字节的乘法指令,根据下面的公式进行乘法运算的。(R2R3)*(R6R7)(R2)* +(R3)*(R6)* +R7)(R2)*( R6)* +(R2)*(R7)+(R3)*(R6)* +(R3)*(R7)(二)实验内容 将(R2R3)和(R
23、6R7)中双字节无符号整数相乘,积送R4 R5 R6 R7中。(三)实验程序框图 (四)实验步骤 在R2R3和R6R7中输入无符号整数,断点或单步运行本实验程序后检查R4 R5 R6 R7中内容。(五)实验程序清单 文件名:SW07.ASM ORG 0000HLJMP QKULORG 0970HQKUL: MOV A,R3MOV B,R7MUL AB ;R3*R7XCH A,R7 ;R7= (R3*R7)低字节MOV R5,B ;R5=(R3*R7 )高字节MOV B,R2MUL AB ;R2*R7ADD A,R5MOV R4,ACLR AADDC A,BMOV R5,A ;R5=(R2*R7
24、)高字节MOV A,R6MOV B,R3MUL AB ;R3*R6ADD A,R4XCH A,R6XCH A,BADDC A,R5MOV R5,AMOV PSW.5,C ;存 CYMOV A,R2MUL AB ;R2*R6ADD A,R5MOV R5,ACLR AMOV ACC.0,CMOV C,PSW.5 ;加上次加法的进位ADDC A,B MOV R4,ALOOP: SJMP LOOPEND实验八 多分支程序 (一)实验目的 掌握程序散转的方法,实现程序的多分支转移。(二)实验内容 编制程序,根据送入的数据转移运行。(三)实验程序框图 (四)实验步骤 在20H中分次送入00.01.02.0
25、3, 每次运行程序后,观察数码管上数字循环情况。(五)实验程序清单 文件名:SW08.ASMORG 0000HLJMP MEMSORG 0A10HMEMS: MOV A,#43HMOV DPTR,#0FF20HMOVX DPTR,AMOV A,20HMOV DPTR,#KKKK ;散转地址RL A ;(20)*2JMP A+DPTR ;转到(20)*2+DPTRKKKK: AJMP MEMSP0AJMP MEMSP1AJMP MEMSP2SJMP MEMSP3MEMSP0: MOV 20H,#0C0H ;0 字循环LJMP SOX0 MEMSP1: MOV 20H,#0F9H ;1 字循环LJ
26、MP SOX0MEMSP2: MOV 20H,#0A4H ;2 字循环LJMP SOX0MEMSP3: MOV 20H,#0B0H ;3 字循环LJMP SOX0ORG 0DA0HSOX0: MOV A,20HMOV R0,#22HMOV R1,#21HMOVX R0,AMOV A,#01HSOX1: CPL AMOVX R1,ACPL A MOV R2,#20HLCALL DELYRL A ; 显示字程序SJMP SOX1DELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02HDEL4: DJNZ R2,DEL4POP 02HDJNZ R2,DEL3POP 02H
27、DJNZ R2,DEL2POP 02HDJNZ R2,DELYRETEND实验九 脉冲计数(定时器 / 计数器实验) (一)、实验目的 熟悉单片机内部定时/计数器功能,掌握初始化编程方法。(二)、实验内容 把定时器 0 外部输入的脉冲进行计数,并送显示器显示。(三)、实验程序框图 (四)、实验接线图 (五)、实验步骤 用插针把 8MHZ 插孔和 T 插孔连接,P3.4 依次接 T0T7 或单脉冲输出孔,执行程序,观察数码管上计数脉冲的速度及个数。(六)、思考 修改程序使显示器上可显示到 999999 个脉冲个数。(七)、程序清单文件名:SW09.ASMORG 0000HLJMP SE15ORG
28、 06E0HSE15: MOV SP,#53H MOV P2,#0FFHMOV A,#43HMOV DPTR,#0FF20HMOVX DPTR,A MOV TMOD,#05HMOV TH0,#00H ;定时计数器初始化MOV TL0,#00H ;开计数器SETB TR0LO29: MOV R2,TH0MOV R3,TL0 ;取出 TH0,TL0 内容LCALL ZOY0MOV R0,#79H ;二转十进制MOV A,R6LCALL PTDSMOV A,R5LCALL PTDSMOV A,R4LCALL PTDS ;送显示缓冲区LCALL SSEE ;显示SJMP LO29 ;循环计数ZOY0:
29、 CLR AMOV R4,AMOV R5,AMOV R6,A ;0 送 R4 R5 R6MOV R7,#10HLO30: CLR C ;R2 R3 左移,移出的MOV A,R3 ;最高位送 CYRLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV A,R6ADDC A,R6 ;(R4 R5 R6)*2 送 R4 R5 R6DA A ;十进制调整MOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,ADJNZ R7,LO30 ;循环 16 次RETPTDS: MOV R1,A ;拆送显示缓冲区ACA
30、LL PTDS1MOV A,R1SWAP APTDS1: ANL A,#0FHMOV R0,AINC R0RETSSEE: SETB RS1 ;换工作区MOV R5,#05HSSE2: MOV 30H,#20HMOV 31H,#7EHMOV R7,#06HSSE1: MOV R1,#21HMOV A,30HCPL AMOVX R1,A ;字位送入MOV R0,31HMOV A,R0MOV DPTR,#DDFFMOVC A,A+DPTR ;取字形代码MOV R1,#22HMOVX R1,A ;字形送入MOV A,30H ;右移RR AMOV 30H,ADEC 31HMOV A,#0FFHMOVX
31、 R1,A ;关显示DJNZ R7,SSE1 ;6 位显示完了吗?DJNZ R5,SSE2 ;5 次显示完了吗?CLR RS1RETDDFF: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEHEND实验十 电脑时钟(定时器 、中断综合实验) (一)实验目的 熟悉 MCS-5l 定时器和中断初始化编程方法,了解定时器的应用实时程序的设计与调试技巧。(二)实验内容编写程序,从实验系统键盘上输入时间初值,用定时器产生 0.lS 定时中断,对时钟计数器计数,并将数值
32、实时地送数码管显示。(三)实验程序框图(四)实验步骤 连续运行程序,在键盘上输入时间初值,按执行键 F0/EX 执行,数码管实时显示时间值。(五)思考(1)电子钟走时精度和程序中那些常数有关?(2)修改程序使定时器工作方式改变,调节有关参数,进一步提高精度。(六)程序清单文件名:SW10.ASMORG 0000HLJMP CHK0ORG 000BHLJMP CLOCKORG 0030HCHK0: MOV SP,#60H MOV 7EH,#11HMOV 7DH,#10HMOV 7CH,#10HMOV 7BH,#10HMOV 7AH,#10HMOV 79H,#10HMOV A,#43HMOV DP
33、TR,#0FF20HMOVX DPTR,AMOV R0,#59HMOV A,#7EHMOVX R0,ALCALL LCK0 ;键扫,显示字程序LCALL PTDS0 ;显示缓冲区放数子程序MOV TMOD,#01HORL IE,#82HMOV TL0,#0E6HMOV TH0,#0DBH ;定时中断初始化MOV 23H,#00HSETB TR0 ;开定时LOO5: LCALL SSEELCALL PTDS0SJMP LOO5 ;循环PTDS0: MOV R0,#79HMOV A,22HACALL PTDSMOV A,21HACALL PTDSMOV A,20HACALL PTDSRETPTDS
34、: MOV R1,A ;拆送显示缓冲区ACALL PTDS1MOV A,R1SWAP APTDS1: ANL A,#0FHMOV R0,AINC R0RETCLOCK: MOV TL0,#0E6H ;恢复初值MOV TH0,#0DBHPUSH PSWPUSH ACCSETB 0D3H ;保护INC 23H ;0.1 秒 1MOV A,23H CJNE A,#64H,DONE ;1 秒到吗?MOV 23H,#00H ;清 0.1 秒单元MOV A,22H INC A ;秒加 1DA AMOV 22H,A ;十进制调整CJNE A,#60H,DONE ;60 秒到了吗?MOV 22H,#00H ;
35、秒单元清零MOV A,21HINC ADA A ;分加 1,十进制调整MOV 21H,ACJNE A,#60H,DONE ;60 分到了吗?MOV 21H,#00H ;分单元清零MOV A,20HINC ADA A ;时加 1,十进制调整MOV 20H,ACJNE A,#24H,DONE ;24 小时到了吗?MOV 20H,#00H ;时单元清零DONE: POP ACC ;退栈POP PSWRETI ;返回ORG 0D50HSSEE: SETB RS1 ;换工作区MOV R5,#05HSSE2: MOV 30H,#20HMOV 31H,#7EHMOV R7,#06HSSE1: MOV R1,
36、#21HMOV A,30HCPL AMOVX R1,A ;字位送入MOV R0,31HMOV A,R0MOV DPTR,#DDFFMOVC A,A+DPTR ;取字形代码MOV R1,#22HMOVX R1,A ;字形送入MOV A,30H ;右移RR AMOV 30H,ADEC 31HMOV A,#0FFHMOVX R1,A ;关显示DJNZ R7,SSE1 ;六位显示完了吗?DJNZ R5,SSE2 ;5 次显示完了吗?CLR RS1RETDDFF: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86
37、H,8EH,0FFH,0CH,89H,0DEHORG 1D00HX3: MOV R4,AMOV R0,#59HMOVX A,R0MOV R1,AMOV A,R4MOV R1,ACLR APOP DPHPOP DPLMOVC A,A+DPTRINC DPTRCJNE A,01H,X30CLR AMOVC A,A+DPTRX31: MOVX R0,AINC DPTRPUSH DPLPUSH DPHRETX30: DEC R1MOV A,R1SJMP X31X2: MOV R6,#50HX0: ACALL XLEJNB ACC.5,XX0DJNZ R6,X0MOV R6,#20HMOV R0,#59
38、HMOVX A,R0MOV R0,AMOV A,R0MOV R7,AMOV A,#10HMOV R0,AX1 : ACALL XLEJNB ACC.5,XX1DJNZ R6,X1MOV A,R7MOV R0,ASJMP X2XX1: MOV R6,AMOV A,R7MOV R0,AMOV A,R6XX0: RETXLE: ACALL DISACALL KEYMOV R4,AMOV R1,#48HMOVX A,R1MOV R2,AINC R1MOVX A,R1MOV R3,AMOV A,R4XRL A,R3MOV R3,04HMOV R4,02HJZ X10MOV R2,#88HMOV R4,#
39、88HX10: DEC R4MOV A,R4XRL A,#82HJZ X11MOV A,R4XRL A,#0EHJZ X11MOV A,R4ORL A,R4JZ X12MOV R4,#20HDEC R2SJMP X13X12: MOV R4,#0FHx11: MOV R2,04HMOV R4,03HX13: MOV R1,#48HMOV A,R2MOVX R1,AINC R1MOV A,R3MOVX R1,AMOV A,R4RETLS3: DB 07H,04H,08H,05H,09H,06H,0AHDB 0BH,01H,00H,02H,0FH,03H,0EHDB 0CH,0DHDIS: PUS
40、H DPHPUSH DPLSETB RS1MOV R0,#7EHMOV R2,#20HMOV R3,#00HMOV DPTR,#LS0LS2: MOV A,R0MOVC A,A+DPTRMOV R1,#22HMOVX R1,AMOV A,R2CPL ADEC R1MOVX R1,ACPL ADEC R0LS1: DJNZ R3,LS1CLR CRRC AMOV R2,AJNZ LS2INC R1MOV A,#0FFHMOVX R1,ACLR RS1POP DPLPOP DPHRETLS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92HDB 82H,0F8H,80H,90H,88
41、H,83H,0C6HDB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFHKEY: SETB RS1MOV R2,#0FEHMOV R3,#08HMOV R0,#00HLP1: MOV A,R2MOV R1,#21HMOVX R1,ARL AMOV R2,AMOV R1,#23HMOVX A,R1CPL AANL A,#0FHJNZ LP0INC R0DJNZ R3,LP1MOVX A,R1JB ACC.4,XP33MOV A,#19HSJMP XP3XP33: MOV A,#20HXP3: CLR RS1RETLP0: CPL AJB ACC.0,XP0MOV A,#00
42、HSJMP LPPXP0: JB ACC.1,XP1MOV A,#08HSJMP LPPXP1: JB ACC.2,XP2MOV A,#10HSJMP LPPXP2: JB ACC.3,XP33MOV A,#18HLPP: ADD A,R0CLR RS1CJNE A,#10H,LX0LX0: JNC XP35MOV DPTR,#LS3MOVC A,A+DPTRXP35: RETLCK0: LCALL X2JNC LCK1LCALL X3MOV R1,#7EHSJMP LCK0LCK1: CJNE A,#16H,LCK0MOV A,7AHSWAP AORL A,79HMOV 22H,ACJNE
43、A,#60H,LCK2 LCK2: JNC EXITMOV A,7CHSWAP AORL A,7BHMOV 21H,ACJNE A,#60H,CLK3CLK3: JNC EXITMOV A,7EHSWAP AORL A,7DHMOV 20H,ACJNE A,#24H,CLK4CLK4: JNC EXITRETEXIT: AJMP LCK0END硬件接口实验部分 注意事项: 1. 各实验接线图上的粗实线表示用户在实验时要用导线连接起来。2. 在实验导线连接过程中,请严格按照“先断电再接线,检查无误才通电的步骤”来操作,操作次序千万不要颠倒,以免损坏实验设备。实验 一、P1 口亮灯实验 (一)、实
44、验目的 l. 学习 P1 口的使用方法;2. 学习延时子程序的编写。3. 实验顶备知识: (l),Pl 口为准双向口 ,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。(2),本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。(二)、实验内容 P1口输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。(三)、实验程序框图 图6-1(四)、实验接线图(五)、实验步骤P1.0P1.7用插针连至L1L8,运行程序后,观察发光二极管闪亮移位情况。(六)、思考 改
45、变延时常数,使发光二极管闪亮时间改变。 修改程序,使发光二极管闪亮移位方向改变。(七)、实验程序清单程序名: HW01.ASM ORG 0000HLJMP SE18ORG 0790HSE18: MOV P1,#0FFH ;送 P1 口LO34: MOV A,#0FEH ; L1 发光二极管点亮LO33: MOV P1,ALCALL SE19 ;延时RL A ;左移位SJMP LO33 ;循环ORG 07A0HSE19: MOV R6,#0A0HLO36: MOV R7,#0FFHLO35: DJNZ R7,LO35DJNZ R6,LO36 ;延时RETEND实验二 P1 口转弯灯实验(一)、实
46、验目的 进一步了解P1口的使用,学习汇编语言编程方法及调试技巧。(二)、实验内容 P1.0 开关接 5V,右转弯灯闪亮,P1.1 开关接 5V 时左转弯灯闪亮,P1.0,P1.1 开关同时接 5V 或接地时,转弯灯均不闪亮。(三)、实验程序框图 (四)、实验接线图(五)、实验步骤1. 接线:P1.0K1,P1.1K2,P1.4L1 、P1.5L4、P1.6L7、P1.7L10,2. 连续运行本程序,应看到转弯灯正确闪亮,在用单步方式调试本程序时需修改延时子程序,(例可把延时程序第一个字节改成返回指令 22H),以便观察。(六)、程序清单 文件名:HW02 .ASMORG 0000HLJMP PX00ORG 0C30HPX00: MOV P1,#0FFH ;初始化PX03: MOV A,P1MOV B,AANL A,#03HCJNE A,#01H,PX01 ;满足只是 P1.0 为高条件?JB 00H,PX04 ;闪烁标志位CLR P1.