基于C51单片机的USB接口课程设计.docx
- 文档编号:28407818
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:23
- 大小:638.89KB
基于C51单片机的USB接口课程设计.docx
《基于C51单片机的USB接口课程设计.docx》由会员分享,可在线阅读,更多相关《基于C51单片机的USB接口课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
基于C51单片机的USB接口课程设计
摘要:
本课程设计实现具有按键输入、数据储存、数据通信等功能的单片机系统。
该系统基于C51单片机的USB接口设计,该系统由最小C51单片机系统、USB接口模块组成。
系统实现按键输入数据保存至E2PROM后,可通过USB接口传送至上位机功能。
通过对系统的仿真及实物调试,完成了系统设计,实现了课程设计的要求。
关键字:
USB,数据通信,单片机,按键输入,E2PROM
Abstract:
Thiscoursedesignsthesinglesliceofmachinesystemthattherealizationhasakeystroke,thedatafunctions,suchasstorageanddatacorrespondence...etc..Thatsystemconnectsapeople'sdesignaccordingtoUSBofC51singlesliceofmachine,thatsystemfromtheminimumC51singlesliceofmachinesystem,andUSBpickupapeoplemoldpiececonstitute.ThesystemcarriesoutakeystrokedatatokeeptoE2PROMs,canconnectahighestofapeople'stransmissionthroughUSBmachinefunction.Passingistruetoimitatingofsystemandtherealobjectadjusttotry,completedasystemdesignandcarriedouttherequestofcoursedesign.
Keywords:
USB,datacorrespondence,singlesliceofmachine,keystroke,E2PROM
目录
前言1
1.总体设计方案2
1.1接口设计方案2
1.1.1独立模式即(USB接口芯片外接C51芯片)2
1.1.2USB接口芯片集成了MCU2
1.2系统设计方案2
2.系统设计原理3
2.1USB接口简介3
2.2I2C总线简介3
3.单元模块设计4
3.1USB硬件电路设计4
3.1.1电源电路模块4
3.1.2单片机最小系统模块5
3.1.3E2PROM模块:
6
3.1.4USB接口模块7
3.2USB软件设计9
3.2.1主程序介绍:
9
3.2.2E2PROM写程序:
10
3.2.3E2PROM读程序:
13
3.2.4USB接口程序14
4.系统功能调试15
4.1调试用的软件简介:
15
4.2模块调试过程及结果:
15
5.设计总结18
6.参考文献19
前言
USB是英文UniversalSerialBUS的缩写,中文含义是“通用串行总线”。
它不是一种新的总线标准,而是应用在PC领域的接口技术。
USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。
不过直到近期,它才得到广泛地应用。
从1994年11月11日发表了USBV0.7版本以后,USB版本经历了多年的发展,到现在已经发展为2.0版本,成为目前电脑中的标准扩展接口。
目前主板中主要是采用USB1.1和USB2.0,各USB版本间能很好的兼容。
USB用一个4针插头作为标准插头,采用菊花链形式可以把所有的外设连接起来,最多可以连接127个外部设备,并且不会损失带宽。
USB需要主机硬件、操作系统和外设三个方面的支持才能工作。
USB具有传输速度快(USB1.1是12Mbps,USB2.0是480Mbps,USB3.0是5Gbps),使用方便,支持热插拔,连接灵活,独立供电等优点,可以连接鼠标、键盘、打印机、扫描仪、摄像头、闪存盘、MP3机、手机、数码相机、移动硬盘、外置光软驱、USB网卡、ADSLModem、CableModem等,几乎所有的外部设备。
随着计算机硬件飞速发展,这么多的设备,如何接入个人计算机,USB就是基于这个目的产生的。
USB是一个使计算机周边设备连接标准化、单一化的接口,其规格是由Intel、NEC、Compaq、DEC、IBM、Microsoft、NorthernTelecom联系制定的
由于USB总线接口具有体积小、携带方便、热插拔等特征,国内近年来计算机非键盘输入技术在汉字英文和数字的手写识别方面发展很快,此项目的目的是吸收USB总线和MOTOROLA微控制器的先进技术与手写识别技术相结合设计生产新一代USB手写输入系统。
除了这种系统,还有一种无线式专家评审智能系统,需要一块具有USB接口的无线式数据通信接口卡,来实现中央数据处理站计算机与各智能评分器之间的数据交换。
1.总体设计方案
1.1接口设计方案
1.1.1独立模式即(USB接口芯片外接C51芯片)
这种是纯粹的USB接口芯片,仅处理USB通信,使用时必须由外部微控制器(MCU)进行控制,如Philips的PDIUSBD12,NationalSemiconductor的USBN9604等。
USB接口设计独立模式说明连接外设的一种简单模式,所有寄存器和数据的读写都是通过C8051的I/O接口来仿真。
其优点是传输数据速率较快,也可以通过接口转换,与其他功能的外设相连,具有较广泛的适用性。
但是数据吞吐速率较低,适合间歇式数据的传送。
图1独立模式电路结构图:
1.1.2USB接口芯片集成了MCU
这种芯片如CYPRESS的EZ-USB。
带集成的USB2.0全速接口的C51:
灵活的自可编程的闪存人机接口能力外围设备广品种包括大容量存储器接口。
MCU被集成在USB接口芯片,在使用时会更加的方便可行。
USB接口芯片
C51芯片
图2集成模式电路结构图
1.2系统设计方案
该系统由最小C51单片机系统、USB接口模块组成。
上位机通过usb接口,由C51控制对E2PROM进行读写。
C51单片机功能是通过MCU控制器对输入数据进行控制、处理,使数据通过I\O接口被送到E2PROM(电可擦可编程只读存储器)中被存储起来,以便输出需要。
E2PROM是电可擦可编程只读存储器,数据被送到里面后,如果因为设计需要,必须对数据进行修改、增加、删除时,它可以通过电子信号来修改,并不影响未修改的软件程序。
USB接口芯片主要是与C51芯片相连,通过MCU空制器对数据的控制,以使数据通过USB接口被输送到PC机或上位机。
图3系统结构图
2.系统设计原理
2.1USB接口简介
USB是一种常用的pc接口,他只有4根线,两根电源两根信号,如图4.故信号是串行传输的,usb接口也称为串行口,usb2.0的速度可以达到480Mbps。
可以满足各种工业和民用需要.USB接口的输出电压和电流是:
+5V500mA实际上有误差,最大不能超过+/-0.2V也就是4.8-5.2V。
usb接口的4根线一般是下面这样分配的,需要注意的是千万不要把正负极弄反了,否则会烧掉usb设备或者电脑的南桥芯片:
黑线:
gnd红线:
vcc绿线:
data+白线:
data-。
图4usb接口定义图
2.2I2C总线简介
为了非常方便地对I2C从器件进行快速的正确的读写操作,我们为此而设计出虚拟I2C总线操作平台软件包。
I2C总线是PHILIPS公司推出的芯片间串行数据传输总线2根线即可实现完善的全双工同步数据传送能够十分方便地地构成多机系统和外围器件扩展系统I2C器件是把I2C的协议植入器件的I/O接口使用时器件直接挂到I2C总线上,这一特点给用户在设计应用系统带来了极大的便利I2C器件无须片选信号是否选中是由主器件发出的I2C从地址决定的而I2C器件的从地址是由I2C总线委员会实行统一发配我们推出的I2C总线的操作平台软件包只要你给出器件从地址即可进行字节读字节写多字节读多字节写能够非常方便地使用I2C器件无须你介入底层的I2C操作协议。
它是连接USB和89C51单片机所用到的总线,很方便的传送和接收数据。
3.单元模块设计
3.1USB硬件电路设计
3.1.1电源电路模块
电源电路为有两个,通过DC-DC器件(7805)将9V电压转换为5V。
DC/DC是一种高频模块电源,它可以实现直流到直流的变换,既可以把输入电压变低,也可以把输入电压变高,还可以把电源极性反转,而且输人电压还可以在一定的范围内变化。
一路输人电压可以得到几路输出电压。
直流输出电压和输出电流有很多档次供使用者选择,而且体积小、输出功率大。
在DC-DC变换中,pwm和pfm是两种基本的控制方式,除此之外,还有相移控制等。
pwm控制一般指开关周期固定,即频率固定,通过改变开关导通时间,调节输出电压,而pfm一般指开关导通时间固定,通过改变开关周期,来调节输出电压,在有些谐振电路中,因为顾忌谐振周期的缘故,所以多采用pfm但是,pfm控制方式,使的开关频率变化,使的滤波器的设计很困难,一般不采用。
图5电源电路图
3.1.2单片机最小系统模块
89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。
89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案
图6单片机最小系统图
3.1.3E2PROM模块:
E2PROM芯片:
CSI24WC02
CSI24WC02是一个2K位串行CMOSE2PROM内部含有256个8位字节CATALYST公司的先进CMOS技术实质上减少了器件的功耗,CSI24WC01有一个8字节页写缓冲器CSI24WC0有一个16字节页写缓冲器该器件通过I2C总线接口进行操作,有一个专门的写保护功能。
表1CSI24WC02管脚描述
管脚名称
功能
A0A1A2
器件地址选择
SDA
串行数据/地址
SCL
串行时钟
WP
写保护
Vcc+1.8V6.0V
工作电压
Vss
地
图7E2PROM电路图
图8E2PROMPCB图
3.1.4USB接口模块
USB接口芯片:
PDIUSBD12
PDIUSBD12是一款性价比很高的USB器件。
它通常用作微控制器系统中实现与微控制器进行通信的高速通用并行接口。
它还支持本地的DMA传输。
这种实现USB接口的标准组件使得设计者可以在各种不同类型微控制器中选择出最合适的微控制器。
这种灵活性减小了开发的时间、风险以及费用,从而用最快捷的方法实现最经济的USB外设的解决方案。
PDIUSBD12完全符合USB1.1版的规范,它还符合大多数器件的分类规格:
成像类、海量存储器件、通信器件打印设备、以及人机接口设备。
同样地,PDIUSBD12理想地适用于许多外设,例如:
打印机、扫描仪外部的存储设备和数码相机等等。
它使得当前使用SCSI的系统可以立即降低成本。
PDIUSBD12所具有的低挂起功耗连同LazyClock输出可以满足使用ACPIOnNOW和USB电源管理的要求。
低的操作功耗可以应用于使用总线供电的外设。
此外它还集成了许多特性,包括SoftConnetTMGoodLinkTM、可编程时钟输出、低频晶振和终止寄存器集合。
所有这些特性都为系统显著节约了成本,同时使USB功能在外设上的应用容易。
图9USB接口电路图
图10USB接口PCB图
3.2USB软件设计
3.2.1主程序介绍:
名称:
main()
功能:
主函数,负责发送USB请求、处理USB总线事件、进行EEPROM的读写操作。
图11主程序流程图
代码:
voidmain(void)
{init_port();/*初始化I/O口*/
init_timer0();/*设置定时器0*/
init_special_interrupts();/*设置中断*/
//D12_DATA=0xfb02;/*定义数据地址*/
//D12_COMMAND=0xfb03;/*定义命令地址*/
D12_DATA=0x7002;/*定义数据地址*/
D12_COMMAND=0x7003;/*定义命令地址*/
D12_SetDMA(0x0);/*不使用DMA功能*/
bEPPflags.value=0;/*初始化USB寄存器*/
/*上电复位,USB总线重新连接指令*/
reconnect_USB();
while(TRUE)
{if(bEPPflags.bits.configuration)
{I2cWriteRead();/*若设备已配制,调用I2cWriteRead()*/
}
usbserve();/*处理USB的setup包*/
}
}
3.2.2E2PROM写程序:
名称:
Write_CSI24WCxx()
功能:
进行EEPROM写操作。
图12E2PROM写操作程序流程图:
代码:
voidWrite_CSI24WCxx(void)
{unsignedcharrwcount;
unsignedcharadr_bak;
bitwrite_ok;
rwcount=0;
do
{/*取出当前操作字节个数,与命令要求的操作字节个数进行比较及处理*/
if(ComEpBuf[5]>rwlen.byte.low)
{ComEpBuf[5]=ComEpBuf[5]-rwlen.byte.low;
}
else
{rwlen.byte.low=ComEpBuf[5];
ComEpBuf[5]=0;
}/*判断操作地址是否溢出*/
if((rwrom_addr.word+rwlen.byte.low)>rom_size[rwrom_type.byte.low])
{rwlen.word=rom_size[rwrom_type.byte.low]-rwrom_addr.word;
if(rwrom_addr.word>rom_size[rwrom_type.byte.low])
{operate_type=0;
}
ComEpBuf[5]=0;
}
/*进行写操作,CSI24WC01、02、04、08、16的地址位[a10][a9][a8]由rwrom_addr.byte.high设置*/
if(operate_type==1)
{eprom_sla=0xa0|rwrom_addr.byte.high;
eprom_sla&=0xfe;/*CSI24WC01、02、04、08、16所使用的从机地址为0AxH*/
/*本次写操作所写的数据的起始地址为EpBuf[rwcount],操作个数rwlen.byte.low*/
write_ok=ISendStr(eprom_sla,rwrom_addr.byte.low,&(EpBuf[rwcount]),rwlen.byte.low);
}
if(operate_type==2)
{eprom_sub=&(rwrom_addr.byte.high);
eprom_sla=0xa0;/*CSI24WC32、64、128、256所使用的从机地址均为0A0H*/
write_ok=ISendStr2(eprom_sla,eprom_sub,&(EpBuf[rwcount]),rwlen.byte.low);
}
if(write_ok==0)
{rwcount=0;
break;
}
else
{while(IwCheck(eprom_sla)==0);/*等待写周期完成*/
}/*写参数的修改,以达到页写的目的。
*/
if(operate_type==1)
{//CSI24WC01、02、04、08、16的地址位[a10][a9][a8]的调整
adr_bak=rwrom_addr.byte.low;
rwrom_addr.byte.low=rwrom_addr.byte.low+rwlen.byte.low;
if(adr_bak>rwrom_addr.byte.low)
{rwrom_addr.byte.high=rwrom_addr.byte.high+2;
rwrom_addr.byte.high=rwrom_addr.byte.high&0x0f;
}
}
else
{rwrom_addr.word=rwrom_addr.word+rwlen.byte.low;
}
rwcount=rwcount+rwlen.byte.low;/*写入字节个数计数*/
rwlen.byte.low=i2crom_mask[rwrom_type.byte.low]+1;
}while(ComEpBuf[5]!
=0);/*判断是否写完数据(由地址来判断),若没有则继续返回已写入字节个数,若为0时则表示EEPROM操作出错*/
EpBuf[0]=rwcount;
D12_WriteEndpoint(5,1,EpBuf);
}
3.2.3E2PROM读程序:
名称:
Read_CSI24WCxx()
功能:
进行E2PROM读操作。
图13E2PROM读操作程序流程图:
代码:
voidRead_CSI24WCxx(void)
{inti;
bitread_ok;
if(operate_type==1)
{eprom_sla=0xa0|rwrom_addr.byte.high;
eprom_sla&=0xfe;
read_ok=IRcvStr(eprom_sla,rwrom_addr.byte.low,EpBuf,rwlen.byte.low);
if(read_ok==1)D12_WriteEndpoint(5,rwlen.byte.low,EpBuf);
}/*endofread24c01,02,04,08*/
if(operate_type==2)
{eprom_sub=&(rwrom_addr.byte.high);
eprom_sla=0xa0|rwrom_addr.byte.high;
eprom_sla&=0xfe;
read_ok=IRcvStr2(eprom_sla,eprom_sub,EpBuf,rwlen.byte.low);
if(read_ok==1)D12_WriteEndpoint(5,rwlen.byte.low,EpBuf);
}/*endofread24c64*/
for(i=0;i<2000;i++);/*若读操作出错,则返回出错信息*/
if(read_ok==0)
{GenEpBuf[0]=0xaa;
GenEpBuf[1]=0x88;
D12_WriteEndpoint(3,2,GenEpBuf);
}
else
{GenEpBuf[0]=0xbb;/*读操作成功*/
GenEpBuf[1]=0x02;
D12_WriteEndpoint(3,2,GenEpBuf);
}
}
3.2.4USB接口程序
名称:
I2cWriteRead()
功能:
负责接收USB总线上的命令,并进行分析及作出相应的EEPROM读写操作等。
图14USB程序流程图:
4.系统功能调试
4.1调试用的软件简介:
Keil:
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
4.2模块调试过程及结果:
图15keil里对usb程序进行编译
首先在keil里对usb程序进行编译,使之生成.hex的文档,如图16所述,编译成功通过,当然在编译前进行了一些必要的设置。
图16软件编程
运行DPFLASH下载软件,并将之进行擦除,然后将图16中最后生成的.hex文档装载到软件中。
点击编程出现上图的界面,当显示“编程操作成功”字样表示已成功的将usb程序下载到芯片了。
图17安装驱动程序
当运行接上USB的试验箱时,出项了对usb需要进行安装驱动,上面几幅图为安装驱动的过程,最终成功安装了USB的驱动。
I
图18写入E2PROM数据
打开ZlgEasyD12_DEMO.exe软件,通过usb线和IIC总线向EEPROM写一组数据,如图21数据是01234567890,出现上图的提示框表示向EEPROM成功写入数据
图19读取E2PROM数据
通过usb线和iic总线从eeprom读取数据,如图所示读出了10个数据,出现图22的提示框表示读eeprom数据成功。
结论:
经过上面的操作可以得出USB接口部分能成功的与单片机和上位机进行数据交换。
表明设计得到了实现
5.设计总结
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今USB接口技术的应用在生活中可以说得是无处不在。
因此能够了解并掌握USB接口技术的内容是十分重要的。
经过两个星期的奋斗我们小组终于圆满完成了本次课程设计的要求,成功实现按键输入数据保存至E2PROM,之后并可通过USB接口传送至上位机功能。
整个系统完成上位机可通过USB接口实现对E2PROM的读写功能。
经过这次的电子课程设计,让我深刻的体会到了要设计一个成功的电路,必须要有坚强的理论基础,还需要有持之以恒的信心,同时也还要有团队合作精神。
在这次课程设计的过程中我们也遇到了很多困难,在困
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 C51 单片机 USB 接口 课程设计