找回密码
 立即注册
楼主: challis

STC8H8K64U-软件实现串口不断电烧录程序

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-31 19:39:17 | 显示全部楼层
发送reboot后点击检测MCU选项,能正常检测到单片机的信息
2.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-31 19:42:25 | 显示全部楼层
我发现STC下载工具有个更方便的功能: 选择收到用户命令后复位到ISP监控程序区
选择串口模式,19200波特率,取消RTS,DTR,点击发送用户自定义命令并开始下载
测试能直接烧录程序,省去了手动按复位键的烦恼!
3.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:516
  • 最近打卡:2025-05-06 19:36:57

21

主题

564

回帖

2690

积分

金牌会员

积分
2690
发表于 2024-1-31 22:01:48 | 显示全部楼层
不错,很详细,有用,收藏先
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-2-1 08:45:04 | 显示全部楼层
忘记发代码了,全部代码如下:
  1. #include "STC\STC8H.h"
  2. #include "INTRINS.H"
  3. #include <STRING.H>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. bit send_busy;
  7. uchar recv_timeout;
  8. struct BUFF_DATA
  9. {
  10.     uchar rptr;
  11.     uchar wptr;
  12.     char buff[256];
  13. };
  14. struct BUFF_DATA xdata uart_buff,xdata str_buff;
  15. #define BUFF_POP(x) x.buff[x.rptr++]
  16. #define BUFF_PUSH(x,d) x.buff[x.wptr++] = d
  17. #define BUFF_HAS_DATA(x) (x.rptr != x.wptr)
  18. #define BUFF_RESET(x) x.rptr=0;x.wptr=0
  19. #define PBUFF_POP(x) x->buff[x->rptr++]
  20. #define PBUFF_PUSH(x,d) x->buff[x->wptr++] = d
  21. #define PBUFF_HAS_DATA(x) (x->rptr != x->wptr)
  22. #define PBUFF_RESET(x) x->rptr=0;x->wptr=0
  23. void Delay1ms(void)        //@5.5296MHz
  24. {
  25.         unsigned char data i, j;
  26.         _nop_();
  27.         _nop_();
  28.         i = 8;
  29.         j = 43;
  30.         do
  31.         {
  32.                 while (--j);
  33.         } while (--i);
  34. }
  35. void Delay_ms(uint times)        //@5.5296MHz
  36. {
  37.         unsigned char data i, j;
  38.     while (times-->0)
  39.     {
  40.        _nop_();
  41.         _nop_();
  42.         i = 8;
  43.         j = 43;
  44.         do
  45.         {
  46.             while (--j);
  47.         } while (--i);
  48.     }
  49. }
  50. void Uart1_Isr(void) interrupt 4
  51. {
  52.         if (TI)                               
  53.         {
  54.                 TI = 0;                       
  55.         send_busy = 0;
  56.         }
  57.         if (RI)                               
  58.         {
  59.                 RI = 0;                       
  60.         BUFF_PUSH(uart_buff,SBUF);
  61.         recv_timeout = 5;
  62.         }
  63. }
  64. void Uart1_Init(void)        //19200bps@5.5296MHz
  65. {
  66.         SCON = 0x50;                //8位数据,可变波特率
  67.         AUXR &= 0xBF;                //定时器时钟12T模式
  68.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  69.         TMOD &= 0x0F;                //设置定时器模式
  70.         TL1 = 0xFA;                        //设置定时初始值
  71.         TH1 = 0xFF;                        //设置定时初始值
  72.         ET1 = 0;                        //禁止定时器中断
  73.         TR1 = 1;                        //定时器1开始计时
  74.         ES = 1;                                //使能串口1中断
  75.     EA = 1;
  76.     send_busy = 0;
  77.     BUFF_RESET(uart_buff);
  78. }
  79. void UartSend(char dat)
  80. {
  81.     while(send_busy);
  82.     send_busy = 1;
  83.     SBUF = dat;
  84. }
  85. void UartSendStr(char *p)
  86. {
  87.     while(*p)
  88.         UartSend(*p++);
  89. }
  90. /*
  91. void UartSendBuff(struct BUFF_DATA xdata *d)
  92. {
  93.     while(PBUFF_HAS_DATA(d))
  94.     {
  95.         UartSend(PBUFF_POP(d));
  96.     }
  97. }
  98. */
  99. void DealString(char *p)
  100. {
  101.     if(strcmp(p,"hello") == 0)
  102.     {
  103.         UartSendStr("world!");
  104.     }
  105.     else if(strcmp(p,"reboot") == 0)
  106.     {
  107.         Delay_ms(2000);
  108.         UartSendStr("bye!");
  109.         IAP_CONTR = 0x60;
  110.     }
  111.     else
  112.     {
  113.         UartSendStr(p);
  114.     }
  115. }
  116. void main()
  117. {
  118.     uchar xdata tmp;
  119.     Uart1_Init();
  120.    
  121.     UartSendStr("Uart Test!\r\n");
  122.     while(1)
  123.     {
  124.         if(recv_timeout>0)
  125.         {
  126.             BUFF_RESET(str_buff);
  127.             while(recv_timeout>0)
  128.             {
  129.                 while(BUFF_HAS_DATA(uart_buff))
  130.                 {
  131.                     tmp = BUFF_POP(uart_buff);
  132.                     BUFF_PUSH(str_buff,tmp);
  133.                 }
  134.                 recv_timeout--;
  135.                 Delay1ms();
  136.             }
  137.             BUFF_PUSH(str_buff,0);
  138.             DealString(str_buff.buff);
  139.         }
  140.         /*if(BUFF_HAS_DATA(uart_buff))
  141.         {
  142.             UartSend(BUFF_POP(uart_buff));
  143.         }*/
  144.     }
  145. }
复制代码
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-7 03:19 , Processed in 0.182880 second(s), 66 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表