找回密码
 立即注册
查看: 100|回复: 4

8g1k08a定时器驱动舵机 失败

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2026-06-19 16:53:00

1

主题

1

回帖

7

积分

新手上路

积分
7
发表于 2026-6-19 17:39:19 | 显示全部楼层 |阅读模式
代码是缝合怪 左抄右抄而来的  
目的是想用uart控制舵机
但舵机没有反应

已经试过TM0_Isr()改成以下代码
再接上LED(IO1 ) 可以稳定有1s闪烁


  1. void TM0_Isr() interrupt 1
  2. {
  3.         c2++;
  4.         if(c2 < 100) return;
  5.         c2 = 0;
  6.         
  7.         c1++;
  8.         if(c1 >= 1000){
  9.                 c1 = 0;
  10.                 IO1 = ~IO1;
  11.          }
  12.         
  13. }
复制代码


全部代码 :
  1. #include <stc8g.h>
  2. //#define FOSC            11059200UL
  3. #define FOSC            12000000UL
  4. #define BRT             (65536 - FOSC / 115200 / 4)
  5. bit busy;
  6. char wptr;
  7. char rptr;
  8. char buffer[16];
  9. sbit RRXD = P3 ^ 0;
  10. sbit TTXD = P3 ^ 1;
  11. sbit IO1 = P3 ^ 2;
  12. sbit IO2 = P3 ^ 3;
  13. sbit IO3 = P5 ^ 4;
  14. sbit IO4 = P5 ^ 5;
  15. unsigned int c1,c2,c3;
  16. unsigned int Udata,i;
  17. bit flag = 1;
  18. void UartIsr() interrupt 4
  19. {
  20.     if (TI)
  21.     {
  22.         TI = 0;
  23.         busy = 0;
  24.     }
  25.     if (RI)
  26.     {
  27.         RI = 0;
  28.         buffer[wptr++] = SBUF;
  29.         wptr &= 0x0f;
  30.     }
  31. }
  32. void UartSend(char dat)
  33. {
  34.     while (busy);
  35.     busy = 1;
  36.     SBUF = dat;
  37. }
  38. void UartSendStr(char *p)
  39. {
  40.     while (*p)
  41.     {
  42.         UartSend(*p++);
  43.     }
  44. }
  45. void TM0_Isr() interrupt 1
  46. {
  47.         /*
  48.         c2++;
  49.         if(c2 < 100) return;
  50.         c2 = 0;
  51.         
  52.                         c1++;
  53.                         if(c1 >= 1000){
  54.                                 c1 = 0;
  55.                                 IO1 = ~IO1;
  56.                         }
  57.         
  58.         */
  59.         
  60.         // 每 1/100 毫秒中断一次
  61.                         c1++;
  62.                         if(flag == 0){
  63.                                 if(c1 >= 150){ // 1.5ms
  64.                                 //if(c1 >= Udata){
  65.                                         c1 = 0;
  66.                                         flag = 1;
  67.                                         IO1 = 1;
  68.                                 }
  69.                         }else{
  70.                                 if(c1 >= 1850){ // (20-1.5)ms = 18.5ms
  71.                                 //if(c1 >= 2000 - Udata){
  72.                                         c1 = 0;
  73.                                         flag = 0;
  74.                                         IO1 = 0;
  75.                                 }
  76.                         }
  77. }
  78. void main()
  79. {
  80.     SCON = 0x50;
  81.     TMOD = 0x00;
  82.     TL1 = BRT;
  83.     TH1 = BRT >> 8;
  84.     TR1 = 1;
  85.     AUXR = 0x40;
  86.     wptr = 0x00;
  87.     rptr = 0x00;
  88.     busy = 0;
  89.         
  90.     TL0 = 0xf6; //65536-12M/12/1000/100
  91.     TH0 = 0xff;
  92.     TR0 = 1;
  93.     ET0 = 1;
  94.         
  95.     ES = 1;
  96.     EA = 1;
  97.     P3M0 = 0xff;
  98.     P3M1 = 0x00;
  99.     IO1 = 0;
  100.     while (1)
  101.     {
  102.         if (rptr != wptr)
  103.         {
  104.             Udata = buffer[rptr++];
  105.             UartSend(Udata);
  106.             rptr &= 0x0f;
  107.         }
  108.     }
  109. }
复制代码






回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-6-19 18:10:50 | 显示全部楼层

STC8G1K08A-SOP8如何驱动舵机,帮提供程序

截图202606191805241763.jpg

截图202606191806101106.jpg

截图202606191807289064.jpg
截图202606191808011625.jpg

截图202606191808233039.jpg

截图202606191808589972.jpg

截图202606191809227265.jpg

截图202606191810081624.jpg

截图202606191810281160.jpg





回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:316
  • 最近打卡:2026-07-22 06:56:11
已绑定手机

70

主题

874

回帖

3225

积分

论坛元老

DIY玩家

积分
3225
发表于 2026-6-19 18:24:41 | 显示全部楼层
使用串口数据如:0x01  0x00
控制舵机左右旋转谋角度
AI助手可得示例code
尽量描述详细
接线正确
永怀这学徒心
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2026-06-19 16:53:00

1

主题

1

回帖

7

积分

新手上路

积分
7
发表于 2026-6-19 19:12:57 | 显示全部楼层
看了示例code 找到问题了
我以为高电平是0 低电平是1
IO1 = 0 和 IO1 = 1 反过来就ok了

正确code :
  1. void TM0_Isr() interrupt 1
  2. {
  3.         // 每 1/100 毫秒中断一次
  4.                         c1++;
  5.                         if(flag == 0){
  6.                                 if(c1 >= 150){ // 1.5ms
  7.                                 //if(c1 >= Udata){
  8.                                         c1 = 0;
  9.                                         flag = 1;
  10.                                         IO1 = 0;
  11.                                 }
  12.                         }else{
  13.                                 if(c1 >= 1850){ // (20-1.5)ms = 18.5ms
  14.                                 //if(c1 >= 2000 - Udata){
  15.                                         c1 = 0;
  16.                                         flag = 0;
  17.                                         IO1 = 1;
  18.                                 }
  19.                         }
  20. }
复制代码

点评

STC 【AI 助手】,20秒搞出来的程序,真有帮助 ?  详情 回复 发表于 2026-6-20 10:12
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-6-20 10:12:02 | 显示全部楼层
Tan*** 发表于 2026-6-19 19:12
看了示例code 找到问题了
我以为高电平是0 低电平是1
IO1 = 0 和 IO1 = 1 反过来就ok了

STC 【AI 助手】,20秒搞出来的程序,真有帮助 ?
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-22 10:31 , Processed in 0.075522 second(s), 64 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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