51单片机我使用串口通信可以控制模板,但直接用单片机控制模板的时候却不行。。有没有大佬救一下萌新。

来自:    更新日期:早些时候
51单片机双机串口通信 一个单片机控制12864显示程序模板~

我这里只有 RS-485在单片机多机通信中的应用的,不过读懂程序就可以控制12864,不是很难,我同学都有做成功。
1、RS-485在单片机多机通信中的应用
主机程序
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit p10=P1^0;
sbit p11=P1^1;
void main(void)
{
uchar i=0;
TMOD=0X20;//设置定时器1工作模式2
TH1=0XFF;
TL1=0XFF; //这里是假设晶振是11。0592的 波特率设置57600
SCON=0X40; //设置方式1 只能发送 不能接受
PCON=0X80;
TR1=1; //启动T1
while(1)
{
if(p10==0)
{
SBUF=0x11; //次LED单片机的针头
while(TI==0);
TI=0;
while(p10==0);
}
if(p11==0)
{
SBUF=0x12; //次闪单片机的针头
while(TI==0);
TI=0;
while(p11==0);
}
}

}
从机2
#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
bit flag=0;
sbit p20=P2^0;
void main(void)
{ uchar i=0;
TMOD=0X20;
TH1=0XFF;
TL1=0XFF; //这里晶振频率同主机是11。0592的波特率设置57600
SCON=0X50; //设置方式1 只能发送 不能接受
PCON=0X80;
TR1=1; //启动T1
while(1)
{
while(RI==0);//采用查询的方法判断时候接受到数据
RI=0;
i=SBUF;
if(i==0x12)
p20=~p20;
i=0x00;
}
}
从机1
RS BIT P1.7
RW BIT P1.6
E BIT P1.5
KOU EQU P2
ORG 0030H
LOP: MOV SP,#5fH
MOV TMOD,#20H
MOV 40H,#00H
MOV TH1,#0FFH
MOV TL1,#0FFH
MOV SCON,#50H
MOV PCON,#80H
SETB TR1
ACALL LCD_MODEL ;初始化的模块
MOV KOU,#81H
ACALL READY
MOV DPTR,#TAB
ACALL WRITE ;显示的模块
MOV P2,#0C1H
ACALL READY
MOV DPTR,#TAB1
ACALL WRITE
xt: jnb RI,$
CLR RI
x: MOV A,SBUF
CJNE A,#11H,rel
INC 40H
MOV A,40H
CJNE A,#10,XTG
MOV 40H,#0
XTG: MOV P2,#0C9H
ACALL READY
MOV DPTR,#TAB2
ACALL WRITEx
AJMP xt
rel: ajmp xt
WRITEx:MOV A,40H
MOVC A,@A+DPTR
MOV KOU,A
ACALL WRITE1
RET
WRITE: MOV A,#00H
MOVC A,@A+DPTR
CJNE A,#0FFH,s
AJMP EXIT
S: MOV KOU,A
ACALL WRITE1
INC DPTR
AJMP WRITE
EXIT: RET
WRITE1:SETB RS
CLR RW
CLR E
ACALL DELAY
SETB E
RET
LCD_MODEL: MOV KOU,#01H
ACALL READY
MOV KOU,#03H
ACALL READY
MOV KOU,#00000110B
ACALL READY
MOV KOU,#00001100B
ACALL READY
MOV KOU,#38H
ACALL READY
RET
READY: CLR RS
CLR RW
CLR E
ACALL DELAY
SETB E
RET
DELAY: MOV KOU,#0FFH
CLR RS
SETB RW
CLR E
NOP
SETB E
JB KOU.7,DELAY
RET
TAB: DB "Proteus 7.1" ,0FFH ;显示字库
TAB1: DB "Count:" ,0FFH
TAB2: DB "0123456789"
END
仿真图

2 两个单片机串行通信
单片机1的通信程序
/**************************************************************************
两个MCU通信
实现功能是 U1的按下的键,U2把对应的键用LED显示
*********************************************************************/
#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
void main(void)
{ uchar i=0;
TMOD=0X20;
TH1=0XFF;
TL1=0XFF; //这里是假设晶振是11。0592的 波特率设置57600
SCON=0X40; //设置方式1 只能发送 不能接受
PCON=0X80;
TR1=1; //启动T1
P1=0XFF;
while(1)
{

while(P1==0XFF); //判断是否有键盘按下
i=P1; //读取键值
SBUF=i;
while(TI==0);
TI=0;
while(P1!=0xff);
}
}
单片机2的通信程序
/*************************************************************************************
单片机2通信程序 两个MCU通信
实现功能是 U1的按下的键,U2把对应的键用LED显示
****************************************************************************************/
#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
void main(void)
{
uchar i=0;
TMOD=0X20;
TH1=0XFF;
TL1=0XFF; //这里是假设晶振是11。0592的 波特率设置57600
SCON=0X50; //设置方式1 只能发送 不能接受
PCON=0X80;
TR1=1; //启动T1
while(1)
{ while(RI==0);//采用查询的方法判断时候接受到数据

i=SBUF;
P1=i;
RI=0;
}
}

