单片机原理及其应用实验指导书.doc

上传人:精*** 文档编号:1131227 上传时间:2024-09-14 格式:DOC 页数:22 大小:666.50KB
下载 相关 举报
单片机原理及其应用实验指导书.doc_第1页
第1页 / 共22页
单片机原理及其应用实验指导书.doc_第2页
第2页 / 共22页
单片机原理及其应用实验指导书.doc_第3页
第3页 / 共22页
单片机原理及其应用实验指导书.doc_第4页
第4页 / 共22页
单片机原理及其应用实验指导书.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、单片机原理及其应用(电子专业使用)实验指导书南京城市职业学院工程技术系二八年四月第一部分 实验环境及工具介绍本次实验使用uVision2集成开发环境和Top2004编程器。下面分别简要介绍其使用方法。文章部分引自磁动力工作室站长明浩编写的单片机C语言教程和赵亮、侯国锐编著的单片机C语言编程与实例。第一课建立您的第一个项目开始程序运行Keil uVision2几秒后,出现如图11的屏幕。图11启动时的屏幕接着按下面的步骤建立您的第一个项目:(1)新建工程。点击Project菜单,选择弹出的下拉式菜单中的New Project,如图12。接着弹出一个名为“Create New Project”的对

2、话框,如图13,先选择一个合适的文件夹准备来存放工程文件,如“C51” 是新建的文件夹。在文件名中输入您的第一个程序项目名称,这里我们用test,保存后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。我们建议:今后每新建一个工程都要在适当的磁盘位置新建一个文件夹用来保存工程文件,以方便管理,并养成良好的习惯。图12New Project菜单图13文件窗口(2)选择单片机。紧接着,Keil C51 提示您选择CPU 器件。8051 内核单片机最早是由鼎鼎大名的Intel 公司发明的,后来其他厂商如Philips、Atmel、Win

3、bond 等先后推出其兼容产品,并在8051 的基础上扩展了许多增强功能。在这里我们选择Atmel公司的AT89S51。此时屏幕如图14所示。图14选取芯片接下来弹出一个如图1-5 所示的对话框。该对话框提示您是否要把标准8051 的启动代码添加到工程中去。Keil C51 既支持C 语言编程也支持汇编语言编程。如果打算用汇编语言写程序,则应当选择“否(N)”;如果打算用C 语言写程序,一般也选择“否(N)”,但是,如果用到了某些增强功能需要初始化配置时,则可以选择“是(Y)”。在这里,我们选择“否(N)”,即不添加启动代码。图15 选择是否要添加启动代码至此,一个空的Keil C51 工程建

4、立完毕。(3)首先我们要在项目中创建新的程序文件或加入旧程序文件。点击图16中1的新建文件的快捷按钮,在2中出现一个名为“Text n”(其中n 表示序号)的文档,或通过菜单FileNew或快捷键Ctrl+N来实现。图16 新建程序文件 点击图16中的3保存新建的程序,也可以用菜单FileSave或快捷键Ctrl+S进行保存。因是新文件所以保存时会弹出如图17的文件操作窗口,我们把第一个汇编语言编写的程序命名为test1.asm,保存在项目所在的目录中。注意:扩展名“.asm”不可省略。图1-7 保存新建的源程序文件(4)添加源程序文件到工程中。现在,一个空的源程序文件“test1.asm”已

5、经建立,但是这个文件与刚才新建的工程之间并没有什么内在联系。我们需要把它添加到工程中去。单击Keil C51 软件左边项目工作窗口“Target 1”上的“”,将其展开。然后右击“Source Group 1”文件夹,会弹出如图1-8 所示的选择菜单。单击其中的“Add Files to Group Source Group 1”项,将弹出如图1-9 所示的对话框。图18 把文件加入到项目文件组中图19 选择文件请在文件类型下拉列表中选择Asm source file源文件,再选择刚刚保存的文件“test1.asm”,按ADD按钮(请不要多次点击“Add”按钮),最后按“Close”按钮,程序

6、文件已加到项目中了。这时可以点击Source Group1文件夹图标左边的“+” 展开后查看。 (5) 现在开始输入源程序。先最大化“test1.asm”源程序窗口,然后请按实验一程序清单输入程序代码。;-入口程序 -ORG 0000H ;程序执行开始地址LJMP START ;跳到标号START执行;- 主 程 序 -START:MOVP1,#01111111B; 点亮最下面的LED,即P1_7口低电平 LCALL DELAY50;延时50毫秒 MOV P1,#10111111B; 点亮下面第二个LED,即P1_6口低电平 LCALL DELAY50;延时50毫秒 MOV P1,#11011

