VS或者VC6.0编写的C语言程序,怎样能够实现串口数据的收发?

VS或者VC6.0编写的C语言程序,怎样能够实现串口数据的收发?,第1张

1  、Windows   API通信函数方法 。与通信有关的Windows   API函数共有26个,但主要有关的有: CreateFile()   用   “comn”(n为串口号)作为文件名就可以打开串口。 ReadFile()   读串口。

2、WriteFile()   写串口。 CloseHandle()   关闭串口句柄。初始化时应注意CreateFile()函数中串口共享方式应设为0,串口为不可共享设备,其它与一般文件读写类似。以下给出API实现的源代码。

3、利用端口函数直接 *** 作 。这种方式主要是采用两个端口函数_inp(),   _outp()实现对串口的读写,其中读端口函数的原型为: int   _inp(unsigned   shot   port) 。该函数从端口读取一个字节,端口号为0~65535。 写端口的函数原型为: nt   _outp(unsigned   shot   port,   int   databyte) 。

4、  MSComm控件 。MSComm控件是微软开发的专用通信控件,封装了串口的所有功能,使用很方便,但在实际应用中要小心对其属性进行配置。下面详细说明该类应用方法。 

串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从 CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。

在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。

应用程序要使用串口进行通信,必须在使用之前向 *** 作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。

#include <AT89X51.H>//单片机51头文件,存放着单片机的寄存器

unsigned char dat//用于存储单片机接收发送缓冲寄存器SBUF里面的内容

sbit gewei=P2^2//个位选通定义

sbit shiwei=P2^3//十位选通定义

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71}

//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,}// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

void Delay(unsigned int tc) //延时程序

{

while( tc != 0 )

{unsigned int i

for(i=0i<100i++)

tc--}

}

void LED() //LED显示接收到的数据

{

shiwei=0

P0=~table[dat/16]

Delay(8)

shiwei=1

gewei=0

P0=~table[dat%16]

Delay(5)

gewei=1

}

void Init_Com(void)//功能:串口初始化,波特率9600,方式1

{

TMOD = 0x20

PCON = 0x00

SCON = 0x50

TH1 = 0xFd

TL1 = 0xFd

TR1 = 1

}

void main()//主程序功能:实现接收数据并把接收到的数据原样发送回去///////

{

Init_Com()//串口初始化

// P1=0xf0

while(1)

{

if ( RI ) //扫描判断是否接收到数据,

{

dat = SBUF //接收数据SBUF赋与dat

RI=0 //RI清零。

SBUF = dat //在原样把数据发送回去

}

LED()//显示接收到的数据

}

}

#include <REG52.H>

#define uchar unsigned char

#define uint unsigned int

sbit ring=P3^7

sbit CASE1=P2^0

sbit CASE2=P2^1

sbit CASE3=P2^2

sbit CASE4=P2^3

uchar se=0,re=0

uchar temp=0

void wait(uint cnt)

{

while(--cnt)

}

//串口发送程序

void send(uchar se)

{

SBUF=se //发送数据

while(TI == 0)

TI = 0

}

//串口接收程序

uchar receive(void)

{

re=SBUF //接收数据

while(RI==0)

RI=0

return re

}

//串口初始化

void sinti(void)

{

SCON = 0x50

TMOD |= 0x20

TH1 = 0xFD

TR1 = 1

EA= 1

ES= 1

}

void delay(int cnt)

{

while(--cnt)

}

//主程序

int main (void)

{

int i

sinti() //串口初始化程序

ring=1

while(1)

{

while (1)

{

if(CASE1==0)

{

send('a')

ring=0

break

}

if(CASE2==0)

{

send('b')

ring=0

break

}

if(CASE3==0)

{

send('c')

ring=0

break

}

if(CASE4==0)

{

send('d')

ring=0

break

}

}

if(ring==0)

{

wait(60000)

ring=1

}

for(i=0i<10000i++)

}

}

//串口中断程序

void UART_SER (void) interrupt 4 //串行中断服务程序

{

if(RI)//判断是接收中断产生

{

RI=0 //标志位清零

temp=SBUF

}

if(TI)//如果是发送标志位,清零

TI=0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7745708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存