interrupt.c
来自「交直流灵达电源单片机通讯程序,通过协议获得电源当前状态.」· C语言 代码 · 共 108 行
C
108 行
#define INT_GLOBALS
#include <variable.H>
void serial(void) interrupt 4 using 1
{
if ( TI ) {
TI=0;
if(Snd[0].Head == Snd[0].Tail) { Snd[0].Sending = 0; TR=0; }
else {
SBUF=Snd[0].mData[Snd[0].Head++];
Snd[0].Head = Snd[0].Head % LEN_SND;
}
}
if ( RI ) {
RI=0;
Rcv[0].mData[Rcv[0].Tail++]=SBUF;
Rcv[0].Tail = Rcv[0].Tail % LEN_RCV;
}
}
void COM1(void) interrupt 0 using 1
{
unsigned char xdata cTmp;
cTmp = IIR1;
while ((cTmp & 0x06) != 0) {
if ((cTmp & 0x06) == 0x02) { // send buff empty
IER1 = 0x01; // bit0: receive valid; bit1: send buffer empty
}
if ((cTmp & 0x06) == 0x04) { // receive valid
Rcv[1].mData[Rcv[1].Tail++] = D_SER1;
Rcv[1].Tail = Rcv[1].Tail % LEN_RCV;
}
cTmp = IIR1;
}
cTmp = LSR1;
cTmp = MSR1;
}
void COM2(void) interrupt 2 using 1
{
unsigned char xdata cTmp;
cTmp = IIR2;
while ((cTmp & 0x06) != 0) {
if ((cTmp & 0x06) == 0x02) { // send buff empty
// if( Snd[2].Head != Snd[2].Tail ) {
// D_SER2 = Snd[2].Data[Snd[2].Head++];
// Snd[2].Head = Snd[2].Head % LEN_SND;
// }
// else {
// Snd[2].Sending = 0;
// IER2 = 0x01;
// }
IER1 = 0x01; // bit0: receive valid; bit1: send buffer empty
}
if ((cTmp & 0x06) == 0x04) { // receive valid
Rcv[2].mData[Rcv[2].Tail++] = D_SER2;
Rcv[2].Tail = Rcv[2].Tail % LEN_RCV;
}
cTmp = IIR2 ;
}
cTmp = LSR2;
cTmp = MSR2;
}
void timer0(void) interrupt 1 using 1
{
static unsigned int xdata TimerCnt;
static unsigned char xdata TimerSecond;
TimerCnt++;
if (TimerCnt >=400) {
TimerCnt = 0;
TimerSecond++;
RELAY2 = 0;
if (TimerSecond >= 2) {
TimerSecond = 0;
enPoll = 1;
}
}
if (RS485SndDelTime > 0) {
RS485SndDelTime--;
if (RS485SndDelTime == 0) {
SBUF=Snd[0].mData[Snd[0].Head++];
Snd[0].Head = Snd[0].Head % LEN_SND;
}
}
if( Snd[1].Head != Snd[1].Tail ){
D_SER1=Snd[1].mData[Snd[1].Head++];
Snd[1].Head = Snd[1].Head % LEN_SND;
}
else
Snd[1].Sending = 0;
if( Snd[2].Head != Snd[2].Tail ){
D_SER2=Snd[2].mData[Snd[2].Head++];
Snd[2].Head = Snd[2].Head % LEN_SND;
}
else
Snd[2].Sending = 0;
Address=D_ADDR & 0x0f;
TH0=0xEE; // 0xEE
TL0=0x00; // 0x00
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?