This text is replaced by the Flash movie.
电子制作
电子制作
国外电子元器件
电子技术应用
电子世界
家用电器
电子工程专辑


  aP89341串行控制测试程序


一、概述:
1、用EM78P156单片机实现对AP89XX系列OTP语音的串行命令模式的控制。
2、串列CPU模式:采用外部MCU控制,3线串列数据输入(CS+SCLK+DI),1个反馈信号(BUSY HIGH)。
3、S1:拨码开关实现8位语音地址的输入;S2:按键按下小于2s实现播放当前输入的语音地址的语音功能,超过2s小于4s实现播放全部语音的功能. CS:地址数据传输使能信号;SCLK:地址数据传输时钟信号;DI:地址数据.
二、功能说明(IC串列模式)
引脚功能说明:
P50:CS数据传输使能信号输出脚。
P51:SCLK同步时钟输出脚。
P52:DATA数据输出脚。
P67:BUSY忙信号反馈脚(有语音播放时高,平时为低)。
P53:播放键,按一下播放一段,也可顺序播放全部语音。
P04,P07:LED指示,或其他用途。
VDD VPP:电源正
VSS:电源负。
OSI,OSO:系统时钟输入脚.
TCC:EM78P156的计数器输入脚,接VSS
/RESET:EM78P156的复位信号输入引脚,接VDD
OSC:振荡输入功能引脚
RST: IC复位引脚
VOUT1,VOUT2:喇叭输出
COUT:AUDIO输出功能引脚
M0,M1:AP89XX工作模式选择引脚,在此M0接VSS,M1接VDD.
OUT1: BUSY忙信号反馈脚(有语音播放时高,平时为低)。
OUT2,OUT3:未用.
S1:CS数据传输使能信号输出脚。
S2:SCLK同步时钟输出脚。
S3:DATA数据输出脚。
S4~S8:未用.
附图(一)IC串列模式电原理图:
   Note:7335是一稳压管。在此电路中只实现语音地址00H~7FH的输入。
附图(二)IC串列模式时序图

附图(三)IC 串行工作模式测试程序流程图:
 
EM78P156单片机控制程序:
;********Ap89xx Serial Mode Test Programme**succes****
;Data:06.5.13
;================meidi_serial_control===================
 
     PORT6      ==     0X06
     PORT5      ==     0X05
;---------------port5-----------------------------------
     CS         ==     0;out
     CLK        ==     1;out
     DATA       ==     2;out
     KEY1       ==     3;IN,SEQ
;---------------port6-----------------------------------
     BUSY       ==     7;in  
;-----Register Define-----------------------------------
     STATUS     ==     0X03           
;---------Status bit define-----------------------------
     STA_C       ==     0
     STA_DC      ==     1
     STA_Z       ==     2
;---------Data buffer define----------------------------    
     PORT5_BUFFER  ==     0X20
     PORT6_BUFFER  ==     0X21
     DATALENTH     ==     0x22
     COM_ADDRESS   ==     0X23
     DELAY_BUFFER  ==     0X24
     DELAY_BUFFER1 ==     0X25
     DELAY_BUFFER2 ==     0X26
     COM_STOP      ==     0X27
     COM_ADDRESSBUFFER  ==  0X28
     COM_PREFETCH  ==     0X29
     COM_PUP2      ==     0X2A
     BUFFER_STATUS ==     0X2C
     VOICE_ADDRESS ==     0X2D
     COM_PDN2      ==     0X2E
     COM_PAUSE     ==     0X2F
     COM_RESUME    ==     0X30
     COM_STATUS    ==     0X31
     CNT           ==     0X32
;=================program===============================
    ORG  0X00
    JMP  START
;---------Interrupt subroutine--------------------------
    ORG  0X08
;----------------main-----------------------------------   
;--------------I/O Initialization-----------------------
 START:
      DISI                ;关中断
      MOV     A,@0X0
      IOW     0X0B  
      CONTW
      IOW     0x0E        ;关闭看门狗
      MOV     A,@0X0ff
      IOW     PORT6       ;
      MOV     A,@0X08
      IOW     PORT5       ;
      MOV     A,@0X00
      MOV     PORT5,A
      MOV     PORT6,A
      MOV     COM_ADDRESS,A     
      MOV     CNT,A     
;--------------DATA_BUFFER Initialization----------------
      MOV     A,@0X08
      MOV     DATALENTH,A   ;传输的数据长度
      CLRA
      MOV     COM_ADDRESS,A
      MOV     COM_STOP,A
      MOV     VOICE_ADDRESS,A
      MOV     BUFFER_STATUS,A
      MOV     A,@0X8D
      MOV     COM_PUP2,A
      MOV     A,@0X71
      MOV     COM_PREFETCH,A
      MOV     A,@0XA9
      MOV     COM_PDN2,A
      MOV     A,@0X39
      MOV     COM_PAUSE,A
      MOV     A,@0X1D
      MOV     COM_RESUME,A
      MOV     A,@0XE3
      MOV     COM_STATUS,A
