【蓝桥杯】单片机设计与开发,定时器,计数器

一、定时器,计数器,概述

二、定时器,计数器,相关寄存器

三、定时器,计数器,寄存器的配置使用

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开始计时
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值