您现在的位置是:首页 >

电话是靠什么通讯的 51微控制器之间如何实现485通讯

火烧 2021-05-28 19:41:11 1062
51微控制器之间如何实现485通讯 51微控制器之间如何实现485通讯通过序列口 经485转换器后通讯RS-485特性1.RS-485的电气特性:逻辑“0”以两线间的电压差为+(2—6)V表示;逻辑“

51微控制器之间如何实现485通讯  

电话是靠什么通讯的 51微控制器之间如何实现485通讯

51微控制器之间如何实现485通讯

通过序列口 经485转换器后通讯
RS-485特性
1.RS-485的电气特性:逻辑“0”以两线间的电压差为+(2—6)V表示;逻辑“1”以两线间的电压差为-(2—6)V表示。介面讯号电平比RS-232降低了,就不易损坏介面电路的晶片,且该电平与TTL电平相容,可方便与TTL电路连线。
2.RS-485的资料最高传输速率为10Mbps。
3.RS-485介面是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
4.RS-485介面的最大传输距离标准值为4000英尺,实际上可达1219米,另外RS-232介面在总线上只允许连线1个收发器,即单站能力。而RS-485介面在总线上是允许连线多达128个收发器。即具有多站能力,这样使用者可以利用单一的RS-485介面方便地建立起装置网路。
因为RS485介面组成的半双工网路,一般只需二根连线(一般叫AB线),所以RS485介面均采用遮蔽双绞线传输。

51微控制器如何实现两微控制器之间的无线通讯~~

用个无线模组

用程式如何实现C51微控制器之间的UART通讯

两块儿微控制器共地,3,.1和3.0交叉连线,用串列埠通讯中的方式1就能实现,波特率设定的越高,你中间的传输线就要越短,想要加长线的长度就要中间加驱动装置,比如两块儿MAX232,至于汇编程式嘛,随便找本微控制器教材,攒口通讯一般都是汇编的,而方式一也是最普遍的

微控制器之间如何实现通讯?

1、微控制器的通讯有序列通讯和并行通讯。序列通讯分为同步和非同步两种。同步通讯波特率高,非同步要低很多。
2、虽然如此,微控制器使用最多的还是非同步通讯。
3、距离近时,直接将两微控制器的TXD与RXD连线,自己根据需要编写协议,根据协议写好程式。
4、一边传送、一边接收,这就实现了微控制器通讯。
5、距离远时,需要加入电平转换模组,将微控制器的TTL电平进行转换

如何实现2个51微控制器之间通过串列埠通讯的源程式

汇编编写的模拟串列埠通讯程式
T2作为波特率控制
UART_RXD 是硬中断0或1口,如果能进入中断,说明该线有一个起始位产生,进入中断后调
用下面的接收程式。退出硬中断之前还需要将硬中断标志重新复位。
UART_TXD 是任何其它IO即可。
UART_SEND:
PUSH IE
PUSH DPH
PUSH DPL
PUSH PSW
PUSH 00H
PUSH ACC
CLR EA
SETB UART_TXD ;START BIT

MOV R0,A
CLR TR2 ;TR2置1,计数器2启动,时间计数启动。
MOV A,RCAP2L;计数器2重新装载值
MOV TL2,A ;置计数器2初值 ;T2需要重新装载
MOV A,DPH
MOV A,RCAP2H
MOV TH2,A
MOV A,R0

SETB TR2 ;TR2置1,计数器
JNB TF2,$
CLR TF2
JNB TF2,$
CLR TF2

CLR UART_TXD ;START BIT
JNB TF2,$
CLR TF2
JNB TF2,$
CLR TF2

MOV R0,#08H
UART_SEND_LOOP:
RRC A
MOV UART_TXD,C ;8 BIT
JNB TF2,$
CLR TF2
JNB TF2,$
CLR TF2
DJNZ R0,UART_SEND_LOOP

SETB UART_TXD ;END BIT
JNB TF2,$
CLR TF2
JNB TF2,$
CLR TF2

POP ACC
POP 00H
POP PSW
POP DPL
POP DPH
POP IE
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
UART_REC:
PUSH IE
PUSH DPH
PUSH DPL
CLR EA

CLR TR2 ;TR2置1,计数器2启动,时间计数启动。
MOV A,RCAP2L;计数器2重新装载值
MOV TL2,A ;置计数器2初值 ;T2需要重新装载
MOV A,DPH
MOV A,RCAP2H
MOV TH2,A

JB UART_RXD,$ ;REC
SETB TR2 ;TR2置1,计数器2启动,时间计数启动。
JNB TF2,$
CLR TF2 ;0.5 BIT

JNB TF2,$
CLR TF2 ;1 BIT

JNB TF2,$
CLR TF2 ;1.5 BIT
MOV C,UART_RXD
MOV ACC.0,C

JNB TF2,$
CLR TF2

JNB TF2,$
CLR TF2 ;2.5
MOV C,UART_RXD
MOV ACC.1,C

JNB TF2,$
CLR TF2

JNB TF2,$
CLR TF2 ;3.5
MOV C,UART_RXD
MOV ACC.2,C

JNB TF2,$
CLR TF2

JNB TF2,$
CLR TF2 ;4.5
MOV C,UART_RXD
MOV ACC.3,C

JNB TF2,$
CLR TF2

JNB TF2,$
CLR TF2 ;5.5
MOV C,UART_RXD
MOV ACC.4,C

JNB TF2,$
CLR TF2

JNB TF2,$
CLR TF2 ;6.5
MOV C,UART_RXD
MOV ACC.5,C

JNB TF2,$
CLR TF2

JNB TF2,$
CLR TF2 ;7.5
MOV C,UART_RXD
MOV ACC.6,C

JNB TF2,$
CLR TF2

JNB TF2,$
CLR TF2 ;8.5
MOV C,UART_RXD
MOV ACC.7,C

JNB TF2,$
CLR TF2 ;9.5
JNB UART_RXD,$ ;等待停止位,并重新复位计数器
SETB UART_RXD

POP DPL
POP DPH
POP IE
RET
补充回答:
串列埠除错
1. 传送:向总线上发命令
2. 接收:从汇流排接收命令,并分析是地址还是资料。
3. 定时传送:从记忆体中取数并向主机发送.
经过除错,以上功能基本实现,可以通过上位机对微控制器进行实时控制。
程式如下:
这是一个微控制器C51串列埠接收(中断)和传送例程,可以用来测试51微控制器的中断接收
和查询传送,传送没有必要用中断,因为程式的开销是一样的
#include <reg51.h>
#include<stdio.h>
#include <string.h>
#define INBUF_LEN 4 资料长度
unsigned char inbuf1[INBUF_LEN];
unsigned char checksum,count3 , flag,temp,ch;
bit read_flag=0;
sbit cp=P1^1;
sbit DIR=P1^2;
int i;
unsigned int xdata *RAMDATA;
unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ;
void init_serialm(void)
{
SCON=0x50; 在11.0592MHz下,设定序列口波特率为9600,方式1,并允许接收
PCON=0x00;
ES=1;
TMOD=0x21; 定时器工作于方式2,自动装载方式
TH0=(65536-1000)%256;
TL0=(65536-1000)/256;
TL1=0xfd;
TH1=0xfd;
ET0=1;
TR0=1;
TR1=1;
TI=0;
EA=1;
TI=1;
RAMDATA=0x1F45;
}
void serial () interrupt 4 using 3
{
if(RI)
{ RI=0;
ch=SBUF;
TI=1; 置SBUF空
switch(ch)
{
case 0x01 :printf("A"); TI=0;break;
case 0x02 :printf("B"); TI=0;break;
case 0x03 :printf("C"); TI=0;break;
case 0x04 :printf("D"); TI=0;break;
default :printf("fg"); TI=0;break;
}
}
}
向串列埠传送一个字元
void timer0() interrupt 1 using 3{
char i;
flag++;
TH0=0x00;
TL0=0x00;
if(flag==10)
{ cp=!cp;
for(i=0;i<6;i++)
P2=0x25;
TI=1;
temp=*RAMDATA;
printf("%c",temp);
TI=0;
RAMDATA--;
flag=0;
}
}
主程式
main()
{
init_serialm(); 初始化串列埠
向6264中送资料
{
*RAMDATA=0x33;
}
while(1)
{
*RAMDATA=0x33;;
}
}
除错需要注意的问题:
1. 传送过程:在传送时必须保证TI=1:即传送缓冲器为空,否则将导致资料发不出去,如果想强制传送可以用:TI=1.具体传送资料:利用printf(“abcd”);函式直接传送即可。
2. 接收过程:在接收时多选用中断方式,这样可以节约CPU的时间,提高效率,

如何实现Unity3D和微控制器通讯

可以采用两种方式:
一,采用串列埠与微控制器通迅,采用无协议方式.但必须注意PLC通讯方式,做必要的转换.如RS422,RS485等,可以采用与之对应的晶片与MCU连线.
二,采用IO口,可以通过编码与MCU交换资料以节省硬体资源.这种方式不需要什么协议之类的,但速度较慢,不过,对于资料显示,还是绰绰有余的.
如果PLC没有通讯口的,可以考虑用PLC的程式设计口,看PLC的程式设计口是rs485/rs232,也可以走协议.PLC 大多都支援R232
触控式萤幕一样也大多都支援R232

如何实现两片PIC微控制器的双机通讯?

UART 、SPI 、 I2C都可以

51微控制器如何实现远端无线通讯?

简单的就是使用315/433MHz发射模组和RX3310A接收模组的遥控系统,使用很方便的,或者使用NRF2401模组也可以。

51微控制器定时功能如何实现?

#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
/**************初始化程式****************/
void initiation()
{
TMOD=0x11; 设定计数方式等
TH0=-10000/256;
TL0=-10000%256; 10MS定时初值(T0计时用)
TH1=-25000/256;
TL1=-25000%256; 25MS定时初值(T1计时用)
ET0=1;
ET1=1;
TR0=1;
TR1=1;
EA=1;
}
/****************定时器0中断服务程式*****/
void init_timer0(void) interrupt 1
{
TH0=-10000/256;
TL0=-10000%256; 10MS定时初值(T0计时用)
下面写使用者程式
}
/****************定时器1中断服务程式*****/
void init_timer1(void) interrupt 3
{
TH1=-25000/256;
TL1=-25000%256; 50MS定时初值(T1计时用)
下面写使用者程式
}
/****************主程式******************/
main()
{
initiation();
while(1)
{
;
}
}

如何实现51微控制器触发定时功能?

就是有脉冲讯号来的时候,触发定时器工作,开始倒计时,倒计时完后不回圈,仅仅是重置定时器,等待下一个脉冲触发。 定时器的编写有行命令是SETBTR0,意思是启动定时器0,现在不需要这样启动,直接用电讯号脉冲启动。

  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码