串口号过大
时间:2022-04-17 14:36 | 分类: 句子大全 | 作者:金善愚 | 评论: 次 | 点击: 次
串口号过大
1. win7下显示 找不到串口COM1或者串口被占用 请问我该怎么办
win7下显示 找不到串口COM1或者串口被占用是设置错误造成的,解决方法为:
1、回到电脑主界面,右键单击这台电脑--属性。
2、点击设备管理器进入,如下图所示 。
3、设备管理器找到冲突的串口,如下图所示。
4、右键单击串口,选择属性,如下图所示。
5、属性面板点击端口选项卡,如下图所示。
6、端口设置界面点击高级设置,如下图所示。
7、高级设置界面,点击i串口编号后面的箭头,选择空余未运行的串口,如下图所示 。
8、闲置串口选定后,点击确定即可。
2. 两个设备占用一个串口怎么解决
解决方法如下:
1、打开注册表中的 “HKEY_LOCAL_MACHINE\hardware\DeviceMap\SerialComm”,这时发现有以下两个键: 其中应该就是USB串口,应为在设备管理器中显示串口号就是COM2。
2、新建两个健: \Device\Serial0 值为 COM1 \Device\Serial1 值为 COM2 建好后如下图所示:
3、打开串口调试软件发现能找到串口了,在软件中选择好正确的串口后,软件就可以用了!
4、有的USB串口安装好驱动程序后,串口后并不是COM1或COM2,串口号的数值会比较大,会出现COM4、COM5等更大的串口号,为了出现更大的串口号时也能使用串口,我用同样的方法建立了8个注册表键
注意:虽然在设备管理器中可以任意改动USB串口的串口号,但是改动后刚才新建的8个键就会有重复,在串口软件中显示的串口号也有重复,导致选择重复的串口号时软件提示串口被占用。因此在使用过程中,如非必要强烈建议不要改动串口号!
3. 如何清除Win7中被占用的COM口 串口
提问
宝宝知道
火爆的备孕、怀孕、育儿社区
立即下载
win7下显示 找不到串口COM1或者串口被占用 请问我该怎么办
十分钟内有问必答,下载百度知道立即下载
专业回答
解决方法如下:
1、打开注册表中的 “HKEY_LOCAL_MACHINE\hardware\DeviceMap\SerialComm”,这时发现有以下两个键: 其中应该就是USB串口,应为在设备管理器中显示串口号就是COM2。
2、新建两个健: \Device\Serial0 值为 COM1 \Device\Serial1 值为 COM2 建好后如下图所示:
3、打开串口调试软件发现能找到串口了,在软件中选择好正确的串口后,软件就可以用了!
4、有的USB串口安装好驱动程序后,串口后并不是COM1或COM2,串口号的数值会比较大,会出现COM4、COM5等更大的串口号,为了出现更大的串口号时也能使用串口,我用同样的方法建立了8个注册表键
4. win7串口解除占用后重启电脑又被占用了,怎么解决
电脑 -->>; 开始 -->>; 运行中输入:regedit -->>; 回车打开系统注册表 -->>; 然后修改注册表对应的目录值:
HKEY_LOCAL_MACHINE
-->> SYSTEM
-->> CurrentControlSet
-->> Control
-->> COM Name Arbiter
把ComDB的十六进制数据修改为0或者删除ComDB后 打开设备管理器中的COM口选项后查看占用的是否被清除。
5. 电脑串口号无缘无故自己改变
电脑重启的原因及解决方法:
1、有可能是BIOS的设置问题,进入BIOS里恢复默认设置或把主板的电池拿出来,反扣放电,等5分钟在反装进去即可。目的:是BIOS的设置恢复默认值,排除BIOS的散热预设自动重启或关机现象。
2、如果发生重启前下载了应用程序软件或运行程序软件时发生重启,则可能是程序软件引起的重启,一般将程序软件卸载再重新安装,如果故障依旧,则说明程序软件本身有错误,不能使用。
3、在安全模式中用杀毒软件查杀病毒,如果重启故障排除,则是病毒造成的重启故障。
4、开机按F8进入安全模式后在退出,在进入正常模式。也可用系统自带的系统还原功能进行还原,如果重启故障排除,则是系统文件受损造成的重启。
5、如果故障依旧,接着检查电源,电源品质差,老化或功率过小,无法满足电脑各配件的供电需求,可更换大功率高质量的电源,如果故障排除,则是电源引起的重启故障。
6、如果电脑在进行热插拔某设备时出现重启,可按第3项解决。
7、接着使用排除法,检查内存、显卡、CPU、CPU风扇、主板等。
8、检查内存,内存质量不过关、散热不良、超频、不同品牌的内存混插及CAS值设置过低等都可引起电脑重启,可用替换法测试内存,并将BIOS中对内存参数进行相应调整。
9、检查主板,主板老化、电容失效或爆浆、主板与机箱背板发生短路等均可引发重启,可将主板从机箱取出检查或测试,接着检查CPU风扇散热片的底部硅胶是否变干,如果变干,将CPU风扇上的硅胶清理干净,然后重新涂上好的硅胶即可。接着检查CPU的风扇转动,及CPU的温度是否正常。
10、清洁法:是通过对电脑主机中部件的灰尘进行清洁来排除故障的方法。灰尘是也可造成电脑自动重启故障的因素之一,灰尘可以造成部件老化、引脚氧化、接触不良及短路等故障。对于灰尘造成的这些故障,一般使用清洁法比较有效。
11、改变系统默认自动重启:右击我的电脑/属性/高级/启动和故障恢复中的设置/将系统失败中的“自动重新启动”前的勾去掉,然后按确定和应用重新启动电脑即可。
12、供电系统不稳定,也可造成重启故障的发生,可以考虑配置一台带稳压功能的UPS后备电源。
如果是软件或系统引起的,修复系统试试:
6. com驱动电脑做完系统后com4变成com15了,数值太大刷机工具只到
RS232串口端口号修改方法
COM口号显示很大,如何修改?
许多客户反应:使用JMDM系列RS232串口控制器时,JMDM上位机软件中可选的RS232串口号最大到“串口9”,而电脑里COM端口号已是20啦!不知怎么办?
解决办法:修改一下电脑的RS232串口的端口值即可,具体步骤如下:
1、我的电脑-右键--属性--硬件--设备管理器--电池下面有个“端口(COM和LPT)”,看看其下面USB Serial Port(COM几)【备注:这种使用了USB转RS232串口线】--右键属性--port setting--Advanced---COM port number--改好后确定退出。
2、再打开 我的电脑-右键--属性--硬件--设备管理器--电池下面有个“端口(COM和LPT)”,看看其下面显示的端口号已改为新的。
应用串口中断+定时中断实现串口超时接收数据包的方法代码分享
上节分享了串口发送一串数据到上位机及Printf串口输出重定向的实现的代码,本节分享下视频课程:单片机串行口定时中断实现超时接收一串数据的通用编程框架中的串口超时接收代码,视频课程的具体链接:https://www.ixigua.com/6843790816306004492。关于串口接收一帧数据及串口接收一串数据的基础的实现代码,就不再单独贴出了,这两个功能的代码都比较简单,需要了解基础的同学,可以参见前两期的视频课程单片机应用之单片机串行口从上位机接收一帧数据的编程实现方法和单片机应用之串行口从上位机接收一串数据的编程实现,视频课程的链接分别为:https://www.ixigua.com/6843035850968662539,https://www.ixigua.com/6843418308113334787。本次分享的代码还是有一定的实用性的,只有掌握了超时接收,后面大家学习RS485及MODBUS通信协议的时候,才会更加轻松一些。超时接收串口数据,也是我们工程中经常使用的一种程序设计方法,当然,此处的代码仅仅是完成接收数据包的功能,并没有任何的通信协议在里面,后面会分享关于自定义通信协议及通信协议解析的相关的程序代码,欢迎关注。另外,由于51单片机的内存有限,接收缓冲区并不能开辟的太大,同时因为没有采用循环队列,所以接收数据的字节数需要进行限制。关于循环队列,大家可以在网上找到相关的模块文件,只需要适当的移植,就可以完成相应的功能,此处不再过多介绍。超时接收的原理,大家要根据代码适当的思考下程序的执行流程,加深理解,主要是需要注意的是在串口中断中每接收一帧数据,就会把超时计数器清零,使其长不大,同时,在定时器中断中,又会累加该计数器,当没有新的数据帧过来时,自然该计数器会长大,当超过一定的时间,我们就认为是一包数据接收完成。如果有不是特别理解的,可以在视频课程中寻找答案,课程中有具体的分析和讲解。话不多说,上代码。主要代码包括main.c,uart.c,uart.h。delay.c和delay.h,前期代码已经有分享过,就不再贴出了。
//main.c/****************************************************程序功能:串口中断+定时中断实现超时接收串口数据 上位机发送一串数据,单片机串口接收并返回接收的数据 配置串口,遵循“9600,N,8,1” 波特率:9600bps @11.0592MHz 无校验位:N 数据位:8 停止位:1****************************************************/#include <reg51.h>#include "delay.h"#include "uart.h"void Timer0Init(void);void main(){Timer0Init();//定时器初始化UartInit();//串口初始化EA = 1;//开总中断 //提示信息printf("Wait for Serial Communication Test Start.\r\n");printf("Please Send a string of data:\r\n");DelayXms(100);while(1){if(recv_flag)//如果接收到数据{recv_flag = 0;//清零接收标志位start_timer = 0;//关软件定时器sendString(recv_buf);//处理数据clr_recvbuffer(recv_buf);//清除缓冲buffer}}}void Timer0Init(void)//1毫秒@11.0592MHz{TMOD &= 0xF0;//设置定时器模式TMOD |= 0x01;//设置定时器模式TL0 = 0x66;//设置定时初值TH0 = 0xFC;//设置定时初值TF0 = 0;//清除TF0标志ET0 = 1;//开定时器0中断TR0 = 1;//定时器0开始计时}//定时器中断服务函数void timer0_ISR() interrupt 1{TR0 = 0;if(start_timer == 1)//如果软件定时器标志位置1{recv_timer_cnt++;//1、累加定时时间计数器if(recv_timer_cnt > MAX_REV_TIME)//2、判断定时时间是否超过了设定的最大的阈值, //超过则说明等待一段时间后没有新的数据到,我们 //判断一包数据接收完毕{recv_timer_cnt = 0;//3、清除定时计数器 处理数据 清除buffer(放到数据处理之后)recv_cnt = 0;recv_flag = 1;//置接收完成标志}}TL0 = 0x66;//设置定时初值TH0 = 0xFC;//设置定时初值TR0 = 1;//打开定时器}
//uart.c#include "uart.h"//全局变量定义unsigned char recv_flag = 0;//接收标志unsigned char start_timer = 0;//软件定时器启动标志unsigned char recv_buf[MAX_REV_NUM];//接收缓冲区unsigned char recv_cnt;//接收字节计数器unsigned char recv_timer_cnt;//超时计数器//串口初始化,可使用配置工具生成void UartInit(void)//9600bps@11.0592MHz{PCON &= 0x7F;//波特率不倍速SCON = 0x50;//8位数据,可变波特率TMOD &= 0x0F;//清除定时器1模式位TMOD |= 0x20;//设定定时器1为8位自动重装方式TL1 = 0xFD;//设定定时初值TH1 = 0xFD;//设定定时器重装值ET1 = 0;//禁止定时器1中断ES = 1;TR1 = 1;//启动定时器1}//发送一个字节void sendByte(unsigned char dat){SBUF = dat;while(!TI);TI = 0;}//发送字符串void sendString(unsigned char *dat){while(*dat != '\0'){sendByte(*dat++);}}//串口重定向char putchar(char c){sendByte(c);return c;}//清空接收缓冲区void clr_recvbuffer(unsigned char *buf){unsigned char i;for(i = 0;i<MAX_REV_NUM;i++){buf[i] = 0;}}/*************************************1、中断服务函数一定是一个没有返回值的函数2、中断服务函数一定是没有参数的函数3、中断服务函数函数名后跟关键字 interrupt 4、interrupt n 0 - 4 5个中断源 8*n + 0003H 0003H INT0 000BH T0 0013H INT1 001BH T1 0023H ES5、中断服务函数不能北主程序或其他程序所调用6、 n 后面 跟 using m (0 - 3 )工作寄存器组***************************************/void uart_ISR() interrupt 4{if(RI){RI = 0;start_timer = 1;//1、每接收一帧数据的时候,打开软件定时器,去计数if(recv_cnt < MAX_REV_NUM)//因未采用循环队列,因此需要限制接收字符数{recv_buf[recv_cnt] = SBUF;//2、接收数据到数据缓冲区,注意缓冲区的大小范围问题recv_cnt++;}else{recv_cnt = MAX_REV_NUM;}recv_timer_cnt = 0;//3、每接收一帧数据,记得把定时计数器清零 相当于是喂狗信号 //但是在定时中断里面会不断累加}if(TI)//因未用发送中断,此处也可注释{TI = 0;}}
//uart.h#ifndef __UART_H__#define __UART_H__#include <reg51.h>#include <stdio.h>#define MAX_REV_NUM 20 //接收最大字节数#define MAX_REV_TIME 5 //超时时间5*1ms = 5ms,可根据实际需要调整extern unsigned char start_timer;extern unsigned char recv_buf[MAX_REV_NUM];extern unsigned char recv_cnt;extern unsigned char recv_timer_cnt;extern unsigned char recv_flag;void UartInit(void);void sendByte(unsigned char dat);void sendString(unsigned char *dat);void clr_recvbuffer(unsigned char *buf);#endif
通过proteus进行相关的仿真调试的结果如下图所示,借助虚拟串口工具,通过上位机串口调试助手,发送一串数据,单片机可以正常接收到该数据包,并将该数据包发送回上位机。大家可以根据自己的功能需求,进行相应的接收数据后的业务逻辑处理工作,举一反三。当然由于水平有限,代码难免存在不足之处,欢迎一起交流讨论,继续优化。
proteus仿真界面
虚拟串口终端监控界面
上位机串口调试助手(借助虚拟串口工具和单片机通信)