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

📄 h25.asm

📁 单片机程序集合
💻 ASM
字号:
mode   equ 082h
PORTA  equ 08000h
CTL    equ 08003h

OUTBIT   equ 09002h
IN       equ 09001h


Pulse    equ 55h
PulseCNT equ 50h
ToneHigh equ 51h
ToneLow  equ 52h
Tone     equ 53h
KeyBuf   equ 54h

Speaker  equ PORTA

       ljmp  Start

       org   000bh
Timer0Int:
       push  PSW
       clr   TR0
       mov   TH0, ToneHigh
       mov   TL0, ToneLow
       setb  TR0
       mov   a, Pulse
       mov   dptr, #Speaker
       movx  @dptr,a
       inc   Pulse
       dec   PulseCNT
       pop   PSW
       reti

ToneTable:
       dw      64578, 64686, 64778, 64821, 64898, 64968, 65029

TestKey:
       mov   dptr, #OUTBIT
       mov   a, #0
       movx  @dptr, a
       mov   dptr, #IN
       movx  a, @dptr
       cpl   a
       anl   a, #0fh

       ret

KeyTable:
       db    16h, 15h, 14h, 0ffh
       db    13h, 12h, 11h, 10h
       db    0dh, 0ch, 0bh, 0ah
       db    0eh, 03h, 06h, 09h
       db    0fh, 02h, 05h, 08h
       db    00h, 01h, 04h, 07h

GetKey:
       mov   dptr, #OUTBIT
       mov   P2, dph
       mov   r0, #Low(IN)
       mov   r1, #00100000b
       mov   r2, #6
KLoop:
       mov   a, r1
       cpl   a
       movx  @dptr, a
       cpl   a
       rr    a
       mov   r1, a

       movx  a, @r0
       cpl   a
       anl   a, #0fh
       jnz   Goon1

       djnz  r2, KLoop

       mov   r2, #0ffh
       sjmp  Exit
Goon1:
       mov   r1, a

       mov   a, r2
       dec   a
       rl    a
       rl    a
       mov   r2, a           ; r2 = (r2-1)*4

       mov   a, r1
       mov   r1, #4
LoopC:
       rrc   a
       jc    Exit
       inc   r2
       djnz  r1, LoopC
Exit:
       mov   dptr, #OUTBIT
       clr   a
       movx  @dptr, a

       mov   a, r2
       mov   dptr, #KeyTable
       movc  a, @a+dptr
       ret

Start:

       mov  sp, #70h
       mov  a, #mode
       mov  dptr,#CTL
       movx @dptr,a
       
       mov  TMOD, #01  ;  Timer
       mov  IE, #82h   ;  EA=1, IT0 = 1
       mov  Tone,#0
MLoop:
       call TestKey
       jz   MLoop

       call GetKey
       mov  b, a
       jz   MLoop      ; = 0, < 1
       anl  a, #!7
       jnz  MLoop      ; > 7

       dec  b
       mov  a, b
       rl   a          ; a = a*2

       mov  b, a
       mov  dptr, #ToneTable
       movc a, @a+dptr
       mov  ToneHigh, a
       mov  TH0, a

       mov  a, b
       inc  a
       movc a, @a+dptr
       mov  ToneLow, a
       mov  TL0, a

       setb TR0
       mov  PulseCNT, #100
Wait:
       mov  a,PulseCNT
       jnz  Wait
       clr  TR0
       ljmp MLoop

       end

⌨️ 快捷键说明

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