📄 main1.c
字号:
#include <c8051f020.h>
#include <intrins.h>
//-----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
void SYSCLK_Init (void)
{
int i; // delay counter
OSCXCN = 0x67; // start external oscillator with
// 18.432MHz 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
}
//------------------------------------------------------------------------------------
void PORT_Init (void)
{
XBR2 = 0x40; // Enable crossbar and weak pull-ups
P0MDOUT=0xff;
P1MDOUT=0xff;
P2MDOUT=0xff;
P3MDOUT=0xff;
}//------------------------------------------------------------------------------------
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.)
}
//------------------------------------------------------------------------------------
unsigned char Count1ms;
void Timer0_Init (void)
{
CKCON|=0x8;
TMOD|=0x1; //16Bit
Count1ms=10;
TR0 = 0; // STOP Timer0
TH0 = (-SYSCLK/1000) >> 8; // set Timer0 to overflow in 1ms
TL0 = -SYSCLK/1000;
TR0 = 1; // START Timer0
IE|= 0x2;
}
//------------------------------------------------------------------------------------
void Timer0_ISR (void) interrupt 1 //1ms
{
TH0 = (-SYSCLK/1000) >> 8;
TL0 = -SYSCLK/1000;
if (Count1ms) Count1ms--;
}
//-------------------------------------------------------------------------------------
void Delay1ms(unsigned char T)
{
Count1ms=T;
while (Count1ms);
}
void Delay1s(unsigned char T)
{
while (T)
{
Delay1ms(200);
Delay1ms(200);
Delay1ms(200);
Delay1ms(200);
Delay1ms(200);
T--;
}
}
//---------------------------------------------------------------------------------------
extern void senddata(unsigned char ad,unsigned char d);
extern void delay(long int );
extern void init_led();
//--------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
void main (void)
{
unsigned int w,m;
unsigned char i,j,k,l;
EA=0;
WDTCN = 0xde;
WDTCN = 0xad; //关看门狗
EA=1;
SYSCLK_Init (); //初始化时钟
Timer0_Init(); //初始化定时器
PORT_Init (); //初始化IO口
SPI0_Init (); //初始化SPI0
init_led();
w= GetTempValue();
for (;;)
{
Delay1ms(250);
Delay1ms(250);
Delay1ms(250);
//延时务必要长;小于1/2不行
m=w>>4;
i=(m%1000)/100;
i=i&~(0x80);
j=(m%100)/10;
k=m%10;
k=0x80+k;
l=(w%16)*5/8;
if(i)
senddata(4,i);
if(i||j)
senddata(3,j);
senddata(2,k);
senddata(1,l);
w= GetTempValue();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -