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

📄 interrupt.c

📁 单片机通讯程序,从单片机SAT设备中获得设备状态.
💻 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 + -