熟悉C语言的人都知道,虽然C语言是一门高级语言,拥有很多高级语言的特性,但是作为一种由低级语言到高级的过渡,他又继承了很多低级语言的特性,那就是可以直接操作计算机的硬件设备。本人近日在学习有关PLC网络方面的知识的时候接触到了这方面的知识特拿来和大家分享。

C语言实现串口通信功能的调用可分为三个层次,它们是:高级语言层(速度较慢)、BIOS功能调用以及直接驱动硬件,今天我要和大家介绍的的这种方法就是基于BIOS功能调用的。

首先,简单介绍一下何谓BIOS。

BIOS的全称是ROM-BIOS——ROM Basic I/O System(只读存储器基本输入输出系统)。它是一组固化到微机主板上一个ROM芯片上的子程序,主要功能包括:
     (1)驱动系统中所配置的常用外设(即驱动程序),如显示器、键盘、打印机、磁盘驱动器、通信接口等。
     (2)开机自检,引导装入。
     (3)提供时间、内存容量及设备配置情况等参数。
   
使用BIOS中断调用与DOS系统功能调用类似,用户也无须了解相关设备的结构与组成细节,直接调用即可。

为了实现BIOS调用,在BIOS中提供了大量的中断调用,供我们操作不同的硬件设备,它们是:

INT 05H           ;打印屏幕内容功能调用

INT 10H           ;显示中断调用

INT 12H           ;测定内存容量调用

INT 14H           ;异步通行功能调用

INT 16H           ;键盘中断调用

INT 17H           ;打印机控制调用

INT 1AH           ;时钟调用

在众多的中断调用功能中于串口通讯有关的事 INT 14H 中断调用,为了实现串口通信 对它的入口参数和出口参数作了如下的约束:

功能

入口参数

 出口参数

异步通信口初始化

(功能编码=0)

AH=0

DX=通信口号

AL=初始化参数

AH 中为通信线路状态

AL中为Modem状态

写字符到异步通信口

(功能编码=1)

AH=1

AL=要发送的字符

DX=通信口号

若成功AH的D7=0

若失败AH的D7=1

AH的D0~D6为通信线路状态

从异步通信口读数据

(功能编码=2)

AH=2

DH=通信口号

若成功AH的D7=0

若失败AH的D7=1

AH的D0~D6为通信线路状态

AL=所读取得字符

读取异步通信口状态

(功能编码=3)

AH=3

DX=通信口号

 AH 中为通信线路状态

AL中为Modem状态

现在,再将通信线路控制寄存器的各位意义简要介绍如下:

       D7 D6  D5   D4 D3  D2  D1、D0 

访问寄存器

0=允许访问

发送、接收

中断允许

1=允许访问

除数寄存器

设置停顿

0=不设停顿

1=使Modem

发连续停顿

信号

固定奇偶位

0=不用

1=使用

D5 D4 D3

=111恒0

101恒1

校验选择

0=奇

1=偶

校验允许

0=无校验

1=有校验

停止位

0=1位

1=1.5/2位

数据位选择

00=5位

01=6位

10=7位

11=8位

在对BIOS调用和通信线路控制寄存器有了一些基本的了解以后,在对硬件了解的要求不高的情况下我们就可以借助下面的模块利用C语言实现异步通讯了。

C语言的BIOS功能调用模块:

1、通讯口初始化模块;

r.h.al=0xfb                 //7位数据位,偶校验,1位停止位。(该值时根据表二配置的)

r.h.ah=0                    //初始化功能编码号:0

r,h,ax=通信端口号     //通信端口设置 0为COM1 1为COM2

int86(0x14,&r,&r)      //INT14功能调用

2、发送数据功能模块:

r.h.ah=1                   //初始化功能编码号:1

r.h.al=DATA            // DATA 为要发送的数据

r,h,ax=通信端口号     //通信端口设置 0为COM1 1为COM2

int86(0x14,&r,&r)      //INT14功能调用

3、读取通信信号状态功能模块:

r.h.ah=3                   //初始化功能编码号:3

r,h,ax=通信端口号     //通信端口设置 0为COM1 1为COM2

int86(0x14,&r,&r)      //INT14功能调用

(通信状态在ah中)

4、接收数据功能模块:

r.h.ah=2                   //初始化功能编码号:2

r,h,ax=通信端口号     //通信端口设置 0为COM1 1为COM2

int86(0x14,&r,&r)      //INT14功能调用

(接收的数据在al中)

有了这些功能模块后我们就可以轻松的利用C语言编写出异步通信程序了,现列举编写的发送共能的程序如下:

unsigned char send(int port,char c)
{
 union REGS r;
 r.x.dx=port;
 r.h.ah=1;
 r.h.al=c;
 int86(0x14,&r,&r);
 return (r.h.ah);         //返回发送的结果成功与否失败返回 0x80
}

