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