微机原理与接口技术实验程序文档格式.docx
《微机原理与接口技术实验程序文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验程序文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
LOOP
NEXT
PUSH
ES
POP
DS
将附加段寄存器指向的段值赋给数据段寄存器
DX,OFFSETMSD
AH,9
INT21H;
显示字符串
AH,4CH
返回DOS状态
CODE
ENDS
ENDSTART
实验二:
最大值程序
DATASEGMENT
BUFFERDW200,-12,45,500,-1000
COUNTEQU($-BUFFER)/2
MAXDW?
;
用于存放最大值
MES1DB‘200,-12,45,78,500,-1000’,0AH,0DH,’$’
DATAENDS
STACKSEGMENT
DB64DUP(?
TOPEQU$-STACK;
计算出堆栈指针数值
STACKENDS
CODESEGMENT
ASSUMECS:
DATA,SS:
STACK
BEGIN:
MOVAX,SEGDATA
MOVDS,AX
MOVAX,SEGSTACK
MOVSS,AX
MOVSP,TOP
MOVCX,COUNT
LEABX,BUFFER
MOVAX,[BX]
INCBX
INCBX
DECCX
AGAIN:
CMPAX,[BX]
JGENEXT
MOVAX,[BX]
INCBX
LOOPAGAIN
MOVMAX,AX
MOVAH,9
LEADX,MES1
INT21H
QQ1:
MOVAH,1
INT16H
JZQQ1
MOVAH,4C
CODEENDS
ENDBEGIN
字符串程序:
STRINGDB‘abcduvwxyz’,0DH
L1DB?
CREQU0DH
DATAENDS
STACKSEGMENTPARASTACK‘STACK’
S1DB100DUP(?
CODESEGMENT
DATA,ES:
MOVEAX,DATA
MOVES,AX
LEADI,STRING;
设串的地址指针
MOVDL,0;
置串长度的初值为0
MOVAL,CR;
串标志送入AL
CLD;
清DF=0,使地址自动增量
SCASB;
搜索串
JEDONE;
找到结束标志,停止
INCDL;
串长度加1
JMPAGAIN
DONE:
LEABX,L1
MOV[BX],DL;
存串长度
MOVDH,DL;
串长暂存
MOVCL,4
SHRDL,CL;
取串长高4位
MOVAL,DL
CALLCHANGE;
将高4位转换成ASCII码放入AL
MOVDL,AL
MOVAH,2
INT21H;
显示高4位
MOVAL,DH;
取暂存串长
ANDAL,0FH;
取串长低4位
CALLCHANGE
MOVDL,AL
INT21H;
显示串长低位
MOVDL,’H’
显示H
MOVAH,4CH
INT21H
CHANGEPROC;
过程或子程序
CMPAL,10
JLADD30;
小于转
ADDAL,37H
JMPP1
ADD30:
ADDAL,30H
P1:
RET
CHANGEENDP
ENDBEGIN
实验三:
1.在实验箱上设计并连接单脉冲KK1+到8254的CLK0端,8254的OUT0连接IRQ3,定义8254的计数器0为方式0,计数值为5,每当KK1+按动5次后产生中断请求,实现在屏幕上显示字符“5”。
要求:
主机按任意键停止显示返回DOS。
(必做)
IOY1EQU280H
MY8254_COUNT0EQUIOY1+00H;
8254计数器0端口地址
MY8254_COUNT1EQUIOY1+01H;
8254计数器1端口地址
MY8254_COUNT2EQUIOY1+02H;
8254计数器2端口地址
MY8254_MODEEQUIOY1+03H;
8254控制寄存器端口地址
DATASEGMENT
STR1DB'
COUNT:
$'
;
显示的字符串
STACK1SEGMENTSTACK
DW256DUP(?
STACK1ENDS
ASSUMECS:
DATA
MOVAX,CS
MOVDX,OFFSETMYISR
MOVAX,250BH
INAL,21H
ANDAL,0f7H
OUT21H,AL
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETSTR1;
MOVAH,9
INT21H
MOVDX,MY8254_MODE;
初始化8254工作方式
MOVAL,10H;
计数器0,方式0,计数值为十进制
OUTDX,AL
MOVDX,MY8254_COUNT0;
装入计数初值
MOVAL,4
STI
WAIT1:
MOVAH,1;
判断是否有按键按下
INT16H
JZWAIT1;
无按键则跳回继续等待,有则退出
QUIT:
ORAL,08H
MOVAX,4C00H;
返回到DOS
MYISRPROCNEAR;
中断处理程序MYISR
MOVAL,35H
MOVAH,0EH
INT10H
MOVAL,20H
INT10H
重装计数初值
OUTDX,AL
OVER:
MOVAL,20H
OUT20H,AL
IRET
MYISRENDP
CODEENDS
ENDSTART
实验四:
1.1.在实验箱上设计并连接8255,将8255的PB口和PA口分别与数码管显示电路的段选端和位选段相接,使其显示3000H、3001H、3002H和3003H单元中的数据。
(必做)
IOY0EQU0280H;
片选IOY0对应的端口始地址
MY8255_AEQUIOY0+00H;
8255的A口地址
MY8255_BEQUIOY0+01H;
8255的B口地址
MY8255_CEQUIOY0+02H;
8255的C口地址
MY8255_MODEEQUIOY0+03H;
8255的控制寄存器地址
DATASEGMENT
BUFFDB99H
DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATAENDS;
键值表,0~F对应的7段数码管的段位值
STACK1SEGMENTSTACK
DW256DUP(?
STACK1ENDS
MOVAX,DATA
MOVDS,AX
MOVSI,3000H;
建立缓冲区,存放要显示的键值
MOVAL,00H;
先初始化键值为0
MOV[SI],AL
MOV[SI+1],AL
MOV[SI+2],AL
MOV[SI+3],AL
MOVDX,MY8255_MODE;
初始化8255工作方式
MOVAL,81H;
方式0,A口、B口输出,C口低4位输入
OUTDX,AL
CALLPUTBUF
CALLDISPLAY
MOVAH,1;
判断PC键盘是否有按键按下
JZBEGIN
PUTBUFPROCNEAR;
保存显示数据到缓冲区子程序
MOVSI,3003H
MOVAX,BUFF
MOVAH,AL
ANDAL,0FH
MOV[SI],AL
DECSI
MOVAL,AH
ANDAL,0F0H
SARAL,CL
MOV[SI],AL
RET
PUTBUFENDP
DISPLAYPROCNEAR;
显示子程序
PUSHAX
MOVSI,3000H
MOVDL,08H
PUSHDX
MOVDX,MY8255_A
OUTDX,AL;
设置X1~X4,选通一个数码管
MOVAL,[SI];
取出缓冲区中存放键值
MOVBX,OFFSETDTABLE
XLAT
MOVDX,MY8255_B
写入数码管A~Dp
CALLDALLY
INCSI;
取下一个键值
POPDX
MOVAL,DL
TESTAL,01H
JNZOUT1;
显示完,返回
RORAL,1
MOVDL,AL
JMPAGAIN;
未显示完,跳回继续
OUT1:
POPAX
RET
DISPLAYENDP
DALLYPROCNEAR;
软件延时子程序
PUSHCX
MOVCX,00FFH
D1:
MOVAX,00FFH
D2:
DECAX
JNZD2
LOOPD1
POPCX
DALLYENDP
ENDSTART
2.在实验箱上设计并连接,使用8255扫描4*4键盘,并将识别出的键值依次显示在4位数码管上。
IOY0EQU288H;
片选IOY0对应的端口始地址
DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,
7FH,6FH,77H,7CH,39H,5EH,79H,71H
MOVDI,3003H
CALLDISPLAY
CALLKSCAN;
扫描按键
CMPAL,0Fh
JZNKY;
未发现有键按下则转
CALLKEYSET
NKY:
PUSHAX;
以缓冲区存放的键值为键值表偏移找到键值并显示
OUTDX,AL;
OUTDX,AL;
POPDX
KSCANPROCNEAR;
扫描是否有按键闭合子程序
MOVAL,0FH
MOVDX,MY8255_C;
将4列全选通,X1~X4置0
INAL,DX;
读Y1~Y4
取出Y1~Y4的值
KSCANENDP
KEYSETPROC
MOVAH,AL
MOVDX,MY8255_MODE
MOVAL,88h
MOVDX,MY8255_C
MOVAL,AH
ORAL,0F0H
读列扫描值
ANDAL,0F0H
CMPAL,0F0H
JZKERR;
未发现有键按下则转
MOVCL,04
SHRAL,CL
TESTAL,01H
JNZL2
MOVCL,00H
JMPR0
L2:
TESTAL,02H
JNZL3
MOVCL,04H
JMPR0
L3:
TESTAL,04H
JNZL4
MOVCL,08H
L4:
TESTAL,08H
JNZKERR
MOVCL,0CH
R0:
MOVAL,AH
JNZR2
MOVAL,00H
JMPKCODE
R2:
JNZR3
MOVAL,01H
R3:
TESTAL,04H
JNZR4
MOVAL,02H
R4:
MOVAL,03H
KCODE:
ADDAL,CL;
将行的值加上当前列数,确定按键值
CALLPUTBUF;
保存按键值
KON:
MOVAL,81h
OUTAX,AL
MOVAL,0FH
读行扫描值
ANDAL,0FH
CMPAL,0FH
JNZKON;
按键未抬起转
KERR:
KEYSETENDP
保存键值子程序
MOVSI,DI
DECDI
CMPDI,2FFFH
JNZGOBACK
MOVDI,3003H
GOBACK:
DALLYENDP
实验五:
1.在实验箱上设计并连接ADC0809芯片的接线,按延时方式对单通道模拟量进行A/D转换。
A/D转换结果送入PC机后,再由PC机送至DAC0832进行D/A转换,结果送至示波器,与原信号进行对比观察。
模拟信号源:
由电位器中心抽头可以得到一个可调节的直流电压0~5V。
电位器一端接地,另一端接+5V。
IOY0EQU290H
AD0809EQUIOY0;
AD0809的端口地址
IOY1EQU298H
DA0832EQUIOY1;
DA0832的端口地址
STR1DB‘AD0809:
IN0$’;
定义显示的字符串
BUFFDB?
MOVAX,DATA
显示字符串
MOVAH,9H
LOOP1:
CALLADCON
CALLDACON
MOVAH,1;
JZLOOP1;
无按键则跳回继续循环,有则退出
ADCONPROC
MOVDX,AD0809;
启动A/D转换
OUTDX,AL
CALLDALLY
MOVDX,AD0809;
读出转换结果
INAL,DX
MOVBUFF,AL
CALLTOASCII
ADCONENDP
TOASCIIPROC
MOVCH,AL;
分析结果进行显示
ANDAL,0F0H
MOVCL,04H
SHRAL,CL;
取出数据的十位
CMPAL,09H
JGA1
ADDAL,30H
JMPA2
A1:
ADDAL,37H;
对A~F的处理
A2:
MOVDL,AL;
对0~9的处理
MOVAH,02H
MOVAL,CH
ANDAL,0FH;
取出数据的各位
CMPAL,09H
JGA3
ADDAL,30H
JMPA4
A3:
A4:
MOVDL,AL;
MOVAH,02H
MOVDL,0DH;
回车,置光标到行首
RET
TOASCIIENDP
DACONPROC
MOVDX,DA0832
MOVAL,BUFF
CALLDALLY
DACONEDNP
MOVCX,4000H
MOVAX,0600H
JNZD2
LOOPD1
ENDSTART