两片单片机通过串口一发一收的C语言例程

两片单片机通过串口一发一收的C语言例程,第1张

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

#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语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9272003.html

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

发表评论

登录后才能评论

评论列表(0条)

保存