打印

串口连接问题

[复制链接]
2196|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
supernan|  楼主 | 2021-7-4 13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是877A,往串口发送一组数据。在调试的过程中发现一个问题,单片机发送数据后,如果上位机没运行,过一会后,可能十几分钟,上位机运行连接串口时会出现连不上串口 的提示,显示没有此串口或此串口被占用

使用特权

评论回复
沙发
llia| | 2021-7-4 13:27 | 只看该作者
还在正常工作?

使用特权

评论回复
板凳
supernan|  楼主 | 2021-7-4 13:29 | 只看该作者
嗯,因为的的LCD1602还能正常显示AD转换的数值。

使用特权

评论回复
地板
wyjie| | 2021-7-4 13:31 | 只看该作者
关闭后再开

使用特权

评论回复
5
supernan|  楼主 | 2021-7-4 13:33 | 只看该作者
如果将单片机关闭后再开,就能正常连接

使用特权

评论回复
6
supernan|  楼主 | 2021-7-4 13:35 | 只看该作者
上位机能显示正确的数值。上位机如果一直运行的话好像没问题

使用特权

评论回复
7
supernan|  楼主 | 2021-7-4 13:38 | 只看该作者
用的是USB转串口线

使用特权

评论回复
8
zhuww| | 2021-7-4 13:41 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
9
supernan|  楼主 | 2021-7-4 13:43 | 只看该作者
// PIC16F877A 配制字设置
// CONFIG
#pragma config FOSC = HS        // 高速晶振4M以上
#pragma config WDTE = OFF       // 看门狗关闭
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#include <xc.h>
#include "LCD1602.h"
#include "Uasrt.h"

//发送的数据
unsigned char Data_Buf[10] = {0xAA, 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA};

使用特权

评论回复
10
supernan|  楼主 | 2021-7-4 13:45 | 只看该作者
/---------------------------------------
//A/D转换用寄存器设置
unsigned int ADbuf = 0; //10位A/D转换,设置16位的unsigend int型寄存器用来暂存A/D转换结果
//---------------------------------------


//A/D中断函数
void __interrupt() ISR(void)
{
    if (ADIE && ADIF)
    {
        ADIF = 0;
        Data_Buf[3] = ADRESH;
        Data_Buf[4] = ADRESL;
        ADbuf = ADRESH * 256 + ADRESL; //将10位A/D转换结果暂存在ADbuf        
    }
}

使用特权

评论回复
11
jlyuan| | 2021-7-4 13:47 | 只看该作者
//名称: 主函数

void main(void) //主函数,单片机开机后就是从这个函数开始运行
{
    TRISA = 0B11111111; //初始化RA5-RA0的输入输出方向
    TRISB = 0B11000111; //初始化RB7-RB0的输入输出方向
    TRISD = 0B00000000; //初始化RD7-RD0的输入输出方向
    PORTA = 0B00000000; //初始化RA5-RA0数值
    PORTB = 0B00000000; //初始化RB7-RB0的数值
    PORTD = 0B00000000; //初始化RD7-RD0的数值

    RC7 = 0;
    TRISC7 = 0;

    LCD1602_init(); //调用1602液晶初始化函数
    LCD1602_DispString(2, 0, "--AN0 TEST--");
    LCD1602_DispString(2, 1, "   AD=");

    //A/D参数设置
    ADCON1 = 0B10000000; //设置数据右对齐
    ADCON0 = 0B00000001; //选择AN0通道准备进行A/D转换,启动A/D模块

    ADIE = 1; //允许产生AD中断
    ADIF = 0; //A/D标志位清零
    PEIE = 1; //允许外设中断
    GIE = 1; //打开总中断

    InitUSART();

    while (1) //死循环,单片机初始化后,将一直运行这个死循环
    {
        GO_DONE = 1;
        ADbuf =Data_Buf[3] * 256 + Data_Buf[4];
        //***1602液晶显示0-255***
        LCD1602_Disp(8, 1, (ADbuf / 1000) + '0'); //在第2行的第9列显示仟位
        LCD1602_Disp(9, 1, ((ADbuf % 1000) / 100) + '0'); //在第2行的第10列显示百位
        LCD1602_Disp(10, 1, (ADbuf % 100) / 10 + '0'); //在第2行的第11列显示十位
        LCD1602_Disp(11, 1, ADbuf % 10 + '0'); //在第2行的第12列显示个位

        for (char i = 0; i < 10; i++)
        {
            Send_Char(Data_Buf[i]);
        }

使用特权

评论回复
12
chuxh| | 2021-7-4 13:49 | 只看该作者
用的是USB转串口工具  跟  877A通信?

使用特权

评论回复
13
dingy| | 2021-7-4 13:51 | 只看该作者
怀疑是工具的问题.

使用特权

评论回复
14
supernan|  楼主 | 2021-7-4 13:53 | 只看该作者
用的是电脑上位机跟877A通信,但是发现有个问题。就是单片机开机后一段时间后不运行上位机,再开上位机时会出现不能打开串口,把单片机关机后再开就好了。不知道从哪开始判断故障。串口线只有一根,没法换!

使用特权

评论回复
15
renyaq| | 2021-7-4 13:56 | 只看该作者
你就再买一个线..带隔离的usb转串口线....

使用特权

评论回复
16
supernan|  楼主 | 2021-7-4 13:59 | 只看该作者
现在决得有可能是串口线的问题,出现问题时在设备管理器能看到串口,但是用上位机不能打开

使用特权

评论回复
17
supernan|  楼主 | 2021-7-4 14:05 | 只看该作者
用串口助手也打不开,抽掉串口线后再插上就好了。

使用特权

评论回复
18
yszong| | 2021-7-4 14:07 | 只看该作者
显示没有此串口或此串口被占用

使用特权

评论回复
19
stly| | 2021-7-4 14:09 | 只看该作者
这个百分之百是U转串的问题

使用特权

评论回复
20
supernan|  楼主 | 2021-7-4 14:11 | 只看该作者

其实还是不大明白,我再琢磨琢磨吧,多谢了哈先

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

730

主题

10412

帖子

6

粉丝