KEIL调试方法.doc_第1页
KEIL调试方法.doc_第2页
KEIL调试方法.doc_第3页
KEIL调试方法.doc_第4页
KEIL调试方法.doc_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

成都信息工程学院单片机课程组 Tel:(028)85966010目 录第1章Keil C51操作入门31.1Keil C51简介31.2Keil C51的安装31.3建立第1个Keil C51程序31.4新建A51汇编工程8第2章在Keil C51下调试程序92.1进入仿真状态92.2认识各个仿真窗口92.3程序的运行控制122.4外围设备访问13第3章DP-51MCore基本操作143.1DP-51MCore简介143.2以ISP下载方式运行程序143.2.1ISP电路说明143.2.2ISP驱动程序Flash Magic简介153.2.3ISP操作步骤153.3以硬件在线仿真的方式调试程序173.4内嵌在线仿真占用的系统资源18第4章DP-51MCore实验194.1基础实验194.1.1实验1:点亮LED194.1.2实验2:按键控制LED214.1.3实验3:LED闪烁发光224.1.4实验4:按键中断244.1.5实验5:用PWM方波调节LED亮度254.1.6实验6:UART基本收发274.2MCU BANK1实验314.2.1实验1:动态数码管扫描314.2.2实验2:按键扫描334.2.3实验3:DAC0832(8位并行DAC)344.2.4实验4:ADC0804(8位并行ADC)354.2.5实验5:TLC5615(10位串行DAC)364.2.6实验6:TLC1549(10位串行ADC)384.3MCU BANK2实验394.3.1实验1:动态数码管扫描394.3.2实验2:交流蜂鸣器发声404.3.3实验3:交流蜂鸣器演奏简单乐曲424.3.4实验4:用8255扩展并行IO444.3.5实验5:按键扫描454.3.6实验6:扩展片外RAM464.3.7实验7:在RAM中执行程序代码484.4MCU BANK3实验504.4.1实验1:流水灯LED504.4.2实验2:动态数码管扫描514.4.3实验3:按键扫描524.4.4实验4:行列键盘扫描534.4.5实验5:555脉冲测量544.4.6实验6:EEPROM读写564.4.7实验7:LM75数字温度传感器574.4.8实验8:PCF8563时钟584.5MCU BANK4实验604.5.1实验1:动态数码管扫描604.5.2实验2:按键扫描614.5.3实验3:12864液晶屏显示ASCII码624.5.4实验4:12864液晶屏显示汉字644.5.5实验5:PC键盘654.6综合实验664.6.1实验1:红外收发664.6.2实验2:UART双机通信684.6.3实验3:RS-485双机通信69第1章 Keil C51操作入门1.1 Keil C51简介Keil C51是德国知名软件公司Keil(现已并入ARM公司)开发的基于8051内核的微控制器软件开发平台,是目前开发8051内核单片机的主流工具。在广州周立功单片机发展有限公司网站()可以免费下载到Keil C51 V7.09的评估版本。1.2 Keil C51的安装安装Keil C51非常简单,步骤如下:l 运行Keil C51 V7.09评估版SETUP目录下的“Setup.exe”。l 当出现如图 1.1所示的对话框时,请选择“Eval Version”版本安装。图 1.1 Keil C51评估版安装选择l 在接下来的几个对话框中选择“Next”或“Yes”,提示填入用户名和公司名时,照实际情况填写。l 安装完毕后按“Finish”结束。1.3 建立第1个Keil C51程序Keil C51是一个功能很强大的软件,但是使用起来并不复杂。现在就通过建立一个简单的LED(发光二极管)闪烁发光的实例来初步掌握Keil C51的基本用法。硬件电路参见图 1.2,单片机I/O输出低电平可点亮LED。图 1.2 LED闪烁发光电路l 启动Keil C51软件。您可以通过双击电脑桌面上的“Keil uVision2”快捷方式图标来启动。l 新建工程。执行Keil C51软件的菜单“Project | New Project”,弹出一个名为“Create New Project”的对话框。先选择一个合适的文件夹准备来存放工程文件,比如“E:ProjectLedFlash”,其中“LedFlash”是新建的文件夹。我们建议:今后每新建一个工程都要在适当的磁盘位置新建一个文件夹用来保存工程文件,以方便管理,并养成良好的习惯。最后,为工程取名为“LedFlash”,并保存。参见图 1.3。图 1.3 新建Keil C51工程l 选择CPU。紧接着,Keil C51提示您选择CPU器件。8051内核单片机最早是由鼎鼎大名的Intel公司发明的,后来其他厂商如Philips、Atmel、Winbond等先后推出其兼容产品,并在8051的基础上扩展了许多增强功能。在这里可以选择Philips的第1个器件“80/87C51”,该器件与Intel的8051完全兼容。参见图 1.4。图 1.4 选择CPUl 接下来弹出一个如图 1.5所示的对话框。该对话框提示您是否要把标准8051的启动代码添加到工程中去。Keil C51既支持C语言编程也支持汇编语言编程。如果打算用汇编语言写程序,则应当选择“否(N)”。如果打算用C语言写程序,一般也选择“否(N)”,但是,如果用到了某些增强功能需要初始化配置时,则可以选择“是(Y)”。在这里,我们选择“否(N)”,即不添加启动代码。图 1.5 选择是否要添加启动代码至此,一个空的Keil C51工程建立完毕。l 执行菜单“File | New”,出现一个名为“Text n”(其中n表示序号)的文档。l 接着执行菜单“File | Save”,弹出一个名为“Save As”的对话框。将文件名改为“main.c”,然后保存,参见图 1.6。注意:扩展名“.c”不可省略。图 1.6 保存新建的源程序文件l 添加源程序文件到工程中。现在,一个空的源程序文件“main.c”已经建立,但是这个文件与刚才新建的工程之间并没有什么内在联系。我们需要把它添加到工程中去。单击Keil C51软件左边项目工作窗口“Target 1”上的“”,将其展开。然后右击“Source Group 1”文件夹,会弹出如图 1.7所示的选择菜单。单击其中的“Add Files to Group Source Group 1”项,将弹出如图 1.8所示的对话框。l 先选择文件类型为“C Source file (*.c)”,这时,对话框内将出现刚才保存过的“main.c”。单击文件“main.c”,再按一次“Add”按钮(请不要多次点击“Add”按钮),最后按“Close”按钮。这时,源程序文件“main.c”已经出现在项目工作窗口的“Source Group 1”文件夹内,可以单击左边的“”展开后查看。图 1.7 准备添加源程序文件到工程中图 1.8 向工程中添加源程序文件l 现在开始输入源程序。先最大化“main.c”源程序窗口,然后请按程序清单 1.1输入程序代码。程序清单 1.1 LED闪烁发光程序main.c/*程序名称:LED闪烁发光硬件接法:P1.1控制LED,低电平点亮运行效果:LED亮200ms,灭800ms,反复循环*/#include /包含8051的SFR寄存器定义头文件sbit LED = P11;/定义I/O接口/*函数:Delay()功能:延时0.01s2.56s参数:t0时,延时(t*0.01)s t=0时,延时2.56s说明:定时10ms的定时器初值65536-0.01/(1/(f/12),其中f为晶振频率*/void Delay(unsigned char t)doTH0 = 0xDC;/设置定时器初值(定时10ms)TL0 = 0x00;TR0 = 1;/启动定时器while ( !TF0 );/等待定时器溢出TR0 = 0;/停止定时器TF0 = 0;/清除溢出标志 while ( -t != 0 );/循环t次/主函数void main()TMOD &= 0xF0;/T0设置在方式1,即16位定时器(不影响T1的模式)TMOD |= 0x01;for (;)LED = 0;/点亮LEDDelay(20);/延时200msLED = 1;/熄灭LEDDelay(80);/延时800msl 单击Keil C51工具栏的“”图标,弹出名为“Options for Target Target 1”的对话框。单击“Output”标签页,选中“Create HEX File”项,然后“确定”。参见图 1.9。图 1.9 编译环境设置l 单击工具栏的按钮“”编译当前源程序。编译结果会显示在输出窗口内。如果是“0 Error(s), 0 Warning(s).”就表示程序没有问题了(至少是在语法上不存在问题了)。如果存在错误或警告,请仔细检查您的程序是否与程序清单 1.1一致。修改后,再编译,直到通过为止。l 编译后的结果会生成Intel HEX格式的程序文件“LedFlash.hex”。该文件可以被一类叫做“ISP”(In System Programming)的下载方法烧录到芯片内,下载后就可以运行了。ISP采用的是串行在线方式下载,因此芯片不必从电路板上取下。DP-51MCore多核单片机实验仪上的四台P89V51RB2芯片都能很好的支持ISP下载操作。1.4 新建A51汇编工程Keil C51软件也支持A51汇编编程。建立A51工程的操作步骤与建立C51工程基本相同,但有几个要点请注意:l 新建的源程序文件名要以“.A51”或“.ASM”作为后缀。l A51源程序添加到工程中时,文件类型要选择“Asm Source file(*.s*; *.src; *.a*)”。其它操作步骤都跟建立C51工程相同。第2章 在Keil C51下调试程序Keil C51的调试功能非常强大,本章我们先做一个初步了解,等以后再慢慢体会。现在仍然以LED闪烁发光程序为例,来具体了解如何进行仿真操作。2.1 进入仿真状态如果程序编译通过,就可以仿真了。在仿真之前,有一项参数最好配置一下,仍然按“”图标进入编译环境设置,找到“Xtal (MHz)”项,填入11.0592。最后点击“确定”。进入仿真状态很简单,直接点击工具栏红色的“”图标。2.2 认识各个仿真窗口图 2.1 Keil C51源程序窗口1. 源程序窗口Keil C51调试界面的中间是源程序窗口,参见图 2.1。黄色箭头“”所指为当前即将执行但还没有执行的代码。以深灰色标记的程序行是可以执行的代码(当然,在调试过程中未必一定要去执行)。以浅灰色标记的程序行不可作为代码来执行,它们是注释、空行、标号或ROM数据表。以绿色标记的程序行表示曾经执行过的代码。2. 寄存器窗口图 2.2 Keil C51寄存器窗口Keil C51调试界面的左边是寄存器窗口,参见图 2.2。8051的工作寄存器(R0R7)和系统寄存器(a、b、sp、dptr、PC、psw)都列出来了。Value栏显示的是寄存器的当前数值。如果在调试过程中某个寄存器的值有变化,则会用蓝色的背景标记。单击psw寄存器左边的“”,展开后还可以看到其每一位的情况。3. 汇编窗口单击工具栏的“”图标,源程序窗口会自动切换成汇编窗口,参见图 2.3。在汇编窗口里,我们可以看到每条指令的存储地址和编码等信息。再次单击“”,回到源程序窗口。4. 存储器窗口单击工具栏的“”图标,将显示出存储器窗口,参见图 2.4。8051单片机的存储器分为多个不同的逻辑空间。如果要观察代码存储器的内容,就在地址栏“Address:”内输入“C:地址”,例如:C:0080H。同理,观察内部数据存储器输入“I:地址”,观察外部数据存储器输入“X:地址”。拖动存储器窗口右边的滚动条可观察其它存储单元。存储器窗口有“Memory #1Memory #4”共4个观察子窗,可以用来分别观察代码存储器、内部数据存储器和外部数据存储器。存储器的内容是可以修改的。用鼠标右击打算要修改的存储单元,选择“Modify Memory at ”项,弹出修改对话框,可以随意修改存储单元的内容。图 2.3 Keil C51汇编窗口图 2.4 Keil C51存储器窗口图 2.5 Keil C51变量观察和堆栈窗口5. 变量观察和堆栈窗口单击工具栏的“”图标,将显示变量观察和堆栈窗口(Watch & Call Stack Window),参见图 2.5。在Locals标签页,会自动显示局部变量的名称和数值。在C语言程序的函数中,每一对花括号“”内定义变量都是局部变量,能够自动显示。在“Watch”标签页内,先用鼠标点击一次“type F2 to edit”,再按功能键“F2”,输入所要观察的局部或全局变量的名称,回车后就能显示出当前数值。在“Call Stack”标签页内,可以实时地观察到堆栈的使用情况。2.3 程序的运行控制Keil C51能够实现程序单步和全速运行,具体由工具栏上的按钮来实现:l 复位按钮“”:单击此图标,能够使程序复位,程序将从地址C:0000H处执行。l 全速运行“”:单击此图标,能够使程序全速运行。l 停止运行“”:该图标原来是灰色(不可操作),在进入全速运行状态后会变成红色。如果要停下来,则可以按此图标。l 单步进入“”:按此图标可以实现程序的单步执行。在遇到函数调用时,会跟踪进入函数体。l 单步跳过“”:单步执行,遇到函数时视作“1条指令”来执行,不会跟踪进入。l 单步跳出“”:在调试C语言程序时,如果希望从某个函数中提前返回,则可以按此图标。l 执行到光标“”:用鼠标单击某条可执行的代码(深灰色标记的程序行)。然后按此图标,则程序开始全速执行,当遇到光标所在的行时,会自动停下来。如果单击不可执行的程序行(有浅灰色标记),试图让程序执行到该行,是不允许的,“”图标也会立即变成灰色,不让您操作。l 设置/清除断点“”:Keil C51支持断点设置功能。单击需要设置断点的行,再单击此图标,我们会看到该行被一个红色的小方块标记。当程序全速运行时遇到断点,便会自动停下来。Keil C51允许在同一个程序里设置多个断点。清除某个断点的方法是,将光标停在该行上,再按一次“”图标。另外一种设置/清除断点的快捷方法是,用鼠标在目标程序行的空白处双击,您不妨试一试。l 清除所有断点“”:如果设置了多个断点,想一并清除,则可以按此图标。图 2.6 外围设备中的P1和T0对话框2.4 外围设备访问Keil C51的一大特色是在仿真调试时支持对外围设备的访问。单击菜单“Peripherals”,会弹出外围设备菜单。在Peripherals菜单里列出了标准8051的外围设备(相对于CPU内核而言):中断、I/O端口、串行口和定时器等。现在执行菜单“Peripherals | I/O-Ports | Port 1”,弹出P1端口的界面。在位07中,用表示高电平,无表示低电平。执行菜单“Peripherals | Timer | Timer 0”,弹出定时器T0的界面。参见图 2.6。弹出的外围设备菜单是可以操作的,不妨试试。第3章 DP-51MCore基本操作3.1 DP-51MCore简介DP-51MCore是广州致远电子有限公司最新设计的“多CPU核单片机综合仿真实验仪”。该实验仪内置4片NXP半导体(原Philips半导体)高性能MCU,兼容标准8051架构,16KB片内Flash ROM,支持ISP下载,能够反复烧录程序代码,内嵌有硬件仿真器。DP-51MCore多核单片机实验仪是各大专院校建立单片机公共实验室的上佳选择。主要特点:l 有电源总开关及四个分开关,分开关可以分别控制四台MCU的电源。l 四台MCU主机各自负责一部分外围电路,相互独立运行。l 外围电路尽可能用I/O端口直接控制,避免复杂转换,方便学生理解、编程和做实验。l I/O接口尽量不复用,因此做实验时不需要任何连线(通信类实验例外),直接下载程序代码即可运行。l 进行ISP下载时,通过两只开关就能够切换串行通信口,也无需连线。l 四台MCU主机虽然互相独立,但也可以通过串行接口、红外线、RS-485接口通信,支持双机通信和群组通信。l 每台MCU主机都内嵌有一个实时在线仿真器。可结合Keil C51(目前主流的8051系列软件开发平台)仿真,操作方法与纯软件仿真一致。各模块主要外围电路如下:BANK 1BANK 24位动态扫描数码管双RS-485接口(支持双机和多机通信)8位并行D/A8位并行A/D10位串行D/A10位串行A/D4只独立按键及发光二极管4位动态扫描数码管4只独立按键及发光二极管并行扩展32KB RAM(可存储数据或代码)传统并行I/O扩展电路8255红外线数据发送电路交流蜂鸣器,可演奏动听乐曲BANK 3BANK 48位动态扫描数码管4只独立按键及发光二极管44行列式按键8只流水灯LEDNE555方波发生器(占空比595连续可调)双RS-485接口(支持双机和多机通信)EEPROM(电可擦除只读存储器)芯片24C02实时时钟/万年历芯片PCF8563数字温度传感器LM75红外数据接收电路12864点阵液晶屏,可显示汉字4位动态扫描数码管4只独立按键及发光二极管PS/2计算机键盘接口通用PACK接口(支持USB、CAN BUS、网卡、射频卡等模块)3.2 以ISP下载方式运行程序3.2.1 ISP电路说明图 3.1是简化了的P89V51系列单片机的ISP电路图,如果去掉串行接口部分(J1和U1),就成了传统8051单片机的最小系统电路。部分信号的名称前缀有小写字母n,这表示低电平有效。在电路中,要注意几个要点:l VCC是电源,必须保证稳定可靠;l nEA管脚不可悬空,必须连到VCC,或者通过上拉电阻接到VCC;l 复位电路建议采用传统的RC复位,最好多带一个复位按键,以方便操作;l 不可外接看门狗复位电路,否则在ISP期间会引起复位,导致下载失败;l 晶振的频点不是任意的,推荐用11.0592MHz或22.1184MHz;l 注意:nPSEN管脚请悬空处理,不要接GND,这和P89C51系列的情况不同。图 3.1 简化后的P89V51单片机ISP电路3.2.2 ISP驱动程序Flash Magic简介Flash Magic是支持众多NXP半导体(原Philips半导体)芯片ISP下载的驱动程序,其中就包括对P89(L)V51RB2、RC2、RD2的支持。该软件可以在下列网站免费下载:周立功单片机:Embedded Systems Academy:Flash Magic软件的安装方法非常简单,略。3.2.3 ISP操作步骤1. 连接串行口电缆注意,电脑DB9连接器的2脚是电脑的接收Rx,3脚是电脑的发送Tx,5脚是GND。通常串行口电缆分“交叉”与“不交叉”两种,要注意区分,不可接反。推荐用带有真正串行口的电脑操作,如果是USB虚拟的串口,则可能会出现下载失败的情况。2. 设置ISP选择开关状态DP-51MCore实验仪有四台单片机,但是与电脑连接的RS-232接口(在箱体侧面)只有1个,因此必须进行切换。DP-51MCore采取巧妙的设计,用两只ISP开关来切换,避免了繁琐的接线过程,其实现原理详见光盘里的实验电路图。具体操作时,如果要把HEX程序文件下载到MCU BANK1,则位于DP-51MCore实验仪中央的ISP选择开关需要扳到“00”状态,旁边的“#1”指示灯同时点亮。如果要下载到MCU BANK3,则ISP选择开关可以扳到“10”状态,指示灯“#3”点亮。3. 运行Flash Magic软件图 3.2 Flash Magic软件操作界面运行Flash Magic软件,参见图 3.2。各步骤操作如下:Step 1:COM Port:选择实际使用的串行口,通常为COM1;Baud Rate:波特率不可设置得过高,推荐用9600;Device:请选择正确的型号89V51RB2;Interface:选择None(ISP)。Step 2:请勾中“Erase blocks used by Hex File”。Step 3:装入你的程序文件,注意必须为HEX格式。Step 4:请勾中“Verify after programming”(编程后校验);对其它几项如果不了解,请不要勾中。Step 5:请先给电路板上电,同时按住复位键不松手,然后点击Flash Magic软件的“Start”按钮。当出现提示您复位的对话框时再松开复位键,ISP下载过程开始。如果您的电路板没有设置复位键,可以先点击“Start”,然后给电路板上电。4. 运行程序ISP下载结束后,按一次复位键或者重新上电程序即开始运行。3.3 以硬件在线仿真的方式调试程序DP-51MCore实验仪内嵌有仿真功能,在Keil C51软件支持下,能够进行硬件在线仿真。该仿真模式具有操作方便、占用资源少等优点。我们还是以LED闪烁发光的程序为例,来讲解在Keil C51的支持下如何使用DP-51MCore的仿真功能。具体操作步骤如下:l 使芯片进入仿真状态。对四台P89V51RB2单片机来说,操作方法是相同的。如果电路还没有上电,请按住K4键不松手,再上电,最后松开K4,即进入仿真状态。如果电路已经上电,则先按住K4键不松手,再按一次RST键,最后松开K4键,也能进入仿真状态。l 运行Keil C51软件,执行菜单“Project | Open Project”,打开工程“LedFlash.Uv2”。l 单击Keil C51工具栏的“”图标,弹出“Option for Target Target 1”对话框。l 单击“Debug”标签页,默认的调试器是“Use Simulator”。现在选中“Use: Keil Monitor-51 Driver”调试器,然后勾中下面的“Go till main”项。参见图 3.3。图 3.3 Keil C51的调试选项l 单击右上角的“Settings”按钮。请选择正确的串行通信端口(通常为COM1)和波特率(推荐9600),然后确定。l 单击“Options for Target Target 1”对话框的“确定”按钮,完成设置。l 单击Keil C51工具栏的“”图标。这时,会弹出一个警告对话框,提示当前的Keil C51软件是“EVALUATION VERSION”(评估版)。单击“确定”按钮,数秒钟后进入仿真调试状态。如果未能进入,请仔细检查操作步骤是否有误,然后再试一次。l 仿真调试方法与第2章讲解的内容几乎完全相同。l 一旦进入全速运行,请不要点击“”停止运行,这一点与纯软件仿真不同。正确的方法是,按住K4键不松手,按一次RST键,最后松开K4,程序即停止运行。再次单击“”图标,可退出Keil C51的仿真状态。l 芯片退出仿真状态。退出的方法非常简单,先按住RST不松手,再利用Flash Magic软件进行一次ISP下载就能退出仿真状态。换句话说,可以直接进行ISP操作,仿真状态自然会退出。3.4 内嵌在线仿真占用的系统资源通过前面的仿真操作,我们已经看到,在内嵌仿真器真的是功能强大,而且操作非常简单。但是,任何仿真方式(包括专业仿真器)都不能做到100%的“真实”,总是与实际芯片有些差别。内嵌的仿真器也不例外,要占用一小部分系统资源。希望读者能够了解一下这些限制,在以后调试程序的时候不致茫然。如果在您的程序里确实需要用到被占用的资源,则可以考虑改用ISP下载方式调试程序。内嵌仿真器所占用的系统资源为:l 动态地占用2个字节的程序堆栈。因此,在调试程序的时候,有时会出现堆栈指针SP的数值比预期值大的情况。l 占用单片机的串行口资源。因为内嵌仿真器是通过串行口与Keil C51软件通信的,因此,单片机的串行口资源被占用。这些资源包括:P3端口的RXD/P3.0和TXD/P3.1管脚、串行口中断向量、串行口控制寄存器SCON和SBUF。通常串行口的波特率发生器是用定时器T1来做的,但是内嵌仿真器并不占用T1,您在程序里可以放心地使用这个定时器(当然,您不能拿它再来做波特率发生器)。l T2定时器被占用。在Intel公司最早推出的8051单片机中不存在T2定时器,在紧接着推出的8052中新增了T2。以后其它厂商凡采用8052内核的兼容单片机都带有T2定时器。T2定时器也可以作为串行口通信的波特率发生器,内嵌仿真器正是这样用的。与T2相关的资源自然都被占用,如T2的中断向量、T2的控制寄存器T2CON、TH2、TL2、RCAP2H、RCAP2L等。第4章 DP-51MCore实验4.1 基础实验4.1.1 实验1:点亮LED1. 实验目的l 掌握LED的基础知识l 学会I/O直接驱动小功率负载的正确方法l 复习Keil C51的基本用法(新建工程和软件仿真)l 学会DP-51MCore的使用方法(ISP下载和硬件仿真)2. 实验原理图 4.1 基础实验:点亮LEDDP-51MCore实验仪四台单片机的P1.1端口都接有一只LED(Light-Emitting Diode,发光二极管),电路如图 4.1所示。当有一定的正向电流流过LED时,就会发光。LED常见的颜色有红、黄、绿,此外还有蓝色和白色。封装形式有贴片和插装两大类。普通硅二极管在正向导通时PN结压降大约有0.50.8V,而LED的却有1.5V2.0V,因此单节的干电池有可能无法直接点亮LED。为了限制电流过大可能烧毁LED,正常使用时应当串联数百欧姆到数千欧姆的限流电阻。LED反向偏置时不导通,也不会发光。DP-51MCore硬件电路规定:输出低电平时点亮LED、输出高电平时熄灭。那为何不规定高电平点亮呢?这样不是更符合习惯吗?很多8051单片机的初学者都可能有这样的疑问,于是很自然地会出现类似图 4.2左边的设计。看起来这样设计没有什么不对,但结果呢,不论I/O输出高电平还是低电平都不能点亮LED(或者有很微弱的亮度)!图 4.2 8051单片机I/O直接驱动LED错误与正确的接法原来,8051单片机的I/O是“准双向结构”,内部有一个(等效的)弱上拉电阻(请参见教科书上的内部结构示意图),输出低电平时吸收电流可以达到数毫安,可以驱动一只LED;而输出高电平时驱动电流仅有数十到数百微安,无法正常点亮LED。因此,要让8051的I/O在高电平时点亮LED是不正确的设计,应当改为低电平驱动,如图 4.2右边所示。3. 实验步骤以下的实验操作步骤可能用到了前两章讲的知识,建议预先学习这些内容。l 详细阅读光盘里的实验例程,然后自己从头开始新建工程、编辑、编译,最后生成HEX程序文件。可以多练习几次,逐步掌握Keil C51的入门用法。l 用软件仿真的方法运行实验例程,了解基本的仿真操作。l 现在开始硬件调试。请连接好DP-51MCore实验仪的串行通信电缆和电源线。l 打开电源总开关(在箱体侧面)。l ISP选择开关(在中央)扳到“00”。l 打开MCU BANK1的电源开关。l 用Flash Magic软件下载程序文件“LED.hex”。l 按复位键RST或重新上电使运行程序,看到接在P1.1端口的LED被点亮。l 利用芯片内嵌的仿真器调试实验例程。l 以同样的方法在另外3台单片机上运行实验例程。4.1.2 实验2:按键控制LED1. 实验目的l 学习I/O的基本输入用法l 巩固Keil C51的基本操作l 熟练掌握DP-51MCore实验仪的用法2. 实验原理图 4.3 基础实验:按键控制LED按键是单片机系统最常见的输入设备。8051的I/O端口具有准双向特性,可以接受外部的逻辑电平信号输入。要注意:读入管脚的输入信号电平状态之前,必须先确认该管脚已经置“1”,切记!如果I/O管脚的状态是被清0,则根据内部结构图(参见图 4.4)可知,不论输入是高电平还是低电平,最终被读到的结果总是“0”。硬件实际的接法是按键K2接在P3.3/INT1端口上,但I/O内部结构类似,道理相同。图 4.4 P1端口内部结构示意图3. 实验步骤l 参考光盘里的实验例程,自己动手建立Keil C51工程。l 编辑源程序,编译生成HEX文件。l 利用Flash Magic软件下载程序文件。下载到任意四台单片机中任意一台都可以。l 运行程序,按下按键K2时LED被点亮,抬起时熄灭。4.1.3 实验3:LED闪烁发光1. 实验目的l 学习定时器的简单用法2. 实验原理图 4.5 基础实验:LED闪烁发光不管是哪一款单片机,定时器/计数器几乎都是标准配置,学会其用法是起码的要求。8051单片机内部有两个定时器/计数器:T0和T1,8052内核的单片机还新增了T2。定时器与计数器概念的区别仅仅是时钟来源不同,定时器的计时脉冲来自晶振的12分频,而计数器的计数脉冲来自外部管脚T0/P3.4或T1/P3.5。在本实验中,先来学习定时器的用法。T0和T1共有4种工作模式,其中模式0为13位定时器。奇怪吧,怎么不是8位、16位,而是13位呢?这是为了与早期的8048兼容而设置的,现在基本上不再使用。TMOD、TCON、TH0、TL0、TH1、TL1是与定时器操作有关的几个寄存器。表格 4.1 TMOD寄存器76543210GATEC/TM1M0GATEC/TM1M0定时器模式寄存器TMOD:SFR地址为89H,不可位寻址。TMOD的结构如表格 4.1所示。TMOD的低4位用于对T0的控制,高4位控制T1。当“M1,M0=0,1”时,定时器被设置为方式1,即16位定时器。“C/T=0”为定时器,“C/T=1”作为计数器。“GATE”是门控位,T0、T1作为16位定时器时通常要使“GATE=0”。在实验例程中,设置TMOD的值为01H。表格 4.2 TCON寄存器76543210TF1TR1TF0TR0IE1IT1IE0IT0定时器控制寄存器TCON:SFR地址为88H,可以位寻址。TCON的结构如表格 4.2所示。TCON寄存器的低4位与中断控制有关,在这里先不必理会。TR0或TR1置位时,启动定时器运行。当定时器溢出后,TF0或TF1会自动置位,通过软件查询的办法可以获取该位的状态。定时值寄存器TH0、TL0和TH1、TL1:它们的SFR地址分别是8CH、8AH和8DH、8BH。启动定时器之前要先设置初值。初值计算公式为:定时器模式1初值 65536 t / T在公式中,t是预定的定时时间。T1/(f/12),是定时器的输入时钟脉冲的1个周期,f是振荡器频率。8051单片机规定,主时钟的12分频作为定时器的时钟输入。举个例子,现在用11.0592MHz的晶振(这个频点奇怪吗?等到学习串行口通信部分时就会明白的),想要定时10ms,则T1/(f/12)1/921600,初值65536-0.01/T56320,换算成16进制为0DC00H,这样,TH0和TL0分别取值为0DCH和00H。当定时器启动后,每经过1个T周期,定时值自动加1,当加到65536时归0(溢出),同时TF0或TF1置位。但是定时器并不因为溢出而停止运行,而是继续跑。在例程的主循环里,先点亮LED,利用定时器延时200ms,然后熄灭LED,再延时800ms。如此,就会看到LED不断闪烁发光。3. 实验步骤l 参考光盘里的实验例程,自己动手建立Keil C51工程。l 编辑源程序,编译生成HEX文件。l 利用Flash Magic软件下载程序文件。下载到任意四台单片机中任意一台都可以。l 运行程序,LED亮200ms,灭800ms,反复循环。4.1.4 实验4:按键中断1. 实验目的l 认识中断的基本概念l 学会外部中断的基本用法l 学会A51和C51的中断编程方法2. 实验原理图 4.6 基础实验:按键中断8051单片机有/INT0和/INT1两条外部中断请求输入线,用于输入两个外部中断源的中断请求信号,并允许外部中断源以低电平或下降沿触发方式来输入中断请求信号。/INT0和/INT1中断的入口地址分别是0003H和0013H。TCON寄存器(SFR地址:88H)中的IT0和IT1位分别决定/INT0和/INT1的触发方式,置位时为下降沿触发,清零时为低电平触发。实际应用时,如果外部的中断请求信号在产生后能够在较短时间内自动撤销,则可以选择低电平触发。在中断服务程序里要等待其变高后才能返回主程序,否则会再次触发中断,产生不必要的麻烦。如果外部的中断请求信号产生后可能长时间后才能撤销,则为了避免在中断服务程序里长时间无谓等待,可以选择下降沿触发。下降沿触发是“一次性”的,每次中断只会有1个下降沿,因此中断处理程序执行完后可以立即返回主程序,而不必等待中断请求信号恢复为高电平,这是一个重要的技巧。3. 实验步骤l 参考光盘里的实验例程,自己动手建立Keil C51工程。l 编辑源程序,编译生成HEX文件。l 利用Flash Magic软件下载程序文件。下载到任意四台单片机中任意一台都可以。l 运行程序,芯片工作于中断方式,按下按键K2(接P3.3/INT1管脚)后,LED点亮,1.5秒后自动熄灭。4.1.5 实验5:用PWM方波调节LED亮度1. 实验目的l 认识PWM的基本概念l 进一步学习定时器的用法2. 实验原理图 4.7 基础实验:用PWM方波调节LED亮度按图 4.7的接法,只用1个I/O管脚就能够自由调节LED灯的亮度吗?答案是:可以!图中的接法非常简单,没有用到D/A转换器,但照样可以调节LED灯的亮度,而不是只有点亮或熄灭两个状态。图 4.8 PWM方波和经过低通滤波器后的波形实现LED亮度可调的基本原理就是PWM方法。PWM是“Pulse Width Modulation”的缩写,意为“脉冲宽度调制”。PWM的信号波形是一列占空比可调的方波脉冲,经过低通滤波器后,可以得到一个与占空比成正比的直流电压信号,参见图 4.8。因此,在一定程度上,PWM可以代替D/A转换器。PWM方波的实现一般都非常简单,而D/A转换器较复杂(但转换速度可以很快)。从图 4.8可以看出,经过低通滤波器的PWM方波有高低起伏的“锯齿”,并非很平滑的直线。如果进一步降低低通滤波器的截止频率,则波形会变得比较平滑。某些型号的单片机内部集成有硬件PWM,可以产生很高频率的PWM脉冲,因而低通滤波器的截止频率可以设置得比较高,使总的转换速率加快很多。普通8051单片机虽然没有集成硬件PWM发生器,但利用一个定时器也能很容易实现,请参考光盘里的相关例程。用PWM方波控制LED的亮度,有个特殊的地方:不需要低通滤波器。当方波脉冲频率达到50Hz以上时,人眼基本上无法察觉到闪烁,只能感受到平均的亮度,这相当于低通滤波。3. 实验步骤l 参考光盘里的实验例程,自己动手建立Keil C51工程。l 编辑源程序,编译生成HEX文件。l 利用Flash Magic软件下载程序文件。下载到任意四台单片机中任意一台都可以。l 运行程序,按K3可调暗LED,按K4可调亮LED。4.1.6 实验6:UART基本收发1. 实验目的l 学习串行口通信的基本概念l 掌握8051串行口的基本用法2. 实验原理只有真正学会了串行口的各种用法,才能正真算得上学会了8051单片机!在8051单片机中,涉及串行口操作的寄存器有多个,如SCON、SBUF、PCON、IE以及定时器T1等等。以下将对这些寄存器以及串行口的基本用法做一个简单介绍。【SCON】SCON是串行口控制寄存器,SFR地址0x98,可位寻址,描述如下:l SCON.7=SM0:方式选择位0l SCON.6=SM1:方式选择位1SM0,SM1=00:方式0,同步移位寄存器,波特率固定为f/12(f为主时钟,下同)。SM0,SM1=01:方式1,10位异步收发器,波特率由T1、PCON.7指定。SM0,SM1=10:方式2,11位异步收发器,波特率固定为f/32(PCON.7=1时)或f/64(PCON.7=0时)。SM0,SM1=11:方式3:11位异步收发器,波特率由T1、PCON.7指定。方式1、2、3的实验电路原理图请参考第3章图 3.1。l SCON.5=SM2:方式选择位2,用于多机通信l SCON.4=REN:接收使能位REN置位时允许接收数据,否则禁止接收。l SCON.3=TB8:方式2和3的第9个数据发送位l SCON.2=RB8:方式2和3的第9个数据接收位可以用于带校验位的异步收发,或者用于多机通信。对方式0和1无效。l SCON.1=TI:发送中断标志l SCON.0=RI:接收中断标志发送结束时TI自动置位。如果使能中断,则中断被触发。TI被置位后,需要用软件来清除。接收结束时RI自动置位。如果使能中断,则中断被触发。RI被置位后,需要用软件来清除。发送和接收共享同一个中断向量,入口地址都为0023H。在编写中断服务程序时,应当首先判断TI和RI位,然后再跳转到不同的处理分支。【SBUF】SBUF是串行口数据缓冲寄存器,SFR地址99H,不可位寻址。SBUF寄存器负责各个方式下的串行口数据收发。SBUF实际上是两个不同的物理寄存器,只是共用同一个SFR地址,一个只读,一个只写,不会冲突。因此发送和接收过程可以同时进行(方式0除外)。向SBUF写入数据后,硬件就开始自动发送这个数据,发送完毕置位TI标志。如果收到数据,则RI会自动置位,提示可以从SBUF读取所接收到的数据了。如果没有及时读走接收到的数据,则在接收到下一个数据时,原有的数据会被“冲掉”!【方式0】在方式0下,串行口作为同步移位寄存器使用,波特率固定为f/12。串行数据通过RXD(P3.0)管脚输入/输出,而TXD(P3.1)管脚总是向外部提供移位时钟。数据在时钟上升沿有效。发送时,只需将数据写入SFR寄存器SBUF。接收时,应当先清除RI位,再置位REN,等到RI被自动置位时,表明接收完成。不论是接收还是发送,8位数据的低位总是在前,高位总是在后。方式0虽然名为“同步”,但一般不会用作同步通信,而是主要用于I/O扩展。扩展输入端口时,可以使用74X165(X为LS、HC、AHC等)。扩展输出端口时,可以使用74X595(不推荐用74X164)。这两种芯片都可以级联。【方式1】方式1是全双工的10位异步收发器(UART),1位起始位(0),8位数据(仍然是低位在前),1位停止位(1),无校验位。在8051单片机里,这是相当常用的一种方式。RXD管脚负责接收数据(REN须置位才能接收),TXD管脚负责发送数据。起始位和停止位是由硬件自动插入的,软件无需额外的处理。方式1的波特率由定时器T1和PCON.7来指定。在方式1和3下,主时钟一般取11.0592MHz或22.1184MHz(不是任意的频点)。常见的波特率有2400、4800、9600、19200、38400、57600、115200等。数据的收发双方,一般要事先约定好相同的波特率才能正常通信。初学C语言的人都知道,printf()和scanf()是两个非常有用的I/O函数。在Keil C51中

温馨提示

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

评论

0/150

提交评论