两单片机之间的通信有关问题
两单片机之间的通信问题
原本是要做一个基于单片机的红外通信,只是做仿真,不过后来仿真软件(protues旧版)没有红外发射和接收器,所以只要做个模拟红外发射接收就行,主要是做编码和解码。我之前做法只是将简单的接收端和发射端的单片机的管脚相连通,希望通过接收端的管脚高低电平的变化让接收端的管脚接收,16位0或1组成一个操作码,然后接收端进行解码。
但是后来发现,这样做两个单片机之间不能进行通信,后来看了下串口通信,但是好像都是双工的,我只需要发射端能将信号发送到接收端,应该是说接收端能接收到发射端某个管脚的高低电平变化,有没有什么简单的办法?如果只能用串口 有没有谁给个例子呀。 小弟感激不尽。
------解决方案--------------------
串口的指令直接解析不就可以了嘛
:)
其它的,玩规范的一点,那可以加个MODBUS的协议.要是你愿意的话~
------解决方案--------------------
这个嘛,可以选择i2c、spi、aurt。如果只想用一条线的话,可以用nec或者飞利浦的红外传输协议,当然也可以自己制定一个协议。
如果你非要软件例子,下面给你一个串口的,仅工参考学习
*---------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 串口1地址自动识别举例举例---------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------*/
/* --- Tel: 86-755-82948412 -------------------------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使使用了宏晶科技的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使使用了宏晶科技的资料及程序 */
/*---------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
//-----------------------------------------------
#define SLAVE 1 //定义从机编号,0为从机1, 1为从机2
#if SLAVE == 0
#define SAMASK 0x33 //从机1地址屏蔽位
#define SERADR 0x55 //从机1的地址为xx01,xx01
#define ACKTST 0x78 //从机1应答测试数据
#else
#define SAMASK 0x3C //从机2地址屏蔽位
#define SERADR 0x5A //从机2的地址为xx01,10xx
#define ACKTST 0x49 //从机2应答测试数据
#endif
#define URMD 2 //0:使用定时器2作为波特率发生器
//1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器
原本是要做一个基于单片机的红外通信,只是做仿真,不过后来仿真软件(protues旧版)没有红外发射和接收器,所以只要做个模拟红外发射接收就行,主要是做编码和解码。我之前做法只是将简单的接收端和发射端的单片机的管脚相连通,希望通过接收端的管脚高低电平的变化让接收端的管脚接收,16位0或1组成一个操作码,然后接收端进行解码。
但是后来发现,这样做两个单片机之间不能进行通信,后来看了下串口通信,但是好像都是双工的,我只需要发射端能将信号发送到接收端,应该是说接收端能接收到发射端某个管脚的高低电平变化,有没有什么简单的办法?如果只能用串口 有没有谁给个例子呀。 小弟感激不尽。
通信
------解决方案--------------------
串口的指令直接解析不就可以了嘛
:)
其它的,玩规范的一点,那可以加个MODBUS的协议.要是你愿意的话~
------解决方案--------------------
这个嘛,可以选择i2c、spi、aurt。如果只想用一条线的话,可以用nec或者飞利浦的红外传输协议,当然也可以自己制定一个协议。
如果你非要软件例子,下面给你一个串口的,仅工参考学习
*---------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 串口1地址自动识别举例举例---------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------*/
/* --- Tel: 86-755-82948412 -------------------------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使使用了宏晶科技的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使使用了宏晶科技的资料及程序 */
/*---------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
//-----------------------------------------------
#define SLAVE 1 //定义从机编号,0为从机1, 1为从机2
#if SLAVE == 0
#define SAMASK 0x33 //从机1地址屏蔽位
#define SERADR 0x55 //从机1的地址为xx01,xx01
#define ACKTST 0x78 //从机1应答测试数据
#else
#define SAMASK 0x3C //从机2地址屏蔽位
#define SERADR 0x5A //从机2的地址为xx01,10xx
#define ACKTST 0x49 //从机2应答测试数据
#endif
#define URMD 2 //0:使用定时器2作为波特率发生器
//1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器