1、微机实验报告实验一 多位十进制数相加1、实验目的学习数据传送和算术运算指令的用法。2、实验内容将两个多位十进制数28056、47193相加,并显示加数、被加数、和。要求两个加数均以ASCII码形式各自顺序存放在DATA1和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)。3、实验程序SHOW MACRO B MOV DL, B MOV AH, 02H INT 21H ENDMDATA SEGMENTDATA1 DB 33H, 39H, 31H, 37H, 34HDATA2 DB 36H, 35H, 30H, 38H, 32HDATA3 DB _, 0DH, 0AH, $DATA
2、 ENDSSTACK SEGMENTSTA DB 20 DUP (?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATASTART: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX MOV AX, TOP MOV SP, AX MOV SI, OFFSET DATA2 MOV BX, 05 SHOW 20H CALL DISPL SHOW 0DH SHOW 0AH MOV SI, OFFSET DATA1 MOV BX, 05 S
3、HOW 2BH CALL DISPL SHOW 0DH SHOW 0AH MOV CL, 7S1: SHOW 2DH LOOP S1 SHOW 0DH SHOW 0AH MOV SI, OFFSET DATA1 MOV DI, OFFSET DATA2 CALL ADDA MOV SI, OFFSET DATA1 MOV BX, 5 SHOW 20H CALL DISPL MOV AX, 4C00H INT 21DISPL PROC NEARDS1: SHOW SI+BX-1 DEC BX JNZ DS1 RETDISPL ENDPADDA PROC NEAR MOV DX, SI MOV B
4、P, DI MOV BX, 05AD1: SUB BYTE PTR SI+BX-1, 30H SUB BYTE PTR DI+BX-1, 30H DEC BX JNZ AD1 MOV SI, DX MOV DI, BP MOV CX, 05 CLCAD2: MOV AL, SI MOV BL, DI ADC AL, BL AAA MOV SI, AL INC SI INC DI LOOP AD2 MOV SI, DX MOV DI, BP MOV BX, 05AD3: ADD BYTE PTR SI+BX-1, 30H ADD BYTE PTR DI+BX-1, 30H DEC BX JNZ
5、AD3 RETADDA ENDPCODE ENDSEND START 四、实验结果五、思考题不改变数据段DATA1和DATA2的内容,如何将加数和被加数分别由28056和47193变成65082和39174,并且相加。修改程序为:DISPL PROC NEARDS1: SHOW SI+BX INC BX CMP BX, 5 JNE DS1 RETDISPL ENDPMOV CX, 05 CLC add si, 4 add di, 4AD2: MOV AL, SI MOV BL, DI ADC AL, BL AAA MOV SI, AL dec si dec di LOOP AD2实验二 统计数
6、据个数1、实验目的掌握将多位十六进制数转换成多位十进制数ASCII码的方法。2、实验内容统计内存数组中大于0和小于0的元素个数,并将统计结果分别存放在LRESULT和HRESULT变量中,并显示个数。3、实验程序DATA SEGMENTARY DB 1,3,-1,2,6,-9,-5,7,8,1,3,8,-6,8,-9,-7,2,4,-3,-3 DB -4,7,7,8,3,1,3,6,8,5,5,6,4,5,7,-4,2,4,5,-7,5,4 DB 2,5,7,8,8,8,7,6,-5,4,3,2,1,-1,2,2,3,-4,5,6,7 N=$-ARYLRESULT DW 0HRESULT DW
7、 0TJJG DB STATISTICS RESULT: , 0DH, 0AH, $DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV ES,AXSHOW MACRO B PUSH DX PUSH AX MOV DX,B MOV AH,02H INT 21H POP AX POP DX ENDM XOR CX,CX MOV CX,N LEA SI,ARYLOP: MOV AL,SI CMP AL,0 JNS PLUS INC LRESULT JMP CONTPLUS: INC HRESULTC
8、ONT: INC SI LOOP LOP LEA DX,TJJG MOV AH,09H INT 21H SHOW + MOV AX,HRESULT CALL DISPL SHOW 0DH SHOW 0AH SHOW - MOV AX,LRESULT CALL DISPL MOV AX,4C00H INT 21HDISPL PROC PUSH DX PUSH AX MOV CX,10 MOV DX,00H MOV BX,00H DIV CX MOV BX,DX ADD AL,30HDISPL1: MOV DL,AL MOV AH,02H INT 21H MOV DL,BL ADD DL,30H
9、MOV AH,02H INT 21H POP AX POP DX RETDISPL ENDPCODE ENDS END START四、实验结果五、思考题试分析程序中语句“MOV CX,N”执行后,赋给CX寄存器的值是多少?答:CX中的值是3FH。实验三 十字路口红绿灯闪烁试验1、实验目的通过对红、绿、黄灯的控制,熟练掌握8255A接口芯片的编程方法。2、实验内容对8255A接口芯片进行编程,使红、黄、绿发光二极管按照十字路口交通灯的形式点亮或熄灭。3、线路连接发光二极管共8个,其中两组绿、黄、红灯用6个,L2、L3、L4为一组,L5、L6、L7为一组:实验台连接如图43所示。高电平“1”时,点
10、亮。四、编程提示(1)红、黄、绿灯变化规律设有一个十字路口,两组灯分别代表东西和南北两个方向,其红黄绿灯变化规律为:两个路口红灯全亮;南北路口绿灯亮,东西路口红灯亮:南北路口绿灯灭,东西路口红灯亮;两个路口黄灯闪烁;两个路口红灯全亮;东西路口绿灯亮,南北路口红灯亮;东西路口绿灯灭,南北路口红灯亮;两个路口黄灯闪烁;转向循环执行。(2)设置8255A方式控制字设置8255A的端口C工作在方式0,为输出。D0、D1控制绿灯,D2、D3控制黄灯,D4、D5控制红灯。需要点亮哪一位指示灯时,8255A相应端口对应位就输出“1”。五、实验程序DATA SEGMENTIOPORT EQU 0D88OH-2
11、80HIO8255C EQU IPORT+282HIO8255T EQU IPORT+283HPB DB ?MESS DB ENTER ANY KEY CAN EXIT TO DOS!, 0DH, 0AH, $DATA ENDSSTACK SEGMENT STACKSTA DW 50 DUP (?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AH, 09H MOV DX, OFFSE
12、T MESS INT 21H MOV DX, IO8255T MOV AL, 81H OUT DX, AL MOV DX, IO8255C IN AL, DX MOV PB, AL MOV DX, IO8255T MOV AL, 80H OUT DX, AL MOV DX, IO8255C MOV AL, PB OR AL, 0CH OUT DX, AL MOV AL, 30H OUT DX, AL CALL DELAY10LLL: MOV DX, IO8255C MOV AL, 12H OUT DX, AL CALL DELAY1 CALL DELAY1 MOV AL, 18H OUT DX
13、, AL MOV CX, 0004HTTT: MOV AL, C3H OUT DX, AL PUSH CX MOV CX, 80HLOP1: CALL DELAY1 LOOP LOP1 MOV AL, 3CH OUT DX, AL MOV CX, 80HLOP2: CALL DELAU1 LOOP LOP2 POP CX LOOP TTT MOV AL, FFH OUT DX, AL CALL DELAY2 MOV AL, C3H OUT DX, AL CALL DELAY1 CALL DELAY1 MOV AL, 00H OUT DX, AL MOV CX, 0007HGGG: MOV AL
14、, 99H OUT DX, AL PUSH CX MOV CX, 80HLOP3: CALL DELAY2 LOOP LOP3 MOV AL, 66H OUT DX, AL MOV CX, 80HLOP4: CALL DELAY2 LOOP LOP4 POP CX LOOP GGG MOV AL, FFH OUT DX, AL CALL DELAY2 MOV AH, 06H MOV DL, 0FFH INT 21H JNZ PPP JMP LLLPPP: MOV AX, 4C00H INT 21HDELAY1 PROC NEAR PUSH CX MOV CX, 0FFFFHCCC: LOOP
15、CCC POP CX RETDELAY1 ENDPDELAY3 PROC NEAR PUSH AX PUSH CX MOV CX, 0F00HUUU: CALL DELAY1 LOOP UUU POP CX POP AX RETDELAY3 ENDPCODE ENDS END START六、实验结果7、思考题程序中红、绿、黄灯点亮和熄灭的延时时间是如何设定的?答:CALL指令调用子程序DELAY10,DELAY10的功能是通过执行循环执行压入堆栈和弹出堆栈来实现延时,改变循环次数即CX的设定值即可改变延时时间。实验四、直流电机测速实验一、实验目的(1)学握8254的作原理和偏程方法;(2)了解
16、光电开关,掌握用光电传感器测量电机转速的方法。二、实验内容光电测速的基本电路由光电传感器、计数器/定时器组成。被测电机主轴上固定一个圆盘,圆盘的边缘上有小孔。传感器的红外发射端和接收端在圆盘的两侧,电机帶动圆盘转到有孔的位置时,红外光通过,接收管导通,输出低电平。红外光被挡住时,接收截止,输出高电平。用计数器/定时器记录在一定时间内传感器发出的脉冲个数,就可以计算出电机的转速。三、线路连接线路连接如图4.5所示,3254计数器/定时器0和2作为定时器,确定测速时间,定时器0的CLK0连1MHz脉冲频率,OUT0作为定时器2的输入,与CLK2相连,输出OUT2与8255的PA0端相连。GATE0
17、利GATE2均接+5V,8254计数器/定时器1作为计数器,输入CLK1与直流电机计数端连接, GATE1与8255的PC0相连。电机DJ端与+5V0V模拟开关SW1相连。4、编程提示8254计数器/定时器1作为计数器,记录脉冲个数,计数器/定时器0和2作为定时器,组成1060秒定时器,测量脉冲个数,算出电机每分钟的转速并显示在屏幕上。8255的PA0根据OUT2的开始和结束时间,通过PC0向8254计数器/定时器1发出开始和停止计数信号。五、实验程序DATASEGMENTIOPORT EQU 0D880H-0280HIO8255K EQU IOPORT+283HIO8255A EQU IOP
18、ORT+280HIO8255C EQU IOPORT+282HIO8254K EQU IOPORT+28BHIO82542 EQU IOPORT+28AHIO82541 EQU IOPORT+289HIO82540 EQU IOPORT+288HMESS DB STRIKEANYKEY,RETURNTODOS!,0AH,0DH,$COU DB 0COU1 DB 0COUNT1 DB 0COUNT2 DB 0COUNT3 DB 0COUNT4 DB 0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX
19、,OFFSETMESSMOV AH,09HINT 21HMOV DX,IO8254KMOV AL,36HOUT DX,ALMOV DX,IO82540MOV AX,50000OUT DX,ALNOPNOPMOV AL,AHOUT DX,ALMOV DX,IO8255KMOV AL,90HOUT DX,ALMOV DX,IO8255CMOV AL,00OUT DX,ALLL: MOV AH,01HINT 16HJNZ QUIT1MOV DX,IO8254KMOV AL,70HOUT DX,ALMOV DX,IO82541MOV AL,0FFHOUT DX,ALNOPNOPOUT DX,ALMOV
20、 DX,IO8254KMOV AL,90HOUT DX,ALMOV DX,IO82542MOV AL,100OUT DX,ALMOV DX,IO8255CMOV AL,01HOUT DX,ALJMP A0QUIT1: JMP QUITA0: MOV DX,IO8255AA1: IN AL,DXAND AL,01HJZ A1MOV DX,IO8255CMOV AL,00HOUT DX,ALMOV DX,IO8254KMOV AL,70HOUT DX,ALMOV DX,IO82541IN AL,DXMOV BL,ALIN AL,DXMOV BH,ALMOV AX,0FFFFHSUB AX,BXCA
21、LL DISPMOV DL,0DHMOV AH,02INT 21HMOV DL,0AHMOV AH,02INT 21HJMP LLDISPPROCNEARMOV DX,0000HMOV CX,03E8HDIV CXMOV COUNT1,ALMOV AX,DXMOV CL,64HDIV CLMOV COUNT2,ALMOV AL,AHMOV AH,00HMOV CL,10DIV CLMOV COUNT3,ALMOV COUNT4,AHMOV AL,COUNT1CALL DISP1MOV AL,COUNT2CALL DISP1MOV AL,COUNT3CALL DISP1MOV AL,COUNT4CALL DISP1RETDISPENDPDISP1PROCNEARAND AL,0FHCMP AL,09HJLE NUMADD AL,07HNUM: ADD AL,30HMOV DL,ALMOV AH,02INT 21HRETDISP1ENDPQUIT: MOV AH,4CHINT 21HCODE ENDSEND START 六、实验结果七、思考题关闭电机后,为什么8254计数不为零?答:由于之前计数值即电机转速已经存储在锁存器中,关闭电机后,程序还是将之前的数值显示在屏幕上,所以不为零。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1