1、51单片机的之间地通信程序以下程序通过实践检测完全可以放心使用 不过注意硬件电路的连接单片机的串口通信主要理解SCON的状态控制寄存器的用法波特率的设定1 两个单片机一个为主机一个为从机,又主机控制从机的LED灯得简单程序入手 注意硬件的连线 将单片机串口的第二引脚与另一单片机串口的第三引脚相连同时另一单片机的第二串口引脚也与前一个单片机的第三引脚相连 主机部分的程序设计/主机程序 发送控制信号的 #include#define uchar unsigned char#define uint unsigned int sbit KEY=P30;/按键sbit ledA=P11;/定义了三个灯来
2、指示发送的字符是什么sbit ledB=P13;sbit ledC=P15;sbit ledstop=P16;uchar KEY_number=0;/按键计数void delay(unsigned int z)/延时函数 unsigned int x,y; for(x=z;x0;x-) for(y=240;y0;y-);void init() SCON=0x40;/主机串口工作方式1 REN=0 之允许发送不能接收 TMOD=0x20; PCON=0x00; TH1=0xfd; TL1=0xfd; T1=RI=0;/必须要做来保证可以顺利进入终端 TR1=1; EA=1; ES=1;void
3、Put_charToSBUF(uchar c) /把一个字符写入SBUF SBUF=c; while(TI=0); /巧妙的等待处理 等带发送完毕 TI=0;void main() init(); while(1) if(KEY=0) delay(5); if(KEY=0) P1=0xff; while(!KEY) ; KEY_number+; if(KEY_number=4) KEY_number=0; switch (KEY_number) case 0: ledstop=0; break; case 1: ledA=ledA; Put_charToSBUF(A); break; case
4、 2: ledB=ledB; Put_charToSBUF(B); break; case 3: ledC=ledC; Put_charToSBUF(C); break; delay(100) ; 从机部分的程序#include#define uchar unsigned char#define uint unsigned int sbit d1=P10;sbit d2=P11;sbit d3=P12; void delay(unsigned int z)/延时函数 unsigned int x,y; for(x=z;x0;x-) for(y=240;y0;y-);void init() SC
5、ON=0x50;/允许串口接收 TMOD=0x20; PCON=0x00; TH1=0xfd; TL1=0xfd; RI=0; TR1=1; EA=1; ES=1;void main() init(); while(1) if(RI) RI=0; switch(SBUF) case A: d1=d1;break; case B: d1=1; d2=d2;break; case C: d2=1; d3=d3; break; else d1=d2=d3=1; delay(100) ; 上面的程序是一主一从 单片机之间也可以建立一个双向的通信过程/甲机程序 发送控制信号的 同时接收乙机发来的串口信息
6、并/且显示在数码管上 #include#define uchar unsigned char#define uint unsigned int sbit KEY=P30;sbit ledA=P11;sbit ledB=P13;sbit ledC=P15;sbit ledstop=P16;unsigned char code duan=0x3f,0x06,0x5b, 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar KEY_number=0;void delay(unsigned int z)/延时函数 unsigned int x,y; for(x=z;x0;x
7、-) for(y=240;y0;y-);void init() P2=0; P0=0; SCON=0x50; TMOD=0x20; PCON=0x00; TH1=0xfd; TL1=0xfd; T1=RI=0; TR1=1; EA=1; ES=1;void Put_charToSBUF(uchar c) SBUF=c; while(TI=0); TI=0;void main() init(); while(1) if(KEY=0) delay(5); if(KEY=0) P1=0xff; while(!KEY) ; KEY_number+; if(KEY_number=4) KEY_numbe
8、r=0; switch (KEY_number) case 0: ledstop=0; break; case 1: ledA=ledA; Put_charToSBUF(A); break; case 2: ledB=ledB; Put_charToSBUF(B); break; case 3: ledC=ledC; Put_charToSBUF(C); break; delay(100) ; void seral_int() interrupt 4 if(RI) RI=0; if(SBUF=0&SBUF=9) P0=duanSBUF ; else P0=0x00; 乙机部分车程序主要接收甲的
9、串口信息 同时发送字符给甲。#include#define uchar unsigned char#define uint unsigned int sbit d1=P10;sbit d2=P11;sbit d3=P12;sbit key=P30; uchar number; void delay(unsigned int z)/延时函数 unsigned int x,y; for(x=z;x0;x-) for(y=240;y0;y-);void init() P0=0x00; SCON=0x50; TMOD=0x20; PCON=0x00; TH1=0xfd; TL1=0xfd; RI=TI
10、=0; TR1=1; EA=1; ES=1;void main() init(); while(1) if(key=0) delay(5); if(key=0) while(!key) ; SBUF=number; while(TI=0) ; TI=0; number+; if(number=11) number=0; delay(100) ; d1=d2=d3=1; void serial_int() interrupt 4 if(RI) RI=0; switch(SBUF) case A: d1=d1;break; case B: d1=1; d2=d2;break; case C: d2=1; d3=d3; break; 比较上面的程序可以知道接收部分都在串口中断里进行 发送部分在MAIN函数里完成
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1