2、0x14x.h>#defineucharunsignedchar#defineNAK0x15//Xmodem协议中的术语#defineACK0x06#defineCAN0x18#defineEOT0x04#defineSOH0x01〃要发送的数据,即430从此数组中取数据构成数据包,共22字节,分5次发送,最后一次补3个0x1AucharFileSend[22]={0xAA,0xA9,0xA8,0xA7,0xA6)0xA5,0xA4,0xA3,0xA2,0xA1,0xA0,0x9F,0x9E,0x9D,0x9C,0x9B,0x9A,Ox99,Ox98,0x97,Ox96,0x95};〃数据包
3、,长9字节,分別为SOH、包序号、序号补码、5字节数据、校验码ucharDataSend[9];ucharSeq=0x01;ucharcmpl;ucharesum;//数据包序号,初值为1〃数据包序号的补码//垂直累加和校验码,初值为0ucharrec_PC;uchark=0;ucharj=0;//收到的PC的确认命令〃指向FileSend的标号,从中取数据时使用,初值为0〃指向DataSend的标号,发送数据时使用,初值为0ucharfin_flag=0;uchareot_flag=0;〃数据取完的标志,为1时表示FileSend川的数据已经取完〃发送完成的标志,为1时表示430己经发送过
4、了EOT标志voidlnit_CLK();〃函数声明voidlnit_Port();voidlnit_UARTO();voidmain(void){WDTCTL=WDTPW+WDTHOLD;〃关闭看门狗_DINT();lnit_CLK();lnit_Port();Init_UART0();_EINT();while(1);〃关中断〃一系列的初始化//开中断〃等待:接收屮断,功能全在接收中断函数中完成//主程序只是循环等待I………………时钟初始化函数******************/voidlnit_CLK(void){BCSCTL1=0x00;BCSCTL1+=XT2OFF;〃关闭XT2
5、,因为板子上没有BCSCTL1+=XTS;〃低速振荡器是高频模式BCSCTL2=0x00;BCSCTL2+=SELM0;BCSCTL2+=SELM1;//MCLK的时钟源为低速晶体振荡器〃此外,ACLK的时钟源为LFTX1,SMCLK的时钟源为DC0CLK//分频因子均为1}/******************端口初始化函数******************/voidlnit_Port(void){P3DIR=0;P3SEL=0;//P3所有管脚均初始化为输入方向和一般I/OUreturn;}串口初始化函数nvoidInit_UARTO(void){U0CTL=SWRST;UOCTL+=
6、CHAR;U0TCTL=0x00;UOTCTL+=SSELO;U0BR1=0x01;U0BR0=0xA0;U0MCTL=0xBA;UOCTL&=~SWRST;〃小行模块设置时的必须//8位数据位,1位停止位,无校验〃波特率时钟源选择为ACLK//设置波特率为9600ME1
7、=UTXE0+URXE0;〃使能USART0模块IE1
8、=URXIE0;〃使能USART0的接收中断P3SEL
9、=BIT4+BIT5;//P3.4和P3.5为串口功能P3DIR
10、=BIT4;//P3.4为输岀return;}/******************接收中断函数******************/#pragm
11、avector=USARTORX_VECTOR—interruptvoidUsartORx(){rec_PC=RXBUFO;〃接收到的PC的命令if(rec_PC==CAN){while(1);〃如果接收到CAN命令,则取消传输,程序中止//程序在此处循环,不再跳出中断}if(k==0)//k=0表示这是第一次接收PC命令,判断是否是开始传输的标志NAK{if(rec_PC==NAK)//收到NAK则开始发送