程序有问题,我们来分析一下,程序都是从主程序main函数开始,程序往下执行,先调用usartinit()函数,这个初始化函数执行完,就进入了一个while死循环中,并没有调用下面的usart()函数,而且函数名usart()旁边的这个interrupt 4 是什么鬼

利用串口通信控制!这类问题的解决方法是!
首先先用串口助手发送数据去控制接收端!如果没问题!
第二就是单片机程序运行起来之后!接到串口助手上!看发送的数据是不是你要的数据

看你的描述!第一步已经没有问题了!第二步,你可以把单片机的串口接到电脑上!看看发送的数据对不对!在这里!就是看发送的数据是不是十六进制的 AA 02 00 AC。
当然最重要的是波特率,数据位数,是否有校验位 还有是否都是ttl电平!

当然你可以把程序都贴出来让大家帮你看看!

图里的代码看不出问题的
把你初始化那部分发出来啊


51单片机我使用串口通信可以控制模板,但直接用单片机控制模板的时候却不行。。有没有大佬救一下萌新。视频

相关评论:
  • 18932813831我手上有一套51的单片机板子,怎么知道其串口通信是否正常?
    盛米别autm823 说的对!1、自发自收,要短接 Tx Rx 2、建立一个串口通信 的 环境,如 与电脑相连,再相互发送 或者 接收 数据

  • 1893281383151单片机串口通信是全双工的,但是为什么又说它的发送和接受不可以同时进...
    盛米别51单片机串口通信是全双工的,发送和接受可以同时进行。不可以同时进行的是半双工。全双工方式分别由两根不同的传输线传送数据时,通信双方都能在同一时刻进行发送和接收操作,通信系统的每一端都设置了发送器和接收器,因此,能控制数据同时在发送和接受两个方向上传送。半双工使用同一根传输线既作接收又...

  • 1893281383151单片机串口通信,PC可以接收单片机信息,单片机收不到PC发送的信息_百...
    盛米别单片机的RXD和TXD是TTL电平的,PC的RS232电平的。PC是没有直接外接的TTL电平的,只有RS232的。所以电平需要转换的。

  • 18932813831单片机串口通信需要用哪些寄存器
    盛米别51单片机串口工作时,涉及到以下三个寄存器:1.scon——串行口工作寄存器 2.ie——中断允许寄存器(如果用到中断方式的话)3.pcon——其中最高位smod与波特率有关 另外定时器有t0和t1,而t1在方式1,方式3时需要用到,以改变波特率。

  • 1893281383151单片机与计算机串口通信无法读出数据?
    盛米别答:1 判断你的硬件有没有问题;方法是 用跳线讲串口的pin2 和pin3短接,用串口调试助手发送数据看调试助手能不 能自己收到,能就说明是单片机程序有问题 2 你检查你的波特率是生成程序是否正确, 中断和主程序用 1楼给你程序,我看了 没问题。这样就可以实现串口通信了 ...

  • 1893281383151单片机通过串口实现数据的发送与接收程序
    盛米别串口收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的51单片机,其内部寄存器配置是不同的。一般来说,过程如下:1,配置串口参数、波特率等,开启串口中断;void Init_UART(){ } 2,中断函数里写中断响应函数,根据接收的指令或者数据,...

  • 18932813831C语言51单片机串口通信程序求教
    盛米别串口通讯,首先设置波特率,再设置串口模式,之后就可以收发数据了。比如:init(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SCON=0x50;}send(unsigned char dat){SBUF=dat;while(TI==0);TI==0;}unsigned char recive(){unsigned char dd;if(RI) { dd=SBUF; RI=0; } return(...

  • 18932813831串口唤醒单片机
    盛米别想用串口通信控制51单片机进入待机状态&退出待机状态 void UART() interrupt 4 { if(RI==1) { RI=0; h=SBUF; if(h=='1') } PCON=0x01; } if(h=='2') { PCON=0... 展开 aqpxy1991 | 浏览614 次 |举报 我有更好的答案推荐于2017-12-16 15:19:29 最佳答案 51掉电模式,可由外部中断...

  • 18932813831看了51单片机的串口通信,有一些疑问??
    盛米别通常数据都是一帧一帧地发送的,接收方收到数据后并存于事先开辟的缓冲空间。当收到标志性的数据后即时转移这些数据,并腾出事先开辟的缓冲空间接收后面的数据。程序在处理数据的同时,串口依然在接收,将接收的数据再次存于已经腾出的缓冲空间。所以在串口中断服务中,不能有太多的程序去处理,因为处理...

  • 18932813831串口通信的问题:51单片机跟上位机(电脑)通信,上位机用串口调试...
    盛米别如果单片机有串口那就是简单配置寄存器的问题,不然就要IO口模拟实现了

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网