173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

单片机c语言简易定时程序

htxw 2023-03-13 资讯中心 18 ℃

请问单片机C语言定时器程序怎么写?

你看过汇编吗?与汇编的格式是一样的。具体就是先开中断允许标志位(IE里面对应的各个位)在设定TMOD工作方式。下一步就是设定初始值了(TH、TL)。设置完这些就可以开定时器了。写中断中段函数是是需要另加interrupt 加上一个常数(比如是定时器0就在后面加上1)。我用89S52芯片编过一个定时器程序你参考一下,希望对你有一点帮助。

//功能:感应外界温度并用数码管显示

//时间:2005年6月20日

//设计人:

#includereg52.h

#define uchar unsigned char

sbit ad0809_oe=P1^0; //定义各个位

sbit ad0809_start=P1^1;

sbit ad0809_ale=P1^2;

sbit ls595_rclk=P1^3;

sbit ad0809_eoc=P1^5;

sbit ls595_oe=P1^4;

sbit ls595_ser=P3^0;

sbit ls595_srclr=P3^1;

uchar nn,mm;

uchar code tab[]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84};

send(uchar); //声明函数

AD(uchar);

void display(uchar);

void init();

//********普通口输入数据*****************

send(uchar shu) //普通口串行输入

{

unsigned char i,k;

k=0x01;

for(i=0;i8;i++)

{

if(k==(kshu)) //判断每位上是否为1

ls595_ser=1;

else

ls595_ser=0;

k=1; //左移一位

ls595_srclr=0; //输入一个上升沿讲数送入595中

ls595_srclr=1;

}

}

//*****************595显示子程序********************

void display(uchar du)

{

uchar ge,shi,flge; //ge拆字后个位的存放处shi拆字后十位的存放处flge ℃的存放处

shi=tab[du/10]; //拆字

send(shi); //给595送数

ge=tab[du%10];

send(ge);

flge=0xb1;

send(flge);

ls595_rclk=0; //上升沿送出数据

ls595_rclk=1;

}

//*******************初始化程序********************

void init() //初始化AD、定时器

{

ad0809_start=0; //Start管教上升沿将AD内部寄存器清零

ad0809_start=1;

ad0809_ale=1; //ALE高电平选择通道

nn=0;

mm=0;

TMOD=0x01; //定时器初始化

//IE=0x82;

EA=1;

ET0=1;

TCON=0x00;

TL0=(65536-50000)%256; //定时50ms

TH0=(65536-50000)/256;

}

AD(uchar wen)

{

// unsigned char tt=0;

// ad0809_ale=1; //选择通道

ad0809_start=1;

ad0809_start=0; //start下降沿启动转换信号

while(ad0809_eoc==0); //判断转换是否结束

ad0809_oe=1; //转换结束送出转换数据

wen=P2;

return (wen);

}

//**************中断服务程序*********************

void tiam0() interrupt 1 using 1 //中断服务程序

{

TL0=(65536-50000)%256; //定时50ms

TH0=(65536-50000)/256;

nn++;

if(nn==10) //0.5秒M加一

{

mm++;

nn=0;

}

}

//****************主程序***************************

void main()

{

unsigned char bb,aa,cc; //bb=计算后得到温度,aa=AD输出数据

unsigned char wen; //wen存放转换的得到的数据

init();

// wen=17;

ls595_oe=0;

cc=0;

TR0=1;

while(1)

{

aa=AD(wen);

// ad0809_oe=0;

aa=~aa;

bb=aa/4;

if(mm==2)

{

mm=0;

cc=bb;

}

display(cc); //调用显示子程序

}

}

AT89C51单片机 用定时器1,方式0定时1s的C语言程序怎么写

(这是我同学编的,拿来给你)

#include reg51.h

#include intrins.h

unsigned char i;

void main()

{

TMOD=0x00;

TH1=0x3c;

TL1=0xb0;

EA=1;

ET1=1;

TR1=1;

while(1)

{

if(i==20)

{

i=0;

//下面写你要处理的的其他程序,你只要了定时1s。

}

}

}

void a(void) interrupt 3

{

unsigned char i;

TH1=0x3c;

TL1=0xb0;

i++;

}

用c语言为单片机STC12C2052写一段简单的延时程序!

下面几个是单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0000MHz的晶振,而在AVR单片机上常用的有8.000MHz和4.000MH的晶振所以在网上查找程序时如果涉及到精确延时则应该注意晶振的频率是多大。

软件延时:(asm)

晶振12MHZ,延时1秒

程序如下:

DELAY:MOV

72H,#100

LOOP3:MOV

71H,#100

LOOP1:MOV

70H,#47

LOOP0:DJNZ

70H,LOOP0

NOP

DJNZ

71H,LOOP1

MOV

70H,#46

LOOP2:DJNZ

70H,LOOP2

NOP

DJNZ

72H,LOOP3

MOV

70H,#48

LOOP4:DJNZ

70H,LOOP4

定时器延时:

晶振12MHZ,延时1s,定时器0工作方式为方式1

DELAY1:MOV

R7,#0AH

;;晶振12MHZ,延时0.5秒

AJMP

DELAY

DELAY2:MOV

R7,#14H

;;晶振12MHZ,延时1秒

DELAY:CLR

EX0

MOV

TMOD,#01H

;设置定时器的工作方式为方式1

MOV

TL0,#0B0H

;给定时器设置计数初始值

MOV

TH0,#3CH

SETB

TR0

;开启定时器

HERE:JBC

TF0,NEXT1

SJMP

HERE

NEXT1:MOV

TL0,#0B0H

MOV

TH0,#3CH

DJNZ

R7,HERE

CLR

TR0

;定时器要软件清零

SETB

EX0

RET

C语言延时程序:

10ms延时子程序(12MHZ)

void

delay10ms(void)

{

unsigned

char

i,j,k;

for(i=5;i0;i--)

for(j=4;j0;j--)

for(k=248;k0;k--);

}

1s延时子程序(12MHZ)

void

delay1s(void)

{

unsigned

char

h,i,j,k;

for(h=5;h0;h--)

for(i=4;i0;i--)

for(j=116;j0;j--)

for(k=214;k0;k--);

}

200ms延时子程序(12MHZ)

void

delay200ms(void)

{

unsigned

char

i,j,k;

for(i=5;i0;i--)

for(j=132;j0;j--)

for(k=150;k0;k--);

}

500ms延时子程序程序:

(12MHZ)

void

delay500ms(void)

{

unsigned

char

i,j,k;

for(i=15;i0;i--)

for(j=202;j0;j--)

for(k=81;k0;k--);

}

下面是用了8.0000MHZ的晶振的几个延时程序(用定时0的工作模式1):

(1)延时0.9MS

void

delay_0_9ms(void)

{

TMOD=0x01;

/*定时器0工作在模式1下(16位计数器)*/

TH0=0xfd;

TL0=0xa8;

TR0=1;

/*启动定时器*/

while(TF0==0);

TR0=0;

}

(2)延时1MS

void

delay_1ms(void)

{

TMOD=0x01;

/*定时器0工作在模式1下(16位计数器)*/

TH0=0xfd;

TL0=0x65;

TR0=1;

/*启动定时器*/

while(TF0==0);

TR0=0;

}

(3)延时4.5ms

void

delay_4_5ms(void)

{

TMOD=0x01;

/*定时器0工作在模式1下(16位计数器)*/

TH0=0xf4;

TL0=0x48;

TR0=1;

/*启动定时器*/

while(TF0==0);

TR0=0;

}

单片机c语言编写产生1秒定时的程序,怎么写?

如果是51单片机的话其实很简单的,这里假设晶振频率是12M(一般都是的),你可以选用定时器0,工作在工作状态2,因为这个状态下装入初始值几乎不需要时间,所以定时精确,也就是8位预置数状态,将初始值设为6,这样每次定时就是250微秒,在中断程序中定义一个静态变量,每次中断加一,这样当这个变量值为4000时就刚好是1S钟。

关键程序是:

void main()

{

TMOD=OX02;

EA=1;

ET0=1;

TH0=0X06;

TL0=0X06;

while(1);

}

void timer0() interrupt 1

{

static unsigned int times=0;

times++;

if(times==4000)

{

times=0;

//自己的程序

}}

求单片机定时器简单程序(C语言)详解。不胜感激~

用定时器0中断做流水灯,程序如下:#includereg52.h#includeintrins.h //包含_crol_()循环左移函数

unsigned char temp,count;void init() //初始化函数{ TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256;//装初值,高8位 TL0=(65536-50000)%256;//装初值,低8位 EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 temp=0xfe; count=0;//记数值清0}void main(){ init(); while(1){ P1=temp;}}void timer0() interrupt 1 using 1 //定时器0中断函数{ TH0=(65536-50000)/256;//重装初值,同上 TL0=(65536-50000)%256; count++;//计数值加1 if(count==10)//500ms{ count=0;//计数值清0 temp=_crol_(temp,1);循环左移一位}

单片机c语言简易定时程序的介绍到此就结束了,感谢您耐心阅读,谢谢。

本文标签:单片机c语言简易定时程序

<