汇编设计Word格式文档下载.docx
《汇编设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编设计Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
A8254EQU06C0H;
计数器0的接口地址
CON8254EQU06C6H;
控制口
SSTACKSEGMENTSTACK
DW64DUP(?
)
SSTACKENDS
DATASEGMENT
TEMPWORDDW0000H;
放置当前要调的是哪一位
TEMPTDB01H,00H,00H;
临时数据
TIMEDB00H,00H,00H;
时(睡觉次数)、分、秒
DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;
定义16进制数字
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
PUSHSI
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETIRQ7;
取中断入口地址
MOVSI,00C4H;
中断矢量地址
MOV[SI],AX;
IRQ7的偏移矢量
MOVAX,CS;
段地址
MOVSI,00C6H
IRQ7的段地址矢量
CLI
POPSI
POPDS
;
初始化主片8259
MOVAL,11H
OUT20H,AL;
ICW1
MOVAL,08H
OUT21H,AL;
ICW2
MOVAL,04H;
IR2接口上接从片
ICW3
MOVAL,01H
ICW4
从片
MOVAL,11H
OUT0A0H,AL;
ICW1
MOVAL,30H
OUT0A1H,AL;
MOVAL,02H
ICW3,终端类型码是010,中断源是IR2
MOVAL,01H
MOVAL,0FDH
OCW1=11111101B,只有IR1不被屏蔽
MOVAL,6BH
主片8259,OCW1=01101101B
STI
时钟显示
MOVAX,DATA
MOVDS,AX
MOVSI,3000H
MOVAL,00H
MOV[SI],AL;
清显示缓冲
MOV[SI+1],AL
MOV[SI+2],AL
MOV[SI+3],AL
MOV[SI+4],AL
MOV[SI+5],AL
LEADI,TIME
MOVDX,MY8255_CON;
写8255控制字
MOVAL,81H;
C口低四位输入,A、B口输出
OUTDX,AL
计数器
PUSHDX
PUSHAX
MOVDX,CON8254
MOVAL,00110000B;
计数器0,16位计数,方式0,二进制
MOVDX,A8254
MOVAL,00H;
计数初值为18432(十进制)
OUTDX,AL;
写低8位
MOVAL,48H;
写高8位
POPAX
POPDX
BEGIN:
CALLDIS;
调用显示子程序
CALLCLEAR;
清屏
CALLCCSCAN;
扫描
JNZINK1
JMPBEGIN
INK1:
CALLDIS
CALLDALLY
CALLCLEAR
CALLCCSCAN
JNZINK2;
有键按下,转到INK2
;
确定按下键的位置
INK2:
MOVCH,0FEH
MOVCL,00H
COLUM:
MOVAL,CH
MOVDX,MY8255_A
OUTDX,AL
MOVDX,MY8255_C
INAL,DX;
IN为输入字节或字
L4:
TESTAL,08H;
isL4?
JNZNEXT
L4
ADDAL,CL
CALLSETIME;
清零
JMPCONTINUE
KCODE:
ADDAL,CL
CALLPUTBUF
CONTINUE:
PUSHAX
KON:
调用显示子程序
清屏
扫描
JNZKON
POPAX
NEXT:
INCCL;
次数加1
TESTAL,08H
JZKERR
ROLAL,1;
左移
MOVCH,AL
JMPCOLUM
KERR:
CCSCAN:
键盘扫描子程序
INAL,DX
NOTAL
ANDAL,0FH
RET
CLEAR:
MOVDX,MY8255_B;
清屏子程序
MOVAL,00H
DIS:
PUSHAX;
显示子程序
MOVSI,3000H
MOVDL,0DFH
MOVAL,DL
AGAIN:
PUSHDX
MOVAL,[SI]
MOVBX,OFFSETDTABLE
ANDAX,00FFH
ADDBX,AX
MOVAL,[BX]
MOVDX,MY8255_B
INCSI
TESTAL,01H
JZOUT1
RORAL,1
MOVDL,AL
JMPAGAIN
OUT1:
DALLY:
PUSHCX;
延时子程序
MOVCX,0006H
T1:
MOVAX,009FH
T2:
DECAX
JNZT2
LOOPT1
POPCX
PUTBUF:
PUSHDI
MOVSI,DI;
存键盘值到相应位的缓冲中
MOV[SI],AL
DECDI
CMPDI,2FFFH
JNZGOBACK
GOBACK:
POPDX
RET
SETIME:
LEASI,TEMPT
MOVAH,01H
MOV[SI],AH
LEASI,TEMPWORD
L43:
只有分、秒置0
MOVAH,00H
MOV[SI+1],AH
MOV[SI+2],AH
SETIMEND:
IRQ7:
STI;
中断服务子程序,自动修改时间
计数器0?
16位计数,方式0,二进制
计数器初值是18432(十进制)
MOVDL,00111100B
MOVCL,00000101B
MOVDH,10011001B
LEASI,TIME
MOVAL,[SI+2];
秒数
ADDAL,01H
DIVDL;
取模60
MOV[SI+2],AH;
AH=余数(D),装回去
MOVAH,[SI+1];
分钟
ADDAL,AH;
AL=秒位的进位(0或1),分+1或0
DIVCL;
取模5
MOV[SI+1],AH;
AH=模(余数),装回去
MOVAH,[SI];
小时
ADDAL,AH;
取分位进位
MOVAH,00H;
防止混
DIVDH;
取模99
MOV[SI],AH;
模(余数)=新时间,装回去;
将时钟时间写入到6个内存块中
MOVDL,00001010B;
=10
MOVAX,0000H
MOVAL,[DI+2];
读取秒
DIVDL
MOV[SI],AH;
放余数
MOV[SI+1],AL;
放商
MOVAL,[DI+1];
读取分
MOV[SI+2],AH
MOVAL,[DI];
读取睡觉次数(小时)
MOV[SI+4],AH
MOV[SI+5],AL
MOVAL,20H
OUT0A0H,AL
中断结束命令
IRET
CODEENDS
ENDSTART
七、实验结果:
1、已实现功能:
记录时间和睡觉次数,并通过8段数码管显示
设置复位键,按下复位键使时间清零,而睡觉次数不会清零。
2、未实现功能:
定时报警功能和同时亮灯闪烁功能。
实验心得:
经历了一周的课程设计,我感慨颇多,我认识到自己学到的知识在实践中的应用,课程设计中每一天遇到的情况还在我脑海里回旋,它给我带来了意想不到的效果。
课程设计是运用所学知识实践自我的最好途径。
亲身实践,而不是闭门造车。
实现了从理论到实践再到理论的飞跃。
增强了认识问题,分析问题,解决问题的能力。
为学习知识,锻炼能力,打下了良好的基础。
同时还需我们在以后的学习中用知识武装自己,用书本充实自己,为以后工作打下更坚固的基础!
通过这次的课程设计,我认清了自己的位置,发现了自己的不足,对课本上的知识有了更深层次的理解。
这让我认识到自身努力学习知识并将之与具体设计相结合的重要性。