📄 irq.c
字号:
#pragma large
#include "public.h"
sfr WDT_CONTR = 0xE1;//看门狗
UCHAR xdata gUartRxBuf[UART_RX_SIZE]; //串口接收缓冲区
UCHAR xdata gUartTxBuf[UART_TX_SIZE]; //串口发送缓冲区
unsigned char xdata gUartTxWrite;
unsigned char xdata gUartTxRead;
UCHAR gUart_Send_Busy;
UCHAR gMainLoopTimeOut;
UINT gDogCounter; //看门狗计数器
/*
中断表 索引
/INT0 0
TIMER0 1
/INT1 2
TIMER1 3
UART 4
TIMER2 5
/INT2 6
/INT3 7
*/
void Timer2Int(void) interrupt 5 using 0
{
}
void Ex0Int(void) interrupt 0 using 0
{
}
void Ex1Int(void) interrupt 2 using 0
{
}
void Ex2Int(void) interrupt 6 using 0
{
}
void Ex3Int(void) interrupt 7 using 0
{
}
/**************************时钟中断处理函数*******************************
入口参数: 无
出口参数: 无
返 回 值: 无
功 能: 时钟中断处理函数
描 述: 50ms中断一次 公式:初值=65535-921600*s
/**********************************************************************/
void Timer1Int(void) interrupt 3 using 2
{
TR1=0; //禁止计数
TH1=0x00;
TL1=0x0C;
TR1=1; //允许计数
gDogCounter ++ ;
if(gDogCounter>20)//500ms
{
gDogCounter=0;
//主循环超时处理
if(gMainLoopTimeOut>0)
gMainLoopTimeOut --;
if(gMainLoopTimeOut ==0) //当程序陷入死循环或跑飞时,进行软件狗复位
{
gMainLoopTimeOut = 1;
return ;
}
//喂狗
WDT_CONTR=0x37;
if(P3_5==0)
P3_5=1;
else
P3_5=0;
}
}
/**************************用户串口中断处理函数*******************************
入口参数: 无
出口参数: 无
返 回 值: 无
功 能: 用户串口中断处理函数
描 述:
/**********************************************************************/
void SerialDte(void) interrupt 4 using 1
{
UCHAR ch;
//UCHAR ch;
if(RI==1)
{
ch=SBUF&0x7f;
RI=0;
}
if(TI==1)
{
/*if(gUartTxRead!=gUartTxWrite)
{
gUartTxRead=gUartTxRead+1;
gUartTxRead%=UART_TX_SIZE;
SBUF=gUartTxBuf[gUartTxRead]; //发送一个字符后设置标志位空闲在主循环中进行发送
}*/
TI=0;
}
}
unsigned char WriteTxBuf(unsigned char mData)
{
gUartTxWrite=gUartTxWrite+1;
gUartTxWrite%=UART_TX_SIZE;
gUartTxBuf[gUartTxWrite]=mData;
//if(TI==1)
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -