配置串口通信,包括串口号、波特率圆谨、校验位、橘滑基停止位这些信息;
打开串口,和打开文件一样,在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 //全亮
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)