Bioscom使用注意:串口接线方式为4,6;7,8分别短接。仅此函数要求。
否则会造成只能接受无法发送数据。函数返回值错误!
函数名: bioscom
功 能: 操作port指定的RS232异步通讯口
用 法: int bioscom(int cmd, char abyte, int port);
说 明:bioscom()函数的原型在bios.h中
---------------------------------------------
cmd(命令) 含义
0 初始化该接口
1 发送一个字符
2 接收一个字符
3 返回接口的状态
------------------------------------------------
cmd为0时,用byte的值来确定该接口的具体工作方式,如波特率,校验位等等
cmd为1时,byte为待发送的一个字符。
bioscom()总是返回一个16位数值。
高位字节存放各状态位,如数据准备就绪,奇偶错误等等
当cmd为0,1,3时,低位字节存放一些状态,如数据发送结束,等等
当cmd为2时,低位字节中 存放由通讯口接收到的数值。
本文来源于大道无极‘技术BLOG http://www.dadwj.cn/ , 原文地址:http://www.dadwj.cn/post/7.html
int bioscom(int cmd,char type,int port) 本函数负责对数据的通讯工作,
cmd可以为以下值:
0 置通讯参数为字节byte值 1 发送字符通过通讯线输出
2 从通讯线接受字符 3 返回通讯的当前状态
port为通讯端口,port=0时通讯端口为COM1,port=1时通讯端口为COM2,以此类推
byte为传送或接收数据时的参数,为以下位的组合:
┌───┬─────┬───┬─────┐
│byte值│意义 │byte值│意义 │
├───┼─────┼───┼─────┤
│0x02 │7数据位 │0x03 │8数据位 │
│0x04 │2停止位 │0x00 │无奇偶性 │
│0x18 │偶数奇偶性│0x00 │110波特 │
│0x40 │300波特 │0x60 │600波特 │
│0xA0 │2400波特 │0xC0 │4800波特 │
│0x00 │1停止位 │0x08 │奇数奇偶性│
│0x20 │150波特 │0x80 │1200波特 │
│0xE0 │9600波特 │ │ │
└───┴─────┴───┴─────┘
例如:0xE0|0x08|0x00|0x03即表示置通讯口为9600波特,奇数奇偶性,1停止位,
8数据位. 函数返回值为一个16位整数,定义如下:
第15位 超时
第14位 传送移位寄存器空
第13位 传送固定寄存器空
第12位 中断检测
第11位 帧错误
第10位 奇偶错误
第 9位 过载运行错误
第 8位 数据就绪
第 7位 接收线信号检测
第 6位 环形指示器
第 5位 数据设置就绪
第 4位 清除发送
第 3位 δ接收线信号检测器
第 2位 下降边环形检测器
第 1位 δ数据设置就绪
第 0位 δ清除发送
#include <bios.h>
#include <conio.h>
#define COM1 0
#define DATA_READY 0x100
#define TRUE 1
#define FALSE 0
#define SETTINGS ( 0x80 | 0x02 | 0x00 | 0x00)
int main(void)
{
int in, out, status, DONE = FALSE;
bioscom(0, SETTINGS, COM1);
cprintf("... BIOSCOM [ESC] to exit .../n");
while (!DONE)
{
status = bioscom(3, 0, COM1);
if (status & DATA_READY)
if ((out = bioscom(2, 0, COM1) & 0x7F) != 0)
putch(out);
if (kbhit())
{
if ((in = getch()) == '/x1B')
DONE = TRUE;
bioscom(1, in, COM1);
}
}
return 0;
}