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

📄 initial.#1

📁 采用CYGNAL F015单片机
💻 #1
字号:
void Sys_Init(void)
{
       unsigned char delay; // 用于测试目的 

	WDTCN = 0xde; // 禁止看门狗定时器 
    WDTCN = 0xad; 

   // #if OSCEN  //使用内部晶振
   // {
   // OSCICN |= 0x03; // 设置内部振荡器为最高频率(16 MHz) 
//	}
//	#else //外部晶振
//	 {
	OSCXCN = 0x66;										// Enable external crystal	

	delay=256;											// Delay >1 ms  before polling XTLVLD.
	while(delay--);

	while (!(OSCXCN & 0x80));						// Wait until external crystal has
														   // started.
	OSCICN = 0x0C;										// Switch to external oscillator
	OSCICN = 0x88;										// Disable internal oscillator; enable 
														   // missing clock detector.

	while (!(OSCXCN & 0x80));						// Wait until external crystal has
															// started.
	OSCICN = 0x08;										// Switch to external oscillator
//	     }
//	#endif
    XBR0 = 0x07;              // 通过交叉开关将SMBus/SPI/UART连到通用I/O引脚 
	                           //UART P0.6,P0.7
    XBR1 = 0x00;
    XBR2 = 0x40;              // 允许交叉开关和弱上拉 
	SPI0CN=0x01;              //允许SPI;
    SMB0CN = 0x44;            // 允许SMBus在应答周期发送ACK 
    SMB0CR = -80;            // SMBus时钟频率 = 100kHz. 
    EIE1 |= 2;               // SMBus中断允许
	PRT1CF |= 0x44;			// enable P1.6 (LED) as a push-pull output
    
	PRT0CF |= 0x04;	
	PRT2CF |= 0x01;

	//PRT1CF |= 0x40;
 	// set up Timer3 for auto-reload to generate interrupts at 100ms intervals
	TMR3CN = 0x00;									// stop Timer3
	TMR3RLH = ((-TC_100ms >> 8) & 0xff);	// init Timer3 reload value
	TMR3RLL = (-TC_100ms & 0xff);
	TMR3H = 0xff;									// init Timer3 to reload immediately
	TMR3L = 0xff;	
	EIE2 = EIE2 | 0x01;									// enable Timer3 OVR interrupt
	//TMR3CN = 0x04;									// start Timer3 
	EA = 1; // 全局中断允许 
    SM_BUSY = 0; // 为第一次传输释放SMBus 
	MODECON =1;  //充放电模式控制(0为放电,1为充电)
	CH=1;
	RT=0;
}

void UART0_Init (void)
{
   SCON    = 0x50;                     // SCON: mode 1, 8-bit UART, enable RX
   TMOD    = 0x22;                     // TMOD: timer 1,TIMER0, mode 2, 8-bit reload
   TH1    = 0xFA;//-(SYSCLK/BAUDRATE/16);     // set Timer1 reload value for baudrate
   TL1=TH1;
   TH0=DAH;
   TL0=DAL;
   CKCON |= 0x18;                      // Timer1,TIMER0 uses SYSCLK as time base
   PCON  |= 0x80;                      // SMOD = 1
   ES0=1;                              
   ET0=1;
   ET2=1;
   TR0=1;
   TR1    = 1;                         // start Timer1
   T2CON =0x00;                        //用定时器1的溢出脉冲做串口发送/接收时钟,定时器、
   RCAP2H =0xfe;                  //TR2=0,停计数器、,具有重装载功能
   RCAP2L =0xfb;                  //1个字节10位占用174个机器周期,
   TH2     =0xfe;                   //等待10个字节时须在16位模式下设置为0xf933
   TL2     =0xfb;                                   									  
}
void DAC_Init(void)
{
   REF0CN=1; //使能基准参考电压
   
   DAC0CN=0x80;//DAC0DF=000;
    
   REF0CN=0x03;//
}

void Var_Init(void)
{
    unsigned char i;  
 	for ( i=0; i<10; i++)
    RECVCHARS[i]=0;
    RECVCHARS[9]=0;
 	for ( i=0; i<RBUFSIZE; i++)
	RData[i]=0;                //串口接收数据缓冲区定义为30字节
 	for ( i=0; i<SBUFSIZE; i++)
	SData[i]=0;                //串口接收数据缓冲区定义为30字节

    Pos = 0;
    DataNo = 0;
	RECVTIMES=0;
	DataSended=0;
	TestVar=0;
	Head=0;
}

⌨️ 快捷键说明

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