51单片机各中断初始化及子程序模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)下编译调试
*本程序仅供初学者参考使用,细节问题未涉及,在实际项目中请谨慎使用
*Author:大灵通
*昌宁科技,欢迎您提出宝贵意见!
*2006-12-7 15:05,OK!
*************************************************************/
#include
//且不能使用定时器2
#include
#include
#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: 定时器0初始化
*parameter:
*Return:
*Modify:
*************************************************************/ void InitialTime(void)
{
TMOD |= 0x01;//16位定时器
TH0 = 0x01;
TL0 = 0x11;
ET0 = 1;//使能中断
TR0 = 1;//打开定时器
}
/************************************************************ *Function: 定时器1初始化
*parameter:
*Return:
*Modify:
*************************************************************/