找回密码
 立即注册
查看: 1699|回复: 12

请教下 关于定时器 1T还是12T的选择

[复制链接]

2

主题

17

回帖

62

积分

注册会员

积分
62
发表于 2024-1-15 10:28:33 | 显示全部楼层 |阅读模式
这里已经选择是1T模式 单片机是8H8K64  但是定时出来的时间确是12ms  
无标题.jpg
回复

使用道具 举报 送花

2

主题

17

回帖

62

积分

注册会员

积分
62
发表于 2024-1-15 10:30:49 | 显示全部楼层
本帖最后由 18340262113 于 2024-1-15 10:32 编辑

初值按12T模式计算   定时出来的就是1ms了  模式选择我还是1T没动  这个为啥呢
无标题.jpg

点评

串口操作的时候应该使用 AUXR |= 一个值;的形式进行操作 不然会干扰其他的位  详情 回复 发表于 2024-1-15 10:48
你在程序里面全局查找一下,应该是有其他操作AUXR寄存器的情况出现了,比如说串口初始化使用了直接赋值的语句。  详情 回复 发表于 2024-1-15 10:36
回复 支持 1 反对 0

使用道具 举报 送花

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

110

主题

2219

回帖

5454

积分

版主

积分
5454
发表于 2024-1-15 10:36:00 | 显示全部楼层
183402*** 发表于 2024-1-15 10:30
初值按12T模式计算   定时出来的就是1ms了  模式选择我还是1T没动  这个为啥呢 ...

你在程序里面全局查找一下,应该是有其他操作AUXR寄存器的情况出现了,比如说串口初始化使用了直接赋值的语句。

点评

厉害 确实是 串口改了  发表于 2024-1-15 10:46
回复 支持 反对

使用道具 举报 送花

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

110

主题

2219

回帖

5454

积分

版主

积分
5454
发表于 2024-1-15 10:48:42 | 显示全部楼层
183402*** 发表于 2024-1-15 10:30
初值按12T模式计算   定时出来的就是1ms了  模式选择我还是1T没动  这个为啥呢 ...

串口操作的时候应该使用
AUXR |= 一个值;的形式进行操作
不然会干扰其他的位
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-1-15 13:21:24 | 显示全部楼层
肯定是有别的地方改回来12T了。数字外设,严格按时钟来工作的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-1-15 15:18:29 | 显示全部楼层
哎,,已知的第二起因为赋值的方式不恰当引起的问题

点评

一定要注意:一个寄存器有多个位,只改变你本次操作的位,别的位不要动。 初学者特别容易犯这个错误。  详情 回复 发表于 2024-1-15 15:42
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-1-15 15:42:14 | 显示全部楼层
_奶*** 发表于 2024-1-15 15:18
哎,,已知的第二起因为赋值的方式不恰当引起的问题

一定要注意:一个寄存器有多个位,只改变你本次操作的位,别的位不要动。
初学者特别容易犯这个错误。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-1-15 16:00:30 | 显示全部楼层
梁*** 发表于 2024-1-15 15:42
一定要注意:一个寄存器有多个位,只改变你本次操作的位,别的位不要动。
初学者特别容易犯这个错误。 ...

说的对啊....这么危险的操作..

截图202401151559339626.jpg


还就是梁工看的清

点评

看看我的宏定义,只改变相关的位(写0或写1),别的位不变: #define Timer0_16bitAutoReload() TMOD &= ~0x03 /* 16位自动重装 */ #define Timer0_16bit() TMOD = (TMOD & ~0x03) | 0x01 /* 16位  详情 回复 发表于 2024-1-15 16:23
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-1-15 16:23:11 | 显示全部楼层
本帖最后由 梁工 于 2024-1-15 16:25 编辑
_奶*** 发表于 2024-1-15 16:00
说的对啊....这么危险的操作..

看看我的宏定义,只改变相关的位(写0或写1),别的位不变:
#define         Timer0_16bitAutoReload()              TMOD &= ~0x03                                  /* 16位自动重装        */
#define         Timer0_16bit()                               TMOD  = (TMOD & ~0x03) | 0x01        /* 16位         */
#define         Timer0_8bitAutoReload()                TMOD  = (TMOD & ~0x03) | 0x02        /* 8位自动重装        */
#define         Timer0_16bitAutoRL_NoMask()        TMOD |=  0x03                      /* 16位自动重装不可屏蔽中断        */
#define         Timer0_Run()                                TR0 = 1                                /* 允许定时器0计数                        */
#define         Timer0_Stop()                               TR0 = 0                                /* 禁止定时器0计数                        */
#define         Timer0_Gate_INT0_P32()               TMOD |=  (1<<3)                 /* 时器0由外部INT0高电平允许定时计数 */
#define         Timer0_AsTimer()                          TMOD &= ~(1<<2)              /* 时器0用做定时器        */
#define         Timer0_AsCounter()                       TMOD |=  (1<<2)                /* 时器0用做计数器        */
#define         Timer0_AsCounterP34()                  TMOD |=  (1<<2)                /* 时器0用做计数器        */
#define         Timer0_1T()                                  AUXR |=  (1<<7)                /* Timer0 clodk = fo        */
#define         Timer0_12T()                                AUXR &= ~(1<<7)              /* Timer0 clodk = fo/12        12分频,        default        */
#define         Timer0_CLKO_Enable()                   INT_CLKO |=  1                  /* 允许 T0 溢出脉冲在T0(P3.5)脚输出,Fck0 = 1/2 T0 溢出率,T0可以1T或12T。        */
#define         Timer0_CLKO_Disable()                  INT_CLKO &= ~1
#define         Timer0_CLKO_Enable_P35()            INT_CLKO |=  1                 /* 允许 T0 溢出脉冲在T0(P3.5)脚输出,Fck0 = 1/2 T0 溢出率,T0可以1T或12T。        */
#define         Timer0_CLKO_Disable_P35()           INT_CLKO &= ~1
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3191

回帖

4872

积分

论坛元老

积分
4872
发表于 2024-3-14 06:08:22 来自手机 | 显示全部楼层
学习一下
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 20:27 , Processed in 0.146267 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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