18340262113 发表于 2024-1-15 10:28:33

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

这里已经选择是1T模式 单片机是8H8K64但是定时出来的时间确是12ms

18340262113 发表于 2024-1-15 10:30:49

本帖最后由 18340262113 于 2024-1-15 10:32 编辑

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

王昱顺 发表于 2024-1-15 10:36:00

18340262113 发表于 2024-1-15 10:30
初值按12T模式计算   定时出来的就是1ms了模式选择我还是1T没动这个为啥呢 ...

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

王昱顺 发表于 2024-1-15 10:48:42

18340262113 发表于 2024-1-15 10:30
初值按12T模式计算   定时出来的就是1ms了模式选择我还是1T没动这个为啥呢 ...

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

梁工 发表于 2024-1-15 13:21:24

肯定是有别的地方改回来12T了。数字外设,严格按时钟来工作的。

_奶咖君_ 发表于 2024-1-15 15:18:29

哎,,已知的第二起因为赋值的方式不恰当引起的问题

梁工 发表于 2024-1-15 15:42:14

_奶咖君_ 发表于 2024-1-15 15:18
哎,,已知的第二起因为赋值的方式不恰当引起的问题

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

_奶咖君_ 发表于 2024-1-15 16:00:30

梁工 发表于 2024-1-15 15:42
一定要注意:一个寄存器有多个位,只改变你本次操作的位,别的位不要动。
初学者特别容易犯这个错误。 ...

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




还就是梁工看的清{:4_197:}

梁工 发表于 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

soma 发表于 2024-3-14 06:08:22

学习一下
页: [1] 2
查看完整版本: 请教下 关于定时器 1T还是12T的选择