找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4689|回复: 2
打印 上一主题 下一主题
收起左侧

基于8086的八路抢答器仿真与源码

[复制链接]
跳转到指定楼层
楼主


8086芯片八路抢答器仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


8086抢答器源程序如下:
  1. ;$CS$ $A1$ $A0$
  2. ;  1    1    1  控制端口
  3. ;  1    0    0  数据A
  4. ;  1    0    1  数据B
  5. ;  1    1    0  数据C

  6. C8255 EQU 306H                ;0011 0000 0110b
  7. IPA EQU 300H                ;0011 0000 0000b
  8. IPB EQU 302H                ;0011 0000 0010b
  9. IPC EQU 304H                ;0011 0000 0100b

  10. A8255 EQU 206H                ;0010 0000 0110b
  11. APA EQU 200H                ;0010 0000 0000b
  12. APB EQU 202H                ;0010 0000 0010b
  13. APC EQU 204H                ;0010 0000 0100b

  14. C8253 EQU 106H                ;0001 0000 0110b
  15. CPA EQU 100H                ;0001 0000 0000b
  16. CPB EQU 102H                ;0001 0000 0010b
  17. CPC EQU 104H                ;0001 0000 0100b

  18. data segment
  19.         ;blank DD 255 DUP(?)
  20.         LED DW 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
  21.         HH  DW 00H
  22.         HL  DW 00H
  23.         LP  DW 0H
  24.         MS  DW 0H
  25.         sxh dw 0h,?,?
  26.         sss dw 0h,?,?
  27.         keydata db 0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,07fh        ;0 ~ 7扫描码
  28.         segdata db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h
  29.         flag         db 0                ; 0 ~ F 对应字符代码
  30.         zj          db 00111111b
  31.         tmp     db 00111111b
  32. data ends

  33. code        segment 'code' ;定义代码段
  34.         assume cs:code,ds:data



  35. main proc far
  36.        
  37. start:       
  38.         mov ax,data        ;建立DS段地址
  39.         mov ds,ax

  40.         xor ax,ax
  41.         mov es,ax
  42.        
  43.         mov ax,offset IT
  44.         mov es:[8H],ax
  45.       
  46.         mov ax,seg IT
  47.         mov es:[0AH],ax
  48.                
  49. ;**********************************初始化C8255       
  50. LL:
  51.         mov        dx,306H       
  52.         mov al,92h
  53.         out dx,al
  54.         mov dx,304h
  55.         mov al,0FFh
  56.         out dx,al
  57. ;**********************************程序初始化
  58. L:
  59.         mov dx,302h
  60.         in al,dx
  61.         cmp al,0ffh
  62.         jz L
  63.         call delay10
  64.         cmp al,011111110b        ;判断是不是按下开始键
  65.         jz  L1               
  66.         jmp L
  67. ;**********************************复位(目前貌似没啥用了)
  68. L3:       
  69.         mov dx,IPC
  70.         mov al,011000000b
  71.         out dx,al                ;数码管复位为0
  72.        
  73. ;***********************************开始 数码管显示为0
  74. L1:       
  75.         mov dx,304h
  76.         mov al,0c0h
  77.         mov flag,0
  78.         nop


  79. ;***********************************初始化A8255并进行按键检测       
  80. AGAIN:
  81.         mov dx,0206h
  82.         mov al,92h
  83.         out dx,al
  84.         mov dx,0204h
  85.         mov al,0c0h
  86.         out dx,al
  87.         mov dx,0302h
  88.         in al,dx
  89.         cmp al,7fh
  90.         jz L3
  91.         cmp al,0F7h
  92.         jz LL

  93.         mov dx,0300h
  94.         in al,dx
  95.         cmp al,0FFh
  96.         jz AGAIN

  97.         call delay10                ;延时防抖动
  98.         in al,dx
  99.         cmp flag,1                ;按下键后,判断flag是否为1
  100.         jz AGAIN

  101.         inc flag
  102.         mov bx,0
  103. ;**********************************根据按下的值查表
  104. GKEY:
  105.         mov ah,keydata[bx]
  106.         cmp al,ah
  107.         jz         DISP
  108.         inc bl
  109.         LOOP GKEY
  110. ;**********************************再查表并显示抢答的一组
  111. DISP:
  112.         inc bl
  113.         mov al,segdata[bx]
  114.         mov dx,IPC
  115.         not al
  116.         out dx,al
  117.         mov tmp,al
  118.         mov dx,IPB
  119. ;*********************************延时等待计时
  120. waits:
  121.         call delay10
  122.         in al,dx
  123.         cmp al,11011111b        ;判断是不是按下计时键
  124.         jz L4
  125.         jmp waits
  126. ;*********************************开始计时,计时完跳回程序最初位置
  127. L4:       
  128.         ;mov sss,1h
  129.         call jishi
  130.         ;mov sss,0h
  131.         jmp start
  132. ;********************************延时循环
  133. loop1:
  134.         loop $
  135.         loop AGAIN

  136. main endp

  137. jishi proc
  138. ;*********************************初始化
  139.         mov dx,A8255    ;选中控制寄存器   ***
  140.         mov al,80H   ;命令字 10000000
  141.         out dx,al    ;初始化8255
  142.       
  143.         mov dx,C8253   ;00010110  ;8253    ***
  144.         mov al,00010100B
  145.         out dx,al      
  146.       
  147.         mov ax,03E8H        

  148.         mov dx,CPA                ;****
  149.         mov al,0H
  150.         out dx,al

  151.         mov dx,C8253   ;001000        *****
  152.         mov al,00100100B
  153.         out dx,al

  154.         mov dx,CPA   ;001000        ******
  155.         mov al,ah
  156.         out dx,al

  157.         mov dx,APC        ;        ****
  158.         mov al,00010000B
  159.         out dx,al  
  160.         mov HH,00H
  161.         mov HL,06H
  162. ;********************************初始赋值
  163. LOP1:
  164.         mov ah,00000010B
  165.         mov LP,0
  166. ;********************************数码管计数的显示
  167. LSP:      

  168.         mov bx,offset HH
  169.         mov ax,LP
  170.         xlat
  171.         mov bx,offset LED
  172.         xlat
  173.        
  174.         mov dx,APB        ;        *****
  175.         out dx,al

  176.         mov dx,APA        ;        *****
  177.         mov al,ah
  178.         out dx,al

  179.         mov dx,APA        ;        *****
  180.         mov al,0H
  181.         out dx,al

  182.         shr ah,1
  183.         inc LP

  184.         cmp ah,0H
  185.         jz  LOP1
  186.         loop LSP       
  187. ire:
  188.         ret       
  189. jishi endp

  190. IT proc
  191. ;********************************计时100ms     
  192.         inc MS
  193.         cmp MS,64H
  194.         jne re
  195.         mov MS,0H
  196.         jmp ad
  197. ;********************************秒的第二位减为0时重新赋值为9
  198. init:
  199.         mov HH,0aH
  200.         DEC HL
  201.         jmp ad
  202. ;*******************************倒计时计数 C8255实时显示抢答组号
  203. ad:
  204.         push dx
  205.         push ax
  206.         push bx
  207.         push cx
  208.         mov dx,C8255        ;0111 0000 0000b,8255A控制端口地址
  209.         mov al,92H        ;10010010b,方式选择字:PA,PB输入、PC输出
  210.         out dx,al

  211.         mov al,tmp
  212.         mov dx,IPC
  213.         out dx,al

  214.         pop cx
  215.         pop bx
  216.         pop ax
  217.         pop dx
  218.         out dx,al
  219.         mov dx,IPB
  220.         in al,dx
  221.         cmp sxh,1h
  222.         jz start

  223.         cmp HL,0
  224.         JZ  out1
  225.         cmp HH,0
  226.         jz  init
  227.         jmp oend
  228. ;******************************计数判断以及跳转
  229. oend:
  230.         DEC HH       
  231.         cmp HH,00H
  232.         jne re

  233.         cmp HL,00H
  234.         jz out2

  235.         cmp HL,00H
  236.         jz re
  237.         jmp re
  238. out1:
  239.         cmp HH,0
  240.         jnz oend
  241.         jmp ire
  242. out2:
  243.         mov HH,0
  244.         MOV HL,0
  245. re:           
  246.         iret
  247. IT endp

  248. delay10 proc
  249.         mov cx,8820
  250.         loop $
  251.         ret
  252. delay10 endp                 ;延时

  253. code        ends        ;代码段结束
  254.         end start
复制代码

所有资料51hei提供下载:
基于8086的八路抢答器.zip (134.67 KB, 下载次数: 140)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:359970 发表于 2019-12-29 10:49 | 只看该作者
感谢dalao,很有帮助
回复

使用道具 举报

板凳
ID:664974 发表于 2019-12-29 13:58 来自手机 | 只看该作者
不错的资料,感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表