导航:首页 > 操作系统 > 单片机异步通信模块

单片机异步通信模块

发布时间:2022-07-21 00:45:06

⑴ 两个单片机之间的简单异步串行通信

因为你是用查询方式进行通信的,而程序没有中没有设置两机通信的联络信号,即接受机接收到的第一位数据不一定是发送机发送的第一位数据,而有可能是第二、第三位数据,这样接受到的八位数据就可能是发送机发送多次数据中截取的八位数据,又因两机延时时间不同,因此接受到的第一位数据不可能固定不变的。
所以就会出现你说的现象。如果采用的是查询方式进行串行通信,两机之间需要建立握手信号,告知接受机发送机开始发送地位数据,接受机才开始接受数据。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void uart_init()
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
PCON=0x00;
TR1=1;
SCON=0x50;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}

void main()
{
uart_init();

do
{
SBUF=0x01;
while(TI==0);
TI=0;

while(RI==0);
REN=0;
}
while(SBUF!=0x02) ;

while(1)
{
SBUF=0x07;
while(TI==0);
TI=0;
delay(500) ;
SBUF=0x00;
while(TI==0);
TI=0;
delay(500) ;
}

}

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void uart_init()
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
PCON=0x00;
TR1=1;

SM0=0; //串口方式1
SM1=1;
REN=1;

}

void main()
{
uart_init();
do
{
SBUF=0x02;
while(TI==0);
TI=0;
while(RI==0);
RI=0;
P2=SBUF;
}
while(P2!=0x01);

while(1)
{

while(RI==0);
P1=SBUF;
RI=0;

}

}

⑵ 单片机多机串行异步通信

//===================================================================== // 多机通讯从机1程序 //cong1.c //writer:谷雨 2008年3月22日于EDA实验室 //注: //===================================================================== #include<reg52.h> #define addr 0x31 //从机1地址 unsigned char receive; unsigned char xx[ ]={"1234567890"}; void Uart_Init(void) { TMOD = 0x20; //定时器T1使用工作方式2 TH1 = 0XF3; TL1 = 0XF3; PCON = 0x00; //SMOD=1; SCON = 0xf0; //工作方式3,9位数据位,波特率9600bit/s,允许接收 TR1 = 1; //开始计时 EA = 1; //中断允许 ES = 1; //串行中断允许 } void Serial_INT() interrupt 4 { if(!RI) return; RI=0; if(RB8==1) { if(SBUF==addr) SM2=0; else SM2=1; } if(RB8==0) receive=SBUF; } void SendOneByte(unsigned char c) { TB8=0; SBUF = c; while(!TI); TI = 0; } void SendListChar(unsigned char *DData,unsigned char Ef) { unsigned char L=0; if(Ef!=0) { for( ;L<Ef;L++) //显示有效长度 SendOneByte(DData[L]); //发送单个字符 }else while (DData[L]!='\0') //发送至字串结束 { SendOneByte(DData[L]); //发送单个字符 L++; //下一个字符 } } void main() { Uart_Init(); while(1) { switch(receive) { case 0xff: break; case 0x01: //在此可以写入要完成的动作,最多可完成256个动作 SendListChar(xx,0); break; case 0x02: break; case 0x33: P1=!P1; //为方便其间,赋值给P1口,测P1口电平来检测该程序 break; default: break; } receive=0xff; } } //===================================================================== // 多机通讯主机程序 //zhuji.c //writer:谷雨 2008年3月22日于EDA实验室 //注:主机先发送地址,接收到应答后,再发送数据 //===================================================================== #include<reg52.h> #define addr1 0x31 //从机1地址 #define addr2 0x32 //从机2地址 unsigned char xx[10]; unsigned char p = 0; void delay_1ms(unsigned int i) { unsigned char j; while ((i--)!=0) {for (j=0;j<125;j++);} } void Uart_Init(void) { TMOD = 0x20; //定时器T1使用工作方式2 TH1 = 0XF3; TL1 = 0XF3; PCON = 0x00; //SMOD=1; SCON = 0xf0; //工作方式3,9位数据位,波特率9600bit/s,允许接收 SM2 = 0; TR1 = 1; //开始计时 EA = 1; //中断允许 ES = 1; //串行中断允许 } void Serial_INT() interrupt 4 { if(!RI) return; ES = 0; RI = 0; xx[p] = SBUF; p++; ES = 1; } void send_addr(unsigned char addr) //发送地址 { p = 0; TB8 = 1; //发送地址帧 SBUF=addr; //发送地址 while(!TI); //等待发送完毕 TI=0; //软件复位TI } void send_data(unsigned char ddata) //发送数据 { TB8=0; //发送数据帧 SBUF=ddata; //发送数据 while(!TI); TI=0; //软件复位TI } void main() { Uart_Init(); delay_1ms(2000); while(1) { send_addr(addr1); //向从机1发地址 send_data(0x33); send_data(0x01); delay_1ms(500); if(xx[9]=='0') P1=0xaa; delay_1ms(500); send_addr(addr2); //向从机2发地址 send_data(0x33); send_data(0x01); delay_1ms(500); if(xx[9]=='9') P1=0x55; delay_1ms(500); } // while(1); }

⑶ 怎么把单片机和GSM模块连接什么型号都行。

把单片机和GSM模块连接,直接把异步串行通信口的TX和RX连上就可以,别忘了地线。但是需要注意几点:

1、不同的单片机有不同的电压,一般GSM模块的输入输出电平是2.85V,51系列的电平是5V,一般在51输出的TX那根线上串联2K的电阻,基本上可以使用。如果是3.3V的单片机,这个电阻就可以很小,几百欧姆就可以。

2、GSM模块本身的电源和SIM卡电路很麻烦,首先是大多数GSM模块都是用FPC40的接口,排线的间距只有零点五毫米,而且是塑料外壳,不好焊接。焊不好的话工作不稳定。

其次是电源部分较麻烦,GSM模块的发射电流较大,最大瞬间电流2A。所以电源部分一般要用LM2576这种大电流的DC-DC变换器来提供4V的电压,DCDC电路设计本身就很不容易,个人应用比较难,需要做电路板。

⑷ 单片机的sci模块和spi模块分别指的什么啊

SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。
串行通信接口SCI(serial communication interface)由Motorola公司推出。它是 sci串口连接
一种通用异步通信接口UART,与MCS-51的异步通信功能基本相同。
简单说一个同步一个异步。

SCI是串口就是rs232,主要用来和其他的MCU或则电脑进行通信

spi是串行通信总线,主要和串行的外设进行数据交流,比如说串行的DA转换器

SCI是异步串行口,也就是UART,最高速度也不超1Mbps,SPI是同步串行口,速度可以到几Mbps

⑸ 单片机基础知识分享:什么是同步通信和异步通信

同步通信要求收发双方的通信时钟同步,同步是个时间概念,指的是节拍,步调一致

⑹ 单片机之间如何实现通信

两个单片机之间串口通信,如果是用proteus仿真,最简单了,两个单片机的rxd,txd交叉连接就行了。要是实物最好用rs232连接通信,距离可以达到几十米。再远点距离,用rs485连接通信。总之,方法很多的,也很灵活的。

⑺ 关于51单片机串口异步通信的问题

发送时是自己主动的,当然可以不用中断方式,使用查询法。
接收时自己是被动的,你不知道什么时候会发来数据,所以采用中断方式,没有中断的时候运行其他的程序段。
查询法是不断地查询是否有数据接受到或数据是否发送完成。
中断法是指当接收到数据或发送数据后进入中断子程序,子程序完成后再返回执行原来被中断的程序。

⑻ mcs-51单片机的串行通信中异步通讯方式和同步通讯方式的异步和同步怎样理解

同步串行通信进行数据传输时,发送和接收双方要保持完全的同步,也就是双方的速率要相等,因此要使用同一时钟
异步通信中,在每一帧的数据前后放上了控制字符,双方的时钟可以彼此独立

阅读全文

与单片机异步通信模块相关的资料

热点内容
Lightroom文件夹移动以后 浏览:962
web前端pdf 浏览:894
程序员养鸡创业 浏览:499
山西有什么app 浏览:408
app怎么样购买内存 浏览:32
如何注册sqlserver服务器 浏览:78
上士命令 浏览:490
股市中带星号的app是什么 浏览:711
什么路由可以刷机做打印机服务器 浏览:9
电脑怎么找到云服务器 浏览:873
微信怎么发应用app 浏览:776
花生壳dns服务器地址 浏览:650
squad服务器一般什么时候人多 浏览:481
程序员战门课 浏览:476
config保存服务器地址 浏览:319
预订网吧座位的app叫什么 浏览:418
香港服务器主机地址 浏览:642
网店美工pdf 浏览:449
一堆文件夹怎么弄出来 浏览:745
博途如何编译硬件 浏览:418