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

📄 a18.asm

📁 单片机实验程序-13种-17.4M-pdf.rar
💻 ASM
字号:
;         	“验证式”	实验十八  电子琴

;文件名:MCS51\A17.ASM


OUTBIT   equ 0e101h
IN       equ 0e103h

Pulse    equ 0
PulseCNT equ 50h
ToneHigh equ 51h
ToneLow  equ 52h

Speaker  equ P3.0

       ljmp  Start

       org   000bh
Timer0Int:
       push  PSW
       clr   TR0
       mov   TH0, ToneHigh
       mov   TL0, ToneLow
       setb  TR0
       mov   c, Pulse
       mov   Speaker, c
       cpl   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    00h, 01h, 04h, 07h
       db    0fh, 02h, 05h, 08h
       db    0eh, 03h, 06h, 09h
       db    0dh, 0ch, 0bh, 0ah
       db    10H,10H,10H,10H,10H,
       db    10H,10H,10H,10H,10H

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  dptr,#0e100h
       mov  a,#03h
       movx @dptr,a
       mov  TMOD, #01  ;  Timer
       mov  IE, #82h   ;  EA=1, IT0 = 1
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 + -