日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言如何控制电脑串口,C语言直接驱动硬件实现PC机的串口操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

熟悉C語言的人都知道,雖然C語言是一門高級語言,擁有很多高級語言的特性,但是作為一種由低級語言到高級的過渡,他又繼承了很多低級語言的特性,那就是可以直接操作計算機的硬件設(shè)備。本人近日在學習有關(guān)PLC網(wǎng)絡(luò)方面的知識的時候接觸到了這方面的知識特拿來和大家分享。

C語言實現(xiàn)串口通信功能的調(diào)用可分為三個層次,它們是:高級語言層(速度較慢)、BIOS功能調(diào)用以及直接驅(qū)動硬件,今天我要和大家介紹的的這種方法就是基于BIOS功能調(diào)用的。

首先,簡單介紹一下何謂BIOS。

BIOS的全稱是ROM-BIOS——ROM Basic I/O System(只讀存儲器基本輸入輸出系統(tǒng))。它是一組固化到微機主板上一個ROM芯片上的子程序,主要功能包括:

(1)驅(qū)動系統(tǒng)中所配置的常用外設(shè)(即驅(qū)動程序),如顯示器、鍵盤、打印機、磁盤驅(qū)動器、通信接口等。

(2)開機自檢,引導裝入。

(3)提供時間、內(nèi)存容量及設(shè)備配置情況等參數(shù)。使用BIOS中斷調(diào)用與DOS系統(tǒng)功能調(diào)用類似,用戶也無須了解相關(guān)設(shè)備的結(jié)構(gòu)與組成細節(jié),直接調(diào)用即可。

為了實現(xiàn)BIOS調(diào)用,在BIOS中提供了大量的中斷調(diào)用,供我們操作不同的硬件設(shè)備,它們是:

INT 05H?????????? ;打印屏幕內(nèi)容功能調(diào)用

INT 10H?????????? ;顯示中斷調(diào)用

INT 12H?????????? ;測定內(nèi)存容量調(diào)用

INT 14H???????????;異步通行功能調(diào)用

INT 16H?????????? ;鍵盤中斷調(diào)用

INT 17H?????????? ;打印機控制調(diào)用

INT 1AH?????????? ;時鐘調(diào)用

在眾多的中斷調(diào)用功能中于串口通訊有關(guān)的事 INT 14H 中斷調(diào)用,為了實現(xiàn)串口通信 對它的入口參數(shù)和出口參數(shù)作了如下的約束:

功能

入口參數(shù)

出口參數(shù)

異步通信口初始化

(功能編碼=0)

AH=0

DX=通信口號

AL=初始化參數(shù)

AH 中為通信線路狀態(tài)

AL中為Modem狀態(tài)

寫字符到異步通信口

(功能編碼=1)

AH=1

AL=要發(fā)送的字符

DX=通信口號

若成功AH的D7=0

若失敗AH的D7=1

AH的D0~D6為通信線路狀態(tài)

從異步通信口讀數(shù)據(jù)

(功能編碼=2)

AH=2

DH=通信口號

若成功AH的D7=0

若失敗AH的D7=1

AH的D0~D6為通信線路狀態(tài)

AL=所讀取得字符

讀取異步通信口狀態(tài)

(功能編碼=3)

AH=3

DX=通信口號

AH 中為通信線路狀態(tài)

AL中為Modem狀態(tài)

現(xiàn)在,再將通信線路控制寄存器的各位意義簡要介紹如下:

D7

D6

D5

D4

D3

D2

D1、D0

訪問寄存器

0=允許訪問

發(fā)送、接收

中斷允許

1=允許訪問

除數(shù)寄存器

設(shè)置停頓

0=不設(shè)停頓

1=使Modem

發(fā)連續(xù)停頓

信號

固定奇偶位

0=不用

1=使用

D5 D4 D3

=111恒0

101恒1

校驗選擇

0=奇

1=偶

校驗允許

0=無校驗

1=有校驗

停止位

0=1位

1=1.5/2位

數(shù)據(jù)位選擇

00=5位

01=6位

10=7位

11=8位

在對BIOS調(diào)用和通信線路控制寄存器有了一些基本的了解以后,在對硬件了解的要求不高的情況下我們就可以借助下面的模塊利用C語言實現(xiàn)異步通訊了。

C語言的BIOS功能調(diào)用模塊:

1、通訊口初始化模塊;

r.h.al=0xfb??????????????? ?//7位數(shù)據(jù)位,偶校驗,1位停止位。(該值時根據(jù)表二配置的)

r.h.ah=0????????????????? ? //初始化功能編碼號:0

r,h,ax=通信端口號???? //通信端口設(shè)置 0為COM1 1為COM2

int86(0x14,&r,&r)????? //INT14功能調(diào)用

2、發(fā)送數(shù)據(jù)功能模塊:

r.h.ah=1?? ????????????????//初始化功能編碼號:1

r.h.al=DATA??????????? //?DATA 為要發(fā)送的數(shù)據(jù)

r,h,ax=通信端口號???? //通信端口設(shè)置 0為COM1 1為COM2

int86(0x14,&r,&r)????? //INT14功能調(diào)用

3、讀取通信信號狀態(tài)功能模塊:

r.h.ah=3???????????????????//初始化功能編碼號:3

r,h,ax=通信端口號???? //通信端口設(shè)置 0為COM1 1為COM2

int86(0x14,&r,&r)????? //INT14功能調(diào)用

(通信狀態(tài)在ah中)

4、接收數(shù)據(jù)功能模塊:

r.h.ah=2???????????????????//初始化功能編碼號:2

r,h,ax=通信端口號???? //通信端口設(shè)置 0為COM1 1為COM2

int86(0x14,&r,&r)????? //INT14功能調(diào)用

(接收的數(shù)據(jù)在al中)

有了這些功能模塊后我們就可以輕松的利用C語言編寫出異步通信程序了,現(xiàn)列舉編寫的發(fā)送共能的程序如下:

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);???????? //返回發(fā)送的結(jié)果成功與否失敗返回 0x80

}

在此僅舉了發(fā)送功能模塊的使用其它模塊均可仿效此法實現(xiàn)。

總結(jié)

以上是生活随笔為你收集整理的c语言如何控制电脑串口,C语言直接驱动硬件实现PC机的串口操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。