社区
C语言
帖子详情
能不能问一下bioscom函数怎么用的,小弟怎么都搞不明白?
hd506lg
2001-09-29 10:25:24
能不能问一下bioscom函数怎么用的,小弟怎么都搞不明白?
...全文
310
10
打赏
收藏
能不能问一下bioscom函数怎么用的,小弟怎么都搞不明白?
能不能问一下bioscom函数怎么用的,小弟怎么都搞不明白?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hd506lg
2001-09-30
打赏
举报
回复
请问我下面的程序有什么问题,为什么读取的数据总是127,而不是16啊?
#include <bios.h>
#include <conio.h>
#define COM1 0
#define SETTINGS ( 0x80 | 0x02 | 0x00 | 0x00)
int main(void)
{
int in='\x10', out;
clrscr();
bioscom(0, SETTINGS, COM1);
bioscom(1,in,0);
out=(bioscom(2,0,0)&0x007f);
printf("%c",out);
}
CNer
2001-09-30
打赏
举报
回复
奇偶校验很重要!
Tanya8088
2001-09-30
打赏
举报
回复
函数名: bioscom
功 能: 串行I/O通信
用 法: int bioscom(int cmd, char abyte, int port);
程序例:
#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;
}
神医CL
2001-09-30
打赏
举报
回复
函数名: 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时,低位字节中 存放由通讯口接收到的数值。
程序例:
#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;
}
hd506lg
2001-09-30
打赏
举报
回复
是啊,我觉得我用得不对。不是这么用的。
神医CL
2001-09-30
打赏
举报
回复
我运行了我给的例子和你的程序,输出都是127,好象发出的字符没收到。
hd506lg
2001-09-30
打赏
举报
回复
能解答我上面的疑惑吗?
fsb_12345
2001-09-30
打赏
举报
回复
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;
}
krerix
2001-09-29
打赏
举报
回复
gz
hd506lg
2001-09-29
打赏
举报
回复
是不是问提太难啊?
C语言语法着色中文版
函数
大全.pdf
是不是看到各种IDE的
函数
语法着色很清晰有层次?这本文档让我们在查询C语言
函数
的时候也能享受到这种感觉。
常用C语言
函数
程序大全
学习
函数
名.
函数
的用法和常用C语言
函数
程序大全
C语言
函数
大全_MSDN
C语言
函数
大全_MSDN 可以快捷方便的查询C语言
函数
如何使用。
c语言
函数
表c语言
函数
表.doc
c语言
函数
表c语言
函数
表
病毒C
函数
C中常用到的经典
函数
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章