-
2021-05-20 02:12:31
大家好,由于我刚学单片机,很多不懂,
需要一个问题 两个单片机串口通讯,a发射1
给b b点亮小灯,现在测试b接收程序没有问题,发射有问题自己,无法解决请求大家解答。
以下是程序
接收和发射
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit led=P2^6;
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void main()
{
UsartInit(); // 串口初始化
while(1);
}
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;//出去接收到的数据
if( receiveData=='1' )
{
led=0;
}
RI = 0;//清除接收中断标志位
}
接收是上面,发射是下面
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1=P3^1;
void delay(u16 i)
{
while(i--);
}
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void main()
{
UsartInit(); // 串口初始化
while(1);
}
void Usart() interrupt 4
{
u8 receiveData;
SBUF=receiveData;//将接收到的数据放入到发送寄存器
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
SBUF='1';
}
while(!k1); //检测按键是否松开
}
}
TI=0; //清除发送完成标志位
}
更多相关内容 -
51单片机利用STC-ISP下载软件时串口打开失败怎么办?
2021-01-18 18:15:0051单片机利用STC-ISP下载软件时串口打开失败怎么办?解决方案:
1、右键“此电脑”选择“管理”
2、查看是否有“端口(COM和LPT)”
a)如果有,并且之前也能下载,看下载软件的端口选时是否正确(当插不同的USB插孔时会有不同的端口号),如果还不行,可以重新拔了再插一下USB下载线,或者重启一下电脑。
b)如果没有“端口(COM和LPT)”,并且之前也不能下载,可以去下载一个驱动安装程序(CH341SER)解决,我用的USB转串口程序已上传可以到关注https://download.csdn.net/download/Boxjod/14683114下载3、如果以上方法都无法解决,可以先换一根下载线,检查是否是下载线的问题。(有些下载线可能内部损坏,可以通电但是不能作为转串口线)
-
串口打开失败!请检查指定串口是否存在或者已被打开
2021-07-25 18:41:52错误:串口打开失败!请检查指定串口是否存在或者已被打开 1、检查COM口是否冲突 解决方法: 将冲突COM口改为其他COM口号 步骤: 一、打开此电脑,点击管理 二、打开计算机管理后,打开设备管理器。 三、右键... -
stc-isp下载不了程序,电脑显示串口打开失败,显示驱动过期,请问怎么办?
2019-06-28 18:57:56![图片说明]... 从宏晶科技官网上下载了一个驱动还是不行,我是win10系统请问有没有大神youwin10的PL2303驱动,与单片机下载用的,谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢! -
电脑COM口命令51单片机串口控制IO开关输出 含源码+Proteus+工具
2021-07-28 06:21:24/* 发一个用串口命令单片机控制开关输出的小程序,如串口发送led0_open回车后,单片机点亮led0*/#include#include //后面有一个比较函数bitUART_Flag=0; //定义串口接收标志位idata unsigned char str[50];//定义一.../* 发一个用串口命令单片机控制开关输出的小程序,如串口发送led0_open回车后,单片机点亮led0 */
#include
#include //后面有一个比较函数
bit UART_Flag=0; //定义串口接收标志位
idata unsigned char str[50]; //定义一数组,用于串口接收命令缓存
unsigned char length=0; //数组长度从0开始
unsigned char ID=0; //用于查找命令数组ID
sbit led0=P1^0; //定义led接口
sbit led1=P1^1; //同上
sbit led2=P1^2; //同上
sbit led3=P1^3; //同上
sbit led4=P1^4; //同上
sbit led5=P1^5; //同上
sbit led6=P1^6; //同上
sbit led7=P1^7; //同上
code unsigned char *coun[16]= //命令数组(字符串数组必须定义为指针型),用于查找swtish case命令对应ID执行对应功能
{
{"led0_open"}, //ID 0
{"led0_close"},
{"led1_open"},
{"led1_close"},
{"led2_open"},
{"led2_close"},
{"led3_open"},
{"led3_close"},
{"led4_open"},
{"led4_close"},
{"led5_open"},
{"led5_close"},
{"led6_open"},
{"led6_close"},
{"led7_open"},
{"led7_close"} //ID 15
};
code char *com_face[19]= //分配使用 idata\xdata\code.
{
" ~★★ ★★~* \r\n",
" *★ ∴*★ * ∴°★\r\n",
"★ *°★\r\n",
"★°* 心想事成 *°★\r\n",
" ★‘& ?*°∴°°☆☆★ *°☆☆\r\n",
" ★ °∴°°☆°∴★*°☆∴新°∴*☆\r\n",
" ★*°∴°°☆★∴°∴*°年°∴*°☆\r\n",
" ★°∴★☆∴° ∴*快°∴*°☆\r\n",
" ★ ☆∴*乐°∴°☆\r\n",
" ﹨ ☆* ☆\r\n",
" ﹨ ☆\r\n",
" ﹨ │\r\n",
" ﹨/ \r\n",
" ▏\r\n",
" ﹨● \r\n",
" ■﹨\r\n",
" A.y / ﹨\r\n",
"-----------------------------------------------\r\n",
" 串口通信测试v2.0\r\n"
};
/****************************************************************************************************
// SCON D7 D6 D5 D4 D3 D2 D1 D0
// 98H SM0 SM1 SM2 REN TB8 RB8 TI RI
// SM0、SM1:串行口工作方式选择 01 为方式1、8位异步通信、波特率可变。SM2多机通讯控制位
// REN:接收允许控制位,TB8:要发送数据的第9位,RB8:接收到的数据的第9位。
// TI: 发送中断标志,RI:接收中断标志。
*****************************************************************************************************/
void init() //串口初始化
{
/******************设定定时器*********************/
TMOD=0X20; //定时器1定时器方式 工作模式2,可自动重载的8位计数器常把定时/计数器1以模式2作为串行口波特率发生器.
TH1=0XFD; //11.0592 19200MHz=9600*2
TL1=0XFD;
ET1=0; //打开定时器中断
TR1=1; //打开中时器
/*******************设定串口**********************/
SCON=0X50; //选择工作模式1使能接收,允许发送,允许接收
/*******************设定中断**********************/
EA=1; //开总中断
ES=1; //打开串口中断
/****************设定波特率加倍*******************/
PCON=0X80; //8位自动重载,波特率加倍
}
void UART_Send_Byte(unsigned char dat) //输出一个字符
{
SBUF=dat; //把数据送给sbuf缓存器中
while(TI!=1); //发送标志位 TI如果发送了为1,没发送为0,没发送等待,到了退出循环
TI=0; //到了,TI清为0
}
void UART_Send_Enter() //改送回车换行(\r\n 或 0x0d、0x0a)
{
UART_Send_Byte(0x0d);
UART_Send_Byte(0x0a);
}
void UART_Send_String(unsigned char *p) //串口发送字符串
{
EA=0;
while(*p != '\0') //字符串会以 '\0'结束存在,遇到'\0'则结束发送
{
UART_Send_Byte(*p); //发送单个字符
p++;
}
EA=1;
}
void UART_service() interrupt 4 //uart中断服务 ,4为串口中断
{
if(RI==1) //如果数据已经接收完,即RI=1
{
unsigned char m=SBUF; //m为计算机发送给串口的数据,例,open //总体思想是,计算机通知串口,我要发数据了
RI=0; //收到清0
if(m=='\r') //判断m这位数据有无\r
{
UART_Send_Enter(); //回车换行
str[length]='\0'; //数据最后位加0标志位表示发完了数据
UART_Flag=1; // 传 完 标 志 位
}
else if(m=='\n')
{ }
else if(m=='\b') //b表退格 //下面几句不要删除
{
UART_Send_Byte('\b');
UART_Send_Byte(' ');
UART_Send_Byte('\b');
length=length-1; //删除了后总长度减一
}
else
{
str[length++]=m; //比如m为open,先传0后传p,length加一
if(length>45) //命令缓存数组最大是50.
length=0; //防止接收过长错误命令造成档机
UART_Send_Byte(m); //输出 比如open
}
}
}
void Get_command_ID(unsigned char *str) //获取命令在命令数组中的ID
{
for (ID = 0; ID < 16; ID++) //"16"为命令数组的层数
{
if(strcmp(coun[ID],str)==0) //"strcmp"函数用于命令数组的命令与接收到的命令进行对比,相同结果为0.
break; //相同则结束对比
}
if (ID >= 16) //所有命令不符。
{
ID=255; //得到提示命令错误的ID
}
}
void Command_function() //得到命令对应命令数组的层数ID后执行相对功能
{
switch(ID)
{
case 0: //命令数组第1个命令
led0 = 0;
UART_Send_String("led0_open OK\r\n\r\n");
break;
case 1: //命令数组第2个命令
led0 = 1;
UART_Send_String("led0_close OK\r\n\r\n");
break;
case 2:
led1 = 0;
UART_Send_String("led1_open OK\r\n\r\n");
break;
case 3:
led1 = 1;
UART_Send_String("led1_close OK\r\n\r\n");
break;
case 4:
led2 = 0;
UART_Send_String("led2_open OK\r\n\r\n");
break;
case 5:
led2 = 1;
UART_Send_String("led2_close OK\r\n\r\n");
break;
case 6:
led3 = 0;
UART_Send_String("led3_open OK\r\n\r\n");
break;
case 7:
led3 = 1;
UART_Send_String("led3_close OK\r\n\r\n");
break;
case 8:
led4 = 0;
UART_Send_String("led4_open OK\r\n\r\n");
break;
case 9:
led4 = 1;
UART_Send_String("led4_close OK\r\n\r\n");
break;
case 10:
led5 = 0;
UART_Send_String("led5_open OK\r\n\r\n");
break;
case 11:
led5 = 1;
UART_Send_String("led5_close OK\r\n\r\n");
break;
case 12:
led6 = 0;
UART_Send_String("led6_open OK\r\n\r\n");
break;
case 13:
led6 = 1;
UART_Send_String("led6_close OK\r\n\r\n");
break;
case 14:
led7 = 0;
UART_Send_String("led7_open OK\r\n\r\n");
break;
case 15:
led7 = 1;
UART_Send_String("led7_close OK\r\n\r\n");
break;
case 255:
UART_Send_String("Error:-999 --> Command error\r\n\r\n");
break;
default:
break;
}
}
void main(void)
{
unsigned char i;
P0=0xff;
init();
for (i = 0; i < 19; i++)
{
UART_Send_String(com_face[i]);
}
UART_Send_Enter();
UART_Send_String("初始化......... OK!\r\n");
while(1)
{
if(UART_Flag==1) //接收标志位表示接收完成
{
Get_command_ID(str); //查检所收命令与命令数组所对应的导数
Command_function(); //执行功能
length=0; //长度清0
// memset(str,'\0',50); //清空str命令缓存数组(memset函数须包含“string.h”头文件)
UART_Flag=0; //标志位清0
}
}
}
-
宏晶STC单片机使用STC-ISP串口烧录失败的原因与解决方法汇总.pdf
2020-08-19 17:05:13宏晶STC单片机使用STC-ISP串口烧录失败的原因与解决方法汇总 -
Linux与单片机串口通信
2021-05-14 01:19:37Windows下PC与单片机进行串口通信时,几乎什么都是现成的:串口调试助手、usb转串口驱动,而且有着丰富的资料供自己参考(这是玩linux时没法比的≥﹏≤)。也许是书上讲的知识太浅,三天时间,基本上能通过串口,从PC... -
上位机打开串口失败怎么回事?
2021-08-17 17:18:11打开串口失败,在输出出窗口报错:在 System.IO.IOException 中第一次偶然出现的“System.dll”类型的异常 -
STC89C51单片机串口程序下载失败总结
2017-09-26 16:31:20STC89C51单片机串口程序下载失败总结个人实践总结(win7 64): 电脑配置的问题 串口下载软件的问题 单片机本身的问题 硬件电路的问题关于电脑配置的问题:其他一切正常,只是在该电脑无法下载程序,可以在“禁用驱动... -
stm32串口通信失败的原因
2021-02-26 19:53:47一、接收乱码 二、串口占用 三、硬件问题 -
51单片机——串口1收发
2021-03-16 10:50:24修改串口初始化,不加这几个没法接收 TI=0; RI=0; REN=1; //不开启这个无法接受数据 //PS=1; //提高串口中断优先级 ES=1; //开启串口中断使能 EA=1; 2.问题 修改后发现有不合理的地方,待后期修改,如下图... -
4.3 51单片机-串口通信
2021-10-29 11:19:344.3 串口通信 4.3.1 通信的概念 通信一词按照传统的理解就是信息的传输与交换。 对于单片机来说,通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”;没有通信,单片机所... -
MATLAB与51单片机进行串口通信详解
2022-04-22 11:07:36目录一、51单片机与电脑进行串口通信二、MATLAB串口通信函数三、串口属性四、示例Demo4.1 MATLAB接收单片机发来的数据4.2 MATLAB向单片机发送数据控制LED五、总结 一、51单片机与电脑进行串口通信 关于51单片机与... -
windows通信端口初始化失败_触摸屏与单片机串口通信测试
2020-10-19 19:45:03工业现场在使用触摸屏的时候,与第三方控制器进行通信连接的时候,一般都是使用成熟的通信协议进行通信...当然,这是触摸屏通信的常规使用方法,这里就使用自定义协议如何实现触摸屏与控制器(如,单片机)的通信方法... -
单片机 | keil4串口CH430驱动安装失败
2018-12-01 10:55:46好了,希望这篇文字可以帮助你解决所遇见的共同问题,如有不懂得可以关注我微信公众号【ID:mountxing】,一个热衷开源,51单片机,数模电路,STM32单片机,Linux 、嵌入式学习成长的公众号。 转载备注文章... -
51单片机标准串口使用教程及常见问题
2022-01-13 11:51:0951标准串口使用教程及常见问题 -
keil4单片机串口通信
2020-12-16 23:02:56keil4单片机串口通信代码 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; void UsartInit() { SCON=0X50... -
Python实现的简单的单片机串口助手程序
2021-01-14 05:53:06项目中遇到需要用电脑通过串口来控制单片机IO口,查询了一些资料,可以使用python来实现简单的串口通信,所以用python实现了一个简单的单片机串口助手,可以将串口助手发往单片机的字符回传给串口助手。也可以将配合... -
MATLAB 串口系列(一、串口的打开和关闭)
2021-11-10 11:14:23MATLAB经常用于和单片机的串口进行通信,简单记录下MATLAB串口的打开和关闭。MATLAB版本为比较新的2021a,使用serialport函数进行打开操作,关闭则用delete。 % 定义串口参数 serialComName = 'COM38'; ... -
详细讲解32F103/MS51单片机串口ISP程序下载的方法和操作步骤
2021-07-19 09:22:01相信很多老的工程师在学习或项目开发8051系列单片机的时候,使用最多的单片机下载方式应该就是串口UART下载了,在芯片厂家没有特殊定义功能的情况下,芯片的程序下载串口方式最为方便;因为51系列单片机片上的资源... -
Qt串口操作-打开串口
2020-06-11 03:27:59Qt使用QSerialPort来操作串口,使用时需要在.pro文件...以下为打开串口的代码: #include "mainwindow.h" #include <QApplication> #include<QDebug> #include<QSerialPort> #include<QSerial -
STM32最小系统版串口下载/串口通信失败
2020-10-07 20:44:44在使用STM32最小系统版,芯片是STM32F103C8T6,串口不显示。 问题解决 首先参考一些讨论 https://www.icxbk.com/ask/detail/19477.html https://blog.csdn.net/weixin_44147894/article/details/107682457 ... -
深入理解51单片机串口通信及通信实例
2020-12-24 10:20:47串口通信的原理串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现... -
java与51单片机串口通信
2018-03-16 13:04:41起因是做微信跳一跳物理辅助,用java控制单片机,单片机控制马达点击屏幕,这里协议所以只是简单的电脑端发送一个字节,单片机接收到这个字节后设置p0口,并返回收到的字节。串口java端库用的RXTXcomm.jar,注意还要... -
单片机串口通信中由晶振频率导致的定时器溢出误差所引发的通信失败
2018-04-18 00:10:20单片机:STC89C52开发板:普中科技HC6800-ES V2.0串口调试助手:sscom32烧录软件:STC 第一次进行串口通信的时候烧录的程序参照的是买板子时送的资料的例程,虽然最后助手界面显示PC机接收到单片机传来的信号,但是... -
Java 单片机串口通信
2018-05-25 14:49:55在利用java做串口通信之前,需要在你的java工程中导入一个jar包,并在jdk中加入两个dll动态链接库文件。将rxtxParallel.dll和rxtxSerial.dll放在jdk的bin目录当中,将RXTXcomm.jar放在当前工程的lib文件夹中并在构建... -
打开串口失败! Chinese:串口已被其它程序打开或该串口不存在
2012-09-01 11:44:58很奇怪的一见事,在我用stc-isp下载代码时,在按下download时老是出现--打开串口失败! Chinese:串口已被其它程序打开或该串口不存在。无论怎么努力,都不能解决这个问题。然后我就在网上找解决办法,但是网上提供的... -
platformio stm32 串口通信失败,已解决
2022-05-09 15:26:20platformio stm32 串口通信失败前言遇到的问题一 .创建的工程无法编译成功二 .编译好的工程无法下载到stm32三 . stm32串口用不起来 前言 最近是准备入手ESP32,板子还没到,不过看着platform io支持的平台还挺多的,... -
c#编写的串口助手打开串口32单片机立刻黑屏,急求
2019-10-03 21:00:04using Microsoft.Win32; using System; using System.IO.Ports; using System.Windows.Forms;...using System.Collections.Generic;... RegistryKey keyCom = Registry.Local... MessageBox.Show("串口打开失败!"); } ...