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

📄 interrupt.c

📁 AL157型灵达电源单片机通讯程序.通过协议获得电源当前的状态.
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -