OUT 42H,AL AR: IN AL,62H MOV BL,00H AND AL,0CH SUB BL,AL JNZ AR LOOP ARR
MOV DL,04H ;设置循环次数,因为有四个人 MOV DH,01H ;设置判断赞成人数向量
RESULT:IN AL,60H MOV [DI],AL
INC DI MOV [DI],0
PDZC: TEST AL,DH JNZ ZC
GOON1: ROL DH,2 DEC DL JNZ PDZC INC DI MOV [DI],0 MOV DH,02H MOV DL,04H JMP PDFD ZC: INC [DI] JMP GOON1
PDFD: TEST AL,DH JNZ FD GOON2: ROL DH,2 DEC DL JNZ PDFD MOV AL,0 JMP QQ FD: INC [DI]
JMP GOON2
QQ: MOV AL,[DI] ADD AL,[DI-1] MOV AH,4H SUB AH,AL MOV [DI+1],AH ;读取A口状态,即投票结果,存入内存 ;指针加一,用来存放赞成人数 ;赞成人数清零 ;判断是否赞成 ;判断向量循环左移2位 ;循环次数减一
;不为0,检测下一个人是否赞成 ;指针加一,用来存放反对人数 ;反对人数清零 ;设置判断反对人数向量 ;设置循环次数
;赞成人数加一 ;继续检测 ;同上
;取反对人数 ;加上赞成人数
;用总人数减去反对加赞成,即为弃权人数 ;把弃权人数存到内存
DEC DI
LED: MOV CX,2H ;设置时间向量 MOV AL,70H ;设置亮第一盏灯 OUT 62H,AL
MOV BX,[DI-1] ;取出赞成人数 MOV BL,BH
AND BX,0FH ;BX存赞成人数 MOV AL,[SI+BX] ;从内存取7波段码值 OUT 61H,AL MOV AH,01H
WAI1: MOV AL,10110110B OUT 43H,AL MOV AL,0FH OUT 42H,AL MOV AL,0FH OUT 42H,AL
WAIT1: IN AL,62H MOV BL,00H AND AL,0CH SUB BL,AL JNZ WAIT1 LOOP WAI1 CMP AH,01H JE FLA2
CMP AH,02H JE FLA3 JMP FI
FLA2: MOV AL,0B0H OUT 62H,AL
MOV BX,[DI] MOV BL,BH AND BX,0FH MOV AL,[SI+BX] OUT 61H,AL MOV CX,2H MOV AH,02H JMP WAI1
FLA3: MOV AL,0D0H OUT 62H,AL
;8253计时 ;亮第二盏灯
;BX存反对人数 ;从内存取7波段码值 ;亮第三盏灯 MOV BX,[DI+1] MOV BL,BH
AND BX,0FH ;BX存弃权人数 MOV AL,[SI+BX] ;从内存取7波段码值 OUT 61H,AL
MOV CX,2H ;设置计时向量 MOV AH,03H ;设置跳转判断向量
JMP WAI1
FI: IN AL,60H ;检测8253的C口低4位状态 AND AL,3H
CMP AL,03H ;判断是否为1 JNZ LED ;不是则继续循环 MOV AL,0H ;是则灭灯 OUT 61H,AL
MOV AL,10010001B ;8255控制字 OUT 63H,AL MOV AL,20H
OUT 20H,AL CLI
IRET CODE ENDS END START
三、实习心得
1、一开始编完程序,觉得不太智能。如果一开始就把开关推上去的话也可以显示结果,但这样显然不是计时投票要达到的效果。所以我设置了只有在所有开关都置0的前提下才能投票。并且一开始我是设了一个计时,来显示结果。但是感觉设多少秒都不合适,于是改为手动终止,把K0,K1都置1算退出,这样一来就人性化了许多。
2、通过这个程序,我发现汇编语言结合硬件是很有意思的一件事情,生活中许多事情的神秘感都消失了。比如红绿灯的控制,LED数字显示等。一个很简单程序,你也可以把它编的很精彩。所以,只要肯下功夫,你一定可以收获不一样的成功。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库03742010021 张力文 微机原理与接口技术课程实习报告(7)在线全文阅读。
相关推荐: