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

📄 ad77.c

📁 AD7715 的调试程序!CPU芯片是c8051F020
💻 C
字号:
#include "C:\Cygnal\IDEfiles\C51\Inc\c8051F020.h"
#define		NUM					50
sbit AD7CS=P2^2;
sbit ADRST=P2^3;
sbit DRDY=P3^7;
void spi0_init(void);
void sysclock_init(void);
void port_init(void);
void delay(unsigned long time);
void write_reg(unsigned char com);
void read(unsigned char *pointer);
unsigned char xdata gbuf[3];
void dac1_init(void);
void uart0_init();
void timer2_init();
unsigned int val=0;
void main(void)
{  
	EA=0;
	WDTCN=0x0de;
    WDTCN=0x0ad;
	EA=1;
	sysclock_init();
	port_init();
	spi0_init();
	dac1_init();
	uart0_init();
	timer2_init();
/*	ADRST=0;
	delay(300);
	ADRST=1;
	delay(300);
	write_reg(0x11);                 //写COMM REG,确定下一次操作是对SETUP REG的写,GAIN=2
	write_reg(0x64);*/				//对SETUP REG的进行写,单端,50hz
	while(1)
	{    
		delay(3000);
/*		while(DRDY);
		write_reg(0x39);                 //对COMM REG写,确定下一次是对DATA REG的读操作
		read(gbuf);
		SBUF0=gbuf[0];
		while(!TI0);
		TI0=0;
		SBUF0=gbuf[1];
		while(!TI0);
		TI0=0;*/
		SBUF0=DAC1H;
		while(!TI0);
		TI0=0;
		SBUF0=DAC1L;
		while(!TI0);
		TI0=0;
		SBUF0=' ';
		while(!TI0);
		TI0=0;
/*		val+=3;
		DAC1L=val;
		DAC1H=val>>8;
		if(val>60000) val=0;*/

	}

}
void spi0_init(void)
{ 
	SPI0CFG=0xc7;        //CKPHA=1,CKPOL=1
	SPI0CN =0x03;       //3线方式
	SPI0CKR=0x92;      //50khz      
	EIE1=0;            //不允许SPI0中断      
}
void sysclock_init(void)
{
    OSCXCN=0x67;             //晶体振荡器方式1分频,fsysclock=14.7456mhz;
    delay(300);               //延时1ms
	while(!(OSCXCN&0x80));   //检查XTLVLD=1?
    OSCICN=0x08;             //切换到外部振荡器
}
void port_init(void)
{
	XBR0=0x06;      //UATR,SPI0           
	XBR1=0;
	XBR2=0xc0;     //弱上拉禁止
	P0MDOUT=0x15;  
	P2MDOUT=0xcf;
}
void delay(unsigned long time)
{
	while(time--);
}
void write_reg(unsigned char com)
{
	AD7CS=0;
	delay(NUM);
	SPI0DAT=com;              
	while(!SPIF);
	SPIF=0;
	AD7CS=1;
	delay(NUM);
}
void read(unsigned char *pointer)
{
	unsigned char i;
	AD7CS=0;
	delay(NUM);		
	for(i=0;i<2;i++)
	{
		SPI0DAT=0;                  //给SPI0发送一个时钟
		while(!SPIF);
		SPIF=0;
		*pointer++=SPI0DAT;
	}
	AD7CS=1;
	delay(NUM);			
}
void dac1_init(void)
{
	DAC1CN=0x80;
	REF0CN=0x03;
	DAC1L=0x00;
	DAC1H=0x00;
}
void timer2_init()         		//用作UATR0波特率发生器 ,波特率为4800
{
	T2CON =0x30;               //自动重载,定时器2溢出产生波特率
                              //时间基准信号为系统时钟的2分频,fsysclk/2 
	TL2=0xa0;              //初值
	TH2=0xff;
    RCAP2L=0xa0;          //重载值
	RCAP2H=0xff;
	EA=1;         
	TR2=1;	
}
void uart0_init()
{	
	PCON=0;
	SCON0=0xd0;             // UART方式3,REN=1;	
	ES0=0;                  
}

⌨️ 快捷键说明

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