7、111B;LED依次点亮 (以下省略) LCALL DELAY50;延时50毫秒 MOV P1,#11101111B LCALL DELAY50;延时50毫秒 MOV P1,#11110111B LCALL DELAY50;延时50毫秒 MOV P1,#11111011B LCALL DELAY50;延时50毫秒 MOV P1,#11111101B LCALL DELAY50;延时50毫秒 MOV P1,#11111110B LCALL DELAY50;延时50毫秒 MOV P1,#11111111B;完成第一次循环点亮,延时约0.25秒 LCALL DELAY50;延时50毫秒 AJMP S

8、TART;反复循环;-延时子程序,12M晶振延时约50毫秒-DELAY50:MOV R4,#5L3: MOV R2,#20L1: MOV R3,#248 DJNZ R3 ,$DJNZ R2 ,L1DJNZ R4 ,L3 RET END(6)单击Keil C51 工具栏的“”图标,弹出名为“Options for Target Target 1”的对话框。单击“Output”标签页,选中“Create HEX File”项,然后“确定”。参见图1-10。图1-10 编译环境设置(7)我们先来看图111,图中1、2、3都是编译按钮,不同是1是用于编译单个文件;2是编译当前项目,如果先前编译过一次之

9、后文件没有做动编辑改动,这时再点击是不会再次重新编译的;3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。5是菜单中的它们。这个项目只有一个文件,你按123中的一个都可以编译。在4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。单击工具栏的按钮“”编译当前源程序。编译结果会显示在输出窗口4内。如果是“0 Error(s), 0 Warning(s).”就表示程序没有问题了(至少是在语法上不存在问题了)。如果存在错误或警告,双击错误,在源程序的错误行前会出现,修改后,再编译,直到通过为

10、止。图111 编译程序(8)编译后的结果会生成Intel HEX 格式的程序文件“test1.hex”,如图1-12。该文件可以被专门的芯片烧写工具(例如Top2004 编程器)载入并最终烧录到具体的芯片中。芯片安装到自己的电路板上,通电,就可以运行里面的程序了。图112编译信息窗口至此,您可以把编译好的文件烧到了芯片上。如何烧写片子,请看第三课。第二课在Keil C51下调试程序Keil C51 的调试功能非常强大,本章我们先做一个初步了解,等以后再慢慢体会。现在仍然以实验一LED 闪烁发光程序为例,来具体了解如何进行仿真操作。2.1 进入仿真状态如果程序编译通过,就可以仿真了。在仿真之前,

11、有一项参数最好配置一下,仍然按“”图标进入编译环境设置,如图2-1,找到“target”下的“Xtal (MHz)”项,填入合适的晶振频率,比如12。最后点击“确定”。进入仿真状态很简单,直接点击工具栏红色的“”图标。图2-1 编译调式环境设置2.2 认识各个仿真窗口1. 源程序窗口Keil C51 调试界面的中间是源程序窗口。黄色箭头“”所指为当前即将执行的代码。以深灰色标记的程序行是可以执行的代码(当然,在调试过程中未必一定要去执行)。以浅灰色标记的程序行不可作为代码来执行,它们是注释、空行、标号或ROM 数据表。以绿色标记的程序行表示曾经执行过的代码。如图2-2。图2-2 仿真窗口2.

12、寄存器窗口Keil C51 调试界面的左边是寄存器窗口。8051 的工作寄存器(R0R7)和系统寄存器(a、b、sp、dptr、PC、psw)都列出来了。Value 栏显示的是寄存器的当前数值。如果在调试过程中某个寄存器的值有变化,则会用蓝色的背景标记。单击psw 寄存器左边的“”,展开后还可以看到其每一位的情况。3. 汇编窗口单击工具栏的“”图标,源程序窗口会自动切换成汇编窗口。在汇编窗口里,我们可以看到每条指令的存储地址和编码等信息。再次单击“”,回到源程序窗口。4. 存储器窗口单击工具栏的“”图标,将显示出存储器窗口。51 单片机的存储器分为多个不同的存储空间,如果要观察代码存储器,就在

13、地址栏“Address:”内输入“C:地址”,例如:C:0080H;如果要观察外部数据存储器,就输入“X:地址”;如果要观察内部数据存储器,则可以输入“I:地址”。拖动存储器窗口右边的滚动条还可以观察输入地址附近的存储单元。存储器窗口有“Memory #1Memory #4”共4 个观察子窗,您可以用来分别观察代码存储器、内部数据存储器和外部数据存储器。存储器的内容是可以修改的。用鼠标右击打算要修改的存储单元,选择“Modify Memory at ”项,弹出修改对话框,可以随意修改存储单元的内容。5. 变量观察和堆栈窗口单击工具栏的“”图标,将显示变量观察和堆栈窗口(Watch & Call

14、 Stack Window)。在Locals 标签页,会自动显示局部变量的名称和数值。在C 语言程序的函数中,每一对花括号“”内定义变量都是局部变量,能够自动显示。在“Watch”标签页内,先用鼠标点击一次“type F2 to edit”,再按功能键“F2”,输入所要观察的局部或全局变量的名称,回车后就能显示出当前数值。在“Call Stack”标签页内,可以实时地观察到堆栈的使用情况。2.3 程序的运行控制Keil C51 能够实现程序单步和全速运行,具体由工具栏上的按钮来实现:l 复位按钮“”:单击此图标,能够使程序复位,程序将从地址C:0000H 处执行。l 全速运行“”:单击此图标,

15、能够使程序全速运行。l 停止运行“”:该图标原来是灰色(不可操作),在进入全速运行状态后会变成红色。如果要停下来,则可以按此图标。l 单步进入“”:按此图标可以实现程序的单步执行。在遇到函数调用时,会跟踪进入函数体。l 单步跳过“”:也是单步执行,但是遇到函数时,视作“1 条指令”来执行,不会跟踪进入。l 单步跳出“”:在调试程序时,如果希望从某个函数中提前返回,则可以按此图标。l 执行到光标“”:用鼠标单击某条可执行的代码(深灰色标记的程序行)。然后按此图标,则程序开始全速执行,当遇到光标所在的行时,会自动停下来。如果单击不可执行的程序行(有浅灰色标记),试图让程序执行到该行,是不允许的,“

16、”图标也会立即变成灰色,不让你操作。l 设置/清除断点“”:Keil C51 支持断点设置功能。单击需要设置断点的行,再单击此图标,我们会看到该行被一个红色的小方块标记。当程序全速运行时遇到断点,便会自动停下来。Keil C51 允许在同一个程序里设置多个断点。清除某个断点的方法是,将光标停在该行上,再按一次“”图标。另外一种设置/清除断点的快捷方法是,用鼠标在目标程序行的空白处双击,您不妨试一试。l 清除所有断点“”:如果设置了多个断点,想一并清除,则可以按此图标。2.4 外围设备访问Keil C51 的一大特色是在仿真调试时支持对外围设备的访问。单击菜单“Peripherals”,会弹出外

17、围设备菜单。在Peripherals 菜单里列出了标准51的外围设备(相对于CPU 内核而言):中断、I/O 端口、串行口和定时器等。现在执行菜单“Peripherals | I/O-Ports | Port 1”,弹出P1 端口的界面。在位07 中,用表示高电平,无表示低电平。执行菜单“Peripherals | Timer | Timer 0”,弹出定时器T0的界面。参见图2-3。弹出的外围设备菜单是可以操作的,不妨试试。 图2-3 外围设备中的P1 和T0 对话框2.5 进入调试模式单击开启关闭调试模式按钮,实验一中,我们使用Peripherals菜单选择I/O-PortsP1,打开P1

18、调试窗口,再按运行键,这时就可以看到P1中不断循环状态,空为“0”,打钩为“1” 。如图2-4。是不是不难呀?这样就完成了您的第一个项目。最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮,再按开启关闭调试模式按钮。然后我们就可以进行关闭KEIL等相关操作了。到此为止,我们已经初步学习了一些KEIL uVision2的项目文件创建、编译、运行和软件仿真的基本操作方法。其中一些功能的应用,如观察端口值、内部RAM、ROM值等有待大家不断地实践。 图24 调试运行程序 第三课TOP2004通用USB编程器的使用TOP2004通用编程器直接采用USB接口通讯和供电,可以工作在Win98SE/

19、Me/2000/XP操作系统,无须外接电源,编程速度快,支持2.5V6.5V器件,软件升级灵活。一、编程器软件的安装:1、请务必断开编程器,不要连接编程器2、运行配套光盘中TOPWIN目录内的SETUP.EXE文件,按照提示进行安装3、最后按“确认”重启电脑4、电脑重启完成后,用配套的USB电缆连接编程器,电脑会提示“找到新硬件”按照提示自动搜索软件,一直完成USB初始化安装5、光盘中TOPWIN10.EXE是中文界面的编程器软件,可以进行安装6、运行“开始程序TOPWIN”软件会出现“正在初始化USB接口,需要310秒”的界面,随后进入专用编程软件7、如果因为安装次序不正确引起的或者其他原因

20、造成安装失败,可以点击:我的电脑右键“属性”硬件设备管理器JUNGO中有黄色感叹号的选中按DEL删除,然后再重复以上16步骤即可。这是编程器的专用软件界面:二、读写芯片的步骤:1、将51芯片插入插座,注意方向2、运行编程器软件3、型号 选择ATMEL 89S514、读写 擦除显示正常结束 5、读写 读器件 工作区显示全FF 退出5、装载 选择文件(*.hex) 在工作区显示装载的文件的十六进制代码6、读写 写器件 显示写入完成 退出7、完成,取出芯片,放入实验板验证。第二部分 单片机实验实验一:P0、P1、P2口的输入、输出实验一、实验要求1、熟悉语言编辑工具、单片机编程器的使用。2、通过实验

21、,加深对P0、P1、P2口的了解。3、学习利用P1口作输出口,外接发光二极管及编程驱动。4、学习利用P2口作开关输入口及控制输出口,外接开关及编程驱动。5、学习利用P0口作输出口,外接数码显示管的方法。二、实验目的1、掌握单片机最小系统的设计。2、学习P0、P1、P2口的使用方法。 3、学习发光二极管、键盘、数码显示管、蜂鸣器的运用。 4、学习延时子程序的编写和使用。三、实验内容1、仔细研究实验原理图,有条件的学生可以自己购买器件焊接实验板。(1)起振电路:使用芯片内部时钟,外接石英晶体12MHz和微调电容30pF。(2)复位电路:复位电路由22uF的电容和1k的电阻组成。(3)当EA信号为高

22、电平时,则对ROM的读操作是从内部程序存储器开始。 2、单片机的P1口做输出口,外接8只LED,编写程序,使LED循环点亮。3、P2.0P2.2、P2.6、P2.7口做输入口,外接开关;编写程序读取P2.0P2.2、P2.6、P2.7口开关状态,并将开关状态在P1.0P1.7口发光二极管上显示出来。4、P0口接一对共阴数码显示管,编写程序使数码显示管循环显示数字19。5、延时子程序的编写及延时计算延时时间的设计:20(498+2)+2=10002 DELAY:MOVR0,#202个2+2248=498DELAY1:MOVR1,#2482个DJNZR1,$2个DJNZR0,DELAY12个RET

23、查指令表可知,MOV,DJNZ指令均需用两个机器周期,而一个机器周期的时间长度为1212MHz = 1 微秒,所以该段程序执行时间为:20 ( 2 + 2248 ) +2 + 2 = 10002 us = 10.002 ms由上可知,R0 = 20 , R1 = 248 延时10 ms ;R0 =10 , R1 = 248 延时5 ms ;若计算延时200 ms,则使用 R3 10 ms = 200 ms ,R3 = 20。延时子程序如下:DELAY:MOVR3,#20D1:MOVR4,#20D2:MOVR5,#248DJNZR5,$DJNZR4,D2DJNZR3,D1RET四、实验电路及程序

24、框图四、实验器材清单电 源:12V稳压电源1台;电源插座1只;LM7805稳压管1只;470uF电解电容2只;0.1uF瓷片电容2只。晶振电路:12M晶振1只;30PF电容2只。复位电路:1K电阻1只,22uF电容1只。控制部分:AT89S51单片机1个。数码管: 1K提拉排阻1只;2位连体数码管1只。流水灯: LED发光二极管8只;限流电阻5608只。蜂鸣器: S8550PNP型驱动三极管1只;1K分压电阻1只;5v蜂鸣器1只。开 关:微动开关4只;4路DIP开关1只。五、实验说明1、P2口是准双向口。它作为输出口时与一般双向口使用方法相同。由准双向口结构可知当P2口作为输入口时,必须先对它

25、置高电平使内部MOS管截止。因为内部上拉电阻阻值是20k40k,故不会对外部输入产生影响。若不先对它置高,且原来是低电平,则MOS管道通,读入的数据是不正确的。2、认识数码管:本次实验使用的是共阴数码管,公共端是”1”、”6”,公共端置”0”,则显示段置”1”就亮。”1”控制左面的数码管;”6”控制右面的数码管。正面看数码管的引脚对应数据线的关系为: 对应数据线D7D6D5D4D3D2D1D0对应显示段efDPgcdba0CF110011111030000001125D0101110135B01011011493100100115DA110110106DE1101111074301000011

26、8DF110111119DB11011011实验板上的7段数码管09数字的共阴显示代码为:0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH六、参考程序 1、P1口循环点灯(1)程序流程框图(2)汇编语言编写程序;-入口程序 -ORG 0000H ;程序执行开始地址LJMP START ;跳到标号START执行;- 主 程 序 -START:MOVP1,#01111111B; 点亮最下面的LED,即P1_7口低电平LCALL DELAY50;延时50毫秒 MOV P1,#10111111B; 点亮下面第二个LED,即P1_6口低电平LCALL DELAY5

27、0;延时50毫秒 MOV P1,#11011111B;LED依次点亮 (以下省略)LCALL DELAY50;延时50毫秒 MOV P1,#11101111B LCALL DELAY50;延时50毫秒 MOV P1,#11110111B LCALL DELAY50;延时50毫秒 MOV P1,#11111011B LCALL DELAY50;延时50毫秒 MOV P1,#11111101B LCALL DELAY50;延时50毫秒 MOV P1,#11111110B LCALL DELAY50;延时50毫秒 MOV P1,#11111111B;完成第一次循环点亮,延时约0.25秒 LCALL

28、DELAY50;延时50毫秒 AJMP START;反复循环;-延时子程序,12M晶振延时约50毫秒-DELAY50:MOV R4,#5L3: MOV R2,#20L1: MOV R3,#248 DJNZ R3 ,$DJNZ R2 ,L1DJNZ R4 ,L3 RET END2、P2.0P2.2及P2.6、P2.7口开关状态显示(1)程序流程框图(2)汇编语言编写程序ORG 0000H START:MOVP2,#FFH;读引脚初始化,同时灭灯MOV A,P2;读入P2口数据ORL A,#38H;屏蔽非输入口数据MOVP1,A;开关状态显示(开关闭合,低电平,灯亮)LCALL DELAY250;

29、延时250毫秒 AJMP START;反复循环;-延时子程序,12M晶振延时约250毫秒-DELAY250:MOV R4,#25L3: MOV R2,#20L1: MOV R3,#248 DJNZ R3 ,$DJNZ R2 ,L1DJNZ R4 ,L3 RET END3、P0口输出,数码管循环显示数字(1)程序流程框图NY(2)汇编语言编写程序temp equ 22h ;计数器数值存放内存位置org 0000Hstar: mov temp,#0 ;初始化计数器,从0开始stlop: acall display;调用显示子程序inc temp;对计数器加1mov a,tempcjne a,#10

30、,next ;判断计数器是否满10?mov temp,#0;满10就清零重新开始next:ljmp stlop;不满就循环执行;显示子程序display: mov a,temp ;将temp中的十六进制数转换成10进制 mov dptr,#numtab ;指定查表启始地址MOVC A,A+DPTR;查数字的7段代码mov P0,a ;送出数字的7段代码clr P2.7 ;送出显示控制acall delay1s ;显示1秒ret;延时子程序delay1s: MOV R4,#60L3: MOV R2,#20L1: MOV R3,#248 DJNZ R3,$DJNZ R2 ,L1DJNZ R4 ,L

31、3 RET ;实验板上的7段数码管09数字的共阴显示代码numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBHend七、实验报告1、说明实验目的和内容。2、给出程序设计框图并说明编程思想,给出程序清单。3、根据实验内容,调式程序,观察、分析程序的运行过程。4、给出实验结果并进行分析。5、实验体会。八、思考题1、利用实验板的原理图,用软件延时实现交通信号灯的自动管理。实际交通灯的变化情况和规律:假设一个十字路口为东南西北走向。初始状态0为东西南北都红灯亮。然后转状态1东西绿灯通车,南北红灯亮。过一段时间后,转状态2,东西绿灯闪烁5次后灭,黄灯亮,南北还是红灯。再转状态3,南北绿灯通车,东西红灯亮。过一段时间后转状态4,南北绿灯闪烁5次后灭,黄灯亮,东西还是为红灯亮,一段时间后,又循环至状态1。对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,所以只要用两组就行了,因此,采用单片机内部的I/O口上的P1.0P1.5共6个引脚即可来控制6个信号灯。要求:1、 画出程序框图。2、 根据程序框图完成程序设计。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教学课件 > 其他教案课件

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922