英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 定时器TMR0 10ms高优先级中断,232接收低优先级中断 [打印本页]

作者: eva    时间: 2012-8-21 14:09
标题: 定时器TMR0 10ms高优先级中断,232接收低优先级中断
/* ****************************************************************
** 功能描述: 定时器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)
{
  ;     // 等待中断,也可作为用户编程
}
}


作者: admin    时间: 2012-9-15 21:07
很不错,好好学习




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2