1、实验二 汇编语言程序设计实验1、拆字程序实验一、实验目的:掌握汇编语言设计方法。二、实验内容:把8000H地址上的内容拆开,高位送8001H地址的低位,低位送8002H地址的低位,8001H、8002H地址的高位清零.本程序通常在把数据送显示缓冲区时使用。三、实验器材: 计算机 1台四、实验步骤: 1、按流程图编写程序,以下是通过计算机交叉汇编得到的.LST文件清单,供参考。2、文件编译连接、装载,用鼠标点击项目/重建所有目标文件,系统自动进行编译,并弹出信息窗口,若有错误则重新修改再编译;若无错误,点击调试/启动/停止调试后进入调试状态。3、设置观察窗口:(1)用鼠标点击视图/存储器窗口,在
2、地址栏中输入0X8000;(2)在8000H中写入数据(任意);(3)单步执行观察寄存器和8000H8002H的变化。8000H内容送A高低位交换屏蔽高位后送8001H8000内容送A屏蔽高位后送8002H结 束五、程序框图:七、实验程序:;把指定字节的高低位拆开分别存放,多用于显示子程序ORG 0000HMOV DPTR,#8000H;指定的字节MOVX A,DPTRMOV B,A ;暂存SWAP A ;交换ANL A,#0FH ;屏敝高位INC DPTRMOVX DPTR,AINC DPTRMOV A,BANL A,#0FH ;指定字节的内容屏敝高位MOVX DPTR,ALOOP:SJMP
3、 LOOPEND2、 数据区传送子程序实验一、实验目的:学习Windows平台下的编辑、编译、排错调试方法。二、实验内容:把外部扩展RAM(6264)的8000H-807FH中的内容传送到8080H开始的空间中去。R2.R3存放源RAM区首址,R6.R7存放需传送的字节数,R4.R5存放目的RAM区首址。开 始字节数到吗?源地址内容送AA送目的地址源地址加1目地址加1结 束三、实验器材:计算机 1 台 四、程序框图:五、实验程序:;数据传送子程序ORG 0000H MOV R2,#80H MOV R3,#00H MOV R6, #00H MOV R7, #7FHMOV R4,#80H MOV
4、R5,#80HLOOP0: MOV DPL,R3MOV DPH,R2;建立源程序首地址 MOVX A,DPTR;取数 MOV DPL,R5 MOV DPH,R4;目标首地址LOOP:MOVX DPTR,A ;传送 CJNE R3,#0FFH,LOOPA INC R2LOOPA:INC R3;源地址加1 CJNE R5,#0FFH,LOOP1 INC R4LOOP1:INC R5;目地址加1 CJNE R7,#00H,LOOP2 CJNE R6,#00H,LOOP3LOOP4: SJMP LOOP4LOOP2: DEC R7;字节数减1 SJMP LOOP0LOOP3: DEC R7 DEC R
5、6 SJMP LOOP0;未完继续END3、 清零内存实验开 始外部RAM首地#2000HDPTR12H送A结 束ADPTRDPTR=#207FHNY一、实验目的:学习Windows软件的调试方法二、实验内容:把外部RAM的8000-80FFH RAM空间置数三、实验器材:计算机 1 台四、程序框图: 五、实验程序: ORG 0000HMOV R0,#00HMOV DPTR,#8000H ;空间首地址送DPTRLOOP:mov a,#12hMOVX DPTR,A;清零INC DPTR;DPTR加1INC R0;字节数加1CJNE R0,#7FH,LOOP;连续清256个字节LOOP1:SJMP
6、 LOOP1 END实验三 P1口应用实验一、实验目的:掌握P1口的基本方法和编程。二、实验内容:利用P1口输出高低电平,控制对外部装置的控制。三、实验步骤1 采用P1口作输出P1口是准双向口,它作为输出口使用时具有锁存功能。实验所需要LED电平显示电路如图1所示。实验平台上有8只发光二极管,由U33的74HC245驱动,以显示电平状态。高电平“1” 点亮发光二极管。高电平“1”点亮电平显示电路在实验系统上如下表所示连线。执行如下程序,发光二极管LED将循环显示。连线连接孔1连接孔21P1.0L02P1.1L13P1.2L24P1.3L3连线说明表四、实验程序: LOOP:MOV A, #01
7、HMOV R2, #8OUTPUT:MOV P1, ARL ALCALL DELAYDJNZ R2, OUTPUTLJMP LOOPDELAY: ;延时子程序MOV R6, #0MOV R7, #0DELAYLOOP:DJNZ R6, DELAYLOOPDJNZ R7, DELAYLOOPRETEND关于延时子程序的时间计算,查指令表可知MOV和DJNZ指令均需用两个机器周期,在6MHz晶振时,一个机器周期时间长度为12/6=2s,所以上面延时子程序该的执行时间为:(256255+2)2126 261ms2 采用P1口作输入和输出由P1口的准双向口结构可知,当作为输入口时,必须先对它置“1”。
8、若不先对它置“1”,读入的数据是不正确的。实验所需要LED电平显示电路和逻辑电平开关电路如图2所示。实验平台上有8只拨动开关K0-K7及相应的驱动电路,以产生“1”、“0”的逻辑电平。开关向上拨相应插孔输出高电平为“1”,反之,输出低电平为“0”。向上:1向下:0逻辑电平开关电路在实验系统上如下表所示连线。执行如下程序,发光二极管LED将随拨动开关的位置而点亮或熄灭。连线连接孔1连接孔21P1.0k02P1.1k13P1.2L04P1.3L1连线说明实验程序KEYLEFT EQU P1.0KEYRIGHT EQU P1.1LEDLEFT EQU P1.2LEDRIGHT EQU P1.3SET
9、B KEYLEFTSETB KEYRIGHTLOOP:MOV C,KEYLEFTMOV LEDLEFT,CMOV C,KEYRIGHTMOV LEDRIGHT,CLJMP LOOPEND3、P1口控制继电器“系统资源区”的P1.0接继电器的Con端,继电器的In接VCC,编制程序,使P1.0电平变化,高电平时继电器吸合,常开触点接上,双色灯亮绿灯,低电平时继电器不工作,常闭触点闭合,亮红灯。AA: CLR P1.0MOV R0,#10HLCALL DELYLCALL DELYNOPSETB P1.0LCALL DELYLCALL DELYSJMP AADELY: MOV R5,#02H ;延时
10、DELY1: MOV R7,#00HDELY2: DJNZ R7,DELY2 DJNZ R6,DELY2 DJNZ R5,DELY2 RET END实验四 外部中断实验一、实验目的:掌握工业顺序控制程序的简单编程,中断的使用。二、实验内容:8031 P1.0-P1.6控制注塑机七道工序,现模拟控制七只发光二极管的点亮,高电平点亮。设定每道工序时间转换为延时,P3.4为开工启动开关,高电平启动。P3.3为外部故障输入模拟开关,低电平报警,P1.7为报警声音输出。设定7道工序只有一位输出。三、实验器材:1、超想3000TC综合实验仪 1 台 2、KEIL仿真器 1 台3、计算机 1 台 4、连线
11、若干根四、程序框图:关输出保护现场报 警故障清除了吗?恢复现场返 回N开 始开中断,P1、P3口初始化等开工工序1延时工序2延时工序7延时主程序流程图 中断服务子程序五、接线图案:六、实验步骤:按图接好连线。执行程序,把K1和K0接到高电平,观察发光二极管点亮情况,确定工序执行是否正常,然后把K0置为低电平,看是否有声音报警。恢复中断1,报警停,又从刚才报警时一道程序执行下去。七、实验程序: ;掌握工业顺序控制的简单编程,中断的使用 ORG 0000H SJMP MAIN ORG 0013H LJMP INTOMAIN: MOV P1,#00H ORL P3,#00HPO11:JNB P3.4
12、,PO11;开工吗? ORL IE,#84H ORL IP,#04H MOV PSW,#00H;初始化 MOV SP,#53HPO12:MOV P1,#01H;第一道工序 ACALL PO1BH MOV P1,#02H;第二道工序 ACALL PO1BH MOV P1,#04H;第三道工序 ACALL PO1BH MOV P1,#08H;第四道工序 ACALL PO1BH MOV P1,#10H;第五道工序 ACALL PO1BH MOV P1,#20H;第六道工序 ACALL PO1BH MOV P1,#40H;第七道工序 ACALL PO1BH SJMP PO12INTO:MOV B,R2
13、;保护现场PO17:MOV P1,#00H;关输出 MOV 20H,#0A0H;振荡次数PO18: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;恢复现场 RETIPO19:MOV R2,#10H;延时1 ACALL DELY RETPO1A:MOV R2,#06H;延时2 ACALL DELY RETPO1BH:MOV R2,#30H;延时3 ACALL DELY RETDELY:PUSH 02H;
14、延时子程序DEL2:PUSH 02HDEL3:PUSH 02HDEL4:DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END实验五 定时/计数器的记数功能实验一、实验目的:1、熟悉8031定时/计数器的记数功能;2、掌握初始化编程方法;3、掌握中断程序的调试方法。二、实验内容:定时/记数器0对外部输入的脉冲进行计数,并送显示器显示。三、实验器材: 1、超想-3000TC综合实验仪 1 台 2、KEIL仿真器 1 台3、连线 若干 根 4、计算机 1 台 四、实验原理: MCS-51
15、有两个16位的定时/计数器:T0和T1。计数和定时实质上都是对脉冲信号进行计数,只不过脉冲源不同而已。当工作在定时方式时,计数脉冲来自单片机的内部,每个机器周期使计数器加1,由于计数脉冲的频率是固定的(即每个脉冲为1个机器周期的时间),故可通过设定计数值来实现定时功能。当工作在计数方式时,计数脉冲来自单片机的引脚,每当引脚上出现一个由1到0的电平变化时,计数器的值加1,从而实现计数功能。可以通过编程来指定时计数器的功能,以及它的工作方式。读取计数器的当前值时,应读3次。这样可以避免在第一次读完后,第二次读之前,由于低位溢出向高位进位时的错误。 五、接线图:接线方案1 接线方案2六、程序框图:开
16、 始堆栈、定时/计数初始化开定时器取出TL0/TH0内容转换显 示主程序流程图0送R4R5R6,10HR70送CYR2R3右移一位2*(R4R5R6)+CY送R4R5R6(R7-1)=0结 束二转十进制子程序七、实验步骤:用连线把“系统资源区”的P3.4孔连“脉冲源”的“DOWN”孔 ,执行程序,按动AN锁按钮,观察数码管上计数脉冲的个数。八、思考问题:把P3.4孔分别与“脉冲源”的2MHZ、1MHZ、0.5MHZ孔相连时,显示值反而比连0.25MHZ孔更慢,为什么?当fosc=6MHZ时,能够计数的脉冲信号最高频率为多少?九、实验程序: ;对定时器0外部输入的脉冲信号进行计数且显示OUTBI
17、T EQU 0E101HCLK164 EQU 0E102H ; 段控制口(接164时钟位)DAT164 EQU 0E102H ; 段控制口(接164数据位)LEDBUF EQU 40HIN EQU 0E103H ORG 0000H MOV SP,#60H MOV DPTR,#0E100H ;8155初始化 MOV A,#03H MOVX DPTR,A MOV TMOD,#05H ;定时器初始化 MOV TH0,#00H MOV TL0,#00H SETB TR0LOOP0: MOV R2,TH0 MOV R3,TL0 LCALL LOOP1 MOV R0,#40H MOV A,R6 LCALL
18、 PTDS MOV A,R5 LCALL PTDS MOV A,R4 LCALL PTDS LCALL DISPLAY SJMP LOOP0LOOP1:CLR A ;二转十子程序 MOV R4,A MOV R5,A MOV R6,A MOV R7,#10HLOOP2:CLR C MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV A,R6 ADDC A,R6 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,LOOP2
19、 RETPTDS:MOV R1,A ;拆字子程序 ACALL PTDS1 MOV A,R1 SWAP APTDS1:ANL A,#0FH MOV R0,A INC R0 RETDELAY: MOV R7, #0 ; 延时子程序DELAYLOOP: DJNZ R7, DELAYLOOP DJNZ R6, DELAYLOOP RETDISPLAY:SETB 0D3H MOV R0, #LEDBUF MOV R1, #6 ; 共6个八段管 MOV R2, #00000001B ; 从左边开始显示LOOP: MOV DPTR, #OUTBIT MOV A, #00H MOVX DPTR, A ; 关所
20、有八段管 MOV A, R0 MOV DPTR,#LEDMAP MOVC A,A+DPTR MOV B, #8 ; 送164DLP: RLC A MOV R3, A MOV ACC.0, C ANL A,#0FDH MOV DPTR, #DAT164 MOVX DPTR, A MOV DPTR, #CLK164 ORL A,#02H MOVX DPTR, A ANL A,#0FDH MOVX DPTR, A MOV A, R3 DJNZ B, DLP MOV DPTR, #OUTBIT MOV A, R2 MOVX DPTR, A ; 显示一位八段管 MOV R6, #1 CALL DELAY
21、 MOV A, R2 ; 显示下一位 RL A MOV R2, A INC R0 DJNZ R1, LOOP MOV DPTR, #OUTBIT MOV A, #0 MOVX DPTR, A ; 关所有八段管 CLR 0D3H RETLEDMAP: ; 八段管显示码 DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H END实验六 8255输入输出实验一、实验目的:了解8255和8155 接口方法;了解芯片的性能及编程方法。二、实验内容: 设计8255与单片机的接口。三、实验器材
22、:(1)超想-3000TB综合实验仪 1 台 (2)超想3000仿真器 1 台 (3)连线 若干 根 (4)8255芯片 1 片四、实验原理:8255是一种可编程并行I/O扩展接口芯片,内集成有256字节的静态RAM,一个14位的定时计数器。8255有三个8位的并行口,端口既可以编程为普通I/O口,也可以编程为选通I/O口和双向传输口。8255为总线兼容型,可以与8051的总线直接接口。其中,口地址取决于片选CS和A1、A0。1、端口输入输出实验本实验中8255编程为PB口输入、PC口、PA口输出,根据8255状态控制字选择方法。由于该电路中8255的片选段CS接到YC2,因此PA、PB、PC
23、以及控制口的地址分别为0A000H、0A001H、0A002H、0A003H。编程实现8255的PA口按方式0输出,PB口按方式0输入,将PB口外接8个开关的状态通过PA口外接的LED灯反映出来。接线图:8255的片选段CS55接到YC2, 8255的PA0-PA7接到L0-L7,PB0-PB7接到K0-K7。实验程序:PORTAEQU0A000H ;8255PA口地址PORTBEQU0A001H ;8255PB口地址PORTCEQU0A002H ;8255PC口地址CADDREQU0A003H ;8255控制字地址SJMPSTARTORG0030HSTART:MOVA,#82H ;方式0,P
24、A,PC输出,PB输入MOVDPTR,#CADDRMOVX DPTR,ALOOP:MOV DPTR,#PORTBMOVX A, DPTR ;读入PB口MOV DPTR,#PORTAMOVX DPTR,A ;输出到PA口 LCALLDELAY LJMPLOOPDELAY:MOVR6,#0;延时子程序DELAY1: MOVR7,#0DELAY2:DJNZR7,DELAY2DJNZR6,DELAY1RETEND2、8255 控制交通灯8255的片选段CS接到YC2,因此PA、PB、PC以及控制口的地址分别为0A000H、0A001H、0A002H、0A003H。本实验中8255编程为PB口、PC口、
25、PA口均输出,根据8255状态控制字选择方法,8255控制字应为80H。接线图:8255的片选段CS55接到YC2实验程序: 程序框图: ORG 0000HSTART:MOV DPTR,#0AC03HMOV A,#080HMOVX DPTR,AMOV DPTR,#0AC00HMOV A,#0FFHMOVX DPTR,A ;全灭 LCALLDELAYMOV DPTR,#0AC00HMOV A,#0F0HMOVX DPTR,A ;全红LCALLDELAYMOV DPTR,#0AC00HMOV A,#05AHMOVX DPTR,ALCALLDELAYMOV DPTR,#0AC00HMOV A,#0F
26、5HMOVX DPTR,ALCALLDELAYMOV DPTR,#0AC00HMOV A,#0AHMOVX DPTR,A ;全黄LCALLDELAYMOV DPTR,#0AC00HMOV A,#0A0HMOVX DPTR,ALCALLDELAYMOV DPTR,#0AC00HMOV A,#0A5HMOVX DPTR,ALCALLDELAYSJMP STARTDELAY: MOV R7,#08HL1:MOV R6,#0FFHL2:MOV R5,#0FFHL3:DJNZ R5,L3DJNZ R6,L2DJNZ R7,L1RETEND实验七 D/A转换实验一、实验目的:了解D/A转换与单片机的接口方
27、法;了解D/A转换芯片DA0832的性能及编程方法。二、实验内容: 利用0832输出一个从0V开始逐渐升至5V再降至0V的三角波电压,数码管显示数字量值。三、实验器材: 1、超想-3000TC综合实验仪 1 台 2、KEIL仿真器 1 台3、连线 若干 根 4、计算机 1 台四、接线图案:五、实验原理:D/A转换器的功能主要是将输入的数字量转换成模拟量输出,在语音合成等方面得到了广泛的应用。本实验中采用的转换器为DAC0832,该芯片为电流输出型8位D/A转换器,输入设有两级缓冲锁存器,因此可同时输出多路模拟量。本实验中采用单级缓冲连接方式,用0832来产生三角波,具体线路如上图所示。VREF
28、引脚的电压极性和大小决定了输出电压的极性与幅度,超想-3000TC综合实验仪上的DA0832的第8引脚(VREF)的电压已接为-5V,所以输出电压值的幅度为0-5V。六、实验步骤:1、把DA0832的片选CS32孔接至YC3(0B000H-0BFFFH)孔。2、编写程序、编译程序:用单步、断点、连续方式调试程序,排除软件错误。运行程序,8155键显区数码管上显示不断加大或减小的数字量,用万用表测量D/A输出孔AOUT,应能测出不断加大或减小的电压值。N0832初始化显 示转换显示加1N输入是否到FF?输入显示减1输入是否到00?七、思考问题: 修改程序,使能产生锯齿波。九、实验程序: 程序框图
29、: OUTBIT EQU 0E101H ; 位控制口 CLK164 EQU 0E102H ; 段控制口(接164时钟位) DAT164 EQU 0E102H ; 段控制口(接164数据位) IN EQU 0E103H ; 键盘读入口 LEDBUF EQU 40H ; 显示缓冲 ORG 0000H MOV SP,#60H MOV DPTR,#0E100H ;8155初始化 MOV A,#03H MOVX DPTR,A MOV 40H,#00H ;显示缓冲区置值 MOV 41H,#08H MOV 42H,#03H MOV 43H,#02HLOOP1:MOV R5,#00HLOOP2:MOV DPT
30、R,#0B000H ;0832DA 从小到大转换 MOV A,R5 MOVX DPTR,A MOV R0,#45H MOV 45H,A ;拆字后送显示缓冲区ACALL PTDS MOV R6,#15HDIR10: ACALL DISPLAY ;调用显示子程序 DJNZ R6,DIR10 INC R5 CJNE R5,#00H,LOOP2LOOP3: MOV DPTR,#0B000H ;0832DA从大到小转换 DEC R5 MOV A,R5 MOVX DPTR,A MOV R0,#45H ACALL PTDS MOV R6,#15HDIR11: ACALL DISPLAY DJNZ R6,DI
31、R11 CJNE R5,#00H,LOOP3 SJMP LOOP1DELAY: MOV R7, #01MOV R3,#01 ; 延时子程序DELAYLOOP: DJNZ R3, DELAYLOOP DJNZ R7, DELAYLOOP DJNZ R6, DELAYLOOP RETDISPLAY:SETB 0D3H MOV R0, #LEDBUF MOV R1, #6 ; 共6个八段管 MOV R2, #00100000B ; 从左边开始显示LOOP: MOV DPTR, #OUTBIT MOV A, #00H MOVX DPTR, A ; 关所有八段管 MOV A, R0 MOV DPTR,#
32、LEDMAP MOVC A,A+DPTR MOV B, #8 DLP: RLC A MOV R3, A MOV ACC.0, C ANL A,#0FDH MOV DPTR, #DAT164 MOVX DPTR, A MOV DPTR, #CLK164 ORL A,#03H MOVX DPTR, A ANL A,#0FDH MOVX DPTR, A MOV A, R3 DJNZ B, DLP MOV DPTR, #OUTBIT MOV A, R2 MOVX DPTR, A ; 显示一位八段管 MOV R6, #01 CALL DELAY MOV A, R2 ; 显示下一位 RR A MOV R2
33、, A INC R0 DJNZ R1, LOOP MOV DPTR, #OUTBIT MOV A, #0 MOVX DPTR, A ; 关所有八段管 CLR 0D3H RETLEDMAP: ; 八段管显示码 DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71HPTDS: MOV R1,A ACALL PTDS1 MOV A,R1 SWAP APTDS1: ANL A,#0FH MOV R0,A DEC R0 RETDELAY1:MOV R7,#03H SJMP DELAYLOOPE
34、ND实验八 A/D转换实验一、实验目的:掌握A/D转换与单片机接口的方法;了解A/D芯片0809转换性能及编程方法。二、实验内容:利用综合实验仪上的0809做A/D转换器,综合实验仪上的电位器提供模拟量输入,编制程序,将模拟量转换成数字量,通过8155键显区数码管显示出来。三、实验器材:1、超想-3000TC综合实验仪 1 台 2、KEIL仿真器 1 台 3、连线 若干 根 4、计算机 1 台四、实验原理: A/D转换器的功能主要是将输入的模拟信号转换成数字信号,如电压、电流、温度测量等都属于这种转换。本实验中采用的转换器为ADC0809,它是一个8位逐次逼近型A/D转换器,可以对8个模拟量进
35、行转换,转换时间为100S。其工作过程如下:首先由地址锁存信号ALE的上升沿将引脚ADDA、ADDB和ADDC上的信号锁存到地址寄存器内,用以选择模拟量输入通道;START信号的下降沿启动A/D转换器开始工作;当转换结束时,AD0809使EOC引脚由低电平变成高电平,程序可以通过查询的方式读取转换结果,也可以通过中断方式读取结果。CLOCK为转换时钟输入端,频率为100KHz-1.2MHz,推荐值为640KHz。 五、实验步骤: 1、设定仿真模式为程序空间在仿真器上,数据空间在用户板上,即点击设置下的仿真模式,在RAM区选中用户RAM,ROM区选中系统ROM(注:本书中的实验除另行说明外,均与此相同)。把AD0809的零通道09IN0孔用连线接至模拟信号发生器的VIN孔,AD0809的片选信号CS09孔接“译码器”YC2(0A000-0AFFFH)孔,“脉冲源”中的0.5MHZ孔连AD0809的CLOCK孔。2、编写程序,并编译通过。本程序使用查询的方式读取转换结果。在读取转换结果的指令后设置断点,运行程序,在断点处检查并读出A/D转换结果,数据是否与VIN相对应。修改程序中错误,使显示值随VI