2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 单片机定时器程序c语言 单片机定时器程序

单片机定时器程序c语言 单片机定时器程序

时间:2018-12-16 09:27:08

相关推荐

单片机定时器程序c语言 单片机定时器程序

51单片机定时器中断程序(C语言)

程序:延时1s

方法:1.汇编实现 影响程序运行速度 2.中断 比较快

用C语言实现的,先要定义好定时器的初值

不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期

机器周期=12/n(n指晶振频率),假设你要定时的时间为M

那么定时的初值为:

M/机器周期=初值;

TH0=(65536-初值)%256;

TL0=(65536-初值)/256;

将(65536-初值)所得的值化成16进制,其高位就是TH0的值,低位为TL0的值

例如用12M晶振做1ms定时计算如下:

机器周期=12/12*10^6=1us(微秒)

定时初值=(1*10^-3)/(1*10^-6)=1000;

所以:TH0=(65536-1000)%256;

TL0=(65536-1000)/256;

将65536-1000=64536化为16进制为:0xFC18

TH0=0xFC;

TL0=0X18;

定好初值后要延迟一秒就定一个延时参数,这里使用1000就行了(定时为1ms)中断程序为:

timer0() interrupt 1 // 1ms延时(12.0MHz)

{

TR0=0;

ET0=0;

TH0=0xfc;

TL0=0x18;

if(delayTimes1!=0) delayTimes1--;

TR0=1;

ET0=1;

}

调用程序大致为:

if(delay_flag==0)

{

delay_flag=1;

delayTimes1=1000;

}

if(delayTimes1==0)

{

delay_flag=0;

这里写定时到的操作就行了;

}

(在主程序中使用delay_ms()这样的程序会影响程序运行速度的,使用中断就不会)

定时器初值计算小工具下载/soft/cun//03855.html

定时器计数00-59(P0接8为数码管位选端ds1-ds8,P2接8位数码管的段码A-H)

*******************************************************************************************

#include

sbit P0_0=P0^0; //个位数字

sbit P0_1=P0^1; //十位数字

void delay(int k); //Tab为数码管显示值,存入一个数组内

unsigned char ge,shi,num,count;

unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

void main()

{

TMOD=0x1; //T0,工作方式1

TH0=0xb1; //20ms定时

TL0=0xe0;

TR0=1; //开启T0定时器

ET0=1; //允许T0定时器中断

EA=1; //开启总中断允许

P2=Tab[0];P0_0=0;P0_1=0;//显示00

num=0; //被显示的数置0

while(1) //一直调用显示,等待T0中断修改显示数据

{

shi=num/10; //取出十位数

ge=num%10; //取出个位数

P0_0=1;P0_1=1; //关闭显示

P2=Tab[shi]; //P2口送出十位数据显示代码

P0_0=0; //打开十位显示

delay(1000); //延时

P0_0=1; //关闭显示

P2=Tab[ge]; //P2口送出个位数据显示代码

P0_1=0;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。