单片机C语言定时器如何调用单片机中通过中断的方式来调用定时器 。
具体的调用方式可以参考通过如下程序:
程序功能:利用定时器进行定时,实现每秒中led闪烁一次
#includereg52.h
sbit led = P0^0;
unsigned int num;
void main(void)
{
TMOD = 0x00;// 工作方式0
TH0 = (8192 - 5000) / 32;// 12M晶振下定时5ms
TL0 = (8192 - 5000) % 32;
EA = 1;// 开总中断
ET0 = 1;// 开定时器中断
TR0 = 1;// 启动定时器
while(1)
{
if(num == 200)// 定时1秒钟到
{
num = 0;// 计数器清零
led = ~led;// led灯取反 , 实现1秒闪烁一次
}
}
}
void timer() interrupt 1// 定时器1工作与方式0
{
TH0 = (8192 - 5000) / 32;// 重装初值
TL0 = (8192 - 5000) % 32;
num++;// 计数器加1
}
单片机秒表计时器c语言程序图 需要图和程序#includereg51.h// 时钟与秒表
#define uchar unsigned char
#define uint unsigned int
sbit qingling=P1^0;//清零
sbit tiaofen=P1^1;//调分
sbit tiaoshi=P1^2;//调时
sbit sounder=P1^7;//naozhong
uint a,b;
uchar hour,minu,sec,//时钟
hour0,minu0,sec0,//秒表
hour1,minu1,sec1;
h1,h2,m1,m2,s1,s2, //显示位
k,s;//状态转换标志
uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*****************函数声明***********************/
void keyscan();
void init();
void delay(uchar z);
void display(uchar,uchar,uchar);
void sounde();
/*****************主函数*************************/
void main()
{
init();
while(1)
{
while(TR1)
{
keyscan();// 扫描函数
while(s==1) // s是状态标志,当s=0时,闹钟取消 。s=1时 , 设定闹钟时间
//(也是通过调时,调分函数);
{//s=2时 , 闹钟工作,时间与设定时刻一致时,闹钟响
// (一分钟后自动关闭 , 可手动关闭) 。再次切换,s=0.
keyscan(); //s状态切换(0-》1-》2-》0)通过外部中断1实现 。
display(hour1,minu1,sec1); //闹钟时刻显示
}
display(hour0,minu0,sec0);//时钟表显示
while(k)/*k是秒表状态(0-》1-》2-》0)通过外部中断0实现 。
0秒表关;1秒表从零计时;2秒表停,显示计时时间*/
{
display(hour,minu,sec);//秒表显示
}
}
}
}
/*****************初始化函数***********************/
void init()
{
a=0;
b=0;
k=0;
s=0;
hour0=0;
minu0=0;
sec0=0;
hour=0;
minu=0;
sec=0;
hour1=0;
minu1=0;
sec1=0;
TMOD=0x11;//定时器0,1工作于方式1;赋初值
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
EX0=1;//秒表中断
EX1=1;//闹钟设定中断
ET0=1;
ET1=1;
IT0=1;//边沿触发方式
IT1=1;
PX0=1;
PX1=1;
TR0=0;//初始,秒表不工作
TR1=1;//时钟一开始工作
}
/*****************定时器0中断*************/
void timer0_int() interrupt 1//秒表
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
a++;
if(a==2)
{
a=0;
sec++;
if(sec==100)
{
sec=0;//毫秒级
minu++;
if(minu==60)
{
minu=0;//秒
hour++;
if(hour==60)//分
{
hour=0;
}
}
}
}
}
/*************外部中断0中断函数************/
void ex0_int() interrupt 0
{
k++;
if(k==3)
推荐阅读
- 联通iP服务器,ping联通服务器
- 鸿蒙系统应用关闭自动下载,怎么取消鸿蒙系统自动安装
- 小班体育类小游戏大全,小班体育游戏活动大全玩法,规则
- 大数据网络推广效果如何,大数据应用推广思路
- vb.net声明变长数组 vba 声明数组变量
- oracle表空间优化,oracle表空间优化数据块优化
- linux命令查主板型号,linux系统如何查看主板型号
- go语言比Java好吗 go语言工资高还是java工资高
- 游戏师父动作细节,游戏师父从不联系有什么用