求助!!!C语言I/O接口通讯编程,求高人调试程序!
#include<stdio.h>#include<conio.h>
#include<dos.h>
#define BASEADDR1 0x03F8 //COM1的寄存器基地址
void com();
int fifo_send(char *pData, int Len);
int fifo_recv(char *pData, int Len);
int main(void)
{
char ch, *c;
int Len;
void com();
while(1)
{
if(kbhit())
{
*c=getch();
if(*c!=0x1B)
fifo_send( c, Len);
else
break;
}
}
return 0;
}
void com() //初始化端口
{
//不允许中断
outportb(BASEADDR1 + 2, 0);
outportb(BASEADDR1 + 1, 0); //设置DLAB=1, 允许访问波特率寄存器 (查寄存器基地址表)
outportb(BASEADDR1 + 3, 0x80); //设置波特率9600
outportb(BASEADDR1 + 0, 0x0C); //波特率低8位
outportb(BASEADDR1 + 1, 0x00); //波特率高8位
outportb(BASEADDR1 + 3, 0x03); //线路控制寄存器 设置8位数据位, 1位停止位, 无校验, DLAB=0 (查LCR表)
}
int fifo_send(char *pData, int Len) //pData指向要发送的数据,Len是数据长度,返回是否发送成功
{
int count; //禁用FIFO,目的是让程序第一时间感知字符是否发送成功
outportb(BASEADDR1 + 2, 0x00);
while(Len > 0) //一直等到发送寄存器空,或者超时
{ count = 10000;
while(!(inportb(BASEADDR1 + 5) & 0x20) && (count > 0))
count--;
if(count <= 0) return 0; //超时未发送
outportb(BASEADDR1 + 0, *pData); //发送字符
Len--;
pData++;
}
count = 10000; //再次等到发送寄存器空,或者超时
while(!(inportb(BASEADDR1 + 5) & 0x20) && (count > 0)) count--;
if(count <= 0) return 0; //超时未发送
else return 1; //确认,已经发送出去
}
int fifo_recv(char *pData, int Len)
{
int count;
unsigned char buffer;
outportb(BASEADDR1 + 2, 0x07); //允许FIFO,清除接收FIFO,清除发送FIFO
while(Len > 0) //一直等到接收数据就绪,或者超时
{ count = 10000;
while(!(inportb(BASEADDR1 + 5) & 0x01) && (count > 0)) count--;
if(count <= 0) return 0; //超时未收到
*pData = inportb(BASEADDR1 + 0); //读一个字符
Len--;
pData++;
}
buffer=*pData;
putchar(buffer);
return 1;
}
用BC编译可以成功,但是无法发送数据和接受数据...