基于mulitisim交通灯论文.docx
《基于mulitisim交通灯论文.docx》由会员分享,可在线阅读,更多相关《基于mulitisim交通灯论文.docx(9页珍藏版)》请在冰点文库上搜索。
![基于mulitisim交通灯论文.docx](https://file1.bingdoc.com/fileroot1/2023-7/13/4db1ffcb-202a-4a24-afd5-1da7ee647940/4db1ffcb-202a-4a24-afd5-1da7ee6479401.gif)
基于mulitisim交通灯论文
基于mulitism交通灯管理系统
学院:
电子信息工程学院
班级:
姓名:
学号:
指导老师:
摘要:
阐述了mulitism10软件的特点和功能,并以交通灯管理控制器为例,给出了运用软件mulitism10和单片机开发环境keilc51进行单片机仿真的方法。
关键词:
mulitism10;keilc51;单片机仿真;交通灯管理控制器;
1、引言
单片机因其价格,性能方面的优势,已广泛应用于社会各个领域。
所以学习单片机的应用极其重要。
然而单片机实验箱的硬件固定,功能单一,价格昂贵,不适于普通学生的学习。
而mulitism10的出现就较好的解决了这些问题。
它与keilc51结合起来搭建单片机应用系统,可以提供虚拟的硬件仿真。
1、mulitism10介绍
mulitism10软件是美国国家仪器推出的电子电路仿真软件,是目前最新版本。
它在原有基础上更新或改进了某些功能。
(1)提升了mulitism的易用性。
操作界面简洁友好,用户点击鼠标就可以完成元件的选择,拖动,连线以及查看仿真结果。
(2)增加了电路元件库。
扩充了mcu模块,提供了包裹Intel,Atmel8051/8052和MicrochipPIC16F84a和单片机系统的仿真。
若没有用户想要的元件,可以利用VHDL,VerilogHDL或SPICE增添新元件。
(3)加强了对于汇编和c语言的支持,增加了反汇编功能,以及调试功能,包括设置断点,单步执行,查看存储器,改写内存等。
(4)提供了为SPICE和MCU的综合仿真环境,设计者可以在设计流程中对电路设计进行验证,使设计更加简洁。
(5)增加部分3D实物元件和面包板,便于教学使用,给学生更直观的感觉。
2、交通灯管理控制器设计
(一)设计要求
设计一交通管理控制器。
要求等的亮灭情况如下表所示。
Pb_no为特殊功能按钮,此键按下时,表示全部让行。
红灯_1
黄灯_1
绿灯_1
红灯_2
黄灯_2
绿灯_2
时间
亮
灭
灭
灭
灭
亮
8秒
亮
灭
灭
灭
亮
灭
2秒
灭
灭
亮
亮
灭
灭
8秒
灭
亮
灭
亮
灭
灭
2秒
灭
灭
亮
灭
灭
亮
Pb_NO按下时
(二)设计思路
运用单片机定时器0定时,在SWITCH语句中判断并显示此时灯的亮灭情况。
(三)mulitism中的操作步骤
(1)启动mulitism10之后,点一下工具栏上的“placeMCUModule”按钮,在弹出的“SelectaComponent”对话框中点击“OK”按钮(系统默认选择的是8051单片机)。
(2)接着对MCUWizard的三个步骤进行合理的设置,以便有利于接下来的仿真。
在MCUWizard导航栏的第一个步骤中要设置好工作组(workspace)的存放路径,工作组名(workspacename);在第二,三个步骤中要设置好项目类型(projecttype)和工程名(projectname)等。
其中项目类型“standard”(标准)表示通过mulitism10编写汇编语言或c语言源程序,并进行编译;“LoadExternalHexFile”(加载外部Hex文件)表示可以在Keilc51等环境下编写汇编语言或c语言源程序,然后生成Hex文件通过加载外部Hex文件导入。
在此选择“LoadExternalHexFile”。
步骤一
步骤二
步骤三
(3)从mulitism10元件库中找到其它外围电路所需的元件,按照设计要求连接电路。
电路连接如图所示。
3、仿真与调试
在keilc51中编辑好程序,生成Hex文件后,便可以在mulitisim10中加载这个文件了。
为此,可以选中mulitism10主界面左上角的“DesignToolbox”中的项目名,按右键,在右键菜单里选择“MCUCodeManager”菜单项,或选中MCU元件右键菜单的“Properties”菜单项,再点击弹出对话框的“Code”选项卡的“Properties..”按钮,在调出的“MCUCodeManager”对话框中选择Hex文件。
完成上述操作后就可以开始仿真了。
点一下运行(Run)按钮即可查看到仿真结果。
如图所示。
4、交通灯管理控制器源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitred_1=P1^0;
sbityel_1=P1^1;
sbitgrn_1=P1^2;
sbitred_2=P1^3;
sbityel_2=P1^4;
sbitgrn_2=P1^5;
sbitpb_no=P3^3;
ucharcount,time,flag;
/*voiddelayms(uintms)
{
uinti,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}*/
voidtime0_init()
{
TMOD=0X01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
}
voidmain()
{
P1=0xff;
pb_no=1;
time0_init();
while
(1)
{
if(pb_no)
{
switch(flag)
{
case0:
red_1=0;yel_1=1;grn_1=1;red_2=1;yel_2=1;grn_2=0;break;
case1:
red_1=0;yel_1=1;grn_1=1;red_2=1;yel_2=0;grn_2=1;break;
case2:
red_1=1;yel_1=1;grn_1=0;red_2=0;yel_2=1;grn_2=1;break;
case3:
red_1=1;yel_1=0;grn_1=1;red_2=0;yel_2=1;grn_2=1;break;
}
}
else{red_1=1;yel_1=1;grn_1=0;red_2=1;yel_2=1;grn_2=0;}
}
}
voidtime0()interrupt1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
count++;
if(count==20)
{count=0;time++;}
if(time==8)flag=1;
if(time==10)flag=2;
if(time==18)flag=3;
if(time==20){flag=0;time=0;}
}