新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 C/C++编程思想 』 → DOS下C写串口的问题 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 12247 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: DOS下C写串口的问题 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     aleng1314 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:4
      积分:69
      门派:XML.ORG.CN
      注册:2006/12/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给aleng1314发送一个短消息 把aleng1314加入好友 查看aleng1314的个人资料 搜索aleng1314在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看aleng1314的博客楼主
    发贴心情 DOS下C写串口的问题

    本人在DOS环境下用TC进行串口通信编程,2种方法都调通了   能收能发  (即用 inportb和outportb    还有一种用 bioscom)
          可现在有写些小问题   本人编写的是从机程序    要求接到命令  0xaa 后 立即 回复 0xaa 然后等待下步指令 本人在(inportb和outportb函数中)用循环读取串口的方式 读到AA后回复AA 因为是循环方式  他会在收到AA后不停的回复AA   这个怎么解决  希望能有达人给出这部分的源程序。
          后来我用bioscom 函数又重新编写了 一个函数  我用了这样的方式  即主机发送后 等待  而 从机回复后等待下个指令    源程序如下
    #include "stdio.h"
    #include "dos.h"
    #include "bios.h"

    #define PORT 0


    int check_status(int);
    void send_port(int,char);
    char receive_port(int);
    void wait (int);

    void main()
    {
      bioscom (0,0xe3,0);
      wait(0);
      while (check_status(0)!='1');
      {
       receive_port(0);
       if(receive_port(0)==0xaa);
      send_port(0,0xaa);
      }
      wait (0);
     

    void send_port (int port,char cc)
    {
     union
     {
      char ch[2];
      int status;
     }
     port_status;
     port_status.status=bioscom (1,cc,0);
    }

    char receive_port (int port)
         {
     union
     {
      char ch[2];
      int status;
     }port_status;
     port_status.status=bioscom (2,0,0);
     if (port_status.ch[1]&255)
     {
      exit (1);
     }
     else return port_status.ch[0];
         }

    int check_status(int port)
      {
     int status;
     status=bioscom (3,0,0);
     if (status & 0x100)  return 0;
     else return 1;
      }
      
    void wait (int port)
    {
     if (check_status(0)!='1')
     {
      exit (1);
     }
    }

    为什么我走到等待这步( while (check_status(0)!='1');)后  就走不下去了    我基本的思想是查询串口的状态 有信号过来 对数据进行处理  无  则等待      
    以上源程序 可单步走  编译好象不行  还没有怎么调试 有几个警告  
    请达人帮忙指出   

    我本人希望能用inportb 和outportb  写  这样数据好处理     这个程序应为太大不好传  有高手达人能帮忙的  可和我电邮联系  aleng13142263.net     小弟感激不尽


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/22 11:02:00
     
     aleng1314 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:4
      积分:69
      门派:XML.ORG.CN
      注册:2006/12/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给aleng1314发送一个短消息 把aleng1314加入好友 查看aleng1314的个人资料 搜索aleng1314在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看aleng1314的博客2
    发贴心情 
    错了  电邮是  aleng1314@263.net
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/22 11:17:00
     
     aleng1314 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:4
      积分:69
      门派:XML.ORG.CN
      注册:2006/12/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给aleng1314发送一个短消息 把aleng1314加入好友 查看aleng1314的个人资料 搜索aleng1314在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看aleng1314的博客3
    发贴心情 
    UP
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/25 9:25:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客4
    发贴心情 
    1、我在VC下用过线程监视端口,在接收数据后将缓冲区数据转存到临时缓冲区,然后清空接收缓冲区。
    2、“( while (check_status(0)!='1');)后  就走不下去了”-----没有sleep来执行其他函数的余地,你进去后就成了死循环啦,所以就出不来了。wait (0);如果相当于sleep的话,应该放到while内部才会起作用啊。

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/25 17:31:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客5
    发贴心情 
    receive_port(0);
       if(receive_port(0)==0xaa);
      send_port(0,0xaa);

    这一段中第一行是不是有点重复? “receive_port(0)==0xaa”中也读端口了啊,为什么要读两次呢?如果你在第一次读出后把缓冲区清空的话,第二次永远不会成立的。

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/25 17:37:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/28 3:22:29

    本主题贴数5,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    63.477ms