有关于一个8086的程序设计
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
- sseg segment ;2023年11月5日 编辑人;YX
- dw 200 dup (?)
- sseg ends
- dseg segment
- num dw 0;初始化数字变量为0
- ;3种不同的灯光变幻组合
- data1 db 0FEh,0FCh,0F8h,0F0h,0E0h,0C0h,80h,00h,00h
- data2 db 00h,00h,0FFh,00h,0FFh,00h,0FFh,00h,80h,0C0h,0E0h,0F0h,0F8h,0FCh,0FEh,0FFh
- data3 db 7Eh,3Ch,18h,00h,0FFh,00h,0FFh,00h,0FFh,00h,18h,3Ch,7Eh,0FFh
- dseg ends
- cseg segment para public 'code'
- assume ss:sseg,cs:cseg,ds:dseg
- start:
- mov ax,dseg
- mov ds,ax
- mov dx,0206h ;取8255的控制端口的地址
- mov al,82h ;初始化8255的A口为输出模式,B口为输入模式
- out dx,al
- exut:
- mov num,0h
- mov dx,0200h ;取8255的端口A的地址
- mov aL,0FFh ;使8255的 PAO-PA7全为1
- out dx,al ;使所有的灯LED全灭
- begin:
- call ledflash ;调用灯光变幻过程
- mov num,0
- ret
- ledflash proc ;检测开关闭合,以便确定哪种闪烁方式
- mov dx,0202h ;取8255的端口B的地址
- in al,dx ;检测B口输入信号
- choice1:
- cmp al,0f7h
- jne choice2
- mov si,offset data1 ;置第一种灯光变幻组合
- jmp set
- choice2:
- cmp al,0efh
- jne choice3
- mov si,offset data2 ;置第二种灯光变幻组合
- jmp set
- choice3:
- cmp al,0dfh
- jne speed1
- mov si,offset data3 ;置第三种灯光变幻组合
- jmp set
- speed1: ;检测加速按键并设置cx的值
- cmp al,0fdh
- jne speed2
- mov cx,000fh ;设置较小的cx
- jmp here
- speed2: ;检测减速按键并设置cx的值
- cmp al,0fbh
- jne choice4
- mov cx,05ffh ;设置较大的cx
- jmp here
- choice4: ;每盏灯亮完检测开关,如果停止开关没有按下跳到choice5,如果停止开关按下灯全灭
- cmp al,0bfh
- jne choice5
- jmp exit
- choice5: ;检测num是否为0,若为0扫描开关,若不为0继续执行
- cmp num,0h
- jne set
- jmp ledflash
- set:
- mov cx,005fh ;设置初始cx
- jmp here
- here:
- mov bx,num
- mov al,[si+bx]
- mov dx,0200h ;取8255的端口A的地址
- out dx,al ;输出加电数据到端口A
- inc num ;改变数字变量的值
- cmp num,09h
- je exit
- dl4: mov bx,00ffh
- dl3: dec bx
- jnz dl3
- dec cx
- jnz dl4
- jmp ledflash
- exit:
- mov num,0
- ret
- ledflash endp
- cseg ends
- end start
复制代码
仿真程序:
8086设计--可控时间间隔且可变换闪烁方式的流水灯.zip
(135.8 KB, 下载次数: 10)
|