📄 cpt01.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 + -