//-----------------------------------------------------------------------------
/* 初始化程序 */
//-----------------------------------------------------------------------------
void Delay1us(unsigned char us)
{
while (us)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
--us;
}
} // 延时1us
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
// OSCICN = 0x07; //interal 16MHZ
}
void PORT_Init (void)
{
XBR0 = 0x07; // Enable SMBus, SPI0, and UART0
XBR1 = 0x00;
XBR2 = 0x44; // Enable crossbar and weak pull-ups
EMI0TC = 0x21;
P74OUT = 0xFF;
P0MDOUT = 0x15;
P1MDOUT |= 0x3d; //P1.2-P1.5推挽输出
P1 &= 0xc3; //P1.2-P1.5=0
}
//-----------------------------------------------------------------------------
/* ADC0初始化 */
//-----------------------------------------------------------------------------
void init_adc(void)
{
ADC0CN = 0x81; // ADC0 enabled; normal tracking
// mode; ADC0 conversions are initiated
// on write to AD0BUSY; ADC0 data is
// left-justified
REF0CN = 0x07; // enable temp sensor, on-chip VREF
// and VREF output buffer
AMX0SL = MUX_volt;
ADC0CF = (SYSCLK/2500000) < < 3; // ADC conversion clock = 2.5MHz
//ADC0CF |= 0x01; // PGA gain = 2
EIE2 &= ~0x02; // disable ADC0 EOC interrupt
EIE1 &= ~0x04; // disable ADC0 window compare interrupt
}
void Delay1ms(unsigned char T)
{
while (T)
{
Delay1us(200);
Delay1us(200);
Delay1us(200);
Delay1us(200);
Delay1us(200);
T--;
}
} //延时1ms
//-----------------------------------------------------------------------------
// UART0初始化
//-----------------------------------------------------------------------------
//
//设置UART0, 用定时器1为波特率发生器
//
void UART1_Init (void)
{
SCON1 = 0x70; // SCON1: 模式1, 8位UART, 允许RX
TMOD = 0x20; // TMOD: 定时器1, 模式2, 8位重装
TH1 = -(SYSCLK/BAUDRATE/16); // 设定波特率;
TL1 = TH1;
TR1 = 1; // 起动定时器1
CKCON |= 0x10; // 定时器1使用系统时钟为时基
PCON |= 0x10; // SMOD00 = 1
EIE2 = 0x40; //Extended Interrupt Enable 2
}
void UART1_ISR (void) interrupt 20
{
if(!(SCON1 &0x02))
SCON1 &=0xfd;
}
/* 发送程序*/
void send(void)
{
uchar i;
do{
SBUF1=0xaa;
while(!(SCON1 &0x02));
SCON1 &=0xfd;
while(!(SCON1 &0x01));
SCON1 &=0xfe;
} while((SBUF1^0xbb)!=0);
do{
sum=0;
for(i=0;i <6;i++)
{
SBUF1= buf[i];
sum=sum+buf[i];
while(!(SCON1 &=0x02))
SCON1 &=0xfd;
}
SBUF1 = sum;
while(!(SBUF1 &=0x02) )
SBUF1 &= 0xfd;
} while(SBUF1!=0);
}
void Delay1s(unsigned char T)
{
while (T)
{
Delay1ms(200);
Delay1ms(200);
Delay1ms(200);
Delay1ms(200);
Delay1ms(200);
T--;
}
} //延时1s
//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------
void main (void)
{
sum=0;
WDTCN = 0xde;
WDTCN = 0xad; //关看门狗
SYSCLK_Init (); //初始化时钟
PORT_Init (); //初始化IO口
UART1_Init (); //初始化串口
CPT1CN|=0x80; //使能比较器1
REF0CN = 0x03; //使能片内参考电压
EA=1;
buf[0]=1;buf[1]=2;buf[2]=3;buf[3]=4;buf[4]=5;buf[5]=6;
while(1)
{
send();
}
}