;-------------89XX STATUS Initialization---------------     
      BS      PORT5,CS
      MOV     A,COM_STATUS
      MOV     COM_ADDRESS,A
      CLRA
      CALL    TRANSMIT
      BC      PORT5,CS
      CALL    DELAY   ;传输ap89xxx串行工作方式的状态命令字    
;-------------SCAN_KEY---------------------------------
 SCAN_KEY1:      ; P53:KEY1要接下拉电阻
       MOV     A,PORT5
       MOV     PORT5_BUFFER,A
       JBS     PORT5_BUFFER,KEY1
       JMP     SCAN_KEY1    
       CALL    DELAY
       MOV     A,PORT5
       MOV     PORT5_BUFFER,A
       JBS     PORT5_BUFFER,KEY1
       JMP     SCAN_KEY1
 COUNT:INC     CNT
       call    delay      
       bc     status,sta_c
       mov   a,@100
       sub    a,cnt
       jbc    status,sta_c
       jmp    next      
       mov    a,port5
       mov    port5_buffer,a
       jbc     port5_buffer,key1
       jmp    count
       bc     status,sta_c
       mov    a,@100
       sub    a,cnt
       clr     cnt
       jbc    status,sta_c
       jmp    next      
       JMP     SEQ 
;******全部播放*********************   
  NEXT:
        clr    cnt
        CLR     VOICE_ADDRESS      
next_loop:
 wait1:jbc     port6,busy
       jmp     wait1
       BS      PORT5,CS
       MOV     A,COM_PREFETCH
       MOV     COM_ADDRESS,A
       CALL    TRANSMIT
       MOV     A,VOICE_ADDRESS
       MOV     COM_ADDRESS,A
       CALL    TRANSMIT
       BC      PORT5,CS
       CALL    DELAY1                     
       BS      PORT5,CS
       MOV     A,COM_PUP2
       MOV     COM_ADDRESS,A
       CALL    TRANSMIT
       bc      port5,cs
       inc     voice_address    
 wait2:jbs     port6,busy
       clr     voice_address
       mov     a,voice_address
       xor     a,@0
       jbs     status,sta_z
       jmp     next_loop      
       CALL    DELAY1    
       JMP     SCAN_KEY1       
   ;********************播放当前地址的语音段***************
   SEQ:
        mov    a,port6
        mov    voice_address,a
       BS      PORT5,CS
       MOV     A,COM_PREFETCH
       MOV     COM_ADDRESS,A
       CALL    TRANSMIT      
       MOV     A,VOICE_ADDRESS
       MOV     COM_ADDRESS,A
       CALL    TRANSMIT
       BC      PORT5,CS
       CALL    DELAY1              
       BS      PORT5,CS
       MOV     A,COM_PUP2
       MOV     COM_ADDRESS,A
       CALL    TRANSMIT      
  wait3:jbc   port6,busy
        jmp  wait3       
       BC      PORT5,CS  
       JMP     SCAN_KEY1
 ;******传送数据子程序*****************                  
 TRANSMIT:
       RRC     COM_ADDRESS
    J1:JBC     STATUS,STA_C        
       JMP     J2
       BC      PORT5,DATA
       CALL    DELAY1
       BS      PORT5,CLK
       CALL    DELAY1
       BC      PORT5,CLK
       CALL    DELAY1
       JMP     SHIFT_ADDRESS
    J2:JBS     STATUS,STA_C
       JMP     ERR
       BS      PORT5,DATA
       CALL    DELAY1
       BS      PORT5,CLK
       CALL    DELAY1
       BC      PORT5,CLK
       CALL    DELAY1
SHIFT_ADDRESS:
       DEC     DATALENTH
       JBS     STATUS,STA_Z
       JMP     TRANSMIT
       MOV     A,@8
       MOV     DATALENTH,A
       RET         
;-------------------------------------------------------  
DELAY: MOV  A,@2
       MOV  DELAY_BUFFER,A
DEL :MOV  A,@10
       MOV  DELAY_BUFFER1,A
 DLMS: NOP
       NOP
       NOP
       MOV  A,@249
       MOV  DELAY_BUFFER2,A
 DEL_LP:
       NOP
       NOP
       NOP
       NOP
       NOP
       DJZ  DELAY_BUFFER2
       JMP  DEL_LP
       DJZ  DELAY_BUFFER1
       JMP  DLMS
       DJZ  DELAY_BUFFER
       JMP  DEL
       RET
 DELAY1:
       MOV     A,@2
       MOV     DELAY_BUFFER1,A
   DD1:MOV    A,@2
       MOV     DELAY_BUFFER2,A         
   DD2:DJZ    DELAY_BUFFER2
       JMP     DD2
       DJZ     DELAY_BUFFER1
       JMP     DD1     
       RET     
 ERR:  JMP     START
       EOP    
 
Copyright 2006 雅迪电子 All Rights Reserved 粤ICP备06067363号