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

📄 init_sys.c

📁 c8051f020实现4个 产UART 口
💻 C
📖 第 1 页 / 共 2 页
字号:

#include  "all.h"


void SMBus_Init();
void SYSCLK_Init (void);
void PORT_Init (void);
void ADC0_Init (void);
//void Timer0_Init (int counts);
void Timer3_Init (int counts);
void Timer4_Init (int counts);    //5ms


void  FLASH_INIT(uchar ttt ) ;

//-----------------------------------------------------------------------------
// Global VARIABLES
//-----------------------------------------------------------------------------





//-----------------------------------------------------------------------------
// SYSCLK配置
//-----------------------------------------------------------------------------
// 配置系统时钟使用外部晶振22.1184MHz

void SYSCLK_Init (void)
{
   int i;                              // delay counter

   OSCXCN = 0x67;                      // start external oscillator with  0110x111 不分频
                                       // 22.1184MHz crystal
   for (i=0; i < 256; i++) ;           // XTLVLD blanking interval (>1ms)

   while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle

   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector  bit7  时钟丢失检测便能
}

// Configure the Crossbar and GPIO ports
void PORT_Init (void)
{
   EA=0;
   XBR0    = 0x05;    //0x2C;                     // Enable UART0 / smsc
   XBR1    = 0x04;  //en int0
  // XBR2    = 0xc4;   //0x44;                     // Enable crossbar and weak pull-ups,Enable UART1


   P0MDOUT = 0;                    // enable TX0 TX1 as a push-pull output
   P1MDOUT = 0;      //P1.1 output
   P2MDOUT = 0;  
   P3MDOUT = 0;
   P74OUT=0;
   
   P1=0;
   P2=0;
   P3=0;
   P4=0;
   P0MDOUT |= 0x7f;   //0x11;                    // enable   sda  scl  TX0  TX1  as a push-pull output
   P0|=0x84;
   P1MDOUT |= 0x00;   // 
   P1|=0x3f;
   P2MDOUT |= 0x80;   //
   P2|=0x3f;
   P3MDOUT |= 0x3e;
   P3|=0xa0;    
   P74OUT|= 0X30;             //bit7   bit 6    bit 5    bit4    bit3    bit2    bit1    bit0
                                          //p7H  P7L    P6H   P6L    P5H    P5L     P4H   P4L 
                                         // 0      0        1       1       0      0        0      0
   P7=0XFF;
   P6=0X00;	
   P5=0X1f;	
   P4=0XF3;	
   

    XBR0    = 0x0d;    //0x5;                     // Enable UART0 / smsc
                                                              //xbr0.3   cex0
    XBR1    = 0x04;  //en int0
    XBR2    = 0xc4;   //0x44;                     // Enable crossbar and weak pull-ups,Enable UART1
    
   
   
   	
}



void INT0_Init()     // CK  RING
{
      IT0=1 ;      // EDGE DOWN       
      EX0=1;
	
}



void SMBus_Init()
{


       //DISABLE();
	
	SMB0CN    = 0x42;
	SMB0CR 	= IIC_SMB0CR;

	EIP1=EIP1|0x02;             //SMBUS中断为高优先级
	EIE1 = EIE1|0x02;			//允许SMBUS中断
	sm_busy=0;
       //ENABLE();

	
	
}




void ADC0_Init (void)
{
   AMX0CF=0;      //sing end
   ADC0CN = 0x04;                      // ADC0 enable; normal tracking
                                       // mode; ADC0 conversions are initiated 
                                       // on overflow of Timer3; ADC0 data is
                                       // right-justified
                                       
   REF0CN = 0x03;                      // disenable temp sensor, on-chip VREF,
                                       // and VREF output buffer
   AMX0SL = 0x00;                      // Select  ain0  sens as ADC mux output
   ADC0CF = (SYSCLK/2500000) << 3;     // ADC conversion clock = 2.5MHz
   ADC0CF |= 0x00;                     // PGA gain = 1

  // EIE2 |= 0x02;                       // enable ADC interrupts

	//DAC0CN = 0x80;	// DAC0 Control Register
	DAC0L = 0x00;	// DAC0 Low Byte Register
	DAC0H = 0x00;	// DAC0 High Byte Register

	//DAC1CN = 0x80;	// DAC1 Control Register
	DAC1L = 0xFF;	// DAC1 Low Byte Register
	DAC1H = 0xFF;	// DAC1 High Byte Register
}





/**********************************************************************
**函数原型:   void Attand_485(void)
**入口参数:   Xin_485_b=1
**出口参数:   无
**返 回 值:   无
**说    明:  T0定时中断子程序INIT
************************************************************************/
/*
void Timer0_Init (int counts)
{
   CKCON|=0x8;
   TMOD|=0x1;    //16Bit
   TH0=(65536-counts)/256;
   TL0=(65536-counts)%256;
   IE|= 0x2; 
   TR0=1;
}

*/



/**********************************************************************
**函数原型:   void Attand_485(void)
**入口参数:   Xin_485_b=1
**出口参数:   无
**返 回 值:   无
**说    明:  T3定时中断子程序INIT
************************************************************************/

void Timer3_Init (int counts)
{
   TMR3CN = 0x00;                      // Stop Timer3; Clear TF3;  scale 12
                                       // use SYSCLK as timebase
   TMR3RL  = -counts;                  // Init reload values
   TMR3    = 0xffff;                   // set to reload immediately
   EIE2   &= ~0x01;                    // disable Timer3 interrupts
  // EIE2   |= 0x01; 
   TMR3CN |= 0x04;                     // start Timer3
}


/**********************************************************************
**函数原型:   void Attand_485(void)
**入口参数:   Xin_485_b=1
**出口参数:   无
**返 回 值:   无
**说    明:  T4定时中断子程序INIT
************************************************************************/


void Timer4_Init (int counts)
{
   CKCON&=0xbf;      //tm4=0    12 scale
   TH4=(65536-counts)/256;
   TL4=(65536-counts)%256;
   T4CON|=0x4;    //START
   RCAP4=65536-counts*SYSCLK/12000 ;   //65536-T*1000*SYSCLK/Scale /1000000       T(ms)
    
              //TF4   EXF4    RCLK1     TCLK1         EXEN4     TR4       C/T4          CP/RL4 00000000
        //  位7      位6    位 5       位 4       位 3       位 2       位 1        位0
            //  0         0       0            0                0               1             0              0                  
   
    T4CON|=0x4;    //START   TR4
    EIE2|=4;         // IE4=1
    
}



void Tpca_Init ()
{

	// 配置PCA
	PCA0MD = 0x40; // 禁止CF中断
	// PCA时基= SYSCLK
	PCA0CPL0 = PWM; // 初始化PCA的PWM
	PCA0CPH0 = PWM;
	PCA0CPM0 = 0x42; // CCM0为8位PWM方
	DIS_PWM ;
	PCA0CN = 0x40; // 允许PCA计数器


/*
     // PCA0CN = 0x40;               // BIT7 CF    BIT6 CR      Clear TF3; 
      PCA0MD=0X00;  //0X01;              //  scale 12         BIT0: ECF
                                       // use SYSCLK as timebase
     PCA0H=0X00;
     PCA0L=0X00;
  
     //EIEP1.3
    EIP1=EIP1|0X08;   // PCA0 INT HGIH

	
    PCA0CPM0=0X46; 
   //。通过置位PCA0CPMn寄存器中ECOMn、TOGn和PWMn位来使能频率输
  //出方式。
  
    PCA0CPH0=120;
    PCA0CPL0=190;
   
     PCA0CN = 0x40;               // BIT7 CF    BIT6 CR      Clear TF3;   start Timer 
*/
}



uint  CWFTT=0;
uint rr45,rr56;
void Tpca_ISR (void) interrupt  9  using 2    //250uS  ONCE
{

       PCA0CN &= 0x7F;               //CLR   BIT7 CF  
     //  PCA0H=0XFE;             //65536-461
      // PCA0L=0X33;

	PCA0H=0XFC;             //65536-461
       PCA0L=0X66;
	   
	 /*
       CWFTT++;
	  if(  CWFTT>4000)  {
	  	       CWFTT=0;
	   	       if(++rr45>=10)   {
	   	                    rr45=0;
	               if(++rr56>=20) 
	   				rr56=0;
	   	}
	 }
	 */
	//Rf_2262();
}








⌨️ 快捷键说明

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