一、定时器,计数器,概述
二、定时器,计数器,相关寄存器
三、定时器,计数器,寄存器的配置使用
void Timer0Init(void) //1000微秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初始值
TH0 = 0xD4; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
四、例程一:定时器操作LED灯
#include<stc15.h>
unsigned char LED=1;
unsigned int LEDR = 0;
void Timer0Init(void); //1毫秒@11.0592MHz
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
Timer0Init();
EA = 1;//打开CPU总中断
ET0 = 1;
while(1);
}
void EXINT0(void) interrupt 1
{
LEDR++;
if(LEDR==999)
{
LEDR = 0;
P0=~(0X01<<LED);
P2|=0X80;
P2&=0X9F;
P2&=0X1F;
if(++LED==8)LED=0;
}
}
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初始值
TH0 = 0xD4; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
注意定时器的中断开关EX = 1;和中断号为interrupt1
五、例程二:解决时效不稳定
#include<stc15.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar KEYV = 0;
unsigned char LED=1;
unsigned int LEDR = 0;
void init(void);
void keys(void);
void DMS(uint MS);
void Timer0Init(void);
void main(void)
{
init();
ET0=1;
EA=1;
Timer0Init();
while(1)
{
keys();
}
}
void init(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
}
void keys(void)
{
if(P30==0)
{
DMS(10);
if(P30==0)KEYV = 7;
while(!P30);
}
else if(P31==0)
{
DMS(10);
if(P31==0)KEYV = 6;
while(!P31);
}
else if(P32==0)
{
DMS(10);
if(P32==0)KEYV = 5;
while(!P32);
}
else if(P33==0)
{
DMS(10);
if(P33==0)KEYV = 4;
while(!P33);
}
}
void DMS(uint MS)
{
uint i,j;
for(i=0;i<MS;i++)
for(j=853;j>0;j--);
}
void EXINT0(void) interrupt 1
{
if(KEYV==7)
{
if(++LEDR==200)
{
LEDR = 0;
P0=~(0X01<<LED);
if(++LED==8)LED=0;
}
}
if(KEYV==6)
{
if(++LEDR==200)
{
LEDR = 0;
P0=~(0X80>>LED);
if(++LED==8)LED=0;
}
}
if(KEYV==5)
{
KEYV=0;
}
if(KEYV==4)
{
P0=0XFF;
}
}
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初始值
TH0 = 0xD4; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}