/ 甲机串口程序:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。/
#include<reg51h>
#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=0;i<120;i++);
}
//向串口发送字符
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=~LED1;LED2=1;
break;
case2: Putc_to_SerialPort('B');
LED2=~LED2;LED1=1;
break;
case3: Putc_to_SerialPort('C');
LED1=~LED1;LED2=LED1;
break;
}
}
}
}
//甲机串口接收中断函数
void Serial_INT() interrupt 4
{
if(RI)
{
RI=0;
if(SBUF>=0&&SBUF<=9)P0=DSY_CODE[SBUF];
elseP0=0x00;
}
}
/ 乙机程序接收甲机发送字符并完成相应动作:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。/
#include<reg51h>
#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=0;i<120;i++);
}
//主程序
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=1;break; //全灭
case'A': LED1=0;LED2=1;break; //LED1亮
case'B': LED2=0;LED1=1;break; //LED2亮
case'C': LED1=LED2=0; //全亮
}
}
}
加入函数:
void SendData(BYTE dat)
{
while (!TI); //Wait for the previous data is sent
TI = 0; //Clear TI flag
SBUF = dat; //Send current data
}
void InitUart()
{
SCON = 0x5a; //8 bit data ,no parity bit
TMOD = 0x20; //T1 as 8-bit auto reload
TH1 = TL1 = -(FOSC/12/32/BAUD); //Set Uart baudrate
TR1 = 1; //T1 start running
}
然后在main函数中 :
加入 InitUart();
之后 想发串口数据调用函数:SendData();
如向串口发送0X55 就 SendData(0x55);
发送:
#include
<reg52h>
#include<intrinsh>
#include<stringh>
#define
uchar
unsigned
char
uchar
data
i,j,p,TEST;
sbit
INTT0=P3^2;
uchar
code
V_35[10]={'V','o','l','t','
','3','','5',13,10};
void
Init();
void
Delay();
void
Volt_35();
void
main()
{
Init();
while(1)
{
if(TEST)
{
Volt_35();
TEST=0;
}
}
}
void
Init()
{
P0=0XFF;
//I/O口初始化
P1=0xFF;
P2=0XFF;
P3=0xFF;
SCON=0x50;
//设置成串口方式1
T2CON=0x34;
TH2=0xff;
//晶振110592MHZ,波特率9600
TL2=0xdc;
RCAP2H=0XFF;
RCAP2L=0XdC;
EA=1;
EX0=1;
IT0=1;
TEST=0;
}
void
Delay()
{
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
void
Volt_35()
{
for(p=0;p<10;p++)
{
SBUF=V_35[p];
while(!TI);
TI=0;
}
}
void
int0svr(void)
interrupt
0
using
1
{
Delay();
if(!INTT0)
{
while(!INTT0);
TEST=1;
}
}
接收:
#include
<reg52h>
#include<intrinsh>
#include<stringh>
#define
uchar
unsigned
char
uchar
data
i;
void
Init();
void
main()
{
Init();
while(1)
{
for(i=0;i<10;i++)
{
while(!RI);
P1=SBUF;
RI=0;
}
}
}
void
Init()
{
P0=0XFF;
P1=0xFF;
P2=0XFF;
P3=0xFF;
SCON=0x50;
T2CON=0x34;
TH2=0xff;
TL2=0xdc;
RCAP2H=0XFF;
RCAP2L=0XdC;
}
以上就是关于两片单片机通过串口一发一收的C语言例程全部的内容,包括:两片单片机通过串口一发一收的C语言例程、单片机和电脑通讯,用MAX232芯片,串口数据发送程序该怎么编写进组程序如下、单片机串行口通信程序C语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)