单片机中断系统编程,2

定时器

#include<reg51.h>
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
sbit led4=P2^7;
sbit key3=P3^2;
sbit key4=P3^3;
#define led P2 
void delay(u16 i)
{
	while(i--)
	{
	u16 j=120;
	while(j--);
	}
}
void yvchuli()
{		//外部中断预处理
	IT0=1;
	EX0=1;//中断源允许
	IT1=1;
	EX1=1;//中断源允许	

		//定时器预处理
	TMOD|=0x01;//选择定时器

	TH0=0xFC;//赋给高8位初值
	TL0=0X18;//赋给低8位初值
	ET0=1;//中断源允许
	TR0=1;//定时器启动	

	TMOD|=0x10;
	TH1=0xFC;
	TL1=0x18;
	ET1=1;
	TR1=1;	
		
	EA=1;//cpu允许
}
void main()
{
	yvchuli();
	led=0xfe; //1111 1110
	while(1);
}
void waiduan0()interrupt 0
{
	delay(10);
	if(key3==0)
	{
		led2=~led2;
		while(key3==0);
	}
}
void waiduan1()interrupt 2
{
	delay(10);
	if(key4==0)
	{
		led1=~led1;
		while(key4==0);
	}
}
void time0()interrupt 1
{
	static u16 i,m;	
	TH0=0xFC;
	TL0=0X18;
	i++;
	if(i==500)
	{	 
          for(m=0;m<8;m++)
          {        
		led=_crol_(led,1);
		delay(100);
		i=0;
   	  }
	}	
}
void time1()interrupt 3
{	static u16 m;
	TH1=0xFC;
	TL1=0X18;
	m++;
	if(m==1000)
	{	
		m=0;
		led4=~led4;
	}
}

定时器2

#include<reg51.h>
#define u8 unsigned char
#define u16 unsigned int
#define led P2
void delay(u8 i)
{u8 j=124;
	while(i--)
	{while(j--);}
}
void yvchili()
{
	EA=1;
	TR0=1;
	ET0=1;
	TMOD=0x06;
	TL0=0xfe;//254
	TH0=0xfe;
}
void main()
{
	led=0x00;
	yvchili();
	while(1);
}
void time0() interrupt 1
{
	led=~led;
}

定时器和串口

#include<reg51.h>
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
#define led P2
	int receive;
	int x=0,a=0;
	/***************************************************
	
					定时器1 定时器0 串口中断  可以同时使用
	
	*****************************************************/
	
	
	
void yvchuli()
{
	TMOD|=0x20;//方式2,自动装载8位
	TL1=0x30;//300
	TH1=0x30;//波特率4800
	TR1=1;
	ET1=1;//打开就不进入串口中断
	
	PCON=0x80;//SMOD=1,不能位操作,即使用倍频,原来为2400
	SCON=0x50;
	ES=1;//打开串口中断
	EA=1;
	
	TMOD|=0x02;
	TH0=0x100;
	TL0=0x100;
	TR0=1;
  ET0=1;
}
void main()
{
	yvchuli();
	P2=0x00;
	while(1)
	{	

	}
}
void t0() interrupt 1
{
	a++;
	if(a==1000)
	{
	P2=0xff;
	a=0;
	}
}
void t1() interrupt 3
{
	x++;
	if(x==1000)
	{
		P2=0x0f;
	  x=0;
	}
}
void chuankou()interrupt 4
{
	P2=0x00;
	receive=SBUF;//接收的数据在SBUF中存储
	RI=0;//软件清零,接收数据后硬件置1
	SBUF=receive;//两个SBUF不一样,这个是发送,上面是接受
	while(TI==0);//发送完后TI会硬件置1
	TI=0;//软件清零,为下次发数据做准备
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静安书以沫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值