📄 375interface.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 + -