A. 单片机硬双串口有什么意义
意义很大,比如多CPU单片机系统,还需要与上位机通讯,双串口就可以发挥作用了。
B. 双机串口通信(单片机)
试验的话就将两个单片机刷同样的程序,程序里面都包含了发送和接收部分,我用的是msp430单片机。连线是要注意串口线的连接方式
5---5
2---3
3---2
只有这样连才能行。下面是源程序:
#include <msp430x44x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps
UTCTL0 = SSEL1; // UCLK = SMCLK
UBR00 = 0x6D; // 1MHz 9600
UBR10 = 0x00; // 1MHz 9600
UMCTL0 = 0x00; // no molation
UCTL0 = CHAR; // 8-bit character *SWRST*
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
IE1 |= URXIE0; // Enable USART0 RX interrupt
P2SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
P2DIR |= 0x10; // P2.4 output direction
_EINT(); // Enable interrupts
for (;;)
{
_BIS_SR(CPUOFF); // Enter LPM0
_NOP(); // Required only for C-spy
}
}
interrupt[UART0RX_VECTOR] void usart0_rx (void)
{
while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0
}
C. 寻找2个独立串口的单片机!
STM32的话可以试试STM32F103C8T6,或者STM32F103T6U6,这两种是STM32里面个头最小的,有两个串口。当然单片机是贴片封装的,焊接的时候费事了。
DIP封装的单片机里,除了40脚的会有两个串口外,其余20引脚或者28引脚的基本没有。一般的单片机有一个串口就很不错了。
D. 求助:STC系列双串口单片机 同时使用两个串
STC系列双串口单片机 可以同时使用两个串口,
STC系列四串口单片机 同时使用四个串口。
E. 单片机双机串口通信程序设计
初始化程序:
BTLEQU2FH;波特率放在内部RAM的2FH单元
MOVTMOD,#21H;T0方式1,16位计数器,T1方式2,串口用
SETBTR0;启动T0
MOVBTL,#0F3H;波特率设定为1200
MOVSCON,#0C0H;串口方式3,9位数据,禁止接收
接收及验证程序:
NUMEQU2BH;同步符个数值存放在内部RAM的2BH单元
TEMPEQU2CH
ROM-CH:DB55H,55H,55H,55H,55H,55H,55H,55H,55H,55H
DB55H,55H,55H,55H,55H,55H,55H,55H,55H,55H;20字节同步符
MIMDB'WSC':3字节密码“WSC”
SETBP3.5;置电台收状态
SETBREN;允许串口接收
A1:MOVNUM,#0;记录连续到同步符55H的个数
A2:JBRI,A2;串口有数据转A3
A3:CLRRI;清接收中断标志
MOVA,SBUF;读串口数据
CJNEA,#55H,A1;不是同步符转A1
INCNUM;收到的同步符个数加1
MOVA,NUM;取收到的同步符个数
CJNEA,#5,A2;未收够连续5个55H转A2
A4:MOVNUM,#0;密码验证,记录收到密码字节数
A5:MOVDPTR,#MIM;密码字符首址
MOVA,NUM
MOVCA,@A+DPTR;查表取密码
MOVTEMP,A;保存密码
JBRI,A6;串口收完一个字节转A6
…
A6:CLRRI;清接收中断标志
MOVA,SBUF;读串口数据
CJNEA,TEMP,A4;与密码不符转A4
INCNUM;收到的密码个数加1
MOVA,NUM;取已收到的密码字节数
CJNEA,#3,A5;密码未收完转A5
发送程序:
CLRP3.5;置电台发状态
MOVB,#23
MOVDPTR,#ROM-CH
B1:CLRA
MOVCA,@A+DPTR;查表发送同步符和密码共24字节
INCDPTR
LCALLSEND-CH;调发送单字节子程序
DJNZB,B1
…
CLRA
MOVDPTR,#7000H;外部RAM数据首址,发送外部RAM中的数据到电台
B2:CJNER4,#0,B3
CJNER3,#0,B3;R4R3=发送字节数
B3:MOVXA,@DPTR;取数据
INCDPTR
LCALLSEND-CH
CJNER3,#0,B4
CJNER4,#0,B5
B4:DECR3
LJMPB2
DECR3
DECR4
LJMPB2
…
SEND-CH:SETBTB8
MOVSBUF,A
DB0,0,0,0,0,0,0,0
JNBTI,$;延时4μs
CLRTI
RET
结语
F. 单片机双串口通信
看看该芯片的PFD资料吧。
先定义相关寄存器,位,再设置,就可以用了,和第一个串口一样的用法。
例:
sfr AUXR1 = 0xa2;
sfr S2CON = 0x9a;
sfr S2BUF = 0x9b;
sbit S2_P4 = 0xa6;
...
中断号:8
void uart2() interrupt 8
{
...
}
G. ATMEL的51系列单片机有双串口的么
ATMEL没有双串口的51单片机,AVR倒是有些双串口的,比如Atmega162。如果可能,你考虑一下Winbond的W77E058单片机,这就是双串口的。
H. 双单片机间串口双向通信(十万火急)
一个简单的仿真实例,改一下就可以了
I. 有一个双串口单片机,我要把串口1的数据发送到串口2中去,串口1波特率9600,串口2波特率1200。要怎么做
你可以在单片机内部用数组把信息从串口1串到串口2,
另外你还要考虑在单片机内部传递的时间,
由于串口1速度快,口2速度慢,
1:从串口2向串口1传递可以按照9600的波特率。
2:从串口1向串口2传递速度只能按照串口2的波特率1200进行。
如果对实时性要求不高还是很容易搞定的。
J. 有没有高手呀!!!求高手!!! 双串口单片机(STC90C54RD+),串口通信程序编写,具体要求如下:
#include<reg52.h>
unsigned char flag,a;
void main()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
/* if(RI==1)
{
RI=0;
P1=SBUF;
}*/
if(flag==1)
{
ES=0;
flag=0;
SBUF='1';//28;
while(!TI);
TI=0;
SBUF='2';//28;
while(!TI);
TI=0;
SBUF='3';//28;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
// P1=SBUF;
a=SBUF;
flag=1;
}
这是串口通讯的程序,由于C语言的良好的讯移性能,你再查询GPS模块的就编程,一整合可以了