第一生活网

单片机定时器程序设计(单片机定时器程序)

秦恒菡
导读 大家好,我是小一,我来为大家解答以上问题。单片机定时器程序设计,单片机定时器程序很多人还不知道,现在让我们一起来看看吧!你看过汇编...

大家好,我是小一,我来为大家解答以上问题。单片机定时器程序设计,单片机定时器程序很多人还不知道,现在让我们一起来看看吧!

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

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

//时间:2005年6月20日

//设计人:

#include<reg52.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;i<8;i++)

{

if(k==(k&shu)) //判断每位上是否为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); //调用显示子程序

}

}

本文到此讲解完毕了,希望对大家有帮助。