51单片机各中断初始化及子程序模板

来源:本站
导读:目前正在解读《51单片机各中断初始化及子程序模板》的相关信息,《51单片机各中断初始化及子程序模板》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机各中断初始化及子程序模板》的详细说明。
简介:本文章是关于51单片机各中断初始化及子程序模板 。

/************************************************************

*51单片机各中断初始化及子程序模板,几乎包括了传统51单片机的全部中断

*1、外部中断0

*2、定时器中断0

*3、外部中断1

*4、定时器中断1

*5、串行中断

*6、定时器中断2---本中断在52时才有

*以上所有中断已经在Keil软件环境上经过测试,工作正常

*在使用定时中断的时候需要根据实际需要重设定时器的初值和工作方式

*在串行通讯中,使用11.0592M晶振,通讯波特率为9600bps

*为了保证文件的单一和方便保存,本项目只用了一个文件,

没有进行模块化处理,在实际应用中不建议这样做

*本程序在UE11.00b下编辑,在KeilV3.23(C8.01)下编译调试

*本程序仅供初学者参考使用,细节问题未涉及,在实际项目中请谨慎使用

*************************************************************/

#include<reg52.h>//如果是使用51单片机,则应该是reg51.h,

//且不能使用定时器2

#include<intrins.h>//以下两个包含文件在本代码中实际不需要,

#include<absacc.h>//但经常用到,所以列出

#define uchar unsigned char

#define uint unsigned int

#define TimeDelay 2

//程序所用变量声明

bit Time0Int;

bit Int0Flag,Int1Flag;

uchar Time0Count,Time1Count,Time2Count;

uchar ReceiveData;

//程序所用函数声明

void McuInitial(void);

void InitialTime0(void);

void InitialTime1(void);

void InitialTime2(void);

void IntialSerialComm(void);

void SerialSend(uchar SendData);

void delay(uint n);

/************************************************************

*Function: 主函数

*parameter:

*Return:

*Modify:

*************************************************************/

void main(void)

{

uchar i;

McuInitial();

delay(TimeDelay);

while(1)

{

if(Int0Flag==1)//各中断的具体处理

{

Int0Flag = 0;

}

if(Int1Flag==1)

{

Int1Flag = 0;

}

if(Time0Count==5)

{

Time0Count = 0;

}

if(Time1Count==5)

{

Time1Count = 0;

}

if(Time2Count==5)

{

Time2Count = 0;

}

SerialSend(i);

i++;

if(i>=0xff)

i=0;

}

}

/************************************************************

*Function: 单片机初始化处理

*parameter:

*Return:

*Modify:

*************************************************************/

void McuInitial(void)

{

//外部中断0初始化

IT0 = 1;

EX0 = 1;

//外部中断1初始化

IT1 = 1;

EX1 = 1;

InitialTime0();//定时器0初始化

//InitialTime1();//定时器1初始化

InitialTime2();//定时器2初始化

IntialSerialComm();//串行中断初始化,占用定时器1,

//如果用串行中断,定时器1不能用于定时

EA = 1;//打开中断

}

/************************************************************

*Function: 定时器1初始化

*parameter:

*Return:

*Modify:

*************************************************************/

void InitialTime0 (void)

{

TMOD |= 0x01;//16位定时器

TH0 = 0x06;//8ms

TL0 = 0xed;

ET0 = 1;//使能中断

TR0 = 1;//打开定时器

}

/************************************************************

*Function: 定时器1初始化

*parameter:

*Return:

*Modify:

*************************************************************/

void InitialTime1 (void)

{

TMOD |= 0x10;//16位定时器

TH1 = 0x06;//8ms

TL1 = 0xed;

ET1 = 1;//使能中断

TR1 = 1;//打开定时器

}

/************************************************************

*Function: 定时器2初始化,本中断仅在52时才有

*parameter:

*Return:

*Modify:

*************************************************************/

void InitialTime2 (void)

{

T2CON=0x04;

RCAP2H=0x04;

RCAP2L=0x00;

ET2 = 1;

}

/************************************************************

*Function: 串行中断初始化

*parameter:

*Return:

*Modify:

*************************************************************/

void IntialSerialComm(void)

{

TMOD |= 0x20;

SCON=0xf0;

TH1=0xfd;//fd

TL1=0xfd;//fd

TR1=1;

ES=1;

}

/************************************************************

*Function: 外部中断0中断服务子程序

*parameter:

*Return:

*Modify:

*************************************************************/

void Interrupt0 (void) interrupt 0

{

Int0Flag = 1;

}

/************************************************************

*Function: 外部中断1中断服务子程序

*parameter:

*Return:

*Modify:

*************************************************************/

void Interrupt1 (void) interrupt 2

{

Int1Flag = 1;

}

/************************************************************

*Function: 定时器0中断服务子程序

*parameter:

*Return:

*Modify:

*************************************************************/

void InterruptTime0(void) interrupt 1

{

TH0 = 0x06;//8ms

TL0 = 0xed;

Time0Count++;

}

/************************************************************

*Function: 定时器1中断服务子程序

*parameter:

*Return:

*Modify:

*************************************************************/

void InterruptTime1(void) interrupt 3

{

TH1 = 0x06;//8ms

TL1 = 0xed;

Time1Count++;

}

/************************************************************

*Function: 定时器2中断服务子程序

*parameter:

*Return:

*Modify:

*************************************************************/

void InterruptTime2(void) interrupt 5

{

TF2=0;

Time2Count++;

}

/************************************************************

*Function: 串行接收中断服务子程序

*parameter:

*Return:

*Modify:

*************************************************************/

void InterruptSerialComm(void) interrupt 4

{

if(RI)

{

RI = 0;

ReceiveData = SBUF;

}

}

/************************************************************

*Function: 串行发送程序

*parameter:

*Return:

*Modify:

*************************************************************/

void SerialSend(uchar SendData)

{

SBUF = SendData;

while(TI==0);

TI = 0;

}

/************************************************************

*Function: 延时

*parameter:

*Return:

*Modify:

*************************************************************/

void delay(uint n)

{

while(n!=0)

{

n--;

}

}

提醒:《51单片机各中断初始化及子程序模板》最后刷新时间 2024-03-14 00:55:49,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机各中断初始化及子程序模板》该内容的真实性请自行鉴别。