历史上的今天
今天是:2025年01月09日(星期四)
2018年01月09日 | 单片机双机点对点通信的主机程序
2018-01-09 来源:eefocus
单片机 双机点对点通信的主机部分程序
#ifndef __P2P_M_C__
#define __P2P_M_C__
#include
#include
#define __MAX_LEN_ 64 // 数据最大长度
#define _MHz_ 11 // 设置 单片机 使用的晶振频率(11.0592MHz)
/* 以下为程序协议中使用的握手信号 */
#define __RDY_ 0x06 // 主机开始通信时发送的呼叫信号
#define __BUSY_ 0x15 // 从机忙应答
#define __OK_ 0x00 // 从机准备好
#define __SUCC_ 0x0f // 数据传送成功
#define __ERR_ 0xf0 // 数据传送错误
void init_serial(); // 串口初始化
void send_data(unsigned char *buf); // 发送数据
void delay10ms(unsigned int count); // 延时子程序(10ms)
void main()
{
char buf[__MAX_LEN_];
unsigned char i = 0;
unsigned char tmp = __BUSY_;
/* 为缓冲区赋初值 */
P0 = 0xff;
while(P1 != 0) // 每隔100ms从P0口读取,若读取到0则表明数据采集结束
{
*(buf+i) = P0;
delay10ms(10); // 延时100ms
P0 = 0xff;
i++;
}
*(buf+i) = 0; // 缓冲区最后一个字节为0表示数据结束
/* 串口初始化 */
init_serial(); // 初始化串口
EA = 0; // 关闭所有中断
/* 发送握手信号06H */
TI = 0;
SBUF = __RDY_;
while(!TI);
TI = 0;
/* 接收应答信息,如果接收的信号为00H,表示从机允许接收 */
while(tmp != __OK_)
{
RI = 0;
while(!RI);
tmp = SBUF;
RI = 0;
}
/* 发送数据并接收校验信息,如果接收的信号为0FH,表示从机接收成功,否则将重新发送该组数据 */
tmp = __ERR_;
while(tmp != __SUCC_)
{
send_data(buf); // 发送数据
RI = 0;
while(!RI);
tmp = SBUF;
RI = 0;
}
while(1); // 程序结束,进入死循环
}
/* 初始化串口 */
void init_serial()
{
TMOD = 0x20; //定时器T1使用工作方式2
TH1 = 250; // 设置初值
TL1 = 250;
TR1 = 1; // 开始计时
PCON = 0x80; // SMOD = 1
SCON = 0x50; //工作方式1,波特率9600bps,允许接收
}
/* 发送数据 */
void send_data(unsigned char *buf)
{
unsigned char len; // 保存数据长度
unsigned char ecc; // 保存校验字节
len = strlen(buf); // 计算要发送数据的长度
ecc = len; // 开始进行校验字节计算
/* 发送数据长度 */
TI = 0;
SBUF = len; // 发送长度
while(!TI);
TI = 0;
/* 发送数据 */
for(i=0; i
ecc = ecc^(*buf); // 计算校验字节
SBUF = *buf; // 发送数据
buf++;
while(!TI);
TI = 0;
}
/* 发送校验字节 */
SBUF = ecc; // 发送校验字节
while(!TI);
TI = 0;
}
/* 延时10ms,精度较低,参数count为延时时间 */
void delay10ms(unsigned int count)
{
unsigned int i, k;
unsigned char j;
unsigned int tmp;
tmp = (int)((100*_MHZ_)/12);
for(i=0; i
for(k=0; k
#endif
上一篇:多机通信的主机部分程序
下一篇:CAN接口汇编程序
史海拾趣
|
Found clock high time violation at 14.8 ns on register \"|counter|lpm_counter:count1_rtl_0|dffs[11]\"原因:违反了steup/hold时间,应该是后仿真,看看波形设置是否和时钟沿符合steup/hold时间措施:在中间加个寄存器可能可以解决问题… 查看全部问答> |
|
大家好,最近想要把T9输入法移植到wince4.2平台上去,不知该怎么去做,输入法网上有很多源代码,但不知道是不是可用 好用适合wince4.2平台,不知大家有做过这方面工作的吗?请大侠给与指导和帮助。谢谢!!!… 查看全部问答> |
|
最近又看了遍485芯片的原理 发现这款芯片是自环的 即发送的数据也到了收端 之前我使用时 发送时候是 TI=RI=1 即禁止了RI 接收的时候 TI=RI=0 即禁止了TI 因为我试过TI=1 RI=0 好像不行(年代比较久远了) 但是今天有人问我 TI=1 RI=0 可以自环的 ...… 查看全部问答> |
|
有关在Smart Device环境下,在CView中放入CListCtrl控件的的问题 开发的环境:VS2005 Smart Device MFC 问题:目前我在我的一个CView里 放入了CEdit,CListCtrl等控件,我想在CEidt控件的Text不为空的时候的 (GetWindowText()),就在我的CEdit的下方出现ClistCtrl控件响应的会出现,比方CEdit的第一个字符为0,在 ...… 查看全部问答> |
|
求助:WINCE6.0 导出SDK时,在SDK属性页中无法配置Emulation中的设置 Clone了Device Emulator,做了一个OS,导出SDK时,在SDK属性页中无法配置Emulation中的设置。这样在应用中就无法启动设备访真… 查看全部问答> |
|
“声纹鉴定与自动识别技术研究”项目是由公安部物证鉴定中心等单位完成,其主要研究成果是将声纹自动识别功能植入VS99语音工作站,该系统能对说话人特征进行自动分析、判断和语图显示及测量,并可结合专家鉴定以确定说话人身份,适合于法庭科学实际 ...… 查看全部问答> |
|
《AN2441 - 在STR71x上使用低成本的振荡器》 发表于 2007年4月 新笔记 意法半导体的STR71x微控制器需要在CK脚上连接一个外部的振荡器。一个最直接的办 ...… 查看全部问答> |
|
本人有3年zigbee产品开发经验,精通ti的z-stack协议栈的应用,如低功耗,网络问题,如有需要联系QQ345364966,同时承接各种zigbee产品开发工程,有需要的也联系!… 查看全部问答> |




