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

📄 inition.c

📁 温控仪表的初始化程序
💻 C
字号:
#include "C8051F020.h"
#include "Global.h"


bit SM_BUSY;								// This bit is set when a send or receive
												// is started. It is cleared by the
												// ISR when the operation is finished.
unsigned char  Count1ms;
void SYSCLK_Init(void);
void Inition(void);
void Init_adc(void);
void PORT_Init(void);
void SPI0_Init(void);
void UART0_Init(void);
void UART1_Init(void);
void Timer0_Init(void);
void Timer2_Init(void);
void	Init_Max706(void);
void Init_DS1032(void);

void main (void)
{
	Inition();
	while(1)
	{
	}
}
/***********************************************
函数名称:Inition();
***********************************************/
void Inition(void)
{
	WDTCN = 0xDE;                       // Disable watchdog timer
	WDTCN = 0xAD;
	XBR2  |=0x44;
	EMI0CF =0x27;						// p0~p3;multiplex;share low 4K XRAM  0x24
	P74OUT=0X03;                        //P4-P7为推挽输出,如果需要漏极开路相应为写入0即可
	SYSCLK_Init ();                     // initialize oscillator
	//DAC1CN=0X87;
	Init_adc();
	PORT_Init ();                       // initialize crossbar and GPIO
	SPI0_Init ();                       //初始化SPI0
	UART0_Init ();                      // initialize UART0
	Timer0_Init();						//初始化定时器0
	Timer2_Init();//初始化定时器1
	UART1_Init();
	
	//Timer4_Init();
/*	EA = 1;                             // Enable global interrupts
    ET0=1;//by hongyf
    	ES0=1;

           ET2=1;//by hongyf
*/
	EA = 1;                             // Enable global interrupts
	ES0=1;
       ET0=1;//by hongyf
       ET2=1;//by hongyf
	P5=0X00;
	P6=0XFF;

}
/***********************************************
函数名称:SYSCLK_Init();
***********************************************/
void SYSCLK_Init(void)
{
	int i; // 延时计数器 
	OSCXCN = 0x67; // 开启外部振荡器 22.1184MHz晶体  
	for (i=0; i < 4096; i++) ; // 等待振荡器启振 
	while (!(OSCXCN & 0x80)) ; // 等待晶体振荡器稳定 
	OSCICN = 0x88; // 选择外部振荡器为系统时钟源并允许丢失时钟检测器
}
/***********************************************
函数名称:Init_adc();
***********************************************/
void Init_adc(void)
{
	ADC0CN = 0x81;                      // ADC0 enabled; normal tracking
     	                                // mode; ADC0 conversions are initiated 
                                       	// on write to AD0BUSY; ADC0 data is
                                       	// left-justified
	REF0CN = 0x07;                      // disable temp sensor, on-chip VREF,
                                       	// and VREF output buffer
	AMX0SL = 0x07; 	
	//AMX0CF=0x00;
	ADC0CF = (SYSCLK/2500000) << 3;     // ADC conversion clock = 2.5MHz
    //  ADC0CF |= 0x01;                     // PGA gain = 2
	EIE2 &= ~0x02;                      // disable ADC0 EOC interrupt
	EIE1 &= ~0x04;                      // disable ADC0 window compare interrupt
}

/***********************************************
函数名称:PORT_Init();
***********************************************/
void PORT_Init(void)
{
   	XBR0    = 0x04;                     // Enable UART0  0x04 
   	XBR1    = 0x00;
   	XBR2    = 0x44;                     // Enable crossbar and weak pull-ups;Enable UART1 
   	P0MDOUT|=0xff;                 //Enable weak pull-up
	P1MDOUT|=0xff;
	P74OUT=0xf8;
	//P4=0xff;
	//P5=0x01;                                                      
}
/***********************************************
函数名称:SPI0_Init();
***********************************************/

void SPI0_Init(void)
{
   SPI0CFG = 0x07;                     // data sampled on 1st SCK rising edge
                                       // 8-bit data words
   SPI0CFG|=0xC0;                      //CKPOL =1;

   SPI0CN = 0x03;                      // Master mode; SPI enabled; flags
                                       // cleared
   SPI0CKR = SYSCLK/2/8000000-1;       // SPI clock <= 8MHz (limited by 
                                       // EEPROM spec.)
   SMB0CN = 0x44;									// Enable SMBus with ACKs on acknowledge cycle
   SMB0CR = -80;									// SMBus clock rate = 100kHz.
   EA = 1;											// Global interrupt enable
   SM_BUSY = 0;

}
/***********************************************
函数名称:UART0_Init();
***********************************************/

void UART0_Init(void)
{
	CLR485CS;						   //接收模式
	SADDR0=0x00;                       //0X01;                         //设置本机地址
	SADEN0=0x00;                        //设置本机地址屏蔽位
	SCON0   = 0x50;                     // SCON0: mode 3, 9-bit UART, enable RX
	SCON1   = 0XC0;
	TMOD   |= 0x20;                     // TMOD: timer 1, mode 2, 8-bit reload
	T2CON   = 0x00;                     // TMOD: timer 2, mode 2, 8-bit reload
	TH1    = 0Xfa;              //FA-115200 ,0XE8-28800   //-(SYSCLK/BAUDRATE/16);     // set Timer1 reload value for baudrate
	CKCON = 0x00;                      // Timer1 uses SYSCLK/12 as time base
	PCON  |= 0x80;                      // SMOD00 = 1
	TR1    = 1;                         // start Timer1
	SADDR0=0x00;                       //0X01;                         //设置本机地址
	SADEN0=0X00;                        //设置本机地址屏蔽位                    //设置本机地址屏蔽位
}
/***********************************************
函数名称:UART1_Init();
***********************************************/

void UART1_Init(void)
{
	SET485CS1;						   //接收模式
	SADDR0=0x00;                       //0X01;                         //设置本机地址
	SADEN0=0x00;                        //设置本机地址屏蔽位
	SCON0   = 0x50;                     // SCON0: mode 3, 9-bit UART, enable RX
	SCON1   = 0XC0;
	TMOD   |= 0x20;                     // TMOD: timer 1, mode 2, 8-bit reload
	T2CON   = 0x00;                     // TMOD: timer 2, mode 2, 8-bit reload
	TH1    = 0Xfa;              //FA-115200 ,0XE8-28800   //-(SYSCLK/BAUDRATE/16);     // set Timer1 reload value for baudrate
	CKCON = 0x00;                      // Timer1 uses SYSCLK/12 as time base
	PCON  |= 0x80;                      // SMOD00 = 1
	TR1    = 1;                         // start Timer1
	SADDR0=0x00;                       //0X01;                         //设置本机地址
	SADEN0=0X00;                        //设置本机地址屏蔽位

}
/***********************************************
函数名称:Timer0_Init();
***********************************************/
void Timer0_Init(void)
{
   	CKCON |= 0x08;
  	TMOD  |= 0X01;    	//16Bit
	Count1ms=10;
   	TR0 = 0;                         	// STOP Timer0
   	TH0 = 0xFD;    		// set Timer0 to overflow in 1ms
   	TL0 = 0xDA;
   	IE|= 0x02;
}
/***********************************************
函数名称:Timer2_Init();
***********************************************/
void Timer2_Init(void)
{
	TR2=0;
	CKCON |= 0x10;
	T2CON = 0x34;   // Timer 2 Control Register
	RCAP2H = 0xff;  // Timer 2 Capture Register High Byte
	RCAP2L = 0xff;  // Timer 2 Capture Register Low Byte	
	TH2=0x00;
	TL2=0x00;
	TR2=1;
}



⌨️ 快捷键说明

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