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

📄 375interface.s

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

⌨️ 快捷键说明

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