⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interrupt-eam.c

📁 这是我从朋友那搞到的pic学习资料
💻 C
字号:
/* ****************************************************************
** 功能描述: 定时器TMR0 10ms高优先级中断,232接收低优先级中断
*************************************************************** */
#include	"pic18.h"	/* 所有PIC18系列的头文件 */


/* ****************************************************************
** 函 数 名: interrupt	HI_ISR()
** 功能描述: 高优先级中断子程序:定时器0中断
*************************************************************** */
void	interrupt HI_ISR()
{
	if(TMR0IF==1)				/* 定时器0中断 */
	{
		TMR0IF=0;				/* 清中断标志 */
		TMR0H=0Xd8;	
		TMR0L=0Xf4;				/* 对TMR0定时10ms写入一个初值。 */
	}
}

/* ****************************************************************
** 函 数 名: interrupt	low_priority	LOW_ISR()
** 功能描述: 低优先级中断子程序:RS232接收中断
*************************************************************** */
void	interrupt low_priority	LOW_ISR()
{
	unsigned	char	data;
	if(RCIF==1)					// RS232接收中断
	{
		RCIF=0;					// 清232接收中断标志
		data=RCREG;				// 将接收到的通信数据存入data
	}
}

/* ****************************************************************
** 函 数 名: initial()
** 功能描述: 系统初始化子程序,放在程序首部
*************************************************************** */
void	initial()
{
	INTCON=0x00;			/* bit7-bit0:关总中断 */
	ADCON1=0X07;			/* 设置数字输入输出口 */
	PIE1=0;					/* PIE1 的中断不使能 */			
	PIE2=0;					/* PIE2 的中断不使能 */	
	PIE3=0;					/* PIE3 的中断不使能 */	
}

/* ****************************************************************
** 函 数 名: sciinitial()
** 功能描述: 232串行通讯初始化子程序,设置低优先级中断接收,使能232收和发
*************************************************************** */
void	sciinitial()
{
	TXSTA=0x04;			// 选择异步高速方式传输8位数据
	RCSTA=0x80;			// 允许串行口工作使能,
	TRISC=TRISC|0X80;	// PIC18F458:将RC7(RX)设置为输入方式
	TRISC=TRISC&0Xbf;	// RC6(TX)设置为输出
	SPBRG=25;			// 4M晶振,波特率9600,SPBRG=25
	PIR1=0x00;			// 清中断标志
	PIE1=PIE1|0x20;		/* 允许串行通讯接口(USART)接收中断使能 */
	RCIP=0;				// 设置SCI接收中断为低优先级中断 
	CREN=1;				// 允许串口接收数据
	PIE1=PIE1|0x10;		// 允许中断发送
	TXIP=0;				// 低优先级中断
	TXEN=1;				// 允许串口发送数据
}

/* ****************************************************************
** 函 数 名: tmint()
** 功能描述: TMR0初始化子程序,10ms中断1次
*************************************************************** */
void	tmint()
{
	T0CON=0X09;				//设定TMR0工作于16位定时器方式,内部时钟,不分频
	INTCON=INTCON|0X20;		//TMR0中断允许
	INTCON=INTCON&0Xfb;		//清除TMR0的中断标志
	TMR0IP=1;				//TMR0中断高优先级
	IPEN=1;					//使能中断优先级
	TMR0ON=1;				//打开定时器0
}

main()					
{
	initial();				// 系统初始化
	sciinitial();			// 串行通讯初始化子程序
	tmint();				// TMR0初始化
	IPEN=1;					// 使能中断高低优先级
	INTCON=INTCON|0xc0;		// 开总中断、开外围接口中断
	while(1)
	{
		;					// 等待中断,也可作为用户编程
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -