?? interruptbasic.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 + -