⑴ 两个51单片机之间串口通讯程序
参考一下:
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/725053edc5cec62d27979143.html
⑵ 简单51单片机串口程序
试试下列程序,这时用中断发送的。
#include<reg51.h>
#define uchar unsigned char
uchar txt[] = "hello";
uchar i = 0;
void main(void)
{
PCON = 0X00;
SCON = 0X50;
TMOD = 0X20;
TH1 = 0XFD;
TL1 = 0XFD;
TR1 = 1;
EA = 1;
ES = 1;
TI = 1;
while(1) {
if(i == 6) {
i = 0;
TI = 1;
}
}
}
void uart() interrupt 4
{
if(RI == 1) RI = 0;
if(TI == 1) {SBUF = txt[i++]; TI = 0;}
}
本程序,可以用串口助手接收。收到的是:hellohellohellohellohello....
⑶ 关于51单片机的串口方式
SCON位符号从高到低(7~0) SM0 SM1 SM2 REN TB8 RB8 TI RI
0x40 对应二进制为: 0100 0000 对应上面的八位,即SM1为高电平,故为串口1工作。
SM0、SM1:串行口工作方式选择位
SM2:多机通信控制位
REN:允许/禁止串行口接收的控制位
TB8:在方式2和方式3中,是被发送的第9位数据,可根据需要由软件置1或清零,也可以作为奇偶校验位,在方式1中是停止位。
RB8:在方式2和方式3中,是被接收的第9位数据(来自第TB8位);在方式1中,RB8收到的是停止位,在方式0中不用。
TI——串行口发送中断请求标志位
当发送完一帧串行数据后,由硬件置1;在转向中断服务程序后,用软件清0。
RI——串行口接收中断请求标志位
当接收完一帧串行数据后,由硬件置1;在转向中断服务程序后,用软件清0。
⑷ 请问51单片机与51单片机之间的串口通信程序怎么写
1、查询方式:
#include<reg51.h>
main()
{
unsigned char dat;
TMOD=0x20;
TH1=TL1=0xfd;
SCON=0x50;
TR1=1;
while(1)
{
if(RI)//接收
{
RI=0;
dat=SBUF;
}
SBUF=dat;//发送
while(!TI);
TI=0;
}
}
2、中断方式:
#include<reg51.h>
unsigned char dat;
bit flag;
void uart_isr() interrupt 4
{
if(RI)//接收
{
RI=0;
dat=SBUF;
flag=1;
}
if(TI)TI=0;
}
main()
{
TMOD=0x20;
TH1=TL1=0xfd;
SCON=0x50;
TR1=1;
EA=1;
ES=1;
flag=0;
while(1)
{
if(flag)
{
SBUF=dat;
flag=0;
}
}
}
⑸ 51单片机串口通信c语言编程
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int
sbit ring=P3^7;
sbit CASE1=P2^0;
sbit CASE2=P2^1;
sbit CASE3=P2^2;
sbit CASE4=P2^3;
uchar se=0,re=0;
uchar temp=0;
void wait(uint cnt)
{
while(--cnt);
}
//串口发送程序
void send(uchar se)
{
SBUF=se; //发送数据
while(TI == 0);
TI = 0;
}
//串口接收程序
uchar receive(void)
{
re=SBUF; //接收数据
while(RI==0);
RI=0;
return re;
}
//串口初始化
void sinti(void)
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD;
TR1 = 1;
EA = 1;
ES = 1;
}
void delay(int cnt)
{
while(--cnt);
}
//主程序
int main (void)
{
int i;
sinti(); //串口初始化程序
ring=1;
while(1)
{
while (1)
{
if(CASE1==0)
{
send('a');
ring=0;
break;
}
if(CASE2==0)
{
send('b');
ring=0;
break;
}
if(CASE3==0)
{
send('c');
ring=0;
break;
}
if(CASE4==0)
{
send('d');
ring=0;
break;
}
}
if(ring==0)
{
wait(60000);
ring=1;
}
for(i=0;i<10000;i++);
}
}
//串口中断程序
void UART_SER (void) interrupt 4 //串行中断服务程序
{
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
temp=SBUF;
}
if(TI) //如果是发送标志位,清零
TI=0;
}
⑹ 51单片机,如何从串口1转换到串口4
可以通过编程 设置,当然先要 硬件连接 正确,串口1 ~ 串口4 使用的IO口是不同的,
这可以查看相关单片机的数据手册,里面有 怎样设置,使用的 IO ,中断 号,等等信息。
如STC的一款有
( 串口1 P3.0 P3.1 和 P3.6 P3.7 & P1.6 P1.7 可选择)
( 串口2 P1.0 P1.1 和 P4.6 P4.7 可选择)
( 串口3 P0.0 P0.1 )
( 串口4 P0.2 P0.3 )
⑺ 51单片机串口通信的问题
比如发送abcdefghi,就回送I get aI get bI get cI get dI get eI get fI get gI get hI get i;
但是结果总是有一部分数据被忽略掉,....
----
每当收到一字节,就回送七字节。
时间上,明显不同。
楼主发送数据,采用了查询方法。
那么,在等待发送七字节结束的期间,显然会丢失收到的字节。
采用查询的方法进行发送,肯定会有遗漏。
发送,也应该用中断的方法,这才不会影响接收。
⑻ 51单片机 串口程序
void
main()
{
scon
=
0x50;
tmod
=
0x20;
//设置定时器1为工作方式2
th1
=
0xf4;
tl1
=
0xf4;
tr1
=
1;
ea
=
1;
es
=
1;
while(1)
{
if(flag)
{
flag
=
0;
//不关闭串口中断,要让它继续接收
num1++;
//超过255,自动就是0
sbuf
=
num1;
while(!ti);
ti
=
0;
sbuf
=
a;
while(!ti);
ti
=
0;
}
}
}
void
ser()
interrupt
4
{
if
(ri)
{
ri
=
0;
a
=
sbuf;
flag
=
1;
}
}
⑼ 请教51单片机串口使用:
8位你会吧,那时是一位停止位对吧,你现在用普通IO口模拟一个串口,做成一个起始,7个数据,2个停止不就行了嘛。
如果你模拟串口程序不会编,到我的网络间里有例程,是我调试通过的。简单的改下就可以了。
重点是:如何处理串口参数为7位数据!!!
那么你的外部设备和单片机通信一定得有个通信协议吧,所以说接收过来的7位数据你知道是什么吧。因为你是模拟个串口,多少位数据都可以模拟出来啊,波特率不用去管它,波特率你想是多少就可以做到多少。只要人单片机速度够快。
这次明白了吧?
⑽ 51单片机串口通信
开发板的短路帽,电源帽,换着试一下,也有可能是排线插反了。