欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

51单片机(V51)学习——外部中断和定时器中断

程序员文章站 2022-04-01 15:47:39
...

一、外部中断(下降沿开启和低电平开启)

(1)外部中断概念:

要用到的寄存器:EA、EX0、IT0
51单片机(V51)学习——外部中断和定时器中断

51单片机(V51)学习——外部中断和定时器中断

51单片机(V51)学习——外部中断和定时器中断
51单片机(V51)学习——外部中断和定时器中断
51单片机(V51)学习——外部中断和定时器中断
51单片机(V51)学习——外部中断和定时器中断
51单片机(V51)学习——外部中断和定时器中断
51单片机(V51)学习——外部中断和定时器中断

(2)下降沿演示:

#include<reg52.h>

void main()
{
	P1 = 0X0F;	//	0000 1111 让前面4个灯熄灭,后面4个灯亮起
	P3 = 0X0F; 	//	让P3.4-P3.7输出0, 由高电平变低电平,

	EA = 1;  // 开启全局中断(总闸门)
	EX0 = 1; // 开启中断(小闸门),允许INT0中断开启
	IT0 = 1;	//	中断触发条件设置,让中断由下降沿触发

	while(1)
	{
		;
	}
}

void Duan()interrupt 0
{
	P1=~P1;
}

按第三矩阵的按键前:
51单片机(V51)学习——外部中断和定时器中断
按第三矩阵的按键后:
51单片机(V51)学习——外部中断和定时器中断

(3)低电平中断

#include<reg52.h>

void main()
{
	P1 = 0X0F;	//	0000 1111 让前面4个灯熄灭,后面4个灯亮起
	P3 = 0X0F; 	//	让P3.4-P3.7输出0, 由高电平变低电平,

	EA = 1;  // 开启全局中断(总闸门)
	EX0 = 1; // 开启中断(小闸门),允许INT0中断开启
	IT0 = 0;	//	中断触发条件设置,让中断由下降沿触发

	while(1)
	{
		;
	}
}

void Duan()interrupt 0
{
	P1=~P1;
}

二、定时器中断

(1)概念:

51单片机(V51)学习——外部中断和定时器中断
51单片机(V51)学习——外部中断和定时器中断
51单片机(V51)学习——外部中断和定时器中断

51单片机(V51)学习——外部中断和定时器中断
51单片机(V51)学习——外部中断和定时器中断

(2)简单使用

bstv51.h

/*定义晶振频率(单位 Hz)*/
#define FOSC  11059200 
//#define FOSC  12000000 
//#define FOSC  22118400 


/* BST-V51 引脚定义 */
sbit L0  = P1^0; //LED0引脚
sbit L1  = P1^1;
sbit L2  = P1^2;
sbit L4  = P1^4;
sbit L5  = P1^5;
sbit L6  = P1^6;
sbit L7  = P1^7;

sbit RS  = P1^0;   //RS为寄存器选择,1=数据寄存器、0=指令寄存器。
sbit RW  = P1^1;   //RW为读写信号线,1=读操作,0=写操作。
                   //当RS=RW=0可以写入指令或者显示地址,
                   //当RS=0,RW=1可以读忙信号,
                   //当RS=1,RW=0可以写入数据。

sbit SDI  = P1^5;  //DS1302
sbit SDO  = P1^6;  //DS1302
sbit SCK  = P1^7;  //DS1302


sbit EN	 = P2^5;   //当EN端由高电平跳变成低电平时,液晶模块执行命令。
sbit CS  = P2^6;
sbit RST = P2^7;   //DS1302时钟
sbit RX  = P3^0;
sbit TX  = P3^1;
sbit IR  = P3^2;
sbit B20 = P2^4;
sbit FM =  P2^3;

sbit DU=P2^6;
sbit WE=P2^7;

/*为方便使用,部分管脚的多重定义*/

#define CLK SW0
#define DAT SW1




//系统初始化函数
void bstv51_init(void);/*BST-V51开发板主板初始化*/


#endif

main.c

#include<reg52.h>
#include"bstv51.h"

uint i =0;

void main()
{
	bstv51_init();
	TMOD |=0X01;	//工作方式 1 : 内部寄存器来控制定时的功能
	TH0 = 0X4C;		//高八位初始值
	TL0 = 0X00;		//低八位初始值

	EA  = 1;		//	开启全局中断
	ET0 = 1;		//	开启定时器0中断(小门)
	TR0 = 1;	   	//	开启定时器0,开始计数
	while(1)
	{
	
		if(i == 10)
		{
			L0=~L0;		//	第一个灯闪烁

			L4=~L4;		//	第五个灯闪烁

			L6=~L6;		//	第七个灯闪烁
			i = 0;
		}
	}
	

}

void DUAN(void)interrupt 1
{
	//	每隔1秒 这三个灯闪烁
	TH0 = 0X4C;	  //	50ms = (12/11059200)(65535-初值)   初值为19456————0X4C00
	TL0 = 0X00;
	i++;
}
相关标签: 单片机 嵌入式