⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 222.asm

📁 该源代码为单片机的乒乓球游戏课程设计源代码
💻 ASM
字号:
cseg segment
      assume cs:cseg,ds:cseg
start:
      jmp    main
      table   db   3fh,06h,5bh,4fh,66h,6dh,7dh,07h
              db   7fh,6fh,77h,7ch,39h,5eh,79h,71h
            
      status  db   0
      ls      db   0
      rs      db   0
      lm      db   0
      rm      db   0
      count   db   90
main: 
      mov     al,       80h;initiate 8255
      mov     dx,       203h
      out     dx,       al
      
      mov     dx,       233h;8253
      mov     al,       34h
      out     dx,       al
      mov     ax,       9600
      mov     dx,       230h
      out     dx,       al
      mov     al,       ah
      out     dx,       al
      mov     dx,       233h
      mov     al,       01010100b
      out     dx,       al
      mov     dx,       231h
      mov     al,       30
      out     dx,       al
      
      mov     dx,       210h;initiate 8259
      mov     al,       13h
      out     dx,       al
      
      inc     dx
      mov     al,       32
      out     dx,       al
      mov     al,       03h
      out     dx,       al
      mov     al,       0fch
      out     dx,       al
  
      mov    dx,       222h;8279
      mov    al,       00h
      out    dx,       al
      mov    al,       38h
      out    dx,       al
      mov    al,       0d0h
      out    dx,       al

                 cli
      mov     ax,       0 ;set interrupt
      mov     ds,       ax
      mov     ax,       offset int0
      mov     ds:word ptr [32*4],ax
      mov     ax,       8100h
      mov     ds:word ptr 2[32*4],ax
      mov     ax,       offset intp
      mov     ds:word ptr [33*4],ax
      mov     ax,       8100h
      mov     ds:word ptr 2[33*4],ax
             sti
      
      mov    bx,       offset table
wa:   
      mov    al,       0c2h
      mov    dx,       222h
      out    dx,       al
      in     al,       dx
      test   al,       80h
      jnz    wa
aa:   test   status,   16
      jnz    aa
 WAIIT:                  NOP
	 IN     AL,DX
	 call   disp
	 MOV    BL,AL
	 AND    AL,80H
	 CMP    AL,80H
	 JE     WAIIT                ;FIFO正在清除期间则跳转等待
	 MOV    AL,BL
	 AND    AL,0FH
	 CMP    AL,00H
	 JE    WAIIT                 ;无键按下则等待
	 MOV    AL,40H               ;写 读FIFO RAM命令字
	 OUT    DX,AL
	 MOV    DX,220h            ;读入FIFO RAM内容
	 IN     AL,DX
      cmp    al,       0
      je     l
      cmp    al,       1
      je     r
      cmp    al,       2
      je     star
      jmp    wa
      star: or     status,  20h
      jmp    wa
l:    cmp    cl,      80h
      jz     co1
      and    status,  0f7h
      inc    rs
      cmp    rs,      11
      jnz    wa
      inc    rm
      mov    al,      rm
      add    al,      lm
      test   al,      1
      jz     lf0
      or     status,   4
      jmp    g0
lf0:   and    status,   0fbh
      
g0:   mov    rs,      0
      mov    ls,      0
      jmp    wa
co1:  and    status,  0fdh
      jmp    wa      
r:    cmp    cl,      1
      jz     co2
      and    status,  0f7h
      inc    ls
      cmp    ls,      11
      jnz    rt
      inc    lm
      mov    al,      rm
      add    al,      lm
      test   al,      1
      jz     lf1
      or     status,  4
      jmp    g1
lf1:  and    status,  0fbh
      
g1:   mov    rs,      0
      mov    ls,      0
rt:   jmp    wa
co2:  or     status,  2
      jmp    wa

disp  proc   near
      push   bx
      push   ax
      push   dx
      push   cs
      pop    ds
      mov    dx,      222h
      mov    al,      84h
      out    dx,      al
      mov    bx,      offset table
      mov    al,      rs

      xlat
      mov    dx,      220h
      out    dx,      al
      mov    dx,      222h
      mov    al,      85h
      out    dx,      al
      mov    al,      ls
      xlat
      mov    dx,      220h 
      out    dx,      al
      mov    dx,      222h
      mov    al,      86h
      out    dx,      al
      mov    al,      rm
      xlat
      mov    dx,      220h
      out    dx,      al
      mov    dx,      222h
      mov    al,      87h
      out    dx,      al
      mov    al,      lm
      xlat
      mov    dx,      220h
      out    dx,      al
      pop    dx
      pop    ax
      pop    bx
         ret
disp endp 
int0: push   ax
      push   bx
      push   dx
      
      push   ds
      push   cs
      pop    ds
      lea    bx,      table
      test   status,    20h
      jnz     t
      jmp    exitint0
t:    test   status,    8
      jnz    begin
      test   status,    1
      jnz    pause1
      jmp    nobegin
begin:test    cl,        80h
      jz     next
      test   status ,    2
      jnz    adrs
      jmp    goon
next: test   cl,         1
      jz    goon
      test   status,     2
      jz     adls
      jmp    goon
goon: test   status,     2
      jz     ltr
      rol    cl,         1
      jmp    outd
      
ltr:  ror    cl,         1  
      jmp    outd   
adrs: inc    rs
      and    status,   0f7h
      cmp    rs,      11
      jnz    adt
      inc    rm
      mov    al,      rm
      add    al,      lm
      test   al,      1
      jz     lf2
      or     status,   4
      jmp    g2
lf2:   and    status,   0fbh
      
g2:   mov    rs,      0
      mov    ls,      0
adt:  jmp    exitint0
pause1:jmp   pause
adls: inc    ls
      and    status,  0f7h
      cmp    ls,      11
      jnz    adt
      inc    lm
      mov    al,      rm
      add    al,      lm
      test   al,      1
      jz     lf3
      or     status,   4
      jmp    g3
lf3:   and    status,   0fbh
      
g3:   mov    rs,      0
      mov    ls,      0
      jmp    exitint0

nobegin:
      test   status,      4
      jz     lfirst
      or     status,    2
      or     status,    8
      mov    cl,       1
      jmp    outd
lfirst:
      and    status,    0fdh
      or     status,    8
 
      mov    cl,        80h
      jmp    outd
outd: mov    dx,        200h
      mov    al,        cl
      not    al
      out    dx,        al
     
      jmp    exitint0
pause:or     status,   16
      mov    bx,       offset table
      mov    dx,       222h
      mov    al,       81h
      out    dx,       al
      dec    count
      xor    ah,        ah
      mov    dx,        220h
      mov    al,        count
      xor    ah,        ah
      mov    cl,        10
      div    cl
      xlat
      nop
      nop
      nop
      nop
      out    dx,        al
      mov    dx,        222h
      mov    al,        80h
      out    dx,        al
      mov    dx,        220h
      mov    al,        ah

      xlat 
      out    dx,        al
      cmp    count,     0
      jnz    exitint0
      mov    count  ,    90
      and    status,     0eeh
exitint0:
      pop   ds
      
      pop   dx
      pop   bx
      pop   ax
        iret
intp:   or   status,      1
          iret
cseg   ends
      end   start
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -