alanding 发表于 2024-4-7 11:19:02

ISP又发现个小问题


下面本来是想做成下载字库的功能,除了第一次启动外试验总是不成功,
经摸索发现似乎进入这个功能后没有清除接收缓存,导致不听指挥。

wangxiangtan 发表于 2024-4-7 13:35:43

高手这都能发现原因

21cnsound 发表于 2024-4-7 14:52:40

这个界面在STC-ISP中吗?还真没用过

jwd 发表于 2024-4-7 15:24:45

21cnsound 发表于 2024-4-7 14:52
这个界面在STC-ISP中吗?还真没用过

在发送文件那个选项,我反正是从来没有用过

zhp 发表于 2024-4-7 18:29:55

本帖最后由 zhp 于 2024-4-7 18:31 编辑


功能测试没问题
下面是我的测试代码
#include "stc8h.h"
#include "intrins.h"
#include "stdio.h"

#define FOSC      11059200UL
#define BAUD      (65536 - FOSC/4/115200)
#define T1MS      (65536 - FOSC/1000)

void send_request();
int recv_data(char *buf, int n);
void process_data(char *buf, int n);

char timeout;                     //接收超时计时器
char xdata buf;                //数据接收缓冲区

void main()
{
    long len;
    int cnt;
   
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    SCON = 0x52;
    TMOD = 0x00;
    AUXR = 0xc0;
    TL0 = T1MS;                     //定时器0为1ms中断
    TH0 = T1MS >> 8;
    TR0 = 1;
    TL1 = BAUD;                     //定时器1为串口波特率发生器
    TH1 = BAUD >> 8;
    TR1 = 1;
    ET0 = 1;
    EA = 1;
   
    printf("start ...\n");
   
    send_request();               //发送数据请求命令
    recv_data((char *)&len, 4);   //获取数据长度
   
    while (len > 0)
    {
      cnt = (len > 256 ? 256 : len);
      
      send_request();             //发送数据请求命令
      recv_data(buf, cnt);      //获取数据包
      process_data(buf, cnt);   //处理接收的数据
      
      len -= cnt;
    }
   
    printf("Completed !\n");
   
    while (1);
}

void tm0_isr() interrupt 1
{
    if (timeout)
      timeout--;
}

void send_request()
{
    putchar(0xff);
    putchar(0x57);
    putchar(0x41);
    putchar(0x56);
}

int recv_data(char *buf, int n)
{
    int i;
    int err;
   
    err = 0;
    for (i = 0; i < n; i++)
    {
      timeout = 50;               //超时处理
      while (!RI)
      {
            if (!timeout)
            {
                P0++;
                err++;
                break;
            }
      }
      RI = 0;
      buf = SBUF;
    }
   
    return (n - err);
}

void process_data(char *buf, int n)
{
                                    //处理接收的数据
    while (n--)
      ACC = *buf++;
}




注意:
应答式发送模式:一定是先点击界面上面的发送数据,然后才给目标单片机上电发送数据请求
自动连续发送模式:先给目标单片机上电,后点击界面上的发送数据

如果顺序弄反了,那一定是不听指挥的。这里面和串口清不清接缓存没关系




虹涛犹珷 发表于 2024-4-8 08:45:56

能不能集成多种文件传输协议?特别是Xmode和Ymode


QQ624353765 发表于 2024-4-8 09:35:26




抄的我这款软件 - 数据分发器
包括字库生成软件,我做啥STC就会抄啥

jwd 发表于 2024-4-8 10:20:20

QQ624353765 发表于 2024-4-8 09:35
抄的我这款软件 - 数据分发器
包括字库生成软件,我做啥STC就会抄啥

你让stc给你入股{:4_245:}

soma 发表于 2024-4-8 12:54:24

虹涛犹珷 发表于 2024-4-8 08:45
能不能集成多种文件传输协议?特别是Xmode和Ymode

这个可以有,stm32可以ymoden协议iap

电子DIY小家 发表于 2024-4-8 13:48:35

QQ624353765 发表于 2024-4-8 09:35
抄的我这款软件 - 数据分发器
包括字库生成软件,我做啥STC就会抄啥

数据分包发送?这不是isp软件n多年前就有了吗,这玩意有啥抄不抄的,你只要提需求,stc啥都能做,字库也是有人提了需求他做的,什么串口绘图,lcd虚拟显示都是有人提了需求他们独立开发的
页: [1] 2
查看完整版本: ISP又发现个小问题