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

📄 375interface.lis

📁 AVR单片机ATMEGA64L开发的mp3程序
💻 LIS
字号:
                        .module _375interface.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码\375interface.c
 0000                   .dbfunc e mDelay1uS _mDelay1uS fV
                        .even
 0000           _mDelay1uS::
 0000                   .dbline -1
 0000                   .dbline 23
 0000           ; #include <iom64v.h>
 0000           ; #include <macros.h>
 0000           ; /***************************************/
 0000           ; #define  UINT8 unsigned char
 0000           ; #define  CH375_CS  BIT(7)
 0000           ; #define  CH375_A0  BIT(3)
 0000           ; #define  CH375_RD  BIT(4)
 0000           ; #define  CH375_WR  BIT(5)
 0000           ; #define  CH375_INT BIT(6)
 0000           ; /***************************************/
 0000           ; /* 有些AVR单片机提供开放系统总线,那么直接将CH375挂在其系统总线上,以8位I/O方式进行读写 */
 0000           ; /* 不过本例假定不开放系统总线,所以用I/O引脚模拟产生CH375的并口读写时序 */
 0000           ; /* 本例中的硬件连接方式如下(实际应用电路可以参照修改下述3个并口读写子程序) */
 0000           ; /*    单片机的引脚     CH375芯片的引脚
 0000           ;        PINC.4                INT#
 0000           ;        PORTC.3               A0
 0000           ;        PORTC.2               CS#
 0000           ;        PORTC.1               WR#
 0000           ;        PORTC.0               RD#
 0000           ;       PORTA(8位端口)        D7-D0       */
 0000           ; 
 0000           ; void mDelay1uS( )  /* 至少延时1uS,根据单片机主频调整 */
 0000           ; {
 0000                   .dbline 26
 0000           ;       //UINT8 i;
 0000           ;       //for ( i = 1; i != 0; i -- );
 0000           ;       NOP();
 0000 0000              nop
 0002                   .dbline -2
 0002           L1:
 0002                   .dbline 0 ; func end
 0002 0895              ret
 0004                   .dbend
 0004                   .dbfunc e CH375_PORT_INIT _CH375_PORT_INIT fV
                        .even
 0004           _CH375_PORT_INIT::
 0004                   .dbline -1
 0004                   .dbline 30
 0004           ; }
 0004           ; 
 0004           ; void CH375_PORT_INIT( )  /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */
 0004           ; {
 0004                   .dbline 31
 0004           ;       DDRD = 0x00;  /* 设置8位并口为输入 */
 0004 2224              clr R2
 0006 21BA              out 0x11,R2
 0008                   .dbline 33
 0008           ;       
 0008           ;       PORTC=CH375_CS|CH375_WR|CH375_RD; //设置CS,WR,RD默认为高电平 0x08为3310引脚*/
 0008 80EB              ldi R24,176
 000A 85BB              out 0x15,R24
 000C                   .dbline 34
 000C           ;       DDRC =CH375_CS|CH375_WR|CH375_RD|CH375_A0|0x01;  /* 设置CS,WR,RD,A0为输出,设置INT#为输入 */
 000C 89EB              ldi R24,185
 000E 84BB              out 0x14,R24
 0010                   .dbline -2
 0010           L2:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbend
 0012                   .dbfunc e xWriteCH375Cmd _xWriteCH375Cmd fV
 0012           ;           mCmd -> R16
                        .even
 0012           _xWriteCH375Cmd::
 0012                   .dbline -1
 0012                   .dbline 38
 0012           ; }
 0012           ; 
 0012           ; void xWriteCH375Cmd( UINT8 mCmd )             /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */
 0012           ; {
 0012                   .dbline 41
 0012           ;       //NOP();//mDelay1uS( );  /* 至少延时1uS */
 0012           ; /*    *(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd;  通过并口直接读写CH375而非普通I/O模拟 */
 0012           ;       PORTC |=CH375_A0;// 0x08;  /* 输出A0=1 */
 0012 AB9A              sbi 0x15,3
 0014                   .dbline 42
 0014           ;       PORTD = mCmd;  /* 向CH375的并口输出数据 */
 0014 02BB              out 0x12,R16
 0016                   .dbline 43
 0016           ;       DDRD = 0xFF;  /* 并口D0-D7输出 */
 0016 8FEF              ldi R24,255
 0018 81BB              out 0x11,R24
 001A                   .dbline 44
 001A           ;       PORTC &=~(CH375_CS|CH375_WR);// 0xF9;  /* 输出有效写控制信号, 写CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */
 001A 85B3              in R24,0x15
 001C 8F75              andi R24,95
 001E 85BB              out 0x15,R24
 0020                   .dbline 45
 0020           ;       DDRD = 0xFF;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
 0020 8FEF              ldi R24,255
 0022 81BB              out 0x11,R24
 0024                   .dbline 46
 0024           ;       PORTC |=CH375_RD|CH375_CS|CH375_WR;// 0x07;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */
 0024 85B3              in R24,0x15
 0026 806B              ori R24,176
 0028 85BB              out 0x15,R24
 002A                   .dbline 47
 002A           ;       DDRD = 0x00;  /* 禁止数据输出 */
 002A 2224              clr R2
 002C 21BA              out 0x11,R2
 002E                   .dbline 48
 002E           ;       PORTC &= 0xF7;  /* 输出A0=0; 可选操作 */
 002E 85B3              in R24,0x15
 0030 877F              andi R24,247
 0032 85BB              out 0x15,R24
 0034                   .dbline -2
 0034           L3:
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbsym r mCmd 16 c
 0036                   .dbend
 0036                   .dbfunc e xWriteCH375Data _xWriteCH375Data fV
 0036           ;          mData -> R16
                        .even
 0036           _xWriteCH375Data::
 0036                   .dbline -1
 0036                   .dbline 53
 0036           ;       //NOP();//mDelay1uS( ); mDelay1uS( );  /* 至少延时2uS */
 0036           ; }
 0036           ; 
 0036           ; void xWriteCH375Data( UINT8 mData )           /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */
 0036           ; {
 0036                   .dbline 55
 0036           ; /*    *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData;  通过并口直接读写CH375而非普通I/O模拟 */
 0036           ;       PORTD = mData;  /* 向CH375的并口输出数据 */
 0036 02BB              out 0x12,R16
 0038                   .dbline 56
 0038           ;       DDRD = 0xFF;  /* 并口D0-D7输出 */
 0038 8FEF              ldi R24,255
 003A 81BB              out 0x11,R24
 003C                   .dbline 57
 003C           ;       PORTC &= ~(CH375_A0|CH375_CS|CH375_WR);//0xF1;  /* 输出有效写控制信号, 写CH375芯片的数据端口, A0=0; CS=0; WR=0; RD=1; */
 003C 85B3              in R24,0x15
 003E 8775              andi R24,87
 0040 85BB              out 0x15,R24
 0042                   .dbline 58
 0042           ;       DDRD = 0xFF;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
 0042 8FEF              ldi R24,255
 0044 81BB              out 0x11,R24
 0046                   .dbline 59
 0046           ;       PORTC |= CH375_RD|CH375_CS|CH375_WR;//0x07;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */
 0046 85B3              in R24,0x15
 0048 806B              ori R24,176
 004A 85BB              out 0x15,R24
 004C                   .dbline 60
 004C           ;       DDRD = 0x00;  /* 禁止数据输出 */
 004C 2224              clr R2
 004E 21BA              out 0x11,R2
 0050                   .dbline -2
 0050           L4:
 0050                   .dbline 0 ; func end
 0050 0895              ret
 0052                   .dbsym r mData 16 c
 0052                   .dbend
 0052                   .dbfunc e xReadCH375Data _xReadCH375Data fc
 0052           ;          mData -> R16
                        .even
 0052           _xReadCH375Data::
 0052                   .dbline -1
 0052                   .dbline 65
 0052           ;       //NOP();//mDelay1uS( );  /* 至少延时1.2uS */
 0052           ; }
 0052           ; 
 0052           ; UINT8 xReadCH375Data( void )                  /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */
 0052           ; {
 0052                   .dbline 69
 0052           ;       UINT8   mData;
 0052           ; /*    mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR;  通过并口直接读写CH375而非普通I/O模拟 */
 0052           ;       //NOP();//mDelay1uS( );  /* 至少延时1.2uS */
 0052           ;       DDRD = 0x00;  /* 数据输入 */
 0052 2224              clr R2
 0054 21BA              out 0x11,R2
 0056                   .dbline 70
 0056           ;       PORTC &= ~(CH375_A0|CH375_CS|CH375_RD);//0xF2;  /* 输出有效读控制信号, 读CH375芯片的数据端口, A0=0; CS=0; WR=1; RD=0; */
 0056 85B3              in R24,0x15
 0058 8776              andi R24,103
 005A 85BB              out 0x15,R24
 005C                   .dbline 71
 005C           ;       DDRD = 0x00;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
 005C 21BA              out 0x11,R2
 005E                   .dbline 72
 005E           ;       mData = PIND;  /* 从CH375的并口PA输入数据 */
 005E 00B3              in R16,0x10
 0060                   .dbline 73
 0060           ;       PORTC |= CH375_RD|CH375_CS|CH375_WR;//0x07;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */
 0060 85B3              in R24,0x15
 0062 806B              ori R24,176
 0064 85BB              out 0x15,R24
 0066                   .dbline 74
 0066           ;       return( mData );
 0066                   .dbline -2
 0066           L5:
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbsym r mData 16 c
 0068                   .dbend

⌨️ 快捷键说明

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