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

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

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 12269 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: 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
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/11 5:31:44

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

     *树形目录 (最近20个回帖) 顶端 
    主题:  DOS下C写串口的问题(1848字) - aleng1314,2006年12月22日
        回复:  receive_port(0); if(receive_port(0)==0xaa); ..(223字) - 卷积内核,2006年12月25日
        回复:  1、我在VC下用过线程监视端口,在接收数据后将缓冲区数据转存到临时缓冲区,然后清空接收缓冲区。2..(298字) - 卷积内核,2006年12月25日
        回复:  UP(2字) - aleng1314,2006年12月25日
        回复:  错了 电邮是 aleng1314@263.net(31字) - aleng1314,2006年12月22日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    58.594ms