串口Xmodem协议的发送数据

串口Xmodem协议的发送数据

ID:46867025

大小:55.50 KB

页数:7页

时间:2019-11-28

串口Xmodem协议的发送数据_第1页
串口Xmodem协议的发送数据_第2页
串口Xmodem协议的发送数据_第3页
串口Xmodem协议的发送数据_第4页
串口Xmodem协议的发送数据_第5页
资源描述:

《串口Xmodem协议的发送数据》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、串口Xmodem协议的发送数据程序日期:2007-05-21编写:李猛Xmodem协议Xmodem协议备注:此程序中430为发送方说明:1.程序开始时,会循环等待NAK的到来,只要收到的不是NAK,就会一直等待下去,直到收到了NAK,才开始数据的发送;2•上一轮如杲发送的是-组数据,则收到CAN,程序就中止;收到ACK,就发送下一组数据;收到NAK,就发送上一组数据;如果收到的不是上面三种,程序就返回,直到出现三个中的某一个;3•上一轮如果发送的是EOT,收到CAN就中止;收到ACK,就结束程序收到NAK,就再发送EOT;收到的是其他数据就返冋,直到出现三个中的场#inelude

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则开始发送

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。