《51系列单片机各中断初始化及子程序模板.pdf》由会员分享,可在线阅读,更多相关《51系列单片机各中断初始化及子程序模板.pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、5151 系列系列单片机各中断初始化及子程序模板单片机各中断初始化及子程序模板/*51单片机各中断初始化及子程序模板,几乎包括了传统 51单片机的全部中断*1、外部中断 0*2、定时器中断 0*3、外部中断 1*4、定时器中断 1*5、串行中断*6、定时器中断 2本中断在 52时才有*以上所有中断已经在 Keil软件环境上经过测试,工作正常*在使用定时中断的时候需要根据实际需要重设定时器的初值和工作方式*在串行通讯中,使用 11.0592M晶振,通讯波特率为 9600bps*为了保证文件的单一和方便保存,本项目只用了一个文件,没有进行模块化处理,在实际应用中不建议这样做*本程序在 UE11.0
2、0b下编辑,在 KeilV3.23(C8.01)下编译调试*本程序仅供初学者参考使用,细节问题未涉及,在实际项目中请谨慎使用*Author:大灵通*昌宁科技,欢迎您提出宝贵意见!*2006-12-7 15:05,OK!*/#include/如果是使用 51单片机,则应该是 reg51.h,/且不能使用定时器 2#include/以下两个包含文件在本代码中实际不需要,#include/但经常用到,所以列出#define uchar unsigned char#define uint unsigned int#define TimeDelay 2/程序所用变量声明bit Time0Int;bit
3、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:*/
4、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=0 xff)i=0;/*Function:单片机初始化处理*parameter:*Return:*Modify:*/void McuIniti
5、al(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|=0 x01;/16位定时器TH0=0 x06;/8msTL0=0
6、 xed;ET0=1;/使能中断TR0=1;/打开定时器/*Function:定时器 1初始化*parameter:*Return:*Modify:*/void InitialTime1(void)TMOD|=0 x10;/16位定时器TH1=0 x06;/8msTL1=0 xed;ET1=1;/使能中断TR1=1;/打开定时器/*Function:定时器 2初始化,本中断仅在 52时才有*parameter:*Return:*Modify:*/void InitialTime2(void)T2CON=0 x04;RCAP2H=0 x04;RCAP2L=0 x00;ET2=1;/*Functi
7、on:串行中断初始化*parameter:*Return:*Modify:*/void IntialSerialComm(void)TMOD|=0 x20;SCON=0 xf0;TH1=0 xfd;/fdTL1=0 xfd;/fdTR1=1;ES=1;/*Function:外部中断 0中断服务子程序*parameter:*Return:*Modify:*/void Interrupt0(void)interrupt 0Int0Flag=1;/*Function:外部中断 1中断服务子程序*parameter:*Return:*Modify:*/void Interrupt1(void)inte
8、rrupt 2Int1Flag=1;/*Function:定时器 0中断服务子程序*parameter:*Return:*Modify:*/void InterruptTime0(void)interrupt 1TH0=0 x06;/8msTL0=0 xed;Time0Count+;/*Function:定时器 1中断服务子程序*parameter:*Return:*Modify:*/void InterruptTime1(void)interrupt 3TH1=0 x06;/8msTL1=0 xed;Time1Count+;/*Function:定时器 2中断服务子程序*parameter:
9、*Return:*Modify:*/void InterruptTime2(void)interrupt 5TF2=0;Time2Count+;/*Function:串行接收中断服务子程序*parameter:*Return:*Modify:*/void InterruptSerialComm(void)interrupt 4if(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-;