微机原理与接口技术课程设计
开始初始化8255设置时间向量地址设置时间初值N显示时间子程序显示到最后一位 Y时间判断子程序返回
图 3-1主程序流程图
8
微机原理与接口技术课程设计
时间判断子程序返回显示子程序N是否显示30次 YN返回设置时间初值PC7是否为0 Y秒的个位+1N分十位是否为1Y分个位是否为5NYN分个是否大于5YN分个位大于6调用柔和报警程序调用急促报警调用尖叫报警 Y调用急促报捷程序时间进位控制
图 3-2判断时间控制流程图
9
微机原理与接口技术课程设计
时间进位控制返回设置间隔N秒个位是否10 Y秒十位加1个位清零返回设置间隔N秒十位是否为6 Y秒十位清零分个位加1 Y返回设置间隔N分个位为10 Y分个位清零分十位加1返回设置间隔
图 3-3进位判断
10
微机原理与接口技术课程设计
out dx,al 3) 控制程序
mov dx,pc_add .MODEL TINY
mov al,11111111b pcibar3 equ 1ch ;8位i/o空间
out dx,al 基地址(它就是实验仪的基地址, 也
mov si,offset tim 为dma & 32bitram板卡上的8237提
;设置tim的偏移地址于si中 供基地址)
vendor_id equ 10ebh ;厂商id号 init: mov ah,1
device_id equ 8376 ;设备id号
.stack 100
.data
io_bit8_baseaddress dw ?
msg0 db 'bios不支持访问pci $'
msg1 db '找不到star pci9052板
卡 $'
msg2 db '读8位i/o空间基地址时
出错$'
com_add dw 00f3h ;控制口偏移
量
pa_add dw 00f0h ;pa口偏移量
pb_add dw 00f1h ;pb口偏移量
pc_add dw 00f2h ;pc口偏移量 .code
Light db
3fh,06h,5bh,4fh,66h,6dh,7dh,07h,
7fh,6fh ;存储表示数字的各
段选码分别表示为0-9
tim db 00h,00h,00h,00h
;存储要显示的四个时间量
start: mov ax,@data
mov ds,ax
nop
call initpci
call modifyaddress ;根
据pci提供的基地址,将偏移地址转化
为实地址
main: mov dx,com_add
;写8255a方式控制字
mov al,88h
;设置端口a为工作方式0输
出端口
mov al,10001000b
;pc4为输入,pc3到pc0为输
出;端口b 为输出并工作在方式0
1
mov [si],ah mov [si+1],ah mov [si+2],ah mov [si+3],ah go: mov ah,30 ;设置一秒钟循环显示的次数 ctrl: mov di,offset tim+3 mov cl,11111110b ;位选码 disp: mov al,[di] mov bx,offset light xlat mov dx,pb_add ;写入端口b out dx,al ;将从light空间内读取的段选码输入到端口b
mov al,cl mov dx,pa_add out dx,al ;将位选码送入端口a call delay ;调用延时子程序cmp cl,11110111b jz timing dec di rol cl,1 jmp disp ;重新显示下一位 guodu: jmp go timing: dec ah jnz ctrl ;若一秒未显示30次则转向以上显示四个时间量的程序显示30次 mov dx,pc_add ;判断c口开关端口pc7输入是否为0 in al,dx test al,10000000b jnz init ;复位 mov al,0
相关推荐: