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

📄 cpt01.c

📁 工业以太网测控板资料FX04核心编程模块
💻 C
字号:
#include <c8051f020.h>
#include <intrins.h>
sbit MOSI = P0^4;                      
sbit SCK = P0^2;    
#define SETSPICS1       P5 |= 0x10		
#define CLRSPICS1   	P5 &= ~(0x10)
void delay(unsigned int t);
void SYSCLK_Init(void);
void SPI_Transfer (unsigned int SPI_byte);
void CP0_ISR(void);
void CP0_ISRR(void);
void CP1_ISRL(void);
void CP1_ISRR(void);
/*void delay(unsigned int t)
{
  unsigned int i,j;
  for(i=0;i<t;i++)
    for(j=0;j<10;j++)
	  {
	    _nop_();
       }
}
*/
void SYSCLK_Init (void)
{
   int i;                              // delay counter
   OSCXCN = 0x67;                      // start external oscillator with
                                       // 11.0592MHz crystal
   for (i=0; i < 256; i++) ;           // Wait for osc. to start up
   while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector
//	OSCICN = 0x07;   //interal 16MHZ
}


 void SPI_Transfer (unsigned int SPI_byte)
{
   unsigned char SPI_count;            // counter for SPI transaction

   for (SPI_count = 8; SPI_count > 0; SPI_count--) // single byte SPI loop
   {
      SCK = 0;                      // set SCK low
      MOSI = SPI_byte & 0x80;          // put current outgoing bit on MOSI
      SCK = 1;                      // set SCK high
      SPI_byte = SPI_byte << 1;        // shift next bit into MSB
     
   }
    CLRSPICS1;
	
	SETSPICS1;
    SCK=1;
	MOSI=1;
   
} // END SPI_Transfer

main()
{
	WDTCN = 0xde;
	WDTCN = 0xad;           //关看门狗
	SYSCLK_Init ();         //初始化时钟
    XBR2=0x44;
	P0MDOUT=0x14;
	P74OUT = 0x08;
	SCK=1;
	MOSI=1;
	SETSPICS1;
    CPT0CN=0x8f;
	//CPT1CN=0x8f;
	EIP1=0x80;
	EIE1=0xf0;
	EA=1;
	 while(1)
	 {
	  }
}
   
 void CP0_ISR(void) interrupt 10  //比较器0下降沿中断服务程序
 {
  
  CPT0CN &=0xCF;
  SPI_Transfer(0x00);    //关闭DEMO-A板上的D301LED
}
void CP0_ISRR(void) interrupt 11 //比较器0上升沿中断服务程序
{
 CPT0CN &=0xCF;
SPI_Transfer(0x01);   //点亮DEMO-A上的D301 LED
}

void CP1_ISRL(void) interrupt 12  //比较器1下降沿中断服务程序
 {
  
 CPT1CN &=0xCF;
  SPI_Transfer(0x00); //关闭DEMO-A上的D301 LED
}
void CP1_ISRR(void) interrupt 13 //比较器1上升沿中断服务程序
{
CPT1CN &=0xCF;
SPI_Transfer(0x01);  //点亮DEMO-A上的D301 LED.
}

⌨️ 快捷键说明

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