求助 15w芯片定时器问题
本帖最后由 sls2078327 于 2022-7-26 11:01 编辑我是个新手,定时器0的初装值怎么变LED电平变化速度都不变,都是几乎12毫秒的样子。我驱动的74HC595芯片只有STC15定时器0的初装值为12ms而且只能用12T, 按按键数码管才会变化,其他值按按键没反应,附上代码图,请大佬指点迷津,谢谢 本帖最后由 lyjian 于 2022-7-26 12:52 编辑
你没写值到重装寄存器,当然只有一种定时时间
你要把初装值写到重装寄存器。规格书里有具体的例子,不懂咋不去看看。
二楼正解{:handshake:} 楼主如果还是不懂致电我们前台,打STC销售公司电话0513-55012928 <9:00-12:00,13:00-17:30,工作日的 周一到周五,其他时间是休息时间>
让他们安排销售工程师给你,然后他们 拉技术 组个 QQ 群支持大家,会专人跟踪服务,一般的小问题,STC 销售工程师本群可以直接答复 本帖最后由 sls2078327 于 2022-7-26 14:59 编辑
解决了谢谢 #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; //取反输出方波指示中断间隔时间
}
页:
[1]