如何用C语言写一个读、写串口的程序?

如何用C语言写一个读、写串口的程序?,第1张

大致过程就是

配置串口通信,包括串口号、波特率圆谨、校验位、橘滑基停止位这些信息;

打开串口,和打开文件一样,在Linux下是这样,Windows下没试过,估计也差不多;

发送数据,即写串口,就跟写文件类似;

读取串口,让困用read就行。

具体的函数和配置参数可以参考一些别人的代码

/*   甲机串口程序:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit LED1=P1^0

sbit LED2=P1^3

sbit K1=P1^7

uchar Operation_No=0  // *** 作代码

//数码管代码

uchar codeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}

//延时

void DelayMS(uint ms)

{

uchari

while(ms--)for(i=0i<120i++)

}

//向串口发送字符

void Putc_to_SerialPort(uchar c)

{

SBUF=c

while(TI==0)

TI=0

}

//主程序

void main()

{

LED1=LED2=1

P0=0x00

SCON=0x50         //串口模式1,允许接收

TMOD=0x20        //T1工作模式2

PCON=0x00         //波特率巧蚂态不倍增

TH1=0xfd

TL1=0xfd

TI=RI=0

TR1=1

IE=0x90        //允许串口中断

while(1)

{

DelayMS(100)

if(K1==0)      //按下K1时选择 *** 作代码0,1,2,3

{

while(K1==0)

Operation_No=(Operation_No+1)%4

switch(Operation_No)    //根据 *** 作代码发送A/B/C或停止发送

{

case0:     Putc_to_SerialPort('X')

LED1=LED2=1

break

case1:     Putc_to_SerialPort('A')

LED1=~LED1LED2=1

break

case2:     Putc_to_SerialPort('B')

LED2=~LED2LED1=1

break

case3:     Putc_to_SerialPort('C')

LED1=~LED1LED2=LED1

break

}

}

}

}

//甲机串口接收中断函数

void Serial_INT() interrupt   4

{

if(RI)

{

RI=0

if(SBUF>=0&&SBUF<=9)P0=DSY_CODE[SBUF]

elseP0=0x00

}

}

/* 乙机程序接收甲机发送字符并完成相应动作:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit LED1=P1^0

sbit LED2=P1^3

sbit K2=P1^7

uchar NumX=-1

//延时

void DelayMS(uint ms)

{

uchari

while(ms--)for(i=0i<120i++)

}

//主程序

void main()

{

LED1=LED2=1

SCON=0x50         //串口模式1,允许接收

TMOD=0x20        //T1工作模式2

TH1=0xfd            //波特率9600

TL1=0xfd

PCON=0x00         //波特率不倍增

RI=TI=0

TR1=1

IE=0x90

while(1)

{

DelayMS(100)

if(K2==0)

{

while(K2==0)

NumX=++NumX%11   //产生0~10范围内的数字,其中10表示关闭

SBUF=NumX

while(TI==0)

TI=0

}

}

}

void Serial_INT() interrupt 4

{

if(RI)      //如收到则LED则孝源动作

{

RI=0

switch(SBUF)//根据所收到的不同命令字符物缺完成不同动作

{

case'X':   LED1=LED2=1break          //全灭

case'A':   LED1=0LED2=1break       //LED1亮

case'B':   LED2=0LED1=1break       //LED2亮

case'C':   LED1=LED2=0                  //全亮

}

}

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存