全部博文(610)
分类: LINUX
2008-04-18 23:00:02
#define uchar unsigned char
#define NAK 0x15 //Xmodem协议中的术语
#define ACK 0x06
#define CAN 0x18
#define EOT 0x04
#define SOH 0x01
//要发送的数据,即430从此数组中取数据构成数据包,共22字节,分5次发送,最后一次补3个0x1A
uchar
FileSend[22] =
{0xAA,0xA9,0xA8,0xA7,0xA6,0xA5,0xA4,0xA3,0xA2,0xA1,0xA0,0x9F,0x9E,0x9D,0x9C,0x9B,0x9A,0x99,0x98,0x97,0x96,0x95};
//数据包,长9字节,分别为SOH、包序号、序号补码、5字节数据、校验码
uchar DataSend[9];
uchar Seq = 0x01; //数据包序号,初值为1
uchar cmpl; //数据包序号的补码
uchar csum; //垂直累加和校验码,初值为0
uchar rec_PC; //收到的PC的确认命令
uchar k = 0; //指向FileSend的标号,从中取数据时使用,初值为0
uchar j = 0; //指向DataSend的标号,发送数据时使用,初值为0
uchar fin_flag = 0; //数据取完的标志,为1时表示FileSend中的数据已经取完
uchar eot_flag = 0; //发送完成的标志,为1时表示430已经发送过了EOT标志
void Init_CLK(); //函数声明
void Init_Port();
void Init_UART0();
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
_DINT(); //关中断
Init_CLK();
Init_Port();
Init_UART0(); //一系列的初始化
_EINT(); //开中断
while(1); //等待:接收中断,功能全在接收中断函数中完成
//主程序只是循环等待
}
/******************时钟初始化函数******************/
void Init_CLK(void)
{
BCSCTL1=0x00;
BCSCTL1 += XT2OFF; //关闭XT2,因为板子上没有
BCSCTL1 += XTS; //低速振荡器是高频模式
BCSCTL2=0x00;
BCSCTL2 += SELM0;
BCSCTL2 += SELM1; //MCLK的时钟源为低速晶体振荡器
//此外,ACLK的时钟源为LFTX1,SMCLK的时钟源为DC0CLK
//分频因子均为1
}
/******************端口初始化函数******************/
void Init_Port(void)
{
P3DIR=0;
P3SEL=0; //P3所有管脚均初始化为输入方向和一般I/O口
return;
}
/******************串口初始化函数******************/
void Init_UART0(void)
{
U0CTL=SWRST; //串行模块设置时的必须
U0CTL += CHAR; //8位数据位,1位停止位,无校验
U0TCTL=0x00;
U0TCTL += SSEL0; //波特率时钟源选择为ACLK
U0BR1=0x01;
U0BR0=0xA0;
U0MCTL=0xBA; //设置波特率为9600
U0CTL &= ~SWRST;
ME1 |= UTXE0+URXE0; //使能USART0模块
IE1 |= URXIE0; //使能USART0的接收中断
P3SEL |= BIT4+BIT5; //P3.4和P3.5为串口功能
P3DIR |= BIT4; //P3.4为输出
return;
}