adc.c

来自「一个基于C51开发的计价秤」· C语言 代码 · 共 117 行

C
117
字号
/*********************************************/
// File Name: adc.c
// Author: henny
// Date: 2006/3/1
/*********************************************/
#include <SST89x5xxRD2.h>
#include <intrins.h>
#include "Public.h"

#define	RDYB P1_6
#define	CS5532_CS P3_4

extern UNION_LONG temp_LONG;

VOID SPI_Init()
{
	P1=0xf0;
	SPCR=0x50;
}

BYTE SPI_RW(BYTE Data)
{
	BYTE temp;
	SPDR=Data;
	do
	{
		temp=SPSR&0x80;
	}while(temp!=0x80);
	SPSR&=0x7f;
	return SPDR;
}
/*
VOID Read_Register(BYTE command)
{
	BYTE data j;
	CS5532_CS=0;
	_nop_();
 	_nop_();
	SPI_RW(command);
	for(j=0;j<4;j++)
		RxdByte[j]=SPI_RW(0xfe);
	_nop_();
 	_nop_();
	CS5532_CS=1;
	_nop_();
 	_nop_();		
}
*/
VOID Write_Register(BYTE command,BYTE top,BYTE high,BYTE mid,BYTE low)
{
	CS5532_CS=0;
 	_nop_();
 	_nop_();
	SPI_RW(command);
	SPI_RW(top);
	SPI_RW(high);
	SPI_RW(mid);
	SPI_RW(low);
	_nop_();
 	_nop_();
	CS5532_CS=1;
	_nop_();
 	_nop_();
}

VOID Start_Continuous_Convert()
{
	CS5532_CS=0;
	_nop_();
 	_nop_();
	SPI_RW(0xc0);
}
/*
VOID Single_Convert()
{
	BYTE data j;
	CS5532_CS=0;		
	_nop_();
 	_nop_();
	SPI_RW(0x80);
	while(RDYB);
	SPI_RW(0x00);
	for(j=0;j<3;j++)
		RxdByte[j]=SPI_RW(0xfe);
	 SPI_RW(0xfe);
	_nop_();
 	_nop_();
	CS5532_CS=1;
	_nop_();
 	_nop_();	
}
*/
VOID CS5532_Init()
{
	SPI_Init();
 	Write_Register(0xff,0xff,0xff,0xff,0xff);
	Write_Register(0xff,0xff,0xff,0xff,0xff);
	Write_Register(0xff,0xff,0xff,0xff,0xff);
	Write_Register(0xff,0xff,0xff,0xff,0xfe);
	Write_Register(0x03,0x20,0x00,0x00,0x00);
	Write_Register(0x03,0x00,0x00,0x00,0x00);
	Write_Register(0x05,0x32,0x40,0x32,0x40);
	Write_Register(0x02,2,105,0,0);
	Start_Continuous_Convert();
}

DWORD Get_AD_Convert_Data()
{
	while(RDYB);
	SPI_RW(0x00);
	temp_LONG.B[0]=0x00;
	temp_LONG.B[1]=SPI_RW(0x00);
	temp_LONG.B[2]=SPI_RW(0x00);
	temp_LONG.B[3]=SPI_RW(0x00);
	SPI_RW(0x00);
	return(temp_LONG.L);		
}

⌨️ 快捷键说明

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