当前位置:首页 » 编程语言 » c语言初始化串口
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言初始化串口

发布时间: 2022-01-16 21:51:02

⑴ 单片机串口初始化的程序段。波特率4800. 89c54,晶振11.0592,c语言

void UartInit(void) //[email protected]
{
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0f; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}

⑵ c语言串口通讯过程

要下窜口调试助手的,你是硬件仿真还是软件仿真啊,硬件的话要版子的,然后用usb接到电脑上,打开窜口调试助手就可以用了

⑶ 如何用c语言编写向串口发送指令的程序 如0x01

简单来说就是根据芯片手册对串口进行驱动
基本过程就是初始化:配置相关寄存器,设置波特率等属性
编写发送和接收函数
调用
网上应该有不少你用的型号的例程,可以搜索阅读

⑷ C语言变成实现串口收发数据

#include <reg51.h>

#include <intrins.h>

unsigned char key_s, key_v, tmp;

char code str[] = "welcome!www.willar.com ";

void send_str();

bit scan_key();

void proc_key();

void delayms(unsigned char ms);

void send_char(unsigned char txd);

sbit K1 = P1^4;

main()

{

TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率

TH1 = 0xFD; // 波特率9600

TL1 = 0xFD;

SCON = 0x50; // 设定串行口工作方式

PCON &= 0xef; // 波特率不倍增

TR1 = 1; // 启动定时器1

IE = 0x0; // 禁止任何中断

while(1)

{

if(scan_key()) // 扫描按键

{

delayms(10); // 延时去抖动

if(scan_key()) // 再次扫描

{

key_v = key_s; // 保存键值

proc_key(); // 键处理

}

}

if(RI) // 是否有数据到来

{

RI = 0;

tmp = SBUF; // 暂存接收到的数据

P0 = tmp; // 数据传送到P0口

send_char(tmp); // 回传接收到的数据

}

}

}

bit scan_key()

// 扫描按键

key_s = 0x00;

key_s |= K1;

return(key_s ^ key_v);

}

void proc_key()

// 键处理

{

if((key_v & 0x01) == 0)

{ // K1按下

send_str(); // 传送字串"welcome!...

}

}

void send_char(unsigned char txd)

// 传送一个字符

{

SBUF = txd;

while(!TI); // 等特数据传送


TI = 0; // 清除数据传送标志

}

void send_str()

// 传送字串

{

unsigned char i = 0;

while(str[i] != '')

{

SBUF = str[i];

while(!TI); // 等特数据传送

TI = 0; // 清除数据传送标志

i++; // 下一个字符

}

}

void delayms(unsigned char ms)

// 延时子程序

{

unsigned char i;

while(ms--)

{

for(i = 0; i < 120; i++);

}

}

拓展资料

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。



⑸ 9针的232口初始化程序,C语言的。

这是我自己整理的一个东西。用的是MOXA的API
用这些API,要添加一个api232.dll

PComm 库函数
PComm 库函数是台湾MOXA公司提供的,他为用户提供了基于win32 api的开发接口。 PComm库函数分为7大类
控制函数、数据输入函数、数据输出函数、状态函数、事件驱动函数、传输文件函数、特殊设定函数
上述函数均返回int型数据,若函数调用成功则返回0,否则返回一个负整数。

控制函数主要包括
sio_open(PortNum) 打开串口
sio_close(PortNum) 关闭串口
sio_ioctl(PortNum, baud, mode)设置串口的工作模式,包括 波特率,数据位元,停止位,效验等
sio_flush(portNum,func)清除发送、接收缓冲区 其中func 为0清空输入 ,为1清空输出,为2清空输入输出
sio_SetWriteTimeouts(int port,DWORD TotalTimeouts):设置串口写操作的超时。
sio_lctrl(Portnum,mode) 设置串口RTS/DTS。 待定

数据输入函数主要包括
sio_getch(PortNum) 从输入缓冲区读一个字符
sio_read(PortNum,buf,len) 从输入缓冲区读指定个数的字符
sio_iqueue(Portnum)读取输入缓冲区中的字符长度

数据输出函数主要包括
sio_putch(PortNum) 写一个字符到输出缓冲区
sio_write(PortNum,buf,len)写指定个数的字符到输出缓冲区

状态函数主要包括
sio_lstatus(portNum)获取串口的CTS,DSR,DCD,RI线的状态
sio_getbaud(portNum)获取串口的波特率
sio_getmode(portNum)获取串口的工作模式。对应sio_ioct函数

事件函数主要包括
sio_term_irq(portNum,func,code) 当接收到指定字符时响应事件,func为回调函数名,code为指定的字符
sio_cnt_irq(PortNum,func,count) 当接收到指定个数字符时响应事件,func为回调函数名,count接收的个数

传输文件函数主要包括
sio_FtASCIITx(portNum,fname,func,key)发送一个文本文件
sio_FtASCIIRx(portNum,fname,func,Key,sec)接收一个文本文件

