单片机定时器c语言程序,单片机C语言编程定时器的几种表达方式

单片机C语言编程中,定时器的初值对于初学者真的是比较不好计算,因此我总结了以下几种方法。

第1种方法:

#define FOSC 11059200L //晶振的频率

#define TIMS (65536-FOSC/12/1000) //12T mode 对于8051系列单片机通用

//#define TIMS (65536-FOSC/1000) //1T mode STC单片机可以用这个

unsigned int timer0_tick;

int timer0_count;

void Timer0(void) interrupt 1 using 1 //定时器0中断外理

{

TL0=TIMS;

TH0=TIMS>>8;

if(timer0_tick--==0) //加到1000次即1秒

{

timer0_tick=1000;

LED_Timer=~LED_Timer;

}

}

初值的赋值采用的是移位运算:

TL0=TIMS;

TH0=TIMS>>8;

第2种方法:

#define FOSC 11059200L //晶振的频率

TH=(65536-time*FOSC /12)/256

TL=(65536-time*FOSC /12)%256

time就是假设要延时的100ms(要取100000us)

FOSC 是晶振频率

注意:定时器一定要考虑晶振的频率,因为单片机最小的中断时间和频率有关系。

例如:

6MHz晶振对应的时间范围是:512us --- 16.384ms --- 131.072ms

因此,在设置时间前,一定要考虑晶振和定时器的关系。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮您解答单片机定时器C语言编程题。请问您有具体的题目或要求吗?如果没有,我可以提供一个简单的例子。 假设您使用的是STC89C52单片机,我们可以编写一个程序,利用定时器中断实现LED灯的闪烁。具体步骤如下: 1. 设置定时器的初值和重装载值,使得定时器中断周期为1秒。 ``` TMOD = 0x01; // 设置定时器0为模式1 TH0 = 0x3C; // 设置计数初值为0x3C TL0 = 0xAF; // 设置计数初值为0xAF ET0 = 1; // 使能定时器0中断 TR0 = 1; // 启动定时器0 ``` 这里的计数初值是通过一个公式计算得出的,公式为:计数初值 = 65536 - (定时器中断周期 / 12 / 晶振频率)。假设晶振频率为12MHz,定时器中断周期为1秒,则计数初值为0x3CAF。 2. 在中断服务函数中控制LED灯的状态翻转。 ``` void timer0_isr() interrupt 1 { static unsigned char led_state = 0; // LED灯状态,初始为关闭状态 TH0 = 0x3C; // 重装载计数初值 TL0 = 0xAF; led_state = !led_state; // 翻转LED灯状态 P1_0 = led_state; // 控制LED灯的输出 } ``` 这里的中断服务函数是定时器0的中断服务函数,当定时器0计数达到重装载值时,会触发中断。在中断服务函数中,我们重装载计数初值,然后翻转LED灯的状态,最后控制LED灯的输出。 3. 在主函数中等待中断发生。 ``` void main() { EA = 1; // 全局中断使能 while (1) { // 等待中断发生 } } ``` 在主函数中,我们打开全局中断使能,并且等待中断发生。因为定时器0的中断周期为1秒,所以LED灯会每秒翻转一次。 以上就是一个简单的单片机定时器C语言编程例子,希望能够对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值