求教高人指點單片機多機通信的C語言程序
求教高人指點單片機多機通信的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。
![](https://img.51dongshi.com/20250107/wz/18417427752.jpg)
在設計單片機多機通信時,可以采用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。
為你推薦