目录软件实验部分:实验一清零程序实验二拆字程序实验三拼字程序实验四数据区传送子程序实验五数据排序实验实验六查找相同数个数实验七无符号双字节快速乘法子程序实验八多分支程序实验九脉冲计数(定时/计数器实验)实验十电脑时钟(定时器、中断综合实验)硬件实验部分:实验一 P1口亮灯实验实验二 P1口转弯灯实验实验三 P3.3口输入,P1口输出实验四工业顺序控制实验五继电器控制实验六 8255控制交通灯实验七 LED16×16点阵显示实验实验八串并转换实验实验九 A/D转换实验实验十 D/A转换实验十一电子音响实验十二步进电机控制实验十三 8032串行口应用实验㈠——双机通信实验十四小直流电机调速实验软件实验部分本节共编了十个软件实验,通过这些实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。
本节提供的软件实验,涉及外部数据存储器扩展寻址操作,因此需按下图连接实验线路。
1.将存储器单元的D0—D7总线接口用8芯扁平线与数据总线单元D0—D7的任一接口相连,存储器单元的A0—A7地址接口与地址总线单元(低8)A0—A7的任一接口相连,存储器单元的A8—A12地址接口与地址总线单元(高8)A8—A12的任一接口相连。
注意外部扩充的数据区的有效范围。
2.存储器单元的WE/PGM插孔与六位LED左下方的IOWE插孔相连。
3.存储器单元的OE插孔与六位LED左下方的IORD插孔相连。
4.存储器单元的CS1插孔与六位LED右下方的IOWE插孔相连。
实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容把2000H-20FFH的内容清零三、程序框图四、实验步骤用连续或单步方式运行程序,检查2000-20FF中执行程序前后的内容变化。
五、思考假使把2000H-20FFH中的内容改成FF,如何修改程序。
接P1.0到L1,试编写程序,对片外数据存储器6264进行读写操作,若L1闪动则表示6264RAM读写正常。
(此思考题也可留在硬件实验中做)ORG 0640HSE01: MOV R0,#00HMOV DPTR,#2000H ;(2000H)送DPTRLOO1: MOVX @DPTR,A ;0送(DPTR)INC DPTR ;DPTR+1INC R0 ;字节数加1CJNE R0,#00H,LOO1 ;不到FF个字节再清SJMP $END实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。
二、实验内容把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。
三、程序框图四、实验步骤用连续或单步方式运行程序,检查2000—2002H中内容变化情况。
五、思考如何用断点方式调试本程序。
ORG 0660HSE02: MOV DPTR,#2000HMOVX A,@DPTRMOV B,A ;(2000)→A→BSWAP A ;交换ANL A,#0FH ;屏敝高位INC DPTRMOVX @DPTR,A ;送2001HINC DPTRMOV A,BANL A,#0FH ;(2000)内容屏敝高位MOVX @DPTR,A ;送2002HSJMP $END实验三拼字程序一、实验目的进—步掌握汇编语言设计和调试方法。
二、实验内容把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成—个字节。
三、程序框图四、实验步骤单步或用断点方式运行程序,检查2002H内容变化情况。
ORG 0680HSE03: MOV DPTR,#2000HMOVX A,@DPTRANL A,#0FH ;(2000H)内容屏敝高位SWAP A ;交换MOV B,A ;保存INC DPTRMOVX A,@DPTR ;(2001H)内容送AANL 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中输入目的地址(例如0200H),R6、R7中输入字节数(例如01FFH),运行程序,检查0000-01FFH中内容是否和0200-03FFH中内容完全—致。
ORG 07B0HMOV R2,#00HMOV R3,#00HMOV R4,#02HMOV R5,#00HMOV R6,#01HMOV R7,#0FFHSE22: 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 ;字节数减1SJMP $NOPLO44: DEC R7SJMP SE22LO45: DEC R7DEC R6SJMP SE22 ;未完继续END实验五数据排序实验一、实验目的熟悉8032指令系统,掌握程序设计方法。
二、实验内容编写并调试一个排序子程序,其功能为用冒泡法将内容RAM中几个单字节无符号的正整数,按从小到大的次序重新排列。
三、程序框图四、实验步骤把8032中RAM 50H-5AH中放入不等的数据,运行本实验程序后检查50-5AH中内容是否按从小到大排列。
(注意数据是在CPU内部存储区存放,注意寻址方式。
)五、思考1.修改程序把50H-5AH中内容按从大到小排列;2.如果改为有符号数,如何修改。
ORG 09B0HQUE: MOV R3,#50HQUE1: MOV A,R3 ;指针送R0MOV R0,AMOV R7,#0AH ;长度送R7CLR 00H ;标志位为0MOV 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 ;一次循环中有交换继续SJMP $ ;无交换退出END实验六查找相同数个数一、实验目的熟悉汇编语言编程。
二、实验内容在2000—200FH中查出有几个字节是零,把个数放在2010H中。
三、程序框图四、实验步骤在2000—200FH的几个单元中填入零,运行本程序后检查2010H中是几个单元数。
五、思考修改程序,查找其它内容。
ORG 0AA0HL5800: MOV R0,#10H ;查找16个字节MOV R1,#00HMOV DPTR,#2000HL5811: MOVX A,@DPTRCJNE A,#00H,L5816 ;取出内容与00H相等吗?INC R1 ;取出个数加1L5816: INC DPTRDJNZ R0,L5811 ;未完继续MOV DPTR,#2010HMOV A,R1MOVX @DPTR,A ;相同数个数送2010HL581E: SJMP L581EEND实验七无符号双字节快速乘法子程序一、实验目的掌握MCS-51汇编语言程序设计方法。
二、预备知识本程序是利用单字节的乘法指令,根据下面的公式进行乘法运算的:(R2R3)*(R6R7)=((R2)*28+(R3))*((R6)*28+(R7))=(R2)*(R6)*216+((R2)*(R7)+(R3)*(R6))*28+(R3)*(R7)三、实验内容将(R2R3)和(R6R7)中双字节无符号整数相乘,积送R4 R5 R6 R7中。
四、程序框图五、实验步骤在R2R3和R6R7中输入无符号整数,连续或单步运行本实验程序后检查R4 R5 R6 R7 中内容。
ORG 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)高字节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,BMOV R4,ASJMP $END实验八多分支程序一、实验目的掌握汇编语言的编程。
二、实验内容编写程序,根据送入的数据转移运行;了解利用堆栈延时的方法。
三、程序框图四、实验步骤在CPU内部数据区20H中分次送入00、01、02、03,每次运行程序后,观察数码管上数字循环情况。
五、思考修改程序,使数码管显示自动循环显示0、1、2、3。
六、电路介绍字形口FFDCH 字位口/键扫口FFDDH 键入口FFDEH共阴极8段码,a—h接D0—D7,为1灭,为0亮键扫显示控制电路ORG 0A10HMEMS: MOV A,20HMOV DPTR,#KKKK ;散转首址RL A ;(20)*2JMP @A+DPTR ;转到(20)*2+DPTR KKKK: AJMP MEMSP0AJMP MEMSP1AJMP MEMSP2SJMP MEMSP3MEMSP0: MOV 20H,#0C0H ;0字循环LJMP SOX0MEMSP1: MOV 20H,#0F9H ;1字循环LJMP SOX0MEMSP2: MOV 20H,#0A4H ;2字循环LJMP SOX0MEMSP3: MOV 20H,#0B0H ;3字循环LJMP SOX0;---------------------------------------------SOX0: MOV A,20HMOV R0,#0DCHMOV R1,#0DDHMOVX @R0,AMOV A,#01HSOX1: MOVX @R1,AMOV R2,#20HLCALL DELYRL A ;显示子程序SJMP SOX1;---------------------------------------------DELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02H ;延时DEL4: DJNZ R2,DEL4POP 02HDJNZ R2,DEL3POP 02HDJNZ R2,DEL2POP 02HDJNZ R2,DELYRET;---------------------------------------------END实验九脉冲计数(定时/计数器实验) 一、实验目的熟悉8032定时/计数功能,掌握初始化编程方法。