在此仅举了发送功能模块的使用其它模块均可仿效此法实现。

C语言直接驱动硬件实现PC机的串口操作相关推荐

  1. c语言如何控制电脑串口,C语言直接驱动硬件实现PC机的串口操作

    熟悉C语言的人都知道,虽然C语言是一门高级语言,拥有很多高级语言的特性,但是作为一种由低级语言到高级的过渡,他又继承了很多低级语言的特性,那就是可以直接操作计算机的硬件设备.本人近日在学习有关PLC网 ...

  2. s7300plc串口通信_基于LabVIEW的S7300PLC与PC机的串口通信.pdf

    基于LabVIEW的S7300PLC与PC机的串口通信 2011 仪 表 技 术 与 传 感 器 2011 5 Instrument Technique and Sensor No5 LabV IEW ...

  3. 调制自动识别c语言实现,一种基于PC机的肺癌细胞自动识别分类系统

    一种基于PC机的肺癌细胞自动识别分类系统 本文介绍了一种基于PC机的肺癌细胞自动识别分类系统的设计思想 (本文共3页) 阅读全文>> 儿童血性胸水中直到癌细胞,并且X线示有骨转移者少见,现 ...

  4. 利用开发板上的RS485模块与PC机的串口通讯

    上网买的RS232转RS485的接口迟迟没有送到,程序又着急写,所以本人就利用开发板上现有的资源实现了一个简单的转化功能 本人利用的开发板资源:RS485模块(MAX 485芯片),U软串(PL230 ...

  5. c语言 pic16f877a 例子,PIC16F877A与PC机串行通信C语言源程序

    //*******串口通信程序********* //*******定义变量************* #include #define  unchar unsigned  char #define  ...

  6. PC机之间串口通信传输文件

    参考资料 本文内容:本文主要介绍如何实现两电脑之间的串口通信.将两台笔记本电脑,借助 usb转TTL 模块和杜邦线,建立起串口连接.然后用串口助手等工具软件(带文件传输功能)将一台笔记本上的一个大文件 ...

  7. 在c语言中以16位pc机为例一个,在C语言中(以16位pc机为例),一个char型数据在内...

    话题:在C语言中(以16位pc机为例),一个char型数据在内存中所占字节回答:标准的C语言范中:char占一个字节int占4个字节话题:计算机中16位的数据如何存放在32位的寄存器中回答:如果是 w ...

  8. PC 机 UART(NS8250)详解

    PC 机 UART(NS8250)详解 异步串行通信原理 两台计算机/设备进行数据交换,即通信,必须像人们对话一样使用同一种语言.在计算机通信术语中,我们把计算机/设备与计算机/设备之间的" ...

  9. 单片机与PC机一样都是计算机,51单片机与PC机通信资料

    <51单片机与PC机通信资料>由会员分享,可在线阅读,更多相关<51单片机与PC机通信资料(14页珍藏版)>请在人人文库网上搜索. 1.专业综合实习报告专 业: 电子信息工程 ...

最新文章

  1. php js获取file,PHP file_get_contents 读取js脚本的问题
  2. JS正则表达式验证数字非常全
  3. 什么是servlet?servlet的作用?——计算机网络系列学习笔记
  4. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)
  5. 计算机网络—轮询访问介质访问控制
  6. Failed to access IIS metabase
  7. Eslint常用命令
  8. 使用Word的VBA功能过滤敏感词,实现网络文章过审
  9. TinyMce富文本编辑器配置说明
  10. kotlin serialization 使用指南(一)
  11. 小马的白痴日常2019.12.20
  12. 微信小程序-如何引入地图组件及显示当前所在位置
  13. RedisGeo实现增删改查 java计算指定坐标最近的距离并排序
  14. 东南大学计算机学院足球队,2017春季“放飞智能”杯东南大学苏州校友足球队比赛赛事系列报道(八)...
  15. 数据治理的数据流程整合
  16. 月份30或31c语言编程,C语言程序设计上机编程方法.PPT
  17. Android虚拟键盘的高度计算
  18. Horizon 二次开发 - 登陆页面修改
  19. 简单视频会议软件_简单而免费的视频会议
  20. cancase lin管脚_cancase

热门文章

  1. LSTM论文翻译-《Understanding LSTM Networks》
  2. String字符串方法
  3. 矩阵 Hessian
  4. STM32C8T6的FreeRTOS移植
  5. 学习笔记之——DCDC降压芯片基本原理及选型主要参数介绍
  6. ADB测试,手机app端,常用指令
  7. Linux虚拟机如何修改mysql的数据目录位置
  8. 计算机html大作业聊天室,java大作业设计报告-JAVA聊天室.docx
  9. 【云原生之Docker实战】使用Docker部署Cloudreve公有云文件系统
  10. java面试题对日开发_【埃森哲Java面试】面试的是对日java的后端开发-看准网