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

stc8g1k08a定时器0, 1互相干扰

[复制链接]

16

主题

57

回帖

366

积分

中级会员

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

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






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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

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


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

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

回复 支持 反对

使用道具 举报 送花

16

主题

57

回帖

366

积分

中级会员

积分
366
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

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

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

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


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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

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



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

回复 支持 反对

使用道具 举报 送花

16

主题

57

回帖

366

积分

中级会员

积分
366
发表于 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, 下载次数: 113

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

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

使用道具 举报 送花

16

主题

57

回帖

366

积分

中级会员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

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

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

使用道具 举报 送花

16

主题

57

回帖

366

积分

中级会员

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 06:38 , Processed in 0.152844 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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