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

📄 ctkint.c

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 C
字号:
#include <windows.h>
#include <dos.h>
#include <commdlg.h>

#include "def.h"
#include "ctkdef.h"

extern HWND _far hWndEvent;
extern WPARAM _far wParamEvent;
extern CHANNELPARAM FAR *lpChannelP;
extern UINT SIOCtrlAddr[];
extern UINT SIODataAddr[];
extern int Freq;
extern int SendMsgCnt;

extern void wait(int);
extern int frequency(void);
int   idComDev;
//void FAR PASCAL _export   SendPara(int);

void interrupt _far IntSvcRtn3(void);
void interrupt _far IntSvcRtn5(void);
//-----------------------------------------------------------------//
void interrupt _far IntSvcRtn3(void)
{
 int i,j;
 BYTE inbyte;

 CHANNELPARAM FAR *lpCh;
 RUNFLAG *runf;
 for (i=0; i<CHANNELMAXNUM; i++)
     {
      lpCh=lpChannelP+i;
      runf = (RUNFLAG *)lpCh->Reserved;

      if (lpCh->CHValidFlag && (lpCh->CHType==CTKBOARD))   //如果通道是CTK板SIO, 并且通道使用
         {
		  if (lpCh->RecBuff && ((lpCh->RxWriteP+1)%lpCh->RxBuffLen!=lpCh->RxReadP%lpCh->RxBuffLen))//jgx
             {
              outportb(SIOCtrlAddr[lpCh->SIOOrd],1);
			  wait(32);//jgx 32
              inbyte=inportb(SIOCtrlAddr[lpCh->SIOOrd]);
			  wait(32); //jgx
///			  if (inbyte & (bit4+bit5+bit6))  lpCh->CHErr++;//jgx 98.8
             outportb(SIOCtrlAddr[lpCh->SIOOrd],0);
			  wait(32);//jgx 32
              inbyte=inportb(SIOCtrlAddr[lpCh->SIOOrd]);
//			  if (1==1)//(i!=16 &&i!=17)
//                  {
					  if (inbyte & bit0)
     		            {
            		     wait(32); //jgx 32
						 *(lpCh->RecBuff+lpCh->RxWriteP)=inportb(SIODataAddr[lpCh->SIOOrd]);
                         lpCh->RxWriteP = (lpCh->RxWriteP+1)%lpCh->RxBuffLen;
						 lpCh->InvalidCharNum = 0;
						 runf->InvalidCharNum = 0;
						 wait(32); //jgx 32
                         }
					  else {lpCh->InvalidCharNum++;
							runf->InvalidCharNum++;
							}
/*
				  }
			  else
				{
				  BYTE *buf;
                  int len=0;
				  len=ReadComm(idComDev,buf, 1);
				  if (len==1)
					{
					 *(lpCh->RecBuff+lpCh->RxWriteP)=*buf;
					 lpCh->RxWriteP = (lpCh->RxWriteP+1)%lpCh->RxBuffLen;
					 runf->InvalidCharNum = 0;
					}
				  else runf->InvalidCharNum++;
				}
*/
			 } // Receive Data from SIO port
          if (lpCh->SendBuff && (lpCh->TxWriteP!=lpCh->TxReadP))
             {
              outportb(SIOCtrlAddr[lpCh->SIOOrd],0);
			  wait(32);
              inbyte=inportb(SIOCtrlAddr[lpCh->SIOOrd]);
			  if (inbyte & bit2)
                 {
				  outportb(SIODataAddr[lpCh->SIOOrd],*(lpCh->SendBuff+lpCh->TxReadP));
                  lpCh->TxReadP = (lpCh->TxReadP+1)%lpCh->TxBuffLen;
       			  wait(32);
				  lpCh->NoTxNum = 0;
                  lpCh->CHStatus &= ~NoTxFlag;
                 }
                else
                 {
                  runf->NoTxNum++;
				  if (runf->NoTxNum>30000)
                     {
					  lpCh->CHStatus |= NoTxFlag;
					  lpCh->NoTxNum = 0;
                     }
                 }
			 } // Send Data to SIO port
         }
     }
 outportb(0x20,0x20);
 wait(32);
}
                   
void interrupt _far IntSvcRtn5(void)
{
Freq = frequency();
// if (++SendMsgCnt<10)
 PostMessage(hWndEvent, WM_COMMAND, 555, 0L);
 outportb(0x20,0x20);
 wait(32); // jgx 98.8
}
void FAR PASCAL _export   SendPara(id)
{
	idComDev=id;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -