最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

求教高人指点单片机多机通信的C语言程序

来源:动视网 责编:小OO 时间:2024-12-04 04:23:11
文档

求教高人指点单片机多机通信的C语言程序

主机A的主程序代码。#include;#define uchar unsigned char。#define F_OSC 12000000UL。#define F_BAUD 1200UL。#define RELOAD (uchar)(256-F_OSC/12/32/F_BAUD)。#define B_ID 2。#define C_ID 3。#define LED_ON 4。#define LED_OFF (~LED_ON)。sbit P20 = P2^0。sbit LEDB = P1^0。sbit LEDC = P1^1。typedef union {。uchar buf[2]。struct {;uchar databuf。uchar TXID。
推荐度:
导读主机A的主程序代码。#include;#define uchar unsigned char。#define F_OSC 12000000UL。#define F_BAUD 1200UL。#define RELOAD (uchar)(256-F_OSC/12/32/F_BAUD)。#define B_ID 2。#define C_ID 3。#define LED_ON 4。#define LED_OFF (~LED_ON)。sbit P20 = P2^0。sbit LEDB = P1^0。sbit LEDC = P1^1。typedef union {。uchar buf[2]。struct {;uchar databuf。uchar TXID。


在设计单片机多机通信时,可以采用C语言编程实现。例如,主机A通过UART与从机B和C通信。AB两端各并上120欧电阻,AB线互相残绕,再与公共的接地线缠绕,以减低误差。主机A的主程序如下:

主机A的主程序代码:

#include
#define uchar unsigned char
#define F_OSC 12000000UL
#define F_BAUD 1200UL
#define RELOAD (uchar)(256-F_OSC/12/32/F_BAUD)
#define B_ID 2
#define C_ID 3
#define LED_ON 4
#define LED_OFF (~LED_ON)
sbit P20 = P2^0;
sbit LEDB = P1^0;
sbit LEDC = P1^1;
typedef union {
uchar buf[2];
struct {
uchar databuf;
uchar TXID;
}Option;
}TYPE_UART_SERIAL;
TYPE_UART_SERIAL SysUart;
void UartInit() {
SCON = 0x50;
TMOD = 0x20;
TH1 = RELOAD;
TR1 = 1;
TI = 0;
EA = 1;
ES=1;
P20=0;
}
void main(void) {
UartInit();
LEDB=0;
LEDC=0;
while(1) {
if((SysUart.Option.TXID==B_ID)&&(SysUart.Option.databuf!=0)) {
SysUart.Option.TXID=0;
if (SysUart.Option.databuf==LED_ON) {
LEDB=1;
}
if(SysUart.Option.databuf==LED_OFF) {
LEDB=0;
}
SysUart.Option.databuf=0;
}
if((SysUart.Option.TXID==C_ID)&&(SysUart.Option.databuf!=0)) {
SysUart.Option.TXID=0;
if (SysUart.Option.databuf==LED_ON) {
LEDC=1;
}
if(SysUart.Option.databuf==LED_OFF) {
LEDC=0;
}
SysUart.Option.databuf=0;
}
}
}
void SerialServe() interrupt 4 {
static uchar pcnt=0;
if (RI == 1) {
RI = 0;
SysUart.buf[pcnt] = SBUF;
pcnt =(pcnt+1)%2;
}
if (TI == 1) {
}
}

从机B的代码:

#include
#define uchar unsigned char
#define F_OSC 12000000UL
#define F_BAUD 1200UL
#define RELOAD (uchar)(256-F_OSC/12/32/F_BAUD)
#define B_ID 2
#define LED_ON 4
#define LED_OFF (~LED_ON)
sbit P20 = P2^0;
sbit key = P1^0;
typedef union {
uchar buf[2];
struct {
uchar databuf;
uchar TXID;
}Option;
}TYPE_UART_SERIAL;
TYPE_UART_SERIAL SysUart;
void UartInit() {
SCON = 0x40;
TMOD = 0x20;
TH1 = RELOAD;
TR1 = 1;
TI = 0;
EA = 1;
P20=1;
}
void SerialSenData(uchar *SerialBuf) {
uchar i;
i=2;
while (i--) {
SBUF = *SerialBuf;
SerialBuf++;
while (!TI);
TI = 0;
}
}
void main(void) {
uchar ledbuf;
UartInit();
ledbuf=LED_OFF;
while(1) {
if(key==0) {
ledbuf=~ledbuf;
SysUart.Option.databuf=ledbuf;
SysUart.Option.TXID = B_ID;
SerialSenData(SysUart.buf);
while(key==0);
}
}
}
void SerialServe() interrupt 4 {
if (RI == 1) {
RI = 0;
}
if (TI == 1) {
}
}

从机C的代码与从机B类似,只是TXID设为3,LED控制引脚为P1^1。这些代码实现了通过UART进行单片机多机通信的功能。

在实际应用中,还需要根据具体需求调整波特率、电阻值等参数,以确保通信的稳定性和准确性。

通过这种方式,可以实现单片机之间的多机通信,提高系统的灵活性和可扩展性。详情

文档

求教高人指点单片机多机通信的C语言程序

主机A的主程序代码。#include;#define uchar unsigned char。#define F_OSC 12000000UL。#define F_BAUD 1200UL。#define RELOAD (uchar)(256-F_OSC/12/32/F_BAUD)。#define B_ID 2。#define C_ID 3。#define LED_ON 4。#define LED_OFF (~LED_ON)。sbit P20 = P2^0。sbit LEDB = P1^0。sbit LEDC = P1^1。typedef union {。uchar buf[2]。struct {;uchar databuf。uchar TXID。
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top