8255,8253,8259应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;南京信息工程大学
;季老师
;《微机原理实验课》
;年年如此,大同小异,本学长为了造福学弟学妹,特献此程序,望可省大量时间学习探索跟上时代潮流之知识,不可作茧自缚,8086CPU已经太low了。
;8253,8255,8259应用,每2s扬声器发出滴一声,同时输出1个字符,按‘n’或者‘N’结束程序
;已修正在低版本masm.exe编译软件phase error between the passes的错误问题
TITLE zuoye
DATA SEGMENT
DISCHAR DB 03H,'$' ;03H是个桃心字符,更改此处可以更改输出字符样式
PortB EQU 61H
TimePort0 EQU 40H
TimePort2 EQU 42H
TimePortCtr EQU 43H
DATA ENDS
STACK SEGMENT
DUIZHAN DB 20 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
PUSHF
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX,DATA
MOV DS,AX
CLI ;关中断
IN AL,PortB
AND AL,00H
OUT PortB,AL ;关闭发声
MOV AL,0B6H ;计数器2,方式3,写两个字节,二进制计数
OUT TimePortCtr,AL
MOV AX,04A9H ;初始值为4A9H,大约1KHz
OUT TimePort2,AL
MOV AL,AH
OUT TimePort2,AL
MOV AL,36H
OUT TimePortCtr,AL
MOV AX,0E90BH ;50ms*1193.182kHz
OUT TimePort0,AL
MOV AL,AH
OUT TimePort0,AL
MOV AX,SEG INT0
MOV DS,AX
MOV DX,OFFSET INT0
MOV AH,25H
MOV AL,08H
INT 21H
IN AL,21H
AND AL,0FEH
OUT 21H,AL
MOV CX,0 ;CX计数清零
STI ;初始化完,可以开中断
;等待键盘输入,同时在等待过程中会有定时中断产生
WAITING:
MOV AH,01H
INT 16H
JZ WAITING
MOV AH,00H
INT 16H
CMP AL,'n'
JZ ENDD
CMP AL,'N'
JNZ WAITING
JMP ENDD
INT0:
INC CX
CMP CX,40 ;如果为40次
JZ BEEP
CMP CX,10
JNZ NEXT
IN AL,PortB ;PB的端口地址
AND AL,00H
OUT PortB,AL ;关闭发声
JMP NEXT
BEEP:
;显示一个字符
MOV CX,0
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET DISCHAR
MOV AH,09H
INT 21H
;发出声音
IN AL,PortB ;PB的端口地址
OR AL,03H
OUT PortB,AL ;直接控制发声
NEXT:
MOV AL,20H
OUT 20H,AL
IRET
ENDD:
IN AL,PortB ;PB的端口地址
AND AL,00H
OUT PortB,AL ;关闭发声
IN AL,21H
OR AL,01H
OUT 21H,AL
STI
POP DX
POP CX
POP BX
POP AX
POPF
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START