江苏大学微机原理与接口技术报告.docx
- 文档编号:5372510
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:13
- 大小:35.82KB
江苏大学微机原理与接口技术报告.docx
《江苏大学微机原理与接口技术报告.docx》由会员分享,可在线阅读,更多相关《江苏大学微机原理与接口技术报告.docx(13页珍藏版)》请在冰豆网上搜索。
江苏大学微机原理与接口技术报告
微机原理与接口技术课程设计
——数据采集
班级网络1101
学号3110610007
姓名平淑容
指导老师马学文
二零一四年一月十一号
1.任务要求……………………………………………..P2
2.系统硬件原理………………………………………...P2
3.流程图………………………………………………...P3
4.程序代码及注释……………………………………..P6
5.总结…………………………………………………..P13
一、任务要求
先通过键盘矩阵设置压力的最大值和最小值并在数码管上显示出来(其中A键表示设置最小值,B键表示设置最大值),然后对一路压力信号进行连续8次数据采集,将8次数据的平均值与所设置的极限值作比较,在其范围之内就在数码管上显示,超出范围则是一个二极管发光。
二、系统硬件原理
本次试验所需要用到的硬件及其原理与使用如下:
(1)拨码开关:
将拨码开关SW2拨上。
表示将GAL20V8的地址输入A-5接至系统地址线A5;A-6接至地址线A6;A-7接至地址线A7。
(2)压力实验模块的“压力输出”端接至ADC0809的输入端IN0
(3)0809的EOC的输出端与8259的IRQ0端相连,0809的CS连CS8(3E0H)。
(4)8259的片选CS-1连地址输出CS6(3A0H),8259的INT1连总线输入INTR,8259模块的INT-A连总线的INTA,8259的SP/1连+5V。
(5)8255并行模块下方的4个片选信号CS-1、CS-2、CS-3和CS-4分别与地址译码输出模块的对应引脚(实验箱中部的CS-1、CS-2、CS-3和CS-4)连接。
(6)将一个二极管与第四片8255A的A口连接,该二极管用于报警,当8次压力值的平均值在所设范围之内则熄灭,超出范围二极管便亮。
(7)74系列模块中开放的3根输出信号和4根输入信号对键盘进行控制。
键盘的行信号Q_0、Q_1、Q_2、Q_3分别与开放的输入信号Q0、Q1、Q2、Q3相连,键盘的列信号P_0和开放的输出信号P0相连,片选信号CS2接CS2(320H)。
如按上述连线,则8255的A口、B口、C口和控制口地址分别是200H、204H、208H、20CH;8259的奇地址是3A8H,偶地址是3A0H。
三、流程图
Y
按键子程序模块
返回主程序
中断服务程序模块:
N
四、程序代码及注释
.486p
PORT2EQU320H;(CS2=320H)键盘的输入输出地址为320H
DATASEGMENTUSE16AT0
ORG1000H
MAXDB?
;用于存放压力值的最大值
MINDB?
;用于存放压力值的最小值
DIGITSDB3DUP(?
);用于存放输入的三次按键值
PBUFFERDB8DUP(?
);用于存放8次采集的压力值
COUNTDB?
DATAENDS
CODESEGMENTUSE16
ASSUMECS:
CODE,DS:
DATA
ORG1500H
BEG:
JMPSTART
SEVENCODDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H0A1H,86H,8EH;0~F的共阴极七段代码
KEYCODDB0EEH,0DEH,0BEH,0EDH,0DDH,0BDH,0EBH,0DBH,0BBH,
0E7H,D7H,0B7H;12个按键的键码
KEYVALDB0AH,0BH,0,1,2,3,4,5,6,7,8,9;12个按键的键值
GESHUDB8
CHUDB16
START:
MOVEAX,60000000H
MOVCR0,EAX
MOVAX,DATA
MOVDS,AX
MOVDX,20CH
MOVEAX,80808080H;四片8255的初始化
OUTDX,EAX
MOVDX,200H
MOVEAX,0FFFFFFFFH;四片8255A的A口的初始化,全灭
OUTDX,EAX
LEABX,sevencod
;初始化
MOVMIN,0
MOVMAX,255
;将最小值输出
MOVAL,MIN
MOVAH,0
MOVCL,16;转换成十六进制
DIVCL
XLAT
MOVDX,200H;第一片8255A的A口显示商
OUTDX,AL
XCHGAH,AL
XLAT
MOVDX,204H;第一片8255A的B口显示余数
OUTDX,AL
;将最大值输出
MOVAL,MAX
MOVAH,0
MOVCL,16
DIVCL
XLAT
MOVDX,201H
OUTDX,AL
XCHGAH,AL
XLAT
MOVDX,205H
OUTDX,AL
;初始化8259
MOVDX,3A0H
MOVAL,13H;单片要写ICW4。
D4必须为1
OUTDX,AL;ICW1
MOVDX,3A8H
MOVAL,08H;中断类型号为08H
OUTDX,AL;ICW2
MOVAL,05H;主片,非自动结束中断,
OUTDX,AL;ICW4
;初始化中断向量表
MOVAX,OFFSETPIC;中断服务程序的偏移地址
MOVBX,20H;中断类型号为08H(20H=08H*4)
MOV[BX],AX;偏移地址写入向量表
MOVAX,SEGPIC;中断服务程序段地址
MOV[BX+2],AX;段地址写入中断向量表
MOVDX,3A8H
MOVAL,0FEH
OUTDX,AL;OCW1;开放IRQ0(IRQ0=0)
STI;开中断
;按键部分
NEXT1:
CALLSCANKEY;AL返回键面值
CMPAL,-1
JZTWO;连续转换8次显示平均值,并判断是否报警
CMPAL,0AH
JNZISB
;处理A键,循环调用三次子程序
MOVCX,3
LEASI,DIGITS
NEXT6:
CALLSCANKEY
CMPAL,0FFH;判断是否有按键
JZNEXT6
MOV[SI],AL;将键面值存入缓存区
INCSI
LOOPNEXT6
;组合数值
LEASI,DIGITS
MOVAL,[SI]
MOVAH,0
MOVBL,100
MULBL
MOVDL,AL
INCSI
MOVAL,[SI]
MOVBL,10
MULBL
ADDDL,AL
INCSI
MOVAL,[SI]
ADDDL,AL
MOVMIN,DL
LEABX,SEVENCOD
MOVAL,MIN
MOVAH,0
MOVCL,16
DIVCL
XLAT
MOVDX,200H
OUTDX,AL
XCHGAH,AL
XLAT
MOVDX,204H
OUTDX,AL
JMPNEXT5
ISB:
CMPAL,0BH
JNZNEXT5
;处理B键
MOVCX,3
LEASI,DIGITS
NEXT7:
CALLSCANKEY
CMPAL,0FFH
JZNEXT7
MOV[SI],AL
INCSI
LOOPNEXT7
;组合数值
LEASI,DIGITS
MOVAL,[SI]
MOVAH,0
MOVBL,100
MULBL
MOVDL,AL
INCSI
MOVAL,[SI]
MOVBL,10
MULBL
ADDDL,AL
INCSI
MOVAL,[SI]
ADDDL,AL
MOVMAX,DL
LEABX,SEVENCOD
MOVAL,MAX
MOVAH,0
MOVCL,16
DIVCL
XLAT
MOVDX,201H
OUTDX,AL
XCHGAH,AL
XLAT
MOVDX,205H
OUTDX,AL
JMPNEXT5
TWO:
LEABX,PBUFFER
MOVCOUNT,0
MOVDX,3E0H;0809的地址
RE:
OUTDX,AL;用ADC0809采集8次压力值
CALLDELAYINT
CMPCOUNT,7
JBERE
LEABX,PBUFFER
MOVCX,8
XORAX,AX
COUNT0:
ADDAL,[BX];将8次压力值相加求平均值
ADCAH,0
INCBX
LOOPCOUNT0
DIVGESHU
MOVCL,AL
MOVAH,0
DIVCHU
LEABX,SEVENCOD
XLAT
MOVDX,202H;第三片8255A的A口显示商
OUTDX,AL
XCHGAH,AL
XLAT
MOVDX,206H
OUTDX,AL
CMPCL,MIN
JBBAO
CMPCL,MAX
JABAO;
MOVAL,0FFH;在范围之内则灭
MOVDX,203H
OUTDX,AL
JMPNEXT5;判断是否超出范围并报警
BAO:
MOVAL,00H
MOVDX,203H;第四片8255A的A口控制二极管
OUTDX,AL
CALLDELAYINT
NEXT5:
JMPNEXT1
;按键部分子程序
SCANKEYPROC
PUSHDX;保护现场
PUSHCX
PUSHBX
PUSHSI
PUSHDI
MOVDX,PORT2
WT:
MOVAL,00H;键盘矩阵列端口送出全0
OUTDX,AL
INAL,DX;(粗扫描)若无键按下转至EXIT执行,否则顺序执行
ANDAL,0FH;高四位清零(与运算)
CMPAL,0FH;判断有无按键
JZEXIT;等于0则没有按键
NOP;有按键按下,延时消抖
NOP
INAL,DX
ANDAL,0FH
CMPAL,0FH
JZEXIT
MOVCX,3;(细扫描)开始对每一列进行逐列扫描
MOVBL,0FEH;第一列输入为0
NEXT:
MOVAL,BL
OUTDX,AL
NOP
NOP
INAL,DX
ANDAL,0FH
CMPAL,0FH
JNZKEY
ROLBL,1;循环左移一位指向下一列
LOOPNEXT
JMPEXIT;按键过早释放,可能导致无法识别
KEY:
SHLBL,4;列键值左移四位
ORAL,BL;AL高四位清零,第四位为行键值,或运算形成键码LEASI,KEYCOD;12个按键的键码
LEADI,KEYVAL;12个按键的键值
MOVCX,12;12个按键依次比较
NEXT2:
CMPAL,[SI]
JZFIND
INCSI
INCDI
LOOPNEXT2
JMPEXIT;本程序不支持多个按键同时按下
FIND:
MOVAL,[DI];AL中内容为所按键的键面值
PUSHAX
WAIT1:
INAL,DX;若按键没释放则等待,否则返回WT识别下次按键
ANDAL,0FH
CMPAL,0FH
JNZWAIT1
POPAX
JMPQUIT
EXIT:
MOVAL,-1
QUIT:
POPDI;恢复现场
POPSI
POPBX
POPCX
POPDX
RET
SCANKEYENDP
;延时子程序
DELAYINTPROC
PUSHCX
MOVCX,2048
LOOP$
POPCX
RET
DELAYINTENDP
;采集8次压力值的中断服务子程序
PICPROCFAR
PUSHDX;保护现场
PUSHAX
INAL,DX
MOV[BX],AL
INCBX
INCCOUNT
MOVDX,3A0H;8259的地址
MOVAL,20H;发EOI命令关中断
OUTDX,AL;关中断
POPAX;恢复现场
POPDX
IRET;中断返回
PICENDP
CODEENDS
ENDBEG
五、总结
这次课程设计所遇到的问题以及解决办法如下:
1在键盘按键部分一开始,全速运行时按了A键之后,再按三次键的时候总是显示错误的结果,后来发现原因在于第一次按键A键时可能硬件扫描太快,继续将A作为数据保存。
解决的办法:
在调用子程序之后应该加以判断所按键的键值是否在0~9之间,若超过则丢弃无效,这部分程序因为时间紧急并未加进去。
2在行扫描过程中让第一列为零之后进行下一列的扫描时,不会转换,解决的办法是先保存列值,将列值循环左移一位得道下一列为0时的列值。
得到了行值和列值之后不会形成键码,解决的办法是现将列值左移4为,在于高四位清零了的行值经行或运算
3在调试按键子程序的时候总是丢失原先的寄存器里面的内容,原因在于在写子程序之前没有保护现场使得数据丢失,后来通过压栈保护现场,出栈恢复现场之后能运行出结果
4输入三次按键值之后保存在缓存区中,通过运算形成十进制数之后转变成十六进制的过程无法成功,原因在于我将8位数扩展到了16位,进行除运算的时候,DX里面的内容会被清零,只用8位的DL进行运算时便不会出错了。
5报警部分开始是想在每次调用中断程序的时候进行判断报警,后来发现难于实现,便改成了在求得平均值之后与所设置的压力极限值比较,超出范围并报警。
6调用中断服务程序的时候只能执行一次,不能执行同级的中断请求,原因在于在中断服务程序中没有发送EOI命令,不发送EOI命令则程序只会执行一次中断,不能执行同级的中断服务请求。
7在写8次压力采集时误以为中断服务子程序是通过代码来实现的,后来明白是硬件直接去调用0809进行AD转换的,即将压力值转换成一串二进制数
8在运行0809AD转换的时候总是太快看不到现象,解决办法是增加延时子程序,调用延时子程序可以看到运行现象。
9在课设时总会有硬件的问题,解决办法是同通过I/0检测判断键盘,数码管是否正常。
这次的课程设计我通过询问老师,同学,自己翻阅教材,完成了按键部分,但压力采集部分是参考的资料实现的,虽然时间很短但却让我对汇编语言有了更深刻的学习,在程序中形成十进制部分,我一开始写的是MUL100后来发现编译的时候出错了,原来MUL后不可以直接写立即数,需通过寄存器,后来我改成了MOVBL,100MULBX便成功了。
细心谨慎才能成功,这也是这次课设我所领悟到的,最后,感谢在课设给我帮助的马老师和同学们。
兰亭序
永和九年,岁在癸丑,暮春之初,会于会稽山阴之兰亭,修禊事也。
群贤毕至,少长咸集。
此地有崇山峻岭,茂林修竹;又有清流激湍,映带左右,引以为流觞曲水,列坐其次。
虽无丝竹管弦之盛,一觞一咏,亦足以畅叙幽情。
是日也,天朗气清,惠风和畅,仰观宇宙之大,俯察品类之盛,所以游目骋怀,足以极视听之娱,信可乐也。
夫人之相与,俯仰一世,或取诸怀抱,晤言一室之内;或因寄所托,放浪形骸之外。
虽取舍万殊,静躁不同,当其欣于所遇,暂得于己,快然自足,不知老之将至。
及其所之既倦,情随事迁,感慨系之矣。
向之所欣,俯仰之间,已为陈迹,犹不能不以之兴怀。
况修短随化,终期于尽。
古人云:
“死生亦大矣。
”岂不痛哉!
每览昔人兴感之由,若合一契,未尝不临文嗟悼,不能喻之于怀。
固知一死生为虚诞,齐彭殇为妄作。
后之视今,亦犹今之视昔。
悲夫!
故列叙时人,录其所述,虽世殊事异,所以兴怀,其致一也。
后之览者,亦将有感于斯文。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 江苏 大学 微机 原理 接口 技术 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)