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

📄 bzq004.asm

📁 一个汇编程序
💻 ASM
字号:
ORG   0000H
AJMP  40H
TABLE:  DB 00H,01H,02H,03H, 04H,05H,06H,07H
        DB 08H,09H,0AH,0BH, 0CH,0DH,0EH,0FH
K1  EQU  P1.0
K2  EQU  P1.1
K3  EQU  P1.2
K4  EQU  P1.3
SS  EQU  P1.6
MOSI EQU  P1.7
SCLK  EQU P3.2
INT   EQU P3.3
ORG  40H
     MOV   R0, #01H
     MOV  DPTR,#TABLE
     MOV  20H, #00H
     MOV  21H, #00H
MAIN:SETB  EA
     SETB  EX1
     SETB  IT1
WAIT:JNB  K1,  PLAY
     JNB  K2,  JIA
     JNB  K3,  JIAN
     JNB  K4,  STOP
     AJMP  WAIT
PLAY: ACALL  YS50
      ACALL  POWERUP
      MOV  A,  20H     ;送放音地址底8位
      ACALL   SEND
      MOV  A,  21H     ;送放音地址高8位
      ACALL SEND
      MOV  A,#1110000H
      ACALL  SEND
      SETB  SS
      MOV  A,#0F0H
      ACALL  SEND
      SETB   SS

PLAY2: JNB   K4, STOP         ;STOP=0停止放音
       JB    INT,PLAY2       ;无OVF EOM继续放音
       ACALL STOPP          ;停止当前操作
       AJMP  WAIT

;停止当前操作<< STOP >>  8位
STOPP: MOV   A,#30H          ;发 0X11 0XXX
       ACALL SEND            ;
       SETB  SS              ;关片选
       ACALL YS50            ;50mS延时
       ACALL YS50            ;50mS延时
       RET

;停止当前操作掉电<< STOPPWRDN >>   8位
STOP:  ACALL  YS50
       MOV   A,#10H          ;发0X010 XXXXXXXXXX
       ACALL SEND            ;
       SETB  SS              ;关片选
       ACALL YS50            ;50mS延时
       ACALL YS50            ;50mS延时
       AJMP  WAIT

JIA:  ACALL  YS50
      INC  R0
      CJNE  R0,#10H,JIA1;
      AJMP  40H
JIA1: MOV   A,R0
      MOVC   A, @A+DPTR
      MOV   21H,A
      INC   R0
      MOV   A,R0
      MOVC   A,@A+DPTR  
      MOV   20H,A
      AJMP  WAIT
JIAN: ACALL  YS50
      DEC   R0
      DEC   R0
      CJNE  R0,#0FFH,JIAN1;如果R0为FF时,程序顺序执行,否则跳转到JIAN1
      MOV   R0,#0FH
JIAN1: MOV   A,R0
      MOVC   A, @A+DPTR
      MOV   20H,A
      DEC   R0
      MOV   A,R0
      MOVC   A,@A+DPTR
      MOV   21H,A
      INC   R0
      AJMP   WAIT

POWERUP: CLR   SS           ;ISD POWER UP
      MOV   A,#20H      ;OUT 00100 XXX
      ACALL SEND
      SETB  SS          ;SHUT OUT PIAN XUAN
      ACALL YS50        ;50MS DELAY
      RET
      
SEND:  CLR   SS              ;开片选
       CLR   MOSI
       MOV   R6,#08H           ;
       CLR   SCLK            ;时钟SCLK=0
SEND1:  MOV   C,ACC.0         ;
       MOV   MOSI,C          ;数据写 MOSI
       SETB  SCLK            ;时钟SCLK=1
       RR    A               ;
       CLR   SCLK            ;时钟SCLK=0
       DJNZ  R6,SEND1         ;
       RET

 ;**** 10mS延时  ****
YS1:   MOV   TMOD,#01H       ;
       MOV   TH0,#0D8H       ;10mS延时初值置入
       MOV   TL0,#0F0H       ;(65536-X)*1=10MS
       SETB  TR0             ;65536-(10000/1)=D8F0H
       JNB   TF0,$           ;
       CLR   TF0             ;
       CLR   TR0             ;
       RET                   ;
;**** 50mS延时  ****
YS50:  MOV   TMOD,#01H       ;
       MOV   TH0,#3CH        ;50mS延时初值置入
       MOV   TL0,#0B0H       ;(65536-X)*1=50MS
       SETB  TR0             ;65536-(50000/1)
       JNB   TF0,$           ;
       CLR   TF0             ;
       CLR   TR0             ;
   RET                  
   END











⌨️ 快捷键说明

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