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

📄 source1.c

📁 c8051f060操作ds1747,存取数据,设置和读取时钟信息
💻 C
字号:
/////////////////////////////////////
//  Generated Initialization File  //
/////////////////////////////////////

#include "c8051F060.h"
#include "absacc.h"

// Peripheral specific initialization functions,
// Called from the Init_Device() function
#define uchar unsigned char
#define uint unsigned int 

void init_rtc();
void disp_rtc();

uchar xdata * data read_ptr;
idata unsigned char a[13];
uchar res[5];
uchar t,k;
uint i;

sbit AD16 = P3^4;
sbit AD17 = P3^5;
sbit AD18 = P3^6;
sbit RD  = P4^6;
sbit WR  = P4^7;



void Timer_Init()
{
    SFRPAGE   = TIMER01_PAGE;
    TCON      = 0x40;
    TMOD      = 0x20;
    TH1       = 0x9F;
	TR1       = 1;
}

void Port_IO_Init()
{
    SFRPAGE   = CONFIG_PAGE;
//    P3MDOUT   = 0x07;
    XBR0      = 0x05;
    XBR2      = 0x44;
}

void Oscillator_Init()
{
    int i = 0;
    SFRPAGE   = CONFIG_PAGE;
    OSCXCN    = 0x67;
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0);
    CLKSEL    = 0x01;
}

void Interrupts_Init()
{
    IE        = 0x80;
    EIE2      = 0x40;
    EIE1      = 0x02;
}
void SMBus_Init()
{
    SFRPAGE   = SMB0_PAGE;
    SMB0CN    = 0x40;
    SMB0CR    = 0x99;
}
void EMIF_Init (void)
{
   char SFRPAGE_SAVE = SFRPAGE;        // Save Current SFR page

   SFRPAGE = EMI0_PAGE;                // Save SFR_PAGE
   EMI0CF = 0x3F;                      // upper ports; non-muxed mode;
                                       // split mode w/o bank select
//   EMI0TC = 0x45;                      // timing (7-cycle MOVX)

   SFRPAGE = CONFIG_PAGE;
   P4MDOUT |= 0xFF;                    // all EMIF pins configured as
   P5MDOUT |= 0xFF;                    // push-pull
   P6MDOUT |= 0xFF;
   P7MDOUT |= 0xFF;

   SFRPAGE = SFRPAGE_SAVE;             // restore SFR_PAGE
}
void Init_Device(void)
{
    Timer_Init();
    Port_IO_Init();
    Oscillator_Init();
    Interrupts_Init();
	SMBus_Init();
	EMIF_Init ();

}
//=======================================================
void smbus_cfg(uchar smb0adr)
{
	SFRPAGE=0x00;
	SMB0ADR=smb0adr;
}
void smbusMasterStart()
{
	k=0;
	SFRPAGE=0x00;
	STA=1;
}
//=========================================================
//=======================================================
main()
{
	

    WDTCN = 0x07;	//看门狗禁止
    WDTCN = 0xDE;   
    WDTCN = 0xAD;

	EA=1;
	Init_Device();
	smbus_cfg(0x70);
	smbusMasterStart();

//	init_rtc();

	for(i=0;i<60000;i++)
	{	for(i=0;i<60000;i++);}
	for(i=0;i<60000;i++)
	{	for(i=0;i<60000;i++);}

	a[0]=0x1b;
	a[1]=0x20;
	a[2]=0x99;
	a[3]=0x1b;
	a[4]=0x24;
/*	AD16=1;AD17=1;AD18=1;
	for(i=0;i<30000;i++);
	XBYTE[0xF8FF]=0x40;
	read_ptr=0xF8FF;//XRAM_START_ADD;1020-1029
	for(i=5;i<13;i++)
	{	
		a[i]=*read_ptr;
		read_ptr=read_ptr+0x0100;	
	}
	XBYTE[0xF8FF]=0;*/
	disp_rtc();

	SFRPAGE=0x01;
	SBUF1=a[0];

	while(1);
}
//===============================================
void uart1_ISR() interrupt 20
{
	if(RI1){
		res[t]=SBUF1;//将接收数据写入res[]数组
		t++;
		RI1=0;
	}
	if(TI1){
		t++;	
		if(t<13){			
			SBUF1=a[t];//发送数据数组为aa[]

		}

		TI1=0;

	}
}
//======================================================
void smbusInt() interrupt 7
{
	SFRPAGE=0x00;
	
	if(SMB0STA==0x08)
	{
	   	SMB0DAT=0x70;
		k=1;
		STA=0;
	}
	if(SMB0STA==0x28||SMB0STA==0x18)
	{
		if(k>=2)
			STO=1;
		if(k==1)
			SMB0DAT=0x00;									
		k++;
	}

	if(SMB0STA==0x10)
	{
		SMB0DAT=0x6e;
		STA=0;
	}
		SI=0;
}
//========================================================
/*void init_rtc()
{
	AD16 = AD17 = AD18 = 1;
	
	XBYTE[0xf8ff] = 0xA0; 
	XBYTE[0xf9ff] = 0x00;//0x00;    second
	XBYTE[0xfaff] = 0x52;//0x01;	minute
	XBYTE[0xfbff] = 0x17;//0x02;	hour
	XBYTE[0xfcff] = 0x05;//0x06;	day
	XBYTE[0xfdff] = 0x19;//0x07;	date
	XBYTE[0xfeff] = 0x05;//0x07;	month
	XBYTE[0xffff] = 0x06;//0x06;	year
	
	XBYTE[0xfff8] = 0x20;
}*/
void disp_rtc()
{
	AD16 = AD17 = AD18 = 1;
	
	XBYTE[0xf8ff] = (0x40||XBYTE[0xf8ff]); 

	a[5]		  = XBYTE[0xf9ff];	
	a[6]		  = XBYTE[0xfaff];
	a[7]		  = XBYTE[0xfbff];
	a[8]		  = (XBYTE[0xfcff]&0x07);
	a[9]		  = XBYTE[0xfdff];
	a[10]		  = XBYTE[0xfeff];
	a[11]		  = XBYTE[0xffff];
	a[12]		  = XBYTE[0xf8ff];	
	XBYTE[0xf8ff] = 0;
}

//===========================================================
/*
	uchar p=0x41,m=0x61;

	AD16=1;AD17=0;AD18=0;
	for(i=0;i<30000;i++);
	read_ptr=XBYTE[0x1010];//XRAM_START_ADD;
	for(i=0;i<10;i++)
	{	
		*read_ptr=p;
		read_ptr++;
		p=p+1;	
	}

	AD16=1;AD17=1;AD18=0;
	for(i=0;i<30000;i++);
	read_ptr=XBYTE[0x1010];//XRAM_START_ADD;
	for(i=0;i<10;i++)
	{	
		*read_ptr=m;
		read_ptr++;
		m=m+1;	
	}

	AD16=1;AD17=1;AD18=0;
	for(i=0;i<30000;i++);
	read_ptr=XBYTE[0x1010];//XRAM_START_ADD;1020-1029
	for(i=5;i<15;i++)
	{	
		a[i]=*read_ptr;
		read_ptr++;	
	}
	*/

⌨️ 快捷键说明

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