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

📄 spi+da.c

📁 2407C文件夹包括第8~16章的C语言代码及使用说明。有如下子文件夹: &#61548 第8章数字输入输出8路开关量输入输出(8IOIN+8IOOUT); &#61548 第8章数字输入输出
💻 C
字号:

//该程序利用LF2407的SPI模块向MAX5741芯片发送数据用于D/A转换,MAX5741的模拟输出端A输出一个三角波 
#include  "register.h"
int     GPR3;
int	  	flag1; 
int   	flag;

//系统初始化子程序 
void  initial()
{
	asm(" setc INTM");					//屏蔽中断 
	WSGR=0x00;							//禁止所有的等待状态 
	asm(" CLRC  SXM");
	asm(" CLRC  OVM");
	asm(" CLRC  CNF");					//B0被配置为数据空间 
	SCSR1=0x81FE;						//CLKIN=6M,CLKOUT=24M ,并且使能到SPI模块的时钟 
	WDCR=0x0E8;							//不使能看门狗 

    IMR=0x0000;							// 禁止所有中断
	IFR=0x0FFFF;						// 清除全部中断标志,"写1清0"
}

//SPI模块初始化子程序 
void SPIINITIAL()
{
	SPICCR=0x0047;						//8 char bits ,在SPICLK的下降沿发送数据,8位数
	SPICTL=0x0006;						//使能主动模式,一般的时钟方式,使能TALK 
	SPIBRR=0x000b;						//SPI的波特率为6M,CLKOUT=24M 
	MCRB=0x0014;						//设置通用引脚为SPI功能的引脚 ,且IOPC3为一般I/O口
	SPICCR=SPICCR|0x0080;				//使SPI退出复位状态 
}


//SPI发送数据子程序,需要发送的数据存放在GPR3寄存器中 
int  SPITRANS(unsigned int GPR3)
{
	PCDATDIR=(PCDATDIR|0x0800)&0x0FFF7;//设置IOPC3为输出,且输出低电平, 
										//以选中MAX5741芯片 
	SPITXBUF=GPR3;						//向SPI的发送缓冲器写一个发送数据 
	while(1)
	{
		flag=SPISTS&0x40;				//flag=SPI的中断标志 
		if(flag==0x40)     break;		//如果SPI的中断标志的中断标志为1,则证 
										//明SPI已经发送成功,则停止等待 
	}
	SPIRXBUF=SPIRXBUF;					//虚读SPIRXBUF寄存器,以清除SPI中断标志 
	PCDATDIR=PCDATDIR|0x08;				//发送完毕,则IOPC3输出高,使发送的数据输 
										//出到MAX5741的输入寄存器和DAC寄存器中 
}
 
main()									//主程序
{
	initial();							//系统初始化 
	SPIINITIAL();						//SPI初始化 
	GPR3=0x0000;						//根据MAX5741的格式写一个数据,使其输出的模拟量为0
	flag1=0x00;							//三角波上升沿、下降沿标志,当flag1=0时,为上 
										//升沿,当flag1=1时,为下降沿 
    SPITRANS(0x0f000);   				//唤醒DAC OUTA
	asm (" rpt 165 ");
	asm (" nop ");
   while(1)
	{
		if(flag1==0x00)    GPR3=GPR3+4;	//因为数据从倒数第4位开始,故要使数据加1,则 
										//需要在实际的寄存器中加4,此操作对应三角波的上升沿 
		else GPR3=GPR3-4;				//因为数据从倒数第4位开始,故要使数据减1,则 
										//需要在实际的寄存器中减4,此操作对应三角波的下降沿 
		if(GPR3==0x0FFc)	flag1=0x01;	//若需要转换的数据到FFFH,则开始下降沿 
		if(GPR3==0x0000)	flag1=0x00;	//若需要转换的数据到00H,则开始上升沿 
		SPITRANS(GPR3);					//调用SPI发送数据子程序  
	} 									//DAC OUTA上输出一个三角波
}



//当发生干扰中断时,执行此中断服务程序 
void interrupt nothing()
{
	return;
}

⌨️ 快捷键说明

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