微机原理与汇编语言实验78255并行接口实验说课材料Word下载.docx
《微机原理与汇编语言实验78255并行接口实验说课材料Word下载.docx》由会员分享,可在线阅读,更多相关《微机原理与汇编语言实验78255并行接口实验说课材料Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
CS0↔CS8255;
PA0~PA7↔平推开关的输出K1~K8;
PB0~PB7↔发光二极管的输入LED1~LED8。
2)编程并全速或单步运行。
3)全速运行时拨动开关,观察发光二极管的变化。
当开关某位置于L时,对应的发光二极管点亮,置于H时熄灭。
3、实验结果
程序全速运行后,逻辑电平开关的状态改变应能在LED上显示出来。
例如:
K2置于L位置,则对应的LED2应该点亮。
3、实验源码及框图
assumecs:
code
codesegmentpublic
org100h
start:
movdx,04a6h;
控制寄存器地址
movax,90h;
设置为A口输入,B口输出
outdx,ax
start1:
movdx,04a0h;
A口地址
inax,dx;
输入
movdx,04a2h;
B口地址
outdx,ax;
输出
jmpstart1
codeends
endstart
4、练习
键盘接口实验。
请阅读实验指导手册,根据实验台键盘电路结构,设计实验,编制程序实现键盘的按键识别,并将其代码通过Led指示灯显示。
练习键盘框图:
实验源码:
assumecs:
codesegmentpublic
org100h
Timer=10;
延时常量
;
设置行线接输出端口,列线接输入端口
movdx,04a6h;
控制端写控制字,设置为A口输入,B口输出
moval,90h
outdx,al
Wait:
moval,00h
movdx,04a2h
outdx,al;
往所有行线上输出低电平
movdx.04a0h
inal,dx;
读取列值
cmpal,0ffh;
是否有列线为低电平
jzwait;
否,则循环等待
done:
calldelay;
是,则延迟去抖动
movcx,8;
行数送CX
key2:
moval,0
movdx,04a2h;
B口作为输出
设置行线全为低
movdx,04a0h;
A口作为输入
读取列值
cmpal,0ffh
jzkey2;
无闭合键,循环等待
pushax;
有闭合键,保存列值
pushax
设置行线接输入端口,列线接输出端,A口输出,B口输入
movdx,04a6h
moval,82h
A口输出
popax
outdx,al;
输出列值
B口输入
读取行值
popbx;
组合行列值
movah,bl;
此时,al=行值,ah=列值
movsi,offsettable;
table保存键盘行列值
movdi,offsetchar;
char保存键代码值
movcx,24;
cx=键的个数
key3:
cmpax,[si];
与键值比较
jzkey4;
相同,说明查到
incsi;
不相同,继续比较
incsi
incdi
loopkey3
jmpstart;
全部比较完无相同则再进行扫描一遍
jmpwait;
全部比较完,仍无相同,说明是重键
key4:
moval,[di];
获取键代码送AL
pushax
判断按键是否释放,没有则等待
按键释放,延时消除抖动
后续处理
将代码值输给小灯
movax,0080h;
设置C口输出
outdx,ax
movdx,04a4h;
将键代码从C口输出送给小灯
delayproc
pushbx
pushcx
movbx,timer;
外循环次数由timer确定
delay1:
xorcx,cx
delay2:
loopdelay2;
内循环
decbx
jnzdelay1
popcx
popbx
ret
delayendp
键盘的行列值表
tabledw0fefeh;
键1的行列值(键值)
dw0fefdh;
键2的行列值
dw0fefbh;
键3的行列值
dw0fe07h;
键4的行列值
dw0feefh;
键5的行列值
dw0fedfh;
键6的行列值
dw0febfh;
键7的行列值
dw0fe7fh;
键8的行列值
dw0fdfeh;
键9的行列值
dw0fdfdh;
键10的行列值
dw0fdfbh;
键11的行列值
dw0fd07h;
键12的行列值
dw0fdefh;
键13的行列值
dw0fddfh;
键14的行列值
dw0fdbfh;
键15的行列值
dw0fd7fh;
键16的行列值
dw0fbfeh;
键17的行列值
dw0fbfdh;
键18的行列值
dw0fbfbh;
键19的行列值
dw0fb07h;
键20的行列值
dw0fbefh;
键21的行列值
dw0fbdfh;
键22的行列值
dw0fbbfh;
键23的行列值
dw0fb7fh;
键24的行列值
……;
S25、S26其他键的行列值
键盘的键代码表
chardb30h;
键1的代码值
db31h;
键2的代码值
db32h;
键2的代码值
db33h;
键3的代码值
db34h;
键4的代码值
db35h;
键5的代码值
db36h;
键6的代码值
db37h;
键7的代码值
db38h;
键8的代码值
db39h;
键9的代码值
db41h;
键A的代码值
db42h;
键B的代码值
db43h;
键C的代码值
db44h;
键D的代码值
db45h;
键E的代码值
db46h;
键F的代码值
db61h;
键a的代码值
db62h;
键b的代码值
db63h;
键c的代码值
db64h;
键d的代码值
db65h;
键e的代码值
db66h;
键f的代码值
db67h;
键g的代码值
db68h;
键h的代码值
S25、S26其他键的代码值
实验现象:
按相应的键,LED灯会显示相应的代码。
5、实验总结
1)通过本次实验我掌握了8255A的工作方式以及初始化编程方式,还有键盘的工作原理。
2)8255A有3种工作方式,A、B、上C口、下C口均可工作与基本的输入输出方式,A、B口可以工作于选通输入输出方式,此时C口提供握手信号,只有A口可以工作于双向选通的传送方式下。
3)在本次实验的练习中,我的键盘的用的是反转法,这种方法比扫描法的效率更高,无论哪种方法其基本的原理均是利用控制线为低,读取检测线来识别闭合键的。
反转法识别按键需要一个条件就是:
连接行线和列线的接口电路必须支持动态改变输入、输出方式,而8255A的3个端口就具有这个功能。
但是扫描法不需要这个条件。