1、减法运算显示结果 MOV DL,0DH MOV AH,02H MOV DL,0AH MOV AX,4C00HDISPL PROC NEAR ;显示子功能DSI: MOV AH,02 MOV DL,SI+BX-1 ;显示字符串中一字符 DEC BX ;修改偏移量 JNZ DSI RETDISPL ENDPSUBA PROC NEAR MOV DX,SI MOV BP,DISU1: SUB BYTE PTRSI+BX-1,30H SUB BYTE PTRDI+BX-1,30H将ASCII 码表示的数字串 JNZ SU1 ;转化为十六进制的数字串 MOV SI,DX MOV DI,BP MOV CX
2、,05 ;包括进位,共5位 CLC ;清进单位SU2: MOV AL,SI MOV BL,DI SBB AL,BL ;带进位相减 AAS ;非组合BCD码的减法调整 MOV SI,AL ;结果送被减数区 INC SI INC DI ;指向下一位 LOOP SU2 ;循环SU3: ADD BYTE PTR SI+BX-1,30H ADD BYTE PTR DI+BX-1,30H十六进制的数字串转化ASCII码表示的数字串 JNZ SU3 RET SUBA ENDPCODE ENDS END START实验二 两个数相乘的实验一 实验要求实现十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内
3、存中,算式结果在屏幕上显示出来。二 实验目的掌握乘法指令和循环指令的用法。DATA1 DB 32H,39H,30H,35H,34HDATA2 DB 34H*RESULT DB 6 DUP (00H)STACK SEGMENTSTA DB 20 DUP (? MOV SS,AX MOV SP,TOP LEA SI,DATA1 MOV BX,05H L1: MOV DL,SI+BX-1 DEC BX JNZ L1 LEA SI,DATA2 MOV DL,SI MOV SI,OFFSET DATA2 ;显示算式 MOV BL,SI ;乘数DATA2BL AND BL,00001111B ;屏蔽高4位
4、,ASCII码转化为十六进制数 MOV DI,OFFSET RESULT MOV CX,05LOOP1: AND AL,00001111B ;取被乘数DATA1,ASCII变十六进制数 INC SI ;指向被乘数1的下一字符单元 MUL BL ;相乘 AAM ;AAM调整 ADD AL,DI ;结果低位与前次计算的进位相加 AAA ;AAA调整 MOV DI,AL结果送存到下一单元 MOV DI,AH LOOP LOOP1 ;计算结果高位进位送存 MOV CX,06 MOV SI,DI DISPL: ADD DL,30H DEC SI LOOP DISPL ; MOV AX,4C00H INT
5、 21H ;结束CODE ENDS实验三 BCD码相乘的实验实现BCD码的乘法,要求被乘数和乘数以组合的BCD码形式存放,各占一个内存单元,乘积存入在另外两个内存单元中,由于没有组合的BCD码乘法指令,程序中采用将乘数1作为计算器,累加另一个乘数的方法得到计算结果。掌握用组合的BCD码表示数据,并熟悉怎样实现组合BCD码乘法运算。FIRST DB 99HSECOND DB 25HTHIRD DB 2 DUP(?STACK SEGMENT PARA STACK STACKSTAPN DB 100 DUP(?TOP EQU LENGTH STAPNSTACK MOV BL,FIRST ;被乘数送B
6、L MOV CL,SECOND ;乘数送CL MOV DX,0 ;部分积清0 MOV AL,BLAGAIN: OR AL,AL JZ DONE ;被乘数减到0则转结果显示 MOV AL,DL ADD AL,CL DAA ;乘数于部分积低位相加后调整 MOV DL,AL MOV AL,DH ADC AL,0往部分积高位送进位后调整 MOV DH,AL DEC AL DAS ;组合BCD码减法调整 MOV BL,AL JMP AGAINDONE: LEA BX,THIRD MOV BX,DX LEA SI,FIRST CALL DIS XOR AX,AX LEA DX,MES1 ;* LEA SI
7、,SECOND LEA DX,MES2 ;= LEA SI,THIRD MOV AX,4C00H ;返回DOSDIS PROC NEAR ;显示子程序 MOV CL,04H SHR AL,CL ADD AL,30H AND AL,0FH DIS ENDP END START实验一 双色灯实验一、实验要求编写程序,以8255为输出口,控制四个双色灯按要求发光。1学习单板方式下扩展简单I/O接口的方法以双色灯的使用。2进一步学习微处理器的编程技术。三、实验电路连线8255的CS片选接至适配板上138译码处的200H207H插孔。四、实验说明1、 因为本实验是模拟交通灯控制实验,所以要先了解实际交通
8、灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态,东西绿灯通车,南北灯灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。2、 双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。;D1 EQU 10HD2 EQU 200HPB DB ?STACK SEGMENT STACKS
9、TA DW 50 DUP(? PUSH CS POP DS MOV DX,203H ;设置为全输出 MOV AL,80H OUT DX,AL MOV DX,200H MOV AL,0ffh OUT DX,AL ;清LED MOV DX,200H MOV AL,0F0H全红 MOV BX,7fH CALL DLYBG: MOV AL,01011010B ;南北绿,东西红 MOV BX,D2 MOV CX,03HXH1: AND AL,0F5H ;绿灭黄亮 MOV BX,D1 OR AL,0aH ;绿亮 LOOP XH1 OR AL,0a0H ;南北黄 MOV AL,10100101B ;南北红,
10、东西绿 MOV CX,03XH2: AND AL,0FaH OR AL,05H LOOP XH2 OR AL,50H JMP BGDLY PROC NEAR PUSH CXDDD: MOV CX,2ffHCCC: LOOP CCC DEC BX CMP BX,0 JNE DDD POP CX DLY ENDP CODE ENDSEND START实验二 开关状态显示实验编写程序,设定8255的PA口为开关量输入,PB口为开关量输出,要求能随时将PA口的开关状态通过PB口的发光二极管显示出来。学习使用8255各个口的不同工作方式三、实验电路连接将K1K8用连接至8255的PB0PB7,将DL1D
11、L8用连线连至8255的PC0PC7,8255CS连至译码处的200207插孔。本实验要求8255工作方式0,PB口设置为输入,PC口设置为输出,输入量为开关量,通过8255可实时显示在LED灯上。按下HALT或RST键则返回监控。CODE,SS:设置为b口输入,c口输出 MOV AL,92H OUT DX,AL BG: MOV DX,201H ;将b口状态从c口输出 IN AL,DX MOV DX,202h实验五 A/D转换实验编程用查询方式采样电位器输入电压,并将采样到的结果实时地通过8279显示在数码管上。(只须显示一位即可。用0F表示0+5V电压)。二实验目的1掌握A/D芯片AD080
12、9的转换性能及编程方法。2学习A/D芯片与其他芯片(如8279)接口的方法,初步建立系统的概念。三实验电路及连线CS79接译码处210217这个插孔。A/D的CS插译码处20820F这个插孔,0809的IN0接至电位器W1的中心抽头插孔。注意:电位器W1两边的两个插孔已经分别接好电源+5V和地,请不要再接,以防接错,出现短路。本实验中所用A/D转换芯片为逐次逼近型,精度为8位每转换一次约100微钞,所以程序若为查询式,则在启动后要加适应延时。另外,0809芯片提供转换完成信号(EOC),利用此信号可实现中断采集。有兴趣者可自行编制程序。Z8279 EQU 212HD8279 EQU 210HL
13、EDMOD EQU 00 ;左边输入,八位显示外部译码八位显示LEDFEQ EQU 38H ;扫描频率code push cs pop ds call delay MOV DX,Z8279 MOV AL,LEDMOD MOV AL,LEDFEQ MOV CX,06HXZ: MOV DX,D8279 MOV AL,00H LOOP XZ MOV DX,D8279 MOV AL,5eH MOV AL,77H以上为写(AD ) NOPbg: mov dx,208h mov al,0 out dx,al in al,dx mov cl,04h ror al,cl and al,0fh push ax
14、mov dx,z8279 mov al,81h out dx,al pop ax LEA BX,LED XLAT MOV DX,D8279 ;将AL中内容写到数码管上 jmp bgLED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H DB 5EH,79H,71Hdelay proc near push cx mov cx,01f00h loop $ pop cx ret delay endpEND START 实验六 D/A转换实验编写程序,使D/A转换模块循环输出三角波和锯齿波。1掌握DAC0832芯片的性能、使用方法及对应硬件
15、电路。2了解D/A转换的基本原理。DAC0832的片选CS孔接译码处208-20F插孔(注:0832旁的短路帽应下插,做51实验时应上插)。D/A转换是量转化成模拟量的过程,本实验输出为模拟电压信号,本次实验生成的波形较为简单,有兴趣者可试编程序生成各种波形,如方波,正弦波等,也可与键盘显示模块结合起来,构成一个简单的波形发生器,通过键盘输入各种参数,如频率,振幅(小于+5V),方波的占空比等。code,SS: MOV DX,208H ;锯齿波 MOV CX,07ffHBB: ADD AL,01 CMP AL,00H JNZ BB LOOP BBEE: ADD AL,01H CMP AL,0F
16、FH JNE EEFF: SUB AL,01H JNE FF LOOP EE实验九 步进电机驱动实验利用8255的PC口PC-PC3轮流输出脉冲序列,小键盘控制步进电机的转速和转动方向。1、 了解控制步进电机的基本原理。2、 掌握控制步进电机转动的编程的方法。三、实验连线 用硬导线将8255选信号CS接至200-207,PC0-PC3接至SMA-SMD。将8279的片选信号CS接至208-20F。在运行过程中,可按动小键盘的“0-9”数码键,控制步进电机的转速,按“+或-”键控制步进电机的方向,按“REG”键退出。 C8279 EQU 20AH D8279 EQU 208H C8255 EQU
17、 203H P8255C EQU 202H ASSUME CS:CODE START:PUSH CS INI:MOV DX,C8255 MOV AL,90H 8255初始化 MOV DX,C8279 MOV AL,2AH8279初始化 MOV AL,0D1H关显示 WAIT1:IN AL,DX MOV AH,AL AND AL,80H JNZ WAIT1 ;FIFO正在清除期间则跳转等待 MOV AL,AH JE WAIT1 ;无键按下则跳转等待 LEA BX,STEP RUN:CALL CHKKEY CALL DISPLAY MOV CX,08H ;步进电机控制 LOOP3:MOV DX,P
18、8255C CALL DELAY LOOP LOOP3 JMP RUNCHKKEY PROC NEAR RDKEY:MOV DX,C8279 AND AL,80H CMP AL,80H JE RDKEY JE RTN MOV AL,40H 读FIFO/传感器RAM命令 CHK:CMP AL,38H JE QUIT ;RST 退出 CMP AL,30H ;键值大于30H,为方向控制键 JNC DIRE MOV DELAYTIME,AL JMP RTN DIRE:CMP AL,32H ;HERE 顺时针 JNE NEXT MOV DIRDSP,40H LEA BX,STEP NEXT:CMP AL
19、,33H ;EXEC 逆时针 JNE RTN MOV DIRDSP,46H ADD BX,08H ;逆时针控制表地址 RTN: MOV SI,BXCHKKEY ENDP QUIT: MOV AL,0D2H jmp $DELAY PROC NEAR ;判断键值,获得相应延时循环值 MOV AL,20H ;9? SUB AL,DELAYTIME MOV CX,04H MOV AL,08H ;8 JNZ L2 MOV CX,05H L2: MOV AL,00H ;7 JNZ L3 L3: MOV AL,21H ;6 MOV CX,07H JNZ L4 MOV CX,08H L4: MOV AL,09H ;5 JNZ L5 MOV CX,09H L5: MOV AL,01H ;4 JNZ L6 MO
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1