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

📄 interruptbasic.c

📁 can卡basic模式dos操作系统下的程序
💻 C
字号:
/*this program is suitable for memory control CSD*/
#define baAddr1 0xd800
#define baAddr2 0xd810
#define TRUE  1
#include <conio.h>
#include <dos.h>
int sendData[8]={0,0,0,0,0,0,0,0};
int recData[8]={0,0,0,0,0,0,0,0};
int sendId=0x40;
int recId=0x40;
int length=8;
int irqFlag=0;

void interrupt (*oldVect)();

void interruptEnable(void);
void interruptDisable(void);
void sendMesg();
void recMesg(void);
void canConfig(int addr);
void displayData( int *P);

void interrupt newInt()
{
//  disable();
  irqFlag=1;
  recMesg();
  outportb(0xA0,0x20);
  outportb(0x20,0x20);
 // enable();
}


void main()
{
  int i;
  int t=0;
  int temp;
  clrscr();
  printf("can1:baAddr1=0xd800,can2:baAddr2=0xd810,irqnum=6\n");
  printf("can1 polling send and can2 interrupt receive\n");
  canConfig(baAddr1);
  canConfig(baAddr2);
  pokeb(baAddr1,1,0x04);
  pokeb(baAddr2,1,0x04);
  interruptEnable();

  while(TRUE)
  {
      gotoxy(2,4);
      sendMesg();
      for(i=0;i<length;i++)
      {
	gotoxy(15+i*5,6);
	cprintf("%x ",sendData[i]);
      }
      for(i=0;i<length;i++)
	sendData[i]=t+1;
	t++;
      if(t>100)  t=0;
      if(irqFlag==1)
      {
	 for(i=0;i<length;i++)
	 {
	    gotoxy(15+i*5,20);
	    cprintf("%x ",recData[i]);
	 }
	 irqFlag=0;
      }
      if(kbhit()) break;
  }

   interruptDisable();
}
void canConfig(int addr)
{
  int temp;
  int baseAddr;
  baseAddr=addr;
  pokeb(baseAddr,0,0x01);

  pokeb(baseAddr,31,0x44);
  pokeb(baseAddr,8,0xda);
  pokeb(baseAddr,5,0xff);
  pokeb(baseAddr,6,0x43);
  pokeb(baseAddr,7,0x1c);
  pokeb(baseAddr,0,0x00);
}

void interruptEnable(void)
{
  int temp;
  oldVect=getvect(0x0e);
  setvect(0x0e,newInt);
  temp=inportb(0x21) & 0xbf;
  outportb(0x21,temp);
  pokeb(baAddr2,0,peekb(baAddr2,0) | 0x02);
}
void interruptDisable(void)
{
  int temp;
  setvect(0x0e,oldVect);
  temp= inportb(0x21) | (0x40);
  outportb(0x21,temp);
  pokeb(baAddr2,0,peekb(baAddr2,0) & 0xfd);
}

void sendMesg()
{
  int  i;
  int sendFlag=0;
  pokeb(baAddr1,10,sendId);
  pokeb(baAddr1,11,0x00+length);
  for(i=0;i<length;i++)
     pokeb(baAddr1,12+i,sendData[i]);
  pokeb(baAddr1,1,0x01);
  sendFlag=peekb(baAddr1,2);
  delay(200);
}
void recMesg(void)
{
   int i;
   int recFlag=0;
   recFlag=peekb(baAddr2,3);
   recFlag= recFlag & 0x01;
   if(recFlag==0x01)
   {
     recId=peekb(baAddr2,20);
     for(i=0;i<length;i++)
      recData[i]=peekb(baAddr2,22+i);
   }
  pokeb(baAddr2,1,0x04);
}

⌨️ 快捷键说明

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