打印
[STC单片机]

求助 15w芯片定时器问题

[复制链接]
728|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sls2078327|  楼主 | 2022-7-26 10:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sls2078327 于 2022-7-26 11:01 编辑

我是个新手,定时器0的初装值怎么变  LED电平变化速度都不变,都是几乎12毫秒的样子。我驱动的74HC595芯片  只有STC15定时器0的初装值为12ms而且只能用12T, 按按键数码管才会变化,其他值按按键没反应,附上代码图,请大佬指点迷津,谢谢

QQ截图20220726104246.png (38.6 KB )

QQ截图20220726104246.png

QQ截图20220726104226.png (61.41 KB )

QQ截图20220726104226.png

使用特权

评论回复

相关帖子

沙发
lyjian| | 2022-7-26 12:50 | 只看该作者
本帖最后由 lyjian 于 2022-7-26 12:52 编辑

你没写值到重装寄存器,当然只有一种定时时间
你要把初装值写到重装寄存器。规格书里有具体的例子,不懂咋不去看看。




T0.png (321.23 KB )

T0.png

使用特权

评论回复
板凳
yunie0608| | 2022-7-26 13:52 | 只看该作者
二楼正解    楼主如果还是不懂致电我们前台,打STC销售公司电话  0513-55012928   <9:00-12:00,13:00-17:30,  工作日的 周一到周五,其他时间是休息时间>   
让他们安排销售工程师给你,然后他们 拉技术 组个 QQ 群支持大家,会专人跟踪服务,一般的小问题,STC 销售工程师本群可以直接答复

使用特权

评论回复
地板
sls2078327|  楼主 | 2022-7-26 13:53 | 只看该作者
本帖最后由 sls2078327 于 2022-7-26 14:59 编辑

解决了  谢谢

使用特权

评论回复
5
coody| | 2022-7-26 15:11 | 只看该作者
#define MAIN_Fosc                11059200UL        //定义主时钟
#include        "..\..\STC15Fxxxx.H"

/*************        功能说明        **************
本程序演示定时器0的中断和高速时钟输出应用例子.
定时器0做16位自动重装,中断取反P3.4输出方波.
******************************************/

/*************        常量声明        **************/
        #define                TIMER0_FREQUENCY        1000        //定时器0中断频率

        #define                TIMER0_RELOAD_1T        (MAIN_Fosc / TIMER0_FREQUENCY)                        //宏计算定时器0重装值
        #define                TIMER0_RELOAD_12T        (MAIN_Fosc / 12 / TIMER0_FREQUENCY)                //宏计算定时器0重装值

/*************        变量声明        **************/

/*************        函数声明        **************/


/************************ 定时器配置函数 ****************************/
void        Timer0_config(void)
{
        #if (TIMER0_RELOAD_1T < 32)        // 如果用户设置值不合适, 则不启动定时器
                #error "Timer0设置的中断过快!"

        #elif (TIMER0_RELOAD_12T <= 65536UL)        // 如果用户设置值不合适, 则不启动定时器
                TMOD &= ~0x0f;
                TMOD |= 0;        //工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 16位自动重装, 不可屏蔽中断
                ET0 = 1;        //允许中断

                #if        (TIMER0_RELOAD_1T <= 65536UL)
                        AUXR |=  0x80;        //1T
                        TH0 = (u8)((65536UL - TIMER0_RELOAD_1T) >> 8);        //初值
                        TL0 = (u8)( 65536UL - TIMER0_RELOAD_1T);                //初值
                #else
                        TH0 = (u8)((65536UL - TIMER0_RELOAD_12T) >> 8);        //初值
                        TL0 = (u8)(65536UL - TIMER0_RELOAD_12T);                //初值
                #endif

                TR0 = 1;        //开始运行

        #else
                #error "Timer0设置的中断过慢!"
        #endif
}


/******************** 主函数**************************/
void main(void)
{

        Timer0_config();
        EA = 1;

        while (1)
        {

        }
}


/********************* Timer0中断函数************************/
void timer0_int (void) interrupt TIMER0_VECTOR
{
        P34 = ~P34;        //取反输出方波指示中断间隔时间
}

使用特权

评论回复
6
zwsam| | 2022-8-21 22:19 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

1

粉丝