串口Xmodem协议的发送数据_第1页
串口Xmodem协议的发送数据_第2页
串口Xmodem协议的发送数据_第3页
串口Xmodem协议的发送数据_第4页
串口Xmodem协议的发送数据_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、; msp430x14x.h>#define uchar unsigned char#define nak 0x1 5/xmodem 协议中的术语# define ack 0x06#define can 0x18#define eot 0x04#define soh 0x01要发送的数据,即430从此数组中取数据构成数据包,共22字节,分5次发送,最后一次补3个0x1 auchar filesend22= 0xaa,0xa9,0xa8,0xa7,0xa6)0xa5,0xa4,0xa3,0xa2,0xa1,0xa0,0x9f,0x9e,0x9d,0x9c,0x9b,0x9a,ox99,ox

3、98,0x97,ox96,0x95;数据包,长9字节,分別为soh、包序号、序号补码、5字节数据、校验码uchar datasend9;uchar seq = 0x01;uchar cmpl;uchar esum;/数据包序号,初值为1数据包序号的补码/垂直累加和校验码,初值为0uchar rec_pc;uchar k = 0;uchar j = 0;/收到的pc的确认命令指向filesend的标号,从中取数据时使用,初值为0指向datasend的标号,发送数据时使用,初值为0uchar fin_flag = 0;uchar eot_flag = 0;数据取完的标志,为1时表示filesend

4、川的数据已经取完发送完成的标志,为1时表示430己经发送过了 eot标志void lnit_clk();函数声明void lnit_port();void lnit_uarto();void main(void)wdtctl = wdtpw + wdthold;关闭看门狗_dint();lnit_clk(); lnit_port();in it_uart0();_eint();while(1);关中断一系列的初始化/开中断等待:接收屮断,功能全在接收中断函数中完成/主程序只是循环等待i 时钟初始化函数* */void lnit_ clk(void)bcsctl1 = 0x00;bcsctl1

5、+= xt2off; 关闭xt2,因为板子上没有bcsctl1 += xts;低速振荡器是高频模式bcsctl2=0x00;bcsctl2 += selm0;bcsctl2 + = selm1;/mclk的时钟源为低速晶体振荡器此外,aclk的时钟源为lftx1 , smclk的时钟源为dc0clk /分频因子均为1/* 端口初始化函数 */void lnit_port(void)p3dir=0;p3sel= 0;/p3所有管脚均初始化为输入方向和一般i/o ureturn;串口初始化函数nvoid init_uarto(void)u0ctl= swrst;uoctl += char;u0tc

6、tl=0x00;uotctl += sselo;u0br1 = 0x01;u0br0=0xa0;u0mctl=0xba;uoctl &= swrst;小行模块设置时的必须/8位数据位,1位停止位,无校验波特率时钟源选择为aclk/设置波特率为9600me1 |= utxe0+urxe0; 使能 usart0 模块ie1 |= urxie0;使能usart0的接收中断p3sel |= bit4+bit5; /p3.4 和 p3.5 为串 口功能p3dir |= bit4;/p3.4 为输岀return;/* 接收中断函数 */#pragma vector= usartorx_vector

7、interrupt void usartorx()rec_pc = rxbufo;接收到的pc的命令if (rec_pc = can)while (1); 如果接收到can命令,则取消传输,程序中止/程序在此处循环,不再跳出中断if (k = 0)/k= 0表示这是第一次接收pc命令,判断是否是开始传输的标志nakif (rec_pc= nak) /收到nak则开始发送第一组数据,收到的不是nak则返回继续等待nakcmpl = oxff- seq;计算包序号补码csum = filesendk + filesendk+ 1 + filesendk+2 + filesendk+3+ files

8、endk+4;计算垂直累加和校验码datasendo = soh;datase nd1 = seq;datasend2=datasend3=cmpl;filesendk; datasend4 = filesendk+ 1 ; datasend5filesendk+2 ;datasend6 = filesendk+ 3; datasend7 = filesendk+4;datase nd8 = csum;取得数据包while (j<9)/发送数拯包while (ifg1 & utxi fg0) = = 0);txbufo = datasendj;j + + ;k = k+5;seq

9、+ +;指向下一组数据/数据包序号增1j = 0; return;/返回,不在执行下面的语句if (k != 0)/k! = 0,表示己经发送过了数据包.接收到的是pc对数据包的确认命令if (rec_pc= nak)/pc发m nak,则把刚才发送的数拯包重新发送-遍if (eot_flag = 1)/如果刚才发送的不是数据,而是eot,则再将eot重新发送while (ifg1 & utxifg0) = = 0);txbufo = eot;eot_flag = 1;return; while (j<9)while (ifg1 & utxi fg0) = = 0);tx

10、bufo = datasendj;j + + ;j = 0;if (rec_pc= ack)if (eot_flag= 1)表明刚才发送的是eot,此吋pc发回的ack是对刚才发送的eot的确认,程序完成while (1);else if (fin_flag = 1) /表明刚才发送的是最后一个数据包此时pc发回的ack是对刚才发送的最后一个数据包的确认数据发送完成,发送eot,返回等待确认while (ifg1 & utxi fg0) = = 0);txbuf0 = eot;eot_flag = 1;else刚才发送的是一组普通的数据,取下一个数据包并发送cmpl = oxff -

11、seq;/判断是否己经发送到了最后一组数据if (k= = 20)csum = filesend k + filesend k+ 1 + 0x1 a+0x1a+ 0x1 a;datasendo = soh;datasend1 = seq;datasend2 = cmpl;datasend3 = filesendfk; datasend4 = filesendk+ 1 ; datasend5=0x1a;datasend6 = 0x1 a; datasend7 = 0x1a;datase nd8 = csum;fin_flag = 1;elsecsum =filesendk + filesendk+ 1 + filesendk+ 2 + filesendk+ 3 + filesendk+ 4;datasendo = soh;datasend1 = seq;datasend2 = cmpl;datasend3 = filesendfk; datasend4 = filesendk+ 1 ; datasend5=f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论