实验目的:
1、掌握定时器的原理及常用工作方式;
2、 能够根据特定任务需求选择合适的工作方式实现定时。
实验要求:
1、基于普中开发板循环点P2口流水灯D1-D2-D3…D8,延时采用定时器T0定时100ms;(25分)
2、基于普中开发板循环点P2口流水灯D1-D2-D3…D8,延时采用定时器T1定时1s; (25分)
3、按键K1按下实现第1个功能,按键K2按下实现第2个功能。(选作)(50分)
备注:做了第3小题,第1,2 可不做
选择第三题
实验代码:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
uchar m=0,i=0;
#define led P2
typedef unsigned int u16;
sbit k1= P3^1;
sbit k2 = P3^0;
void delay(u16 i)
{
while(i--);
}
void main()
{
TMOD=0x11;//0 或 1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
if(k1==0)
{
delay(50);
if(k1==0)
{
TR0=1;//定时器0启动
}
led=~0x01;
while(1);
}
if(k2==0)
{
delay(50);
if(k2==0)
{
TR1=1;//定时器1启动
}
led=~0x01;
while(1);
}
}
void timer0() interrupt 1
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
m++;
if(m==2) //2*50MS=100MS
{
m=0;
P2 = ~(0x01<<i);
if(++i==8)
i=0;
}
}
void timer1() interrupt 3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++;
if(m==20) //20*50ms=1s
{
m=0;
P2 = ~(0x01<<i);
if(++i==8)
i=0;
}
}