- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1 Proteus 简介
Proteus软件是英国Labcenter electronics公司出版的EDA(该软件总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种。在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。
PROTEUS 是单片机课堂教学的先进助手。
PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。
它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、、运行结果等。
课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台
图2.1.1 数字通信信源原理方框图
方案二:利用单片机我们可以对晶振产生的频率进行分频的设计,这次的分频主要用89C52进行实现。同样为了实现信源长度为32位,发出信号前8位为群同步码,后24位为数字信源,信源速率为256bit/s的码形,我们可以将P1.0,P1.1,P1.2的输出频率分别设为128Hz、64Hz、32Hz,将P2.0,P2.1的频率分别设为16Hz、8Hz,其中P1口用于控制74LS151八位数据选择器,P2口用于控制四位数据选择器,这样就可以实现32为码元的输出,并且信源速率为256bit/s。其原理方框图2.1.2所示:
图2.1.2 数字通信信源原理方框图
由上述所示的两种方案,其原理近乎相同,但是当我们的分频设计的软件实现时,可以看出用方案二可以省去直接分频的设定,直接用中断延时进行产生,程序的编辑较方案一简单,因此在这次的设计中我选择用方案二进行码元的输出。
3数字通信信源的实现
3.1 电路的结构
这次课程设计中的数字通信信源的结构可以分为两个两个部分,分别为数字信号的产生和数字信号的输出。
数字信号的产生需要用到4个拨码开关、图3.1.1 信号的产生
数字信号的输出,主要通过单片机程序的输入,控制P1.0、、、、、、图3.1.2 信号的输出
这两部分完整的连接图如下图3.1.3所示:
图3.1.3 完整原理连接图
生成的PCB如图3.1.4所示:
图3.1.4 PCB图
3.2 数据的仿真
按照用proteus的仿真连接图进行电路的连接,通过Keil软件进行程序的编写,然后生存HEX文件,将HEX文件读入89C52单片机中,进行电路的仿真,仿真的波形如图4.1所示(A端口为码元信息,D端口为同步码信息):
图4.1 仿真的波形
编写的程序:
#includereg52.h
unsigned int k1,k2;
sbit E=P3^2;
sbit F=P3^5;
void main()
{ P1=0x00;
P2=0x00;
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{ if (k1==1 )
{
F=~F;
E=~E;
k1=0;
P1++;
if(P1==0x07)
{
P1=0;
}
}
if(k2==8)
{ k2=0;
P2++;
if(P2==3)
{ P2=0;
文档评论(0)