以下是两个C52单片机之间通过串口进行通信的C语言程序示例:
主机端程序:
#include <reg51.h>
#define FREQ_OSC 12000000
#define BAUD_RATE 9600
void UART_Init() {
TMOD = 0x20;
TH1 = TL1 = 256 - FREQ_OSC / (12 * 32 * BAUD_RATE);
SCON = 0x50;
TR1 = 1;
}
void UART_SendByte(unsigned char dat) {
SBUF = dat;
while(!TI);
TI = 0;
}
void main() {
UART_Init();
while(1) {
if(P1 != 0xFF) {
UART_SendByte(P1);
P1 = 0xFF;
}
}
}
从机端程序:
#include <reg51.h>
#define FREQ_OSC 12000000
#define BAUD_RATE 9600
void UART_Init() {
TMOD = 0x20;
TH1 = TL1 = 256 - FREQ_OSC / (12 * 32 * BAUD_RATE);
SCON = 0x50;
TR1 = 1;
}
unsigned char UART_ReceiveByte() {
while(!RI);
RI = 0;
return SBUF;
}
void main() {
unsigned char data;
UART_Init();
while(1) {
data = UART_ReceiveByte();
// 显示数据到LCD
// 延时处理
}
}
以上是一个简单的串口通信程序示例,主机端通过串口发送按键输入数据,从机端接收数据并显示在LCD上。请根据具体的硬件接口和需求进行适当的修改和调试。
下面是一个简单的串口通信的C语言程序示例,可以实现两个C52单片机之间的通信,其中一个单片机接收按键输入数据,然后通过串口发送给另一个单片机,并在LCD上显示接收到的数据。
单片机1代码:

#include <reg52.h>
#define LCD_DATA P0
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
void init_LCD();
void send_data(unsigned char dat);
void send_command(unsigned char cmd);
void delay_ms(unsigned int ms);
void main()
{
init_LCD();
TMOD = 0x20; //定时器1工作在方式2
TH1 = 0xFD; //波特率9600
TL1 = 0xFD;
SCON = 0x50; //方式1工作
TR1 = 1; //定时器1开始计时
TI = 1; //发送缓冲区为空
while(1)
{
if(P2 != 0xFF) //按键输入数据
{
SBUF = P2; //发送数据
while(!TI); //等待发送完成
TI = 0;
send_command(0x01); //清屏
send_data('S'); //显示发送成功
delay_ms(500);
}
}
}
void init_LCD()
{
send_command(0x38); //8位数据接口,显示模式
send_command(0x0c); //开显示,关光标
send_command(0x06); //光标加
send_command(0x01); //清屏
}
void send_data(unsigned char dat)
{
RS = 1;
RW = 0;
LCD_DATA = dat;
delay_ms(1);
E = 1;
delay_ms(1);
E = 0;
delay_ms(1);
}
void send_command(unsigned char cmd)
{
RS = 0;
RW = 0;
LCD_DATA = cmd;
delay_ms(1);
E = 1;
delay_ms(1);
E = 0;
delay_ms(1);
}
void delay_ms(unsigned int ms)
{
unsigned int i, j;
for(i=0; i<ms; i++)
for(j=0; j<110; j++);
}
单片机2代码:
#include <reg52.h>
#define LCD_DATA P0
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
void init_LCD();
void send_data(unsigned char dat);
void send_command(unsigned char cmd);
void delay_ms(unsigned int ms);
void main()
{
init_LCD();
TMOD = 0x20; //定时器1工作在方式2
TH1 = 0xFD; //波特率9600
TL1 = 0xFD;
SCON = 0x50; //方式1工作
TR1 = 1; //定时器1开始计时
while(1)
{
while(!RI); //等待接收数据
RI = 0;
send_command(0x01); //清屏
send_data(SBUF); //显示接收到的数据
}
}
void init_LCD()
{
send_command(0x38); //8位数据接口,显示模式
send_command(0x0c); //开显示,关光标
send_command(0x06); //光标加
send_command(0x01); //清屏
}
void send_data(unsigned char dat)
{
RS = 1;
RW = 0;
LCD_DATA = dat;
delay_ms(1);
E = 1;
delay_ms(1);
E = 0;
delay_ms(1);
}
void send_command(unsigned char cmd)
{
RS = 0;
RW = 0;
LCD_DATA = cmd;
delay_ms(1);
E = 1;
delay_ms(1);
E = 0;
delay_ms(1);
}
void delay_ms(unsigned int ms)
{
unsigned int i, j;
for(i=0; i<ms; i++)
for(j=0; j<110; j++);
}
这样,单片机1可以通过按键输入数据并发送给单片机2,单片机2接收到数据后在LCD上显示。注意需要根据具体的硬件接口和电路条件进行调整和改动。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/150068.html