《单片机原理及应用系统设计》课件第7章_第1页
《单片机原理及应用系统设计》课件第7章_第2页
《单片机原理及应用系统设计》课件第7章_第3页
《单片机原理及应用系统设计》课件第7章_第4页
《单片机原理及应用系统设计》课件第7章_第5页
已阅读5页,还剩185页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7.1汇编源程序的建立与编译

7.2Proteus与单片机电路的交互式仿真与调试

7.3I/O口应用

7.44×4矩阵式键盘识别技术

7.5动态扫描显示

7.68×8点阵LED显示

7.7I/O口的扩展

第七章单片机应用系统开发设计实例7.8定时/计数器实验

7.9外部数据存储器扩展

7.10外部中断实验

7.11单片机与PC机间的串行通信

7.12单片机与步进电机的接口技术

7.13单片机与直流电动机的接口技术

7.14基于DAC0832数/模转换器的数控电源

7.15基于ADC0808模/数转换器的数字电压表7.1.1Proteus中的源程序设计与编译

1.建立源程序文件

在ProteusISIS界面中单击菜单Soure(源程序),在弹出的下拉菜单中单击“Add/Remove

SourceFiles…”(添加/移开源程序)选项,弹出如图7-1所示对话框。单击“CodeGenerationTool”(目标代码生成工具)下方框中按钮,弹出下拉菜单,根据需要选择相应的编译器,例如“ASEM51”(51系列单片机编译器)。

7.1汇编源程序的建立与编译图7-1Add/RemoveSourceCodeFiles对话框在图7-1中单击“New”按钮,弹出如图7-2所示的对话框,在文件名框中输入新建源程序文件名“mydesign”,单击“打开”按钮,弹出图7-2中所示的小对话框,选择“是”按钮,新建的源程序文件就添加到图7-1中的“SourceCodeFilename”方框中,如图7-3所示。同时在ISIS界面的“Source”菜单中也加入了源程序文件名“mydesign.asm”,如图7-4所示。图7-2新建源程序文件对话框图7-3源程序添加结果图7-4菜单Source中加载的源程序文件

2.编写源程序代码

单击菜单【Source】→【mydesign.asm】,弹出图7-5所示的源程序编辑窗口。编写源程序后存盘退出。图7-5源程序编辑窗口

3.源程序编译

(1)编译器设置。第一次使用编译器时需进行相关的设置,单击菜单【Source】→【DefineCodeGenerationTools】,出现图7-6所示界面,本例中实际设置结果如图7-6所示。

(2)编译源程序,生成目标代码文件。单击【Source】→【BuildAll】,编译结果在弹出的编译日志对话框中。如果没有错误,便成功生成目标代码“.hex”文件。本例中生成的目标代码文件为“mydesign.hex”。图7-6编译器设置界面7.1.2KeilμVision中的源程序设计与编译

1.新建项目

(1)双击桌面快捷图标即可进入如图7-7所示的集成开发环境编辑操作界面,主要包括三个窗口:工程项目窗口、编辑窗口和输出窗口。

(2)单击Project菜单,在弹出的下拉菜单中选中“NewProject”选项,新建一个项目,如图7-8所示。图7-7μVision2编辑操作界面图7-8Project界面

(3)选择要保存的路径,输入工程文件的名字(比如保存到uv目录里,工程文件的名字为“shiyan1”),如图7-9所示,然后单击“保存”按钮。

图7-9Project保存设置界面

(4)这时会弹出一个对话框,要求选择单片机的型号。这里可以根据所使用的单片机来选择,Keil几乎支持所有51核的单片机。这里以Atmel的AT89C51来说明,如图7-10所示。图7-10选择器件

(5)完成以上步骤后,显示画面如图7-11所示。

先进行选项设置,将鼠标指针指向“Target1”并单击右键,再从弹出的右键菜单中单击“OptionsforTarget”选项,如图

7-12所示。图7-11初始化编辑界面图7-12选择“OptionsforTarget”选项

(6)从弹出的“Options”对话框中选择“Output”标签栏,并按图7-13所示设置各项。

图7-13“Output”标签栏

2.建立一个新的ASM汇编语言程序并编译

下面开始编写源程序。

(1)在菜单栏中,单击“File”菜单,再在下拉菜单中单击“New”选项,或直接单击工具栏的快捷图标来建立一个新的编辑窗口。在此编辑窗口中输入用户的应用程序。具体输入前建议首先保存该空白文件,具体方法是单击菜单上的“File”按钮,在下拉菜单中选中“SaveAs”选项,在弹出对话框的“文件名”栏右侧编辑框中输入欲使用的文件名,同时,必须输入正确的扩展名,如“Text1.asm”,然后,单击“保存”按钮,如图7-14所示。图7-14保存源程序

(2)回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”上单击右键,弹出如图7-15所示的菜单。

图7-15弹出右键菜单然后单击“AddFiletoGroup‘SourceGroup1’”,打开如图7-16所示对话框,在“文件类型”处默认为“CSourcefile(*.c)”,因为前面我们保存的是汇编语言的文件,故需要选择“Asm

Sourcefile(*.s*;*.src;*.a*)”,这样在上面就可以看到刚才保存的汇编语言文件“Text1.asm”,双击该文件则自动添加至项目,单击“Close”关闭对话框。

从图7-17中可以看出:在添加了汇编语言文件后,在“Source

Group1”文件夹前面出现了一个“+”号,单击“+”号展开就看到了刚才添加的“Text1.asm”文件。图7-16添加文件对话框图7-17添加文件后工程栏的变化

(3)打开文件就可以在右侧的编辑区输入汇编源程序了。在输入指令时,读者可以看到事先保存待编辑文件的好处:Keil会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。如图7-18所示,程序输入完毕应再次保存。图7-18程序输入完毕后状态

(4)程序文件编辑完毕后,单击“Project”菜单,选中“Builttarget”选项(或者使用快捷键F7),或者单击工具栏的快捷图标来进行编译,如图7-19所示。

图7-19编译菜单

(5)如果有错误,则在最后的输出窗口中会出现所有错误所在的位置和错误的原因,并有“Targetnotcreated”的提示。双击该处的错误提示,在编辑区对应错误指令处左面出现蓝色箭头提示,然后对当前的错误指令进行修改,如图7-20所示。

图7-20错误提示

(6)将所有提示过的错误进行修改,然后再次重复(4)的操作进行编译,直至出现“"shiyan1"-0Error(s),0Warning(s)”,说明编译完全通过,如图7-21所示。

图7-21编译通过提示

3.调试并仿真

编译成功后,就可以进行调试并仿真了。单击“Debug”菜单,在下拉菜单中单击“Start/Stop

DebugSession”(或者使用快捷键Ctrl+F5),或者单击工具栏的快捷图标就可以进入调试界面,如图7-22所示。图7-22调试界面在存储器窗口的地址栏处输入C:0000H后回车,就可以查看所有单片机片内程序存储器的内容,如图7-23所示,下面用横线画出来的部分就是已经编辑的源程序转化成的机器语言的十六进制数(或者说是对应的机器码)。如果在存储器窗口的地址栏处输入D:00H后回车,则可以查看所有单片机片内数据存储器的内容。

图7-23存储器窗口下面介绍几种常用的调试命令及方法。

(1)复位CPU。

(2)全速运行(F5)。

(3)单步跟踪(F11)。

(4)单步运行(F10)。

(5)执行返回(Ctrl+F11)。

(6)停止调试(Ctrl+F5)。7.2.1加载目标代码

在ProteusISIS界面中编辑电路原理图实例,如图7-24所示。7.2Proteus与单片机电路的交互式仿真与调试图7-24实例电路原理图双击单片机AT89C51,打开其属性编辑框,在“ProgramFile”栏中,单击打开按钮,选取目标代码文件,这里是“MYDESIGN.HEX”。在“ClockFrequency”栏中设置时钟频率为12MHz,如图7-25所示。图7-25加载目标代码文件和时钟设置7.2.2单片机系统的Proteus交互仿真

在Proteus仿真界面中单击“运行”按钮,全速启动仿真,此时电路中的LED不亮。用鼠标单击电路图中的按钮,进行交互仿真。单击一次按钮,LED灯亮,再单击一次,LED灯灭,如此循环交替。本实例仿真片段如图7-26所示。单击“停止”按钮,可停止仿真。图7-26实例仿真片段7.2.3调试菜单与调试窗口

系统在全速仿真运行时不显示调试窗口,可单击暂停按钮,然后单击ProteusISIS界面的“Debug”菜单,弹出如图7-27所示的下拉菜单。从图中可以看出,调试菜单包含有3个存储器窗口,调试过程中可分别打开这3个存储器窗口进行观察。图7-27“Debug”下拉菜单

1.单片机寄存器窗口

通过菜单【Debug】→【8051CPURegisters-U1】打开单片机寄存器窗口,如图7-28所示。窗口里面有常用的SFR,如SP、PC、PSW、R0~R7、ACC及将要执行的指令等。在本窗口内右击,可以设置窗口的字体和颜色。

2.单片机SFR窗口

通过菜单【Debug】→【8051CPUSFRMemory-U1】打开单片机的SFR窗口,如图7-29所示。图7-28单片机寄存器窗口图7-29单片机SFR窗口

3.单片机IDATA窗口

通过菜单【Debug】→【8051CPUInternal(IDATA)Memory-U1】打开单片机的IDATA窗口,如图7-30所示。

图7-30单片机IDATA窗口在SFR、IDATA窗口中右击鼠标,可弹出该窗口的设置菜单,如图7-31所示。可使用“Goto”命令快速运动到指定的显示单元,还可复制数据或改变显示方式等。

图7-31单片机IDATA窗口的快捷菜单7.2.4观察窗口

1.观察项添加

通过菜单【Debug】→【WatchWindow】打开空白的观察窗口,在观察窗口内右击鼠标,弹出快捷菜单,如图7-32所示。图7-32观察窗口及快捷菜单若单击对话框中的“AddItems(ByName)”项,便会弹出如图7-33所示的对话框,双击相应的SFR寄存器名称,即可以观察项名称方式,并将观察项添加到观察窗口中。也可选择以观察项的地址来添加观察项的方式。添加了观察项的观察窗口如图7-34所示。图7-33“AddMemoryItem”对话框图7-34添加了观察项的观察窗口

2.观察项删除

要删除已添加的观察项,有两种方法:

(1)在观察窗口单击选中相应的观察项,按键盘上的“Del”键即可。

(2)在观察窗口右击相应的观察项,在弹出的快捷菜单中单击“DeleteItem”选项。

3.观察点条件设置

在仿真运行的过程中,还可以通过设置“观察点条件”的手段来触发中断,以满足某些特殊条件断点的要求。具体方法为:在观察窗口内右击鼠标,在弹出的快捷菜单中单击“WatchpointCondition”项,弹出观察点条件设置框,如图

7-35所示。图7-35观察点条件设置框7.3.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-1所列的清单添加元件。7.3I/O口应用表7-1元件清单

2.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-36所示的原理图(晶振和复位电路略)连接硬件电路。

图7-36电路原理图7.3.2Proteus调试与仿真

1.建立程序文件

(1)打开KeilμVision3,新建Keil项目,选择AT89C51单片机作为CPU;

(2)新建汇编源文件,编写程序并将其导入到“SourceGroup1”中;

(3)在“OptionsforTarget”对话框中,选中“Output”选项卡中的“CreateHEXFile”选项和“Debug”选项卡中的“Use:ProteusVSMSimulator”选项;

(4)编译源程序,修改程序中的错误直至通过。

2.加载目标代码文件

(1)在ProteusISIS中,双击AT89C51元件,打开“EditComponent”对话框,设置单片机的频率为12MHz;

(2)在该窗口的“ProgramFile”栏中,选择先前在Keil中编译产生的“.HEX”文件;

(3)在ProteusISIS菜单栏中选择【File】→【SaveDesign】选项,保存设计;

(4)在ProteusISIS菜单栏中,打开“Debug”下拉菜单,在菜单中选择“UseRemoteDebugMonitor”选项,以支持与Keil的联调。

3.调试与仿真

(1)在Keil的菜单栏中选择【Debug】→【Start/StopDebugSession】选项,或者在工具栏中直接单击图标,进入调试环境;

(2)按“F5”键或单击相应图标,顺序执行程序;

(3)在ProteusISIS界面中,按动开关,可看到数码管的显示值随之加1,如图7-37所示。图7-37程序运行结果7.3.3总结与提示

AT89C51单片机的P0口在作为普通I/O使用时必须加上拉电阻,否则不能准确输入或输出高低电平。仿真时可通过观察P0口的电平状态来体会这一点。

在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况。7.4.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-2所列的清单添加元件。7.44×4矩阵式键盘识别技术表7-2元件表清单

2.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-38所示的原理图(晶振和复位电路略)连接硬件电路。

图7-38电路原理图7.4.2源程序设计

#include〈reg51.h〉

#defineucharunsignedchar

#defineuintunsignedint

sbitdula=P2^6;

sbitwela=P2^7;

uchartemp,num,num1;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0};

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

ucharkeyscan()

{

P3=0xfe;

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(3);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xee:num=1;break;

case0xde:num=2;break;

case0xbe:num=3;break;

case0x7e:num=4;break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(3);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xed:num=5;break;

case0xdd:num=6;break;

case0xbd:num=7;break;

case0x7d:num=8;break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(3);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xeb:num=9;break;

case0xdb:num=10;break;

case0xbb:num=11;break;

case0x7b:num=12;break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xf7;

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(3);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xe7:num=13;break;

case0xd7:num=14;break;

case0xb7:num=15;break;

case0x77:num=16;break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

returnnum;

}

voidmain()

{

num=1;

wela=1;

P0=0xc0;

wela=0;

dula=1;

P0=0x00;

dula=0;

while(1)

{

num1=keyscan();

dula=1;

P0=table[num1-1];

dula=0;

}

}7.4.3Proteus调试与仿真

参照7.3.3节建立程序文件,加载目标代码文件,进入调试环境,执行程序,在ProteusISIS界面中,按下各个按键,观察数码管上的显示和所标的键号是否对应。

7.4.4总结与提示

在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况。

在Proteus中,仿真时可以降低单片机的工作频率,观察电路中各接点的电平变化情况,看是否和所编程序符合,以增强对程序的理解。7.5.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-3所列的清单添加元件。7.5动态扫描显示表7-3元件清单

2.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-39所示的原理图(晶振和复位电路略)连接硬件电路。

图7-39电路原理图7.5.2源程序设计

#include〈reg52.h〉

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};

ucharcodetable1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

/********延时子函数********/

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/********显示子函数********/

voiddisplay()

{

P3=table[0];

P2=table1[0];

delay(1);

P3=0x00;P3=table[1];

P2=table1[1];

delay(1);

P3=0x00;

P3=table[2];

P2=table1[2];

delay(1);

P3=0x00;

P3=table[3];

P2=table1[3];

delay(1);

P3=0x00;P3=table[4];

P2=table1[4];

delay(1);

P3=0x00;

P3=table[5];

P2=table1[5];

delay(1);

P3=0x00;

P3=table[6];

P2=table1[6];

delay(1);

P3=0x00;P3=table[7];

P2=table1[7];

delay(1);

P3=0x00;

}

/********主程序********/

voidmain()

{

while(1)

{

display();

}

}7.5.3Proteus调试与仿真

参照7.3.3节建立程序文件、加载目标代码文件,进入调试环境后执行程序,降低单片机的工作频率,观察动态显示的过程。

7.5.4总结与提示

AT89C51单片机的P0口作为普通I/O使用时必须加上拉电阻,否则不能准确输入或输出高低电平。仿真时可通过观察P0口的电平状态来体会这一点。

在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况。7.6.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-4所列的清单添加元件。7.68×8点阵LED显示表7-4元件清单

2.8×8点阵LED元件介绍

ProteusISIS中的8×8点阵LED元件如图7-40(a)所示。由于该元件引脚没有任何标注,因此在使用之前必须进行引脚测试,以确定行线和列线的顺序及极性。图7-40(b)给出了一种引脚测试的方法,根据测试结果便很容易确定该元件的电路接法。图7-408×8点阵LED元件引脚测试3.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-41所示的原理图连接硬件电路。

图7-41电路原理图7.6.2Proteus设计与仿真

参照7.3.3节建立程序文件、加载目标代码文件,进入调试环境后执行程序,在ProteusISIS界面中的仿真片断如图

7-42所示。

图7-42仿真片段源程序设计如下:

//使用12MHz晶振,P0口输出一行数据,P2口作列扫描,共阳LED管

#include"reg51.h"

#definecharunsignedchar

#defineintunsignedint

charkey,keytmp;

charcodedistaba[]=

{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00,//2(各数字的阳码)

0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//0

0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//00x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,//7

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//黑屏,表示一次显示完毕

};

charcodescan_cona[8]=

{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//列扫描控制字

delay1ms(intt)

{

inti,j;

for(i=0;i<t;i++)

for(j=0;j<120;j++);

}

//******功能程序*******//

//******向左滚动显示******//fun1()

{

intm,n,h;

for(h=0;h<32;h++)//控制显示字数(32/8=4个)

{for(n=0;n<25;n++)//控制帧移动速度

{for(m=0;m<8;m++)//显示1帧扫描(分8行,每行亮1ms)

{P2=scan_cona[m];P0=distaba[m+h];delay1ms(1);}

}

}

}

//******主程序********//

main()

{keytmp=1;//上电自动演示功能(逐字显示)

while(1)

{

fun1();

}

}

//**************结束**************//7.6.3总结与提示

程序编写中,必须在h数值是8的整数倍时再进行下面的移位操作,否则显示在衔接时会出现乱码。7.7.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-5所列的清单添加元件。7.7I/O口的扩展表7-5元件清单

2.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-43所示的原理图连接硬件电路。

图7-43电路原理图7.7.2源程序设计

1.流程图

图7-44为程序流程图。图7-44流程图2.程序代码

#include〈regx52.h〉

#include〈intrins.h〉

#include〈absacc.h〉

#defineucharunsignedchar

#defineuintunsignedint

#definePAXBYTE[0x3fff]

#definePBXBYTE[0x7fff]

#definePC1XBYTE[0xbfff]

#defineCTLXBYTE[0xffff]

sbitreset=P2^5;

voiddelay(uchart);

voiddisplay();

voidmain()

{

EA=1;

ET0=1;

TMOD=0x01;

reset=1;

_nop_();

reset=0;

CTL=0x80;//写8255控制字,设置PA,PB,PC为输出口

while(1){

display();}

}

voiddisplay()

{

ucharoutdata=0xfe,i;

for(i=0;i<8;i++)

{PA=outdata;

delay(200);

outdata=_crol_(outdata,1);

}

PA=0xff;

outdata=0xfe;

for(i=0;i<8;i++)

{PB=outdata;

delay(200);

outdata=_crol_(outdata,1);}

PB=0xff;

outdata=0xfe;

for(i=0;i<8;i++)

{PC1=outdata;

delay(200);

outdata=_crol_(outdata,1);}

PC1=0xff;

}voiddelay(uchart)

{

for(;t>0;t--)

{

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

TR0=1;

while(TF0==0);

TF0=0;

}

TR0=0;

}7.7.3Proteus调试与仿真

参照7.3.3节建立程序文件、加载目标代码文件,进入调试环境,单击ProteusISIS下面的仿真运行键,即可看到如图7-45所示的运行结果。

图7-45程序运行结果7.7.4总结与提示

采用8255并口扩展芯片的PA0口,设计一个4×4键的矩阵键盘扫描程序。7.8.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-6所列的清单添加元件。7.8定时/计数器实验表7-6元件清单

2.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-46所示的原理图连接硬件电路。

图7-46电路原理图7.8.2Proteus设计与仿真

参照7.3.3节建立程序文件、加载目标代码文件,进入调试环境执行程序,在ProteusISIS界面中,可以看到,LED灯亮1s,关1s,循环进行,其结果如图7-47所示。

图7-47运行结果源程序如下:

#include〈at89x51.h〉

sbitD=P1^7;

unsignedchartt;

voidtimer0()interrupt1

{

TH0=-50000/256;

TL0=-50000%256;

tt++;

if(tt==20)

{

D=0;

}if(tt==40)

{

tt=0;

D=1;

}

}

voidinit()

{

TMOD=0x01;

TH0=-50000/256;

TL0=-50000%256;EA=1;

ET0=1;

TR0=1;

tt=0;

}

voidmain()

{

init();

while(1)

{}

}7.8.3总结与提示

尝试改变计数器的值,使延时的时间更长。7.9.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-7所列的清单添加元件。7.9外部数据存储器扩展表7-7元件清单

2.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-48所示的原理图(复位和振荡电路略)连接硬件电路。

图7-48电路原理图7.9.2Proteus调试与仿真

参照7.3.3节建立程序文件、加载目标代码文件,进入调试环境,然后执行下述操作:

(1)在ProteusISIS界面中,单击按钮启动仿真。

图7-49程序运行结果

(2)通过菜单【Debug】→【MemoryContents→U1】,打开6264存储器窗口。

(3)通过菜单【Debug】→【Debug→WatchWindow】,在弹出的观察窗口右击鼠标,选择“以观察项的名称添加观察项”,在弹出的对话框中添加累加器ACC和数据指针DPTR。

(4)单击按钮暂停仿真,可观察程序运行的中间结果,如图7-49所示。7.9.3总结与提示

受计算机性能的影响,以及Proteus软件运行仿真时需要处理大量的数据,会出现仿真结果的画面刷新率跟不上程序运行速度的问题,致使不能看到存储器内容随程序运行的动态变化,仿真时可手工刷新画面观察。中断控制是提供给用户使用的中断控制手段,实际上就是控制一些寄存器。51系列用于此目的的控制寄存器有四个:TCON、IE、SCON及IP。其中IE、IP的格式如下:

(1)中断允许控制寄存器(IE)。IE寄存器地址为A8H,可进行字节寻址和位寻址,位地址为AFH~A8H。其格式如表7-8所示。7.10外部中断实验表7-8IE寄存器

(2)中断优先级控制寄存器(IP)。

IP寄存器地址为B8H,也可进行字节寻址和位寻址,位地址为BFH~B8H,各位定义如表7-9所示。表7-9IP寄存器7.10.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-10所列的清单添加元件。表7-10元件清单

2.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-50所示的原理图(晶振和复位电路略)连接硬件电路。

图7-50电路原理图7.10.2Proteus调试与仿真

参照7.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序,在ProteusISIS界面中,按动开关,可看到数码管显示的变化,如图7-51所示。

图7-51程序运行结果7.10.3总结与提示

在有多个中断同时存在时,应注意中断优先级的设置以及中断的触发方式;

在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况;

在某些情况下中断子程序中需要对各寄存器进行保护。7.11.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-11所列的清单添加元件。7.11单片机与PC机间的串行通信表7-11元件清单

2.串口模型介绍

串口模型COMPIM及其引脚功能如图7-52(a)所示。需要注意的是,在ProteusISIS元件库的“Connectors”类的“D-Type”子类中,也有一个串口模型器件CONN-D9F,如图7-52(b)所示,因该器件在使用时没有仿真模型,将导致仿真失败,所以要避免选用。

图7-52Proteus串口模型

3.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-53所示的原理图(晶振和复位电路略)连接硬件电路。

图7-53电路原理图

4.串口模型属性设置

串口模型属性设置:波特率为4800;数据位为8;奇偶校验为无;停止位为1,如图7-54所示。

图7-54串口模型属性设置

5.虚拟终端属性设置

PCT代表计算机发送数据,PCR用来监视PC接收到的数据,它们的属性设置完全一样,如图7-55所示。SCMT和SCMR分别是单片机的数据发送和接收终端,用来监视单片机发送和接收的数据,它们的属性设置也完全一样,如图

7-56所示。图7-55PC机虚拟终端属性设置图7-56单片机虚拟终端属性设置7.11.2Proteus调试与仿真

参照7.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序,进行以下操作:

(1)在ProteusISIS界面中的PCT虚拟终端上单击右键,在弹出的快捷菜单中选择“EchoTypedCharacters”项。

(2)鼠标指针在PCT终端窗口单击,该窗口出现闪烁的光标,从键盘输入数字“8”,在PCS终端窗口中就出现“8”,表明PC机发送数据“8”,按照设计好的程序,单片机将接收到“8”,所以在单片机接收虚拟终端SCMR上会显示“8”,同时又将数字“8”送显到数码管上。接下来,单片机又将该数回发给PC机,因此在单片机发送终端SCMT上也显示“8”,PC机接收

到数据后在接收终端PCR上同样显示“8”,结果如图7-57所示。根据程序设计,当在键盘上输入0~9以外的字符时,单片机输出到数码管上显示的则是该字符的ASCII码,如图7-58所示。图7-57程序运行结果1图7-58程序运行结果27.11.3总结与提示

在原理图中的电阻R1不能少,否则虚拟终端PCR将收不到信息;

在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察系统的工作过程;

在Proteus仿真中,单片机和COMPIM之间也可以不用加MAX232器件。7.12.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-12所列的清单添加元件。7.12单片机与步进电机的接口技术表7-12元件清单

2.步进电机元件介绍

Proteus软件中的单极性步进电机元件为6线制,其原理图及属性编辑框如图7-59所示,各属性值可根据需要修改。本例中所设置的属性值均如图7-59所示。

图7-59单极性步进电机原理图及属性

3.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-60所示的原理图连接硬件电路。

图7-60电路原理图7.12.2Proteus调试与仿真

参照7.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序,进行如下操作:

(1)在ProteusISIS界面中,按“正转”、“反转”按钮,观察步进电机的状态,如图7-61所示。

(2)观察步进电机的单拍转动角度,从而体会4相8拍的含义。图7-61程序运行结果7.12.3总结与提示

在进行仿真时,可以在单片机的P1.0~P1.3口上接入逻辑分析仪来监测控制信号的工作状态(本例略)。

可修改步进电机属性中的步进角以观察不同的仿真结果。

在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况。7.13.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-13所列的清单添加元件。7.13单片机与直流电动机的接口技术表7-13元件清单

2.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-62所示的原理图连接硬件电路。

图7-62电路原理图7.13.2Proteus调试与仿真

参照7.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序。在ProteusISIS界面中,调节电位器RV1,可以看到电机转速随着电位器的调节发生相应的变化,如图7-63所示。同时通过示波器观察单片机输出的PWM控制脉冲信号,如图7-64所示。切换开关SW1的状态可切换电机的正、反转。图7-63程序运行结果图7-64单片机输出的PWM控制脉冲信号7.13.3总结与提示

尝试直接给电动机加相同幅值的直流电压,并观察其转速大小,如图7-65所示,与单片机控制下直流电动机的最大转动速度做比较,观察差别并思考其中的原因。

在ProteusISIS界面中双击直流电机,可打开其属性编辑框,并根据需要修改其属性值,包括标称电压和转速等。图7-65直接加工作电压的直流电机7.14.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-14所列的清单添加元件。7.14基于DAC0832数/模转换器的数控电源表7-14元件清单

2.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-66所示的原理图(复位与振荡电路略)连接硬件电路。

图7-66电路原理图其程序流程如图7-67所示。

图7-67程序流程图7.14.2Proteus调试与仿真

参照7.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序,在ProteusISIS界面中,观察LM317输出端的数字电压表示值发生的变化,仿真片段如图7-68所示。图7-68程序运行结果7.14.3总结与提示

对本例程序进行修改,可产生不同波形连续变化的输出电压。

LM317可调输出电压的最低值为1.25V,通过本例也能观察到这一点。

由于LM358输出没有调零电路,不能校准,因此数/模转换输出结果存在一定的误差,导致可调电压源的输出也存在误差,在本例中亦有所体现。7.15.1Proteus电路设计

1.元件清单列表

打开ProteusISIS编辑环境,按表7-15所列的清单添加元件。7.15基于ADC0808模/数转换器的数字电压表表7-15元件清单

2.电路原理图

元件全部添加后,在ProteusISIS的编辑区域中按图7-69所示的原理图连接硬件电路。

图7-69电路原理图7.15.2源程序设计

ADC0808在进行A/D转换时需要有CLOCK信号,我们在硬件电路设计中将ADC0808的CLOCK信号接在了AT89C51单片机的P3.3端口上,即通过P3.3端口为ADC0808提供CLOCK信号,因此在程序编写时要由软件产生该时钟信号。

其程序流程如图7-70所示。图7-70程序流程图程序源代码如下:

#include〈reg51.h〉

#defineucharunsignedchar

#defineuintunsignedint

ucharcodea[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharcodea1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

ucharcodeb[4]={0xfe,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论