int i,Ret,DataLen;
FILE *fp1;
uchar RetDataC[30],WriteData[24],PSC[5];
Ret = sio_open(port);
if (Ret != SIO_OK )
return(-1);//打开串口错误
Ret = sio_ioctl (port, B9600, P_NONE | BIT_8 | STOP_1 );
if (Ret != SIO_OK) {
sio_close(port);
return(-2);//设置串口参数失败
}
/*Ret = sio_lctrl (port, C_DTR | C_RTS );
if (Ret != SIO_OK) {
sio_close(port);
return(-2);//设置串口参数失败
}*/
/*Ret = sio_flush(port,2);
if (Ret != SIO_OK){
sio_close(port);
return(-3);//清空 输入和输出缓冲区的数据
}*/

⑹ c语言怎么实现串口通信

编程原理
程序1为查询通信方式接口程序,为一典型的数据采集例程。其中bioscom()函数初始化COM1(此函数实际调用BIOS
INT
14H中断0号功能)。这样在程序中就避免了具体设置波特率因子等繁琐工作,只需直接访问发送/接收寄存器(3F8H)和线路状态寄存

⑺ windows下C语言怎么对串口进行读写操作

windows下对串口的操作可以通过WindowsAPI进行,也可以通过Linux下的read什么的直接操作,但是这种情况需要了解电路结构,比较麻烦,第三种有第三方提供的库,但是大多数针对C++,所以可能比较难找到顺手的第三方库.
那么,接下来就见要介绍一下串口通信用WindowsAPI通信的方式.

我们会发现,在文件名的位置填上"comX" X表示com口号,超过十的com口号需要另外的书写方式,这里不说了,因为网上一抓一大把,接下来,我们要对串口进行一系列的明确设置,这里就用到了一个结构体DCB结构,是专门用来描述一个com口的工作方式的,由于次结构体有28个成员,非常多,而且大部分的设置都是全世界通用的,所以,我们偷个懒,在打开一个com口之后,建立DCB结构体,接下来调用一个函数GetCommState用这个函数把现在com口的数据都写到DCB里,这样,比较通用的com口设置就已经弄好了,我们一般情况下只需要改一下DCB的波特率就好了,改好后马上用SetCommState把刚改好的结构体再写回去,这样串口就设置好了,现在还有点麻烦,串口设置好了,我们要它干什么呢?废话,读写数据呗,嘟~~~~~~可不能用fwrite和fread因为这个com口句柄不是文件句柄,是内核句柄,要用ReadFile和WriteFile来进行读写,又出麻烦了,我们怎么知道单片机什么时候发数据过来,就算我们知道,计算机什么时候知道啊?所以,一般的情况下,用ReadFile一直在哪检查,又是麻烦,通常情况下,一个com口的ReadFile设置是阻塞函数,影响编程啊!!!!!!

怎么办,很简单,你不阻塞吗,打通你呗,我们再建立里一个结构体COMMTIMEOUTS这个结构体描述里一个com口的相关超时设置,我们用GetCommTimeouts把数据读回来,具体的设置方法在网上也有,但是要注意,有一个MAXDWORD用它来设置读间隔超时设置就可以使ReadFile向kbhit()函数一样完全非阻塞了.
经过一些列的设置,事实上,现在已经可以通信了,要是有人觉得缓存不舒服,用SetupComm函数来重设缓存大小,对于传输速度比较快的通信,要把缓存设置的大些.

⑻ 一道51单片机的C语言程序,关于串口通讯的,很简单......

#include<reg52.h> //增强型52寄存器的定义
#define uchar unsigned char //用uchar代替unsigned char
#define uint unsigned int //用uint代替unsigned int
unsigned char flag,a,i; //定义变量flag,a,i
uchar code table[]="I receive,thanks"; //定义一个字符串数组

void init()
{
} //设置工作方式,这个懂。

void main()
{
init(); //系统初始化,你懂的
while(1) //主循环部分,一直运行
{
if(flag==1) //等待flag标志位置位,当接收到数据的时候在串口接收中断中置位
{
ES=0; //禁止串口中断,但是注意发送中断标志位的置位仍然正常
for(i=0;i<18;i++) //for循环为了一个个把之前定义的字符串
{
SBUF=table[i]; //向串口收发缓冲器中写入回应的内容“I receive,thanks”
while(!TI); //等待发送完成,发送中断标志被置一,否则while循环一直进行
TI=0; //清除发送中断标志位
}
SBUF=a; //继续通过串口向串口收发缓冲器发送a,回显收到的数据
while(!TI); //等待发送完成
TI=0; //清除发送中断标志位
ES=1; //重新使能串口中断
flag=0; //清除flag,为了等待下一次接收
}
}
}
void serial() interrupt 4 //串口中断服务程序,优先级为4
{
RI=0; //当接收完成之后RI被置一,发生串口中断,清标志位
a=SBUF; //读取收到的字符,并赋给变量a
flag=1; //置接收完成标志flag为一,便于主程序中发送响应
}

⑼ C语言串口问题

串口要接收/发送数据,必须初始化。初始化的数据要与你的代码能够配合起来,一般情况下串口动作快,而你的代码动作慢或同速就可以,反过来则不行,会出现重叠出错。你用了串口大师就是给串口初始化了……