ymodem协议c语言,STC单片机ISP-Demo-使用Y-Modem协议源码与库函数分享

本文档提供了使用C语言实现的Y-Modem协议在STC单片机上的ISP-Demo源码。详细介绍了如何通过Y-Modem协议进行串口下载,包括串口发送和接收函数、文件名和长度的处理、数据包接收等关键部分。此外,还展示了如何在单片机中进行错误检查和校验,确保程序的可靠传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define MAIN_Fosc                22118400L        //定义主时钟

#define Baudrate0                115200UL        //串口0波特率600~115200

#include        "STC15Fxxxx.H"

#include        "ymodem.h"

#define        WDT_Enable        0                        //1: 允许内部看门狗,        0: 禁止

#define D_BRT0_1T_8bit                (256 - MAIN_Fosc / 32 / Baudrate0)        //计算波特率        1T  8bit

#define        ISP_ADDRESS                0xE400                                //ISP开始地址, 高地址必须是偶数, 注意要预留ISP空间,本例程留3K

#define        UserflashLenth         (ISP_ADDRESS-3)                //用户FLASH长度, 保留个字节存放用户地址程序的跳转地址

/*************        本地变量声明        **************/

typedef                void (*pFunction)(void);

pFunction        Jump_To_Application;

u16                        JumpAddress;

u16                FileLength;

u16                Y_TimeOut,WaitTime;

u8                packets_received, session_begin;

u8                idata file_name[FILE_NAME_LENGTH];

u8                idata file_size[FILE_SIZE_LENGTH];

u8                StartCode[3];

u16                FlashDestination;

u16                RxCnt;

u8                HandCnt;

u8        xdata        RxBuff[1024];

u8        idata        RxBuff_10[10];

u32                DownCheckSum,FlashCheckSum;

/*************        本地函数声明        **************/

u8                Hex2Ascii(u8 dat);

u8                UART_Download(void);

u16                Str2Int(u8 *inputstr);

void        ISP_WriteByte(u16 addr, u8 dat);

void        ISP_EraseSector(u16 addr);

u8        ISP_ReadByte(u16 addr);

//========================================================================

// 函数: void        TX1_write2buff(u8 dat)

// 描述: 串口发送一个字节.

// 参数: dat: 要发送的字节.

// 返回: none.

// 版本: V1.0, 2013-4-29

//========================================================================

void        TX1_write2buff(u8 dat)

{

TI = 0;

SBUF = dat;

while(!TI);

}

//========================================================================

// 函数: void        PrintString1(u8 *p)

// 描述: 串口发送一个字符串.

// 参数: *p: 要发送的字符串指针.

// 返回: none.

// 版本: V1.0, 2013-4-29

//========================================================================

void        PrintString1(u8 *p)

{

for(; *p > 0; p++)        TX1_write2buff(*p);

}

//========================================================================

// 函数: void        Tx_DEC_U16(u16 j)

// 描述: 把一个16位整型数转成十进制送串口发送.

// 参数: j: 要处理的16位整型数.

// 返回: none.

// 版本: V1.0, 2013-4-29

//========================================================================

void        Tx_DEC_U16(u16 j)

{

u8        i;

u8   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值