📄 interrupt.c
字号:
//pragma ot(0)
#define INT_GLOBALS
#include "Macro.h"
#include "Main.h"
void serial(void) interrupt 4 using 1
{
if ( TI ) {
TI=0;
if( Snd[0].Head == Snd[0].Tail ) { TR = 0; Snd[0].Sending = 0; }
else {
SBUF=Snd[0].Data[Snd[0].Head++];
Snd[0].Head = Snd[0].Head % sizeof(Snd[0].Data);
}
}
if ( RI ) {
RI=0;
Rcv[0].Data[Rcv[0].Tail++] = SBUF;
Rcv[0].Tail = Rcv[0].Tail % sizeof(Rcv[0].Data);
}
}
void COM1(void) interrupt 0 using 1
{
unsigned char data cTmp;
cTmp = IIR1;
while ((cTmp & 0x06) != 0) {
if ((cTmp & 0x06) == 0x02) { // send buff empty
if( Snd[1].Head != Snd[1].Tail ) {
D_SER1 = Snd[1].Data[Snd[1].Head++];
Snd[1].Head = Snd[1].Head % sizeof(Snd[1].Data);
}
else {
Snd[1].Sending = 0;
IER1 = 0x01; // bit0: receive valid; bit1: send buffer empty
}
}
if ((cTmp & 0x06) == 0x04) { // receive valid
Rcv[1].Data[Rcv[1].Tail++] = D_SER1;
Rcv[1].Tail = Rcv[1].Tail % sizeof(Rcv[1].Data);
}
cTmp = IIR1;
}
cTmp = LSR1;
cTmp = MSR1;
}
void COM2(void) interrupt 2 using 1
{
unsigned char data 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 % sizeof(Snd[2].Data);
}
else {
Snd[2].Sending = 0;
IER2 = 0x01; // bit0: receive valid; bit1: send buffer empty
}
}
if ((cTmp & 0x06) == 0x04) { // receive valid
Rcv[2].Data[Rcv[2].Tail++] = D_SER2;
Rcv[2].Tail = Rcv[2].Tail % sizeof(Rcv[2].Data);
}
cTmp = IIR2 ;
}
cTmp = LSR2;
cTmp = MSR2;
}
void timer0(void) interrupt 1 using 1
{
static unsigned char data cTmp;
Address=(D_ADDR & 0x1f);
TH0=0xF2; // 0xF2
TL0=0xAB; // 0xAB
TR0=1;
mTimer = 1;
cTmp++;
if (cTmp >=20) {
cTmp = 0;
Port1Timer = (Port1Timer + 1) & 0x7fff;
Port2Timer = (Port2Timer + 1) & 0x7fff;
}
if (iDelay > 0) {
iDelay--;
if (iDelay == 0) {
RELAY2 =1;
}
}}
void SendStart(unsigned char Port)
{
if (!Snd[Port].Sending) {
Snd[Port].Sending = 1;
switch(Port) {
case 0:
TR = 1;
Snd[0].SendTime = DELAYSEND;
break;
case 1:
D_SER1 = Snd[1].Data[Snd[1].Head++];
Snd[1].Head = Snd[1].Head % sizeof(Snd[1].Data);
IER1 = 0x03; // bit0: receive valid; bit1: send buffer empty
break;
case 2:
D_SER2 = Snd[2].Data[Snd[2].Head++];
Snd[2].Head = Snd[2].Head % sizeof(Snd[2].Data);
IER2 = 0x03; // bit0: receive valid; bit1: send buffer empty
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -