2、0x14x.h>#defineucharunsignedchar#defineNAK0x15//Xmodem協(xié)議中的術(shù)語#defineACK0x06#defineCAN0x18#defineEOT0x04#defineSOH0x01〃要發(fā)送的數(shù)據(jù),即430從此數(shù)組中取數(shù)據(jù)構(gòu)成數(shù)據(jù)包,共22字節(jié),分5次發(fā)送,最后一次補(bǔ)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};〃數(shù)據(jù)包
3、,長9字節(jié),分別為SOH、包序號、序號補(bǔ)碼、5字節(jié)數(shù)據(jù)、校驗碼ucharDataSend[9];ucharSeq=0x01;ucharcmpl;ucharesum;//數(shù)據(jù)包序號,初值為1〃數(shù)據(jù)包序號的補(bǔ)碼//垂直累加和校驗碼,初值為0ucharrec_PC;uchark=0;ucharj=0;//收到的PC的確認(rèn)命令〃指向FileSend的標(biāo)號,從中取數(shù)據(jù)時使用,初值為0〃指向DataSend的標(biāo)號,發(fā)送數(shù)據(jù)時使用,初值為0ucharfin_flag=0;uchareot_flag=0;〃數(shù)據(jù)取完的標(biāo)志,為1時表示FileSend川的數(shù)據(jù)已經(jīng)取完〃發(fā)送完成的標(biāo)志,為1時表示430己經(jīng)發(fā)送過
4、了EOT標(biāo)志voidlnit_CLK();〃函數(shù)聲明voidlnit_Port();voidlnit_UARTO();voidmain(void){WDTCTL=WDTPW+WDTHOLD;〃關(guān)閉看門狗_DINT();lnit_CLK();lnit_Port();Init_UART0();_EINT();while(1);〃關(guān)中斷〃一系列的初始化//開中斷〃等待:接收屮斷,功能全在接收中斷函數(shù)中完成//主程序只是循環(huán)等待I………………時鐘初始化函數(shù)******************/voidlnit_CLK(void){BCSCTL1=0x00;BCSCTL1+=XT2OFF;〃關(guān)閉XT2
5、,因為板子上沒有BCSCTL1+=XTS;〃低速振蕩器是高頻模式BCSCTL2=0x00;BCSCTL2+=SELM0;BCSCTL2+=SELM1;//MCLK的時鐘源為低速晶體振蕩器〃此外,ACLK的時鐘源為LFTX1,SMCLK的時鐘源為DC0CLK//分頻因子均為1}/******************端口初始化函數(shù)******************/voidlnit_Port(void){P3DIR=0;P3SEL=0;//P3所有管腳均初始化為輸入方向和一般I/OUreturn;}串口初始化函數(shù)nvoidInit_UARTO(void){U0CTL=SWRST;UOCTL+=
6、CHAR;U0TCTL=0x00;UOTCTL+=SSELO;U0BR1=0x01;U0BR0=0xA0;U0MCTL=0xBA;UOCTL&=~SWRST;〃小行模塊設(shè)置時的必須//8位數(shù)據(jù)位,1位停止位,無校驗〃波特率時鐘源選擇為ACLK//設(shè)置波特率為9600ME1
7、=UTXE0+URXE0;〃使能USART0模塊IE1
8、=URXIE0;〃使能USART0的接收中斷P3SEL
9、=BIT4+BIT5;//P3.4和P3.5為串口功能P3DIR
10、=BIT4;//P3.4為輸岀return;}/******************接收中斷函數(shù)******************/#pragm
11、avector=USARTORX_VECTOR—interruptvoidUsartORx(){rec_PC=RXBUFO;〃接收到的PC的命令if(rec_PC==CAN){while(1);〃如果接收到CAN命令,則取消傳輸,程序中止//程序在此處循環(huán),不再跳出中斷}if(k==0)//k=0表示這是第一次接收PC命令,判斷是否是開始傳輸?shù)臉?biāo)志NAK{if(rec_PC==NAK)//收到NAK則開始發(fā)送