关于单片机c8051f定时器配置方式

官方例子里面还给出了这样的说法
#define SYSCLK 24500000/8 // SYSCLK in Hz (24.5 MHz internal

#define TIMER_PRESCALER 48 // Based on Timer CKCON settings
#define LED_TOGGLE_RATE 50 // LED toggle rate in milliseconds

#define TIMER_TICKS_PER_MS SYSCLK/TIMER_PRESCALER/1000

#define AUX1 TIMER_TICKS_PER_MS*LED_TOGGLE_RATE
#define AUX2 -AUX1
#define AUX3 AUX2&0x00FF
#define AUX4 ((AUX2&0xFF00)>>8)

#define TIMER0_RELOAD_HIGH AUX4 // Reload value for Timer0 high byte#define TIMER0_RELOAD_LOW AUX3 // Reload value for Timer0 low byte
其中
SYSCLK/TIMER_PRESCALER/1000
#define AUX1 TIMER_TICKS_PER_MS*LED_TOGGLE_RATE
#define AUX2 -AUX1
这三行是没看懂 尤其是第一行那个败诉不得其解 第二行 第三行可能需要算把 求高人

这个程序应该用定时器驱动一个LED闪烁吧,
第一行SYSCLK/TIMER_PRESCALER/1000 这个是计算1MS需要多少个时钟周期,其中#define TIMER_PRESCALER 48 是在CKCON寄存器中设置分频数,/1000即1MS。
第二行AUX1 是计算触发一次LED所需时钟周期数,即1MS需要的时钟周期数乘以
LED_TOGGLE_RATE。
第三行是为了给定时器直接赋值方便。追问

你说的对
但是我还有个问题,比如定时器使用系统时钟的48分频,那么是不是要设置定时器的相关寄存器为48分频,这样才能对应呢

追答

上面不是说过了吗,48分频在CKCON寄存器中设置,相关的可能还要设置TMOD等寄存器,具体要看你的应用了。这段程序不是在C8051F全系列中都能用,因为不同芯片寄存器可能不一样,这个程序应该可以在c8051f3xx中可以用。最简单的办法你可以把这段例程中用到的寄存器在datasheet中全部查一次,看一下具体功能。

温馨提示:答案为网友推荐,仅供参考