| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 255 人关注过本帖
标题:求助!!!C语言I/O接口通讯编程,求高人调试程序!
只看楼主 加入收藏
S270802476
Rank: 1
来 自:福建
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
求助!!!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编译可以成功,但是无法发送数据和接受数据...
搜索更多相关主题的帖子: C语言 
2011-06-23 18:07
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:10 
俺们都没有你用来进行通讯的设备,咋调试~
2011-06-23 18:15
S270802476
Rank: 1
来 自:福建
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-23
收藏
得分:0 
回复 2楼 voidx
通讯设备就是PC机,利用pc机的 com 串行口进行通信的
2011-06-23 21:16
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:10 
回复 3楼 S270802476
俺只有一台 pc 呀
而且俺也没有 com 对接线,咋知道有没有真的发送信号

[ 本帖最后由 voidx 于 2011-6-23 23:33 编辑 ]
2011-06-23 23:08
S270802476
Rank: 1
来 自:福建
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-23
收藏
得分:0 
回复 3楼 S270802476
用com虚拟机....
2011-06-24 01:13
快速回复:求助!!!C语言I/O接口通讯编程,求高人调试程序!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021982 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved