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

📄 init8583.c

📁 8583时钟芯片的初始化程序。包括8583时钟芯片状态寄存器的初始化
💻 C
字号:
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File From TI
#include "SCI2.h"

void init_8583()										
{
/*	do
	{start_8583();
	ADDRESS_8583.all=0x00A0;		//slave address
	write_8583();
	EX_ACK();						//检查应答信号
	}while(FLAG_8583==0);
	
	do
	{ADDRESS_8583.all=0x0003;		//ALARM CONTROL寄存器address
	write_8583();
	EX_ACK();						//检查应答信号	
	}while(FLAG_8583==0);

//re3
	do
//	{ADDRESS_8583.all=0x000A;			//分   初始化状态寄存器,这里应该是data,但为了方便编程还用address
	{ADDRESS_8583.all=0x0055;			//妙   初始化状态寄存器,这里应该是data,但为了方便编程还用address
	write_8583();
	EX_ACK();
	}while(FLAG_8583==0);	
	TR_NACK();
	stop_8583();				//完成一次写ALARM CONTROL寄存器的操作
	getdata_8583();
*/
//re0
	do
	{start_8583();
	ADDRESS_8583.all=0x00A0;		//slave address
	write_8583();
	EX_ACK();						//检查应答信号
	}while(FLAG_8583==0);
	
	do
	{ADDRESS_8583.all=0x0000;		//状态寄存器address
	write_8583();
	EX_ACK();						//检查应答信号
	}while(FLAG_8583==0);

//re1
	do
	{ADDRESS_8583.all=0x0004;			//初始化状态寄存器,这里应该是data,但为了方便编程还用address
	write_8583();
	EX_ACK();	
	}while(FLAG_8583==0);
	TR_NACK();
	stop_8583();				//完成一次写状态寄存器的操作
	
//re2
	do
	{start_8583();
	ADDRESS_8583.all=0x00A0;		//slave address
	write_8583();
	EX_ACK();						//检查应答信号
	}while(FLAG_8583==0);
	
	do
	{ADDRESS_8583.all=0x0008;		//ALARM CONTROL寄存器address
	write_8583();
	EX_ACK();						//检查应答信号	
	}while(FLAG_8583==0);

//re3
	do
	{ADDRESS_8583.all=0x000A;			//分   初始化状态寄存器,这里应该是data,但为了方便编程还用address
//	{ADDRESS_8583.all=0x0009;			//妙   初始化状态寄存器,这里应该是data,但为了方便编程还用address
	write_8583();
	EX_ACK();
	}while(FLAG_8583==0);	
	TR_NACK();
	stop_8583();				//完成一次写ALARM CONTROL寄存器的操作
	
//re4
	do
	{start_8583();
	ADDRESS_8583.all=0x00A0;		//slave address
	write_8583();
	EX_ACK();						//检查应答信号
	}while(FLAG_8583==0);
	
	do
	{ADDRESS_8583.all=0x0007;		//周期寄存器address
	write_8583();
	EX_ACK();						//检查应答信号	
	}while(FLAG_8583==0);

//re5
	do
	{ADDRESS_8583.all=0x0040;			//初始化周期寄存器,这里应该是data,但为了方便编程还用address
	write_8583();
	EX_ACK();
	}while(FLAG_8583==0);	
	TR_NACK();
	stop_8583();				//完成一次写周期寄存器的操作			
	getdata_8583();			
					    									    									
}  
void 	getdata_8583(void)
{
	start_8583();
	ADDRESS_8583.all=0x00A0;		//slave address for write
	write_8583();
	EX_ACK();
	
	ADDRESS_8583.all=0x0008;		//周期寄存器address
	write_8583();
	EX_ACK();
	
	start_8583();
	ADDRESS_8583.all=0x00A1;		//slave address for read
	write_8583();
	EX_ACK();
	ADDRESS_8583.all=0;
	read_8583();
	TR_NACK();
	stop_8583();
	
}
void	read_8583(void)
{
	EALLOW;
	GpioMuxRegs.GPADIR.bit.GPIOA8=0;
	EDIS;

	
	GpioDataRegs.GPADAT.bit.GPIOA9=1;
	Delay_4us();
	ADDRESS_858.bit.ADDRESS_7=GpioDataRegs.GPADAT.bit.GPIOA8;
	GpioDataRegs.GPADAT.bit.GPIOA9=0;
	Delay_4us();
	
	GpioDataRegs.GPADAT.bit.GPIOA9=1;
	Delay_4us();
	ADDRESS_858.bit.ADDRESS_6=GpioDataRegs.GPADAT.bit.GPIOA8;
	GpioDataRegs.GPADAT.bit.GPIOA9=0;
	Delay_4us();
	
	GpioDataRegs.GPADAT.bit.GPIOA9=1;
	Delay_4us();
	ADDRESS_858.bit.ADDRESS_5=GpioDataRegs.GPADAT.bit.GPIOA8;
	GpioDataRegs.GPADAT.bit.GPIOA9=0;
	Delay_4us();
	
	GpioDataRegs.GPADAT.bit.GPIOA9=1;
	Delay_4us();
	ADDRESS_858.bit.ADDRESS_4=GpioDataRegs.GPADAT.bit.GPIOA8;
	GpioDataRegs.GPADAT.bit.GPIOA9=0;
	Delay_4us();
	
	GpioDataRegs.GPADAT.bit.GPIOA9=1;
	Delay_4us();
	ADDRESS_858.bit.ADDRESS_3=GpioDataRegs.GPADAT.bit.GPIOA8;
	GpioDataRegs.GPADAT.bit.GPIOA9=0;
	Delay_4us();
	
	GpioDataRegs.GPADAT.bit.GPIOA9=1;
	Delay_4us();
	ADDRESS_858.bit.ADDRESS_2=GpioDataRegs.GPADAT.bit.GPIOA8;
	GpioDataRegs.GPADAT.bit.GPIOA9=0;
	Delay_4us();
	
	GpioDataRegs.GPADAT.bit.GPIOA9=1;
	Delay_4us();
	ADDRESS_858.bit.ADDRESS_1=GpioDataRegs.GPADAT.bit.GPIOA8;
	GpioDataRegs.GPADAT.bit.GPIOA9=0;
	Delay_4us();
	
	GpioDataRegs.GPADAT.bit.GPIOA9=1;
	Delay_4us();
	ADDRESS_858.bit.ADDRESS_0=GpioDataRegs.GPADAT.bit.GPIOA8;
	GpioDataRegs.GPADAT.bit.GPIOA9=0;
	Delay_4us();
	
	EALLOW;
	GpioMuxRegs.GPADIR.bit.GPIOA8=1;
	EDIS;
}

void	start_8583(void)
{
	GpioDataRegs.GPADAT.bit.GPIOA8=1;		//SDA=1
		Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=1;		//SCL=1
	Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA8=0;		//SDA=0
	Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=0;		//SCL=0
		Delay_4us();
}
void	stop_8583(void)
{
	GpioDataRegs.GPADAT.bit.GPIOA8=0;		//SDA=0
		Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=1;		//SCL=1
	Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA8=1;		//SDA=1
	Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=0;		//SCL=0
		Delay_4us();
}
void	write_8583(void)
{
	if(ADDRESS_8583.bit.ADDRESS_7==1)
	{
		write_1();
	}
	else
	{
		write_0();
	}
	
	if(ADDRESS_8583.bit.ADDRESS_6==1)
	{
		write_1();
	}
	else
	{
		write_0();
	}
	
	if(ADDRESS_8583.bit.ADDRESS_5==1)
	{
		write_1();
	}
	else
	{
		write_0();
	}
	
	if(ADDRESS_8583.bit.ADDRESS_4==1)
	{
		write_1();
	}
	else
	{
		write_0();
	}
	
	if(ADDRESS_8583.bit.ADDRESS_3==1)
	{
		write_1();
	}
	else
	{
		write_0();
	}
	
	if(ADDRESS_8583.bit.ADDRESS_2==1)
	{
		write_1();
	}
	else
	{
		write_0();
	}
	
	if(ADDRESS_8583.bit.ADDRESS_1==1)
	{
		write_1();
	}
	else
	{
		write_0();
	}
	
	if(ADDRESS_8583.bit.ADDRESS_0==1)
	{
	//	write_1();
		GpioDataRegs.GPADAT.bit.GPIOA8=1;		//SDA=1
		Delay_4us();
		//*****

		//*****
	GpioDataRegs.GPADAT.bit.GPIOA9=1;		//SCL=1
	Delay_4us();

	GpioDataRegs.GPADAT.bit.GPIOA9=0;		//SCL=0
		Delay_4us();
		
	}
	else
	{
	//	write_0();
	GpioDataRegs.GPADAT.bit.GPIOA8=0;		//SDA=0
		Delay_4us();

	GpioDataRegs.GPADAT.bit.GPIOA9=1;		//SCL=1
	Delay_4us();
	
	GpioDataRegs.GPADAT.bit.GPIOA9=0;		//SCL=0
		Delay_4us();
	}
	
}
void	write_1(void)
{
	GpioDataRegs.GPADAT.bit.GPIOA8=1;		//SDA=1
		Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=1;		//SCL=1
	Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=0;		//SCL=0
		Delay_4us();
//	GpioDataRegs.GPADAT.bit.GPIOA8=0;		//SDA=0
	Delay_4us();
}
void	write_0(void)
{
	GpioDataRegs.GPADAT.bit.GPIOA8=0;		//SDA=0
		Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=1;		//SCL=1
	Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=0;		//SCL=0
		Delay_4us();
//	GpioDataRegs.GPADAT.bit.GPIOA8=1;
//	Delay_4us();
}
/*
;******************************************************************************
;05应答位检查子程序EX_ACK
;(经验证明,对准双向口没接收一位都要上拉为高电平)
;功能:发送完一个字节的数据后,检查数据接收端(Receiver)发来的应答信号。.
;      若收到的是应答信号(低电平0),则置标志位为0,表示接收端收到了刚发送的
;      字节;若收到的是非应答信号,则置标志位为1(发送子程序将判断是重发数据还
;      是结束发送数据)。

*/
void	EX_ACK(void)
{
	

	
	
//	GpioDataRegs.GPADAT.bit.GPIOA8=1;		//SDA=1
	EALLOW;
	GpioMuxRegs.GPADIR.bit.GPIOA8=0;
	EDIS;
	GpioDataRegs.GPADAT.bit.GPIOA9=1;		//SCL=1
//		Delay_4us();
		
		Delay_4us();
	ADDRESS_8583.bit.ADDRESS_8=GpioDataRegs.GPADAT.bit.GPIOA8;
//	ADDRESS_8583.bit.ADDRESS_9=GpioDataRegs.GPADAT.bit.GPIOA9;
	if(ADDRESS_8583.bit.ADDRESS_8==0)
		{
			FLAG_8583=1;
		}
	else
		{
			FLAG_8583=0;
		}
	GpioDataRegs.GPADAT.bit.GPIOA9=0;		//SCL=0	
	Delay_4us();
	EALLOW;
	GpioMuxRegs.GPADIR.bit.GPIOA8=1;
	EDIS;
		Delay_4us();
}


/*
;*****************************************************************************
;04发送非应答位子程序TR_NACK
;功能:接收完一个字节的数据后,向发送端(Receiver)发送一个非应答位(1),指示发送端
;      (Transmitter)停止发送数据。
;使用寄存器:
;*****************************************************************************
*/
void	TR_NACK(void)
{
	GpioDataRegs.GPADAT.bit.GPIOA8=1;		//SDA=1
		Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=1;		//SCL=1
	Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=0;		//SCL=0
		Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA8=0;		//SDA=0
		Delay_4us();
}
/*
void	TR_ACK(void)
{
	GpioDataRegs.GPADAT.bit.GPIOA8=0;		//SDA=0
		Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=1;		//SCL=1
	Delay_4us();
	GpioDataRegs.GPADAT.bit.GPIOA9=0;		//SCL=0
		Delay_4us();
//	GpioDataRegs.GPADAT.bit.GPIOA8=0;		//SDA=0
//		Delay_4us();
}
*/

⌨️ 快捷键说明

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