北理工 微型计算机原理与接口 实验代码 四次全Word下载.docx
- 文档编号:7664105
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:23
- 大小:18.93KB
北理工 微型计算机原理与接口 实验代码 四次全Word下载.docx
《北理工 微型计算机原理与接口 实验代码 四次全Word下载.docx》由会员分享,可在线阅读,更多相关《北理工 微型计算机原理与接口 实验代码 四次全Word下载.docx(23页珍藏版)》请在冰点文库上搜索。
movdx,port
outdx,al
movdx,port+1
inal,dx
andal,0fh
cmpal,0fh
jebegin
若有键按下,按列查找哪个键
moval,00001110b
movdx,port
inal,dx
leabx,tab1
cmpal,0fh
jnedisplay
moval,00001101b
leabx,tab2
moval,00001011b
leabx,tab3
moval,00000111b
leabx,tab4
cmpal,0fh
nop
jmpbegin
查找按下的键,并显示
display:
movdi,bx
leasi,kb;
存小键盘扫描码
next:
cmpal,[si];
查键盘扫描码表
jeshow;
找到了,转去显示
incsi;
否则继续
incdi
jmpnext
show:
;
显示键入字符
movah,2
movdl,[di]
int21h
cmpdl,'
若是'
则退出
jeover
calldelay
jmpbegin;
重新开始查询
over:
movah,4ch
int21h
mainendp
delayprocnear;
延时循环100*65536次
pushdi
pushcx
movcx,0fh
movdi,0
again:
nop
decdi
jnzagain
deccx
popcx
popdi
ret
delayendp
codeends
endmain
p8259equ20h
p8255equ288h
p8253equ280h;
IOY1
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;
数码管0-9
sec1db0
sec2db0
min1db0
min2db0
mesdb42h
Old_0ADW0,0;
原中断向量
Old_8259DB0
stackssegment
db64dup(0)
stacksends
data,es:
data
start:
cli
moval,00110110b
movdx,p8253+3;
计数器0,工作在模式3
outdx,al
movax,2710h
movdx,p8253
moval,ah;
先赋高八位再赋低八位
moval,01110110b
计数器1,工作在模式3
movax,100
movdx,p8253+1
设置中断向量表
PUSHES
PUSHBX
MOVAl,0BH;
保护原中断向量,0B中断类型号
movah,35h
INT21H;
读中断向量表
MOVOld_0A+2,ES;
ES为段地址,BX为段偏移地址
MOVOld_0A,BX
POPBX
POPES
pushds
moval,0bh;
?
写新中断向量?
movah,25h
movdx,segINT_0A
movds,dx
movdx,offsetINT_0A
popds
moval,10000000b;
对8255进行设置,PB/PC输出
movdx,p8255+3
inal,p8259+1;
8259奇地址?
中断向量屏蔽
movold_8259,al;
字设置保护原屏蔽字
andal,11110111b;
开IRQ3
outp8259,al
sti;
开中断
play:
leabx,led;
led段码
movdl,sec1;
秒个位
movdh,0
movsi,dx
moval,[bx][si]
movdx,p8255+1;
点亮led
movah,00000001b
moval,ah
movdx,p8255+2;
pc输出选通信号
PUSHCX
MOVCX,00f00h;
延时
delay1:
LOOPdelay1
POPCX
movah,00000000b
movdl,sec2;
秒十位
movah,00000010b
PUSHCX
delay2:
LOOPdelay2
movdl,min1;
分个位
movah,00000100b
delay3:
LOOPdelay3
movdl,min2;
分十位
movah,00001000b
delay4:
LOOPdelay4
jmpplay
INT_0Aprocnear;
中断服务子程序
cmpsec1,9
jzint1
incsec1
jmpexit
int1:
movsec1,0
incsec2
cmpsec2,6
jnzexit
movsec2,0
incmin1
cmpmin1,10
movmin1,0
incmin2
cmpmin2,6
movmin2,0
exit:
moval,20h
out20h,al
iret
INT_0Aendp
endstart
8251的发送代码:
io8254aequ280h
io8251aequ2b8h
io8251bequ2b9h
mes1db'
youcanplayakeyonthekeybord!
'
0dh,0ah,24h
mes2ddmes1
assumecs:
movax,data
movds,ax
movdx,io8254a+3;
设置8254计数器0工作方式
moval,00010110b;
低字节,8位,方式3,二进制
outdx,al
movdx,io8254a
moval,52;
给8254计数器0送初值(波特率1200,因子16,计数初值52)
movdx,io8251b;
初始化8251
xoral,al
delay:
callout1
loopdelay
moval,40h;
向8251控制端口送40H,使其复位
callout1
moval,7eh;
设置为1个停止位,8个数据位,波特率因子为16
moval,27h;
向8251送控制字允许其发送和接收
waiti:
movdx,io8251b
inal,dx
testal,01;
发送是否准备好
jzwaiti
movdx,io8251a
moval,'
I'
outdx,al;
发送
nop
movcx,40h
s51:
loops51;
延时
testal,02;
检查接收是否准备好
jznext;
没有,等待
inal,dx;
准备好,接收
movdl,al
movah,02;
将接收到的字符显示在屏幕上
int21h
jmpwaiti
movah,4ch;
退出
out1procnear;
向外发送一字节的子程序
pushcx
movcx,40h
gg:
loopgg;
popcx
ret
out1endp
8250的发送代码
TRANSLATEFILES
stacksegmentparastack'
stack'
db256dup(0)
name0db64h
db64hdup(?
buffdw64hdup(?
codesegmentparapublic'
code'
startprocfar
code,ds:
movax,0
pushax
***********************************************************
movdx,3fbh;
3fbctrlregister
moval,80h;
movdx,3f8h
moval,60h
movdx,3f9h;
高位00低位60确定频率是1200达成匹配
moval,00
movdx,3fbh
moval,00011011b;
偶校验,一位停止位,8位数据
incdx;
设置MCR
moval,00001111b
shoufa:
movdx,3fdh;
读高位寄存器,判断是否接收好
inal,dx
testal,01h
jzshoufa
recv:
movdx,3f8h;
读数据
pushbx
movbx,0
movah,14;
显示
int10h
popbx
fa:
线路状态寄存器
testal,20h;
判断是否显示好,发出数据
jzfa
tr:
moval,'
movdx,3f8h
将发送的2显示
pushcx
nop
loopgg;
循环延迟
popcx
jmpshoufa
startendp
endstart
_
0809的代码
DATASEGMENT
INT0BDW2DUP(?
IMRDB?
P_ADDW280H
TABDB'
0123456789ABCDEF'
DATAENDS
SSEGMENTSTACK'
STACK'
DB128DUP(?
SENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
S
MAINPROCPAR
MOVAX,DATA
MOVDS,AX
CLI
修改中断向量表
MOVAH,35H;
保护原中断向量
MOVAL,0BH
INT21H
MOVINT0B,ES
MOVINT0B+2,BX
PUSHDS
PUSHDX
MOVDX,OFFSETDISP;
设置新的中断向量
MOVBX,SEGDISP
MOVDS,BX
MOVAX,250BH
POPDX
POPDS
8259清除0BH号中断屏蔽位
INAL,21H
MOVIMR,AL
ANDAL,0F7H
OUT21H,AL
启动AD转换
NEXT:
MOVDX,P_AD
MOVAL,0
OUTDX,AL
等待中断,并检测是否有按键
MOVCX,100
LOOP$
POPCX
STI
MOVAH,1
INT16H
JZNEXT
恢复8259中断屏蔽位
MOVAL,IMR
恢复中断向量表
MOVDX,INT0B
MOVDS,DX
MOVDX,INT0B+2
MOVAX,4C00H
MAINENDP
DISPPROCFAR
PUSHAX
MOVDX,P_AD;
读入AD转换结果
INAL,DX
MOVAH,0;
AH中为低位,AL中为高位
SHLAX,4
SHRAL,4
PUSHAX;
输出高位
MOVAL,AH
LEABX,TAB
XLATB
MOVDL,AL
MOVAH,2
POPAX
LEABX,TAB;
输出低位
MOVDL,0DH;
输出回车
MOVDL,0AH;
INT21H
MOVAL,20H
OUT20H,AL
IRET
DISPENDP
CODEENDS
ENDMAIN
0832的代码
ADD_DADW290H
LENDB32
DATA_INDB80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh
db0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h
db80h,66h,4eh,38h,25h,15h,09h,04h
db00h,04h,09h,15h,25h,38h,4eh,66h
DATA
MAINPROCFAR
MOVDX,ADD_DA
BEGIN:
MOVBH,LEN
LEASI,DATA_IN
MOVAL,[SI]
OUTDX,AL;
向DA送数据
INCSI
DECBH
MOVCX,1;
CMPBH,0;
一个周期已完成
JZBEGIN
MOVAH,1;
检测按键
MOVAH,4CH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北理工 微型计算机原理与接口 实验代码 四次全 微型计算机 原理 接口 实验 代码 四次
![提示](https://static.bingdoc.com/images/bang_tan.gif)