USB转串口芯片CP2101讲解

2019-08-02 15:50发布

现代嵌入式系统中,异步串行通信往往作为标准外设出现在单片机和嵌入式系统中,但是随着个人计算机通用外围设备越来越少地使用串口,串口正在逐渐从个人计算机特别是便携式电脑上消失,于是嵌入式开发人员常常发现自己新买的计算机上没有串口,或者出现调试现场用户的计算机没有串口的尴尬局面。相反,现在的个人计算机普遍拥有4个以上的USB接口,能不能使用USB接口代替串口,完成PC和嵌入式系统的通信呢?答案是肯定的,CP2101即可解决上述问题。下图为CP2101的内部结构图:
内部结构图.jpg
下图为COP2101串口转USB接口程序流程图
流程图.jpg
C语言程序及讲解

****************************************************************************
   主程序,主要功能为,从USB总线读取延时参数,单片机延时发送内存缓冲区的一个字节数据到USB总线,每传送一个字节数据查询USB总线是否有停止USB总线通信命令,如有停止USB总线通信命令,则重新开始检查串口握手信号,开始下一次USB总线通信。
******************************************************************************
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar temp,timer
void  main(void)
{   
   TMOD=0x20;            //设定时器工作方式
   TL1=0xe6;
   TH1=0xe6;              //设波特率
   PCON=0x00;
   TR1=1;                 //启动定时器
   SCON=0x50;           /设串行口工作方式

While(1)
{
While(1)
{
while(RI)
    {
  RI=0;
  temp=SBUF;         //接收握手信号
}
if(temp!=0xff)
{return;}
while(RI)
  {
RI=0;
timer=SBUF;          //接收传输速率所需的延时值
}
While(RI=1)
{
RI=0;
temp=SBUF;           //接收握手停止信号
}
if(temp!=0x01)
{return;}
                SBUF=0x00;        //发送数据传输开始信号
                do{;}
                while(TI)
                TI=0;
                do{;}
                while(RI)
                temp=SBUF;        //判有无停止命令
if(temp=0x00)
                 {return;}
             SBUF=dbuf[num];
             do{;}
             while(TI=0)
             TI=0;
             num++
delay;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。