如何解决单片机usb转串口的灵敏问题

控制/MCU

1811人已加入

描述

写这篇博客,首先检讨一下自己,因为以前串口的程序,也和步进电机一样,时灵时不灵,我现在终于知道这是为什么了,因为51上有三个串口,一个公口,一个母口,一个usb转串口,这样的话,串口有3个了,我手头上有usb转串口线,也就是平时用来下程序的那根线,还有一个母口的线,今天我很纠结这两个的驱动,因为今天用usb转串口线,可以实现单片机和电脑的通信,但是用母口线,奇怪的是他并没有想象中的那种效果,更奇葩的是单片机下电它还能接收到数据


 

尼玛了这么久,还是看一下今天的程序,这个程序很简单,也就是上一次屡次不爽的程序,这里晒出来,还有串口小助手的截图也发出来,供以后学习之用

/*-----------------------------------------------

名称:串口通信

内容:连接好串口或者usb转串口至电脑,下载该程序,打开电源

打开串口调试程序,将波特率设置为9600,无奇偶校验

晶振11.0592MHz,发送和接收使用的格式相同,如都使用

字符型格式,按复位重启程序,可以看到接收到 UART test

然后在发送区发送任意信息,接收区返回同样信息,表明串口收发无误

------------------------------------------------*/

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

/*------------------------------------------------

函数声明

------------------------------------------------*/

void SendStr(unsigned char *s);

/*------------------------------------------------

串口初始化

------------------------------------------------*/

void InitUART (void)

{

SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收

TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装

TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz

TR1 = 1; // TR1: timer 1 打开

EA = 1; //打开总中断

// ES = 1; //打开串口中断

}

/*------------------------------------------------

主函数

------------------------------------------------*/

void main (void)

{

InitUART();

SendStr(“UART test,技术论坛:www.doflye.net 请在发送区输入任意信息”);

ES = 1; //打开串口中断

while (1)

{

}

}

/*------------------------------------------------

发送一个字节

------------------------------------------------*/

void SendByte(unsigned char dat)

{

SBUF = dat;

while(!TI);

TI = 0;

}

/*------------------------------------------------

发送一个字符串

------------------------------------------------*/

void SendStr(unsigned char *s)

{

while(*s!=‘\0’)// \0 表示字符串结束标志,通过检测是否字符串末尾

{

SendByte(*s);

s++;

}

}

/*------------------------------------------------

串口中断程序

------------------------------------------------*/

void UART_SER (void) interrupt 4 //串行中断服务程序

{

unsigned char Temp; //定义临时变量

if(RI) //判断是接收中断产生

{

RI=0; //标志位清零

Temp=SBUF; //读入缓冲区的值

P1=Temp; //把值输出到P1口,用于观察

SBUF=Temp; //把接收到的值再发回电脑端

}

if(TI) //如果是发送标志位,清零

TI=0;

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分