找回密码
 立即注册
查看: 756|回复: 11

stc8g1k08a定时器0, 1互相干扰

[复制链接]

该用户从未签到

6

主题

17

回帖

118

积分

注册会员

积分
118
发表于 2023-11-18 17:39:18 | 显示全部楼层 |阅读模式
本帖最后由 peitianyu 于 2023-11-18 17:42 编辑

串口选择定时器1为波特率发生器, 然后我的定时器0周期是20us, 我在定时器0中计时1s打印一次数据, 频率有问题.
具体代码如下:






仅开gpio时间周期是没啥问题的, 加上串口输出, 打印频率与io口输出频率就很不对劲
屏幕截图 2023-11-18 174132.png
回复 送花

使用道具 举报

  • TA的每日心情
    开心
    昨天 19:05
  • 签到天数: 123 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2048

    积分

    荣誉版主

    积分
    2048
    发表于 2023-11-18 18:12:55 | 显示全部楼层
    本帖最后由 王昱顺 于 2023-11-18 18:19 编辑


    失效的最主要原因应该是TMOD设置混乱,后一个初始化把前一个给覆盖掉了

    你查看一下uart1_init()的具体代码,应该是操作寄存器的时候使用直接赋值给覆盖掉了
    或者你可以尝试将串口的初始化放在前面,然后使用stc-isp中的定时器计算器生成代码
    截图202311181818472871.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    6

    主题

    17

    回帖

    118

    积分

    注册会员

    积分
    118
     楼主| 发表于 2023-11-18 18:49:45 | 显示全部楼层
    本帖最后由 peitianyu 于 2023-11-18 18:50 编辑
    王昱顺 发表于 2023-11-18 18:12
    失效的最主要原因应该是TMOD设置混乱,后一个初始化把前一个给覆盖掉了

    你查看一下uart1_init()的具体代 ...

    您好, 可以帮我看一眼吗? 我是这么操作的C:\Users\peitianyu\Desktop\屏幕截图 2023-11-18 184849.png    C:\Users\peitianyu\Desktop\屏幕截图 2023-11-18 183830.png
    屏幕截图 2023-11-18 183830.png
    屏幕截图 2023-11-18 184849.png

    点评

    代码设置应该是没有问题的,我仔细想了一下,可能有以下几种可能: 1.你这个看起来像是使用了任务调度,也就是说有一个定时器在处理定时任务的执行。有没有可能正好是T0/T1? ==解决办法把占用的定时器切换出去 2.  详情 回复 发表于 2023-11-18 20:22
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 19:05
  • 签到天数: 123 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2048

    积分

    荣誉版主

    积分
    2048
    发表于 2023-11-18 20:22:38 | 显示全部楼层
    peitianyu 发表于 2023-11-18 18:49
    您好, 可以帮我看一眼吗? 我是这么操作的

    代码设置应该是没有问题的,我仔细想了一下,可能有以下几种可能:
    1.你这个看起来像是使用了任务调度,也就是说有一个定时器在处理定时任务的执行。有没有可能正好是T0/T1?

    ==解决办法把占用的定时器切换出去


    2.你的这个定时时间是20us。这已经是相当短的时间了,这会使得频繁触发中断。如果恰好你的定时器0中断里面加入了较多的判断和处理语句,那么将使得程序CPU负载异常高。
    同时因为在默认优先级状态下,T0的优先级较高。很可能串口在输出的时候被反复打断。
    ==解决办法,在串口执行代码中,前面加上ET0 = 0;后面加上ET0 = 1;这样可以短暂屏蔽中断,但是会对时间的精确性造成干扰。
    我之前也研究过这种任务定时类型的程序,一般来说定时选择1ms比较好。否则系统会有相当高的负载。

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 19:05
  • 签到天数: 123 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2048

    积分

    荣誉版主

    积分
    2048
    发表于 2023-11-18 21:14:22 | 显示全部楼层
    我实现了一下你的这个功能,你看着参考一下吧,我用的是STC8H8K64U,不过代码基本通用,改改就能用了



    STC8H打狗棒示例版多线程.zip (61.11 KB, 下载次数: 20)

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    6

    主题

    17

    回帖

    118

    积分

    注册会员

    积分
    118
     楼主| 发表于 2023-11-19 20:51:51 | 显示全部楼层
    本帖最后由 peitianyu 于 2023-11-19 21:16 编辑
    王昱顺 发表于 2023-11-18 21:14
    我实现了一下你的这个功能,你看着参考一下吧,我用的是STC8H8K64U,不过代码基本通用,改改就能用了

    实在太感谢您了, 我思考了一下, 感觉像是优先级的问题, 我待会照着您的思路设置一下, 以下是我的代码, 如您有空的话, 可以具体看看啥原因

    定时器0中断

    定时器0中断

    pwm输出

    pwm输出

    servo_drive.zip

    91.72 KB, 下载次数: 15

    点评

    你现在是想实现什么样子的功能呢?我有空帮你看看  详情 回复 发表于 2023-11-20 09:52
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9532

    回帖

    1万

    积分

    管理员

    积分
    14106
    发表于 2023-11-19 21:24:30 | 显示全部楼层
    建议新人全部用仿真功能来调试
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    6

    主题

    17

    回帖

    118

    积分

    注册会员

    积分
    118
     楼主| 发表于 2023-11-19 21:51:49 | 显示全部楼层
    神农鼎 发表于 2023-11-19 21:24
    建议新人全部用仿真功能来调试

    好的, 我试试
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 19:05
  • 签到天数: 123 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2048

    积分

    荣誉版主

    积分
    2048
    发表于 2023-11-20 09:52:58 | 显示全部楼层

    你现在是想实现什么样子的功能呢?我有空帮你看看
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    6

    主题

    17

    回帖

    118

    积分

    注册会员

    积分
    118
     楼主| 发表于 2023-11-20 14:27:10 | 显示全部楼层
    王昱顺 发表于 2023-11-20 09:52
    你现在是想实现什么样子的功能呢?我有空帮你看看

    我希望实现的功能是i2c控制舵机程序, 这部分主要是任务系统有问题, 我希望在读adc的时候能够print一下, os的目的是因为希望做成一个模板, 之后在别的程序中用起来更加方便一些
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-20 04:03 , Processed in 0.073558 second(s), 72 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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