找回密码
 立即注册
查看: 330|回复: 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 送花

使用道具 举报

  • TA的每日心情
    开心
    昨天 13:24
  • 签到天数: 107 天

    [LV.6]常住居民II

    31

    主题

    387

    回帖

    1948

    积分

    荣誉版主

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

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

    点评

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 13:24
  • 签到天数: 107 天

    [LV.6]常住居民II

    31

    主题

    387

    回帖

    1948

    积分

    荣誉版主

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

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

    使用道具 举报

    该用户从未签到

    46

    主题

    2932

    回帖

    6611

    积分

    超级版主

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

    使用道具 举报

  • TA的每日心情
    慵懒
    3 天前
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

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

    点评

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

    使用道具 举报

    该用户从未签到

    46

    主题

    2932

    回帖

    6611

    积分

    超级版主

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

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

    使用道具 举报

  • TA的每日心情
    慵懒
    3 天前
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
    发表于 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
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2932

    回帖

    6611

    积分

    超级版主

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

    使用道具 举报

  • TA的每日心情

    7 小时前
  • 签到天数: 59 天

    [LV.5]常住居民I

    3

    主题

    545

    回帖

    730

    积分

    高级会员

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-3 16:34 , Processed in 0.071906 second(s), 69 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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