📄 源码.c
字号:
P2.0 P2.1 P2.2 作为三根地址线来控制D7210C的RS0 RS1 RS2 进行寄存器选择
D7210C的片选利用P2.5 P2.6 P2.7 通过38译码器选通,即执行XBYTE[0x0xxx]指令即可选通
//***********************************************//
void gpib_init() //gpib初始化
{
XBYTE[0x0500]=0x02; //芯片复位
XBYTE[0x0500]=0x2c; //置位外部计数发生器
XBYTE[0x0500]=0x8c; //设置为8bits数据传送
XBYTE[0x0500]=0xa8; //低电平中断
XBYTE[0x0500]=0xc0; //进入准备
XBYTE[0x0100]=0x03; //设输入输出产生中断
XBYTE[0x0400]=0x31; //设受命方式为1
XBYTE[0x0600]=0x20; //设程控地址
XBYTE[0x0600]=0xc0; //设程控地址为15
XBYTE[0x0700]=0x0a; //设结束字符为“0x0a”(回车)
XBYTE[0x0500]=0; //立即执行,产生本地消息
}
//***********************************************//
void rec488() //数据接收
{
char idata tem48,tem88;
char idata i,j;
tem48=XBYTE[0x0100];
if((tem48&0x08)==0x08)//产生器件清除中断
{
; //不执行任何指令
}
else if((tem48&0x04)==0x04)//出错中断
{
XBYTE[0x0100]=0x08; //器件清除
return;
}
else if((tem48&0x01)==0x01)//收到数据,将数据存到pdtem[]数组
{
i=0;
for(j=0;j<18;j++)
pdtem[j]=0;
tem88=XBYTE[0x0000];
while(tem88!=0x0a) //遇到结束符0x0a则接收完毕
{
pdtem[i]=tem88;
i++;
tem48=XBYTE[0x0100];
while((tem48&0x01)!=0x01)
tem48=XBYTE[0x0100];
tem88=XBYTE[0x0000];
}
strjudge(); //接收完毕进入数据处理程序
}
}
//**************************************************//
void strjudge() //数据处理
{
if(strncmp(pdtem,"data",4)==0)//判断接收到的指令(如果前四个字符为"data0")
{
。。。。。。
。。。。。。
。。。。。。//执行相应操作
send_data(pdtem); //将要返回的字符放到pdtem[]数组,发送到计算机接收
}
}
//*************************************************//
void send_data(char temp[64]) //数据发送
{
uchar i;
i=0;
do
{
tem88=XBYTE[0x0100];
while((tem88&0x02)!=0x02)
tem88=XBYTE[0x0100];
XBYTE[0x0000]=pdtem[i];
i++;
}
while(pdtem[i-1]!=0x0a); //遇到结束符0x0a则发送完毕
while(((tem88=XBYTE[0x0100])&0x02)==0x02); //防止输出中断未清除,这句可以不加
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -