PIC单片机实验指导书
单片机原理与应用实验指导书
(试用版)
童亮 编
北京信息科技大学
机电工程学院车辆工程实验室
前言
本实验指导书结合教材并围绕TPDEM1上的各个功能模块展开。实验硬件环境包括实验板TPDEM1和MAPLAB-ICD2集成仿真开发系统组成,软件以MAPLAB IDE汇编语言为基础的软件开发系统。实验DEMO程序提供传统的汇编单文件风格的代码以及说明文档,主要供教学使用并提供学生参考。
本实验制指导书的所有DEMO程序均以PIC16F877A芯片为例编写的,若是其他型号的芯片请自行移植代码。
目录
3TPDEM1开发实验板概述
5MAPLAB IDE基础
6芯排线连线说明
7使用ICD2作为调试器
16使用ICD2作为烧写器
17实验一
I/O口流水灯功能实验
20实验二
A/D转换热敏电阻实验
23实验三
A/D转换光敏电阻实验
26实验四
RS2332 串口通信实验
30实验五
外部中断实验
32实验六
CCP模块PWM实验
35实验七
CCP模块输入捕捉实验
39实验报告模板
TPDEM1开发实验板概述
TPDEM1 (普通版见图1,I/O口接口是插针的形式;高校版见图2,I/O口接口是插孔的形式)开发实验板硬件采用模块化
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
,便于用户灵活组成科研项目所需的硬件结构。硬件有:
1、 RS232通信接口;
2、 2X16字符型LCD液晶显示器;
3、 2位应用74HC595串并转换的LED数码管;
4、 串行存储芯片24C01;
5、 用RA0即可实现9键输入的模拟键盘;
6、 V/F转换电路;
7、 8位LED发光二极管用于显示器件引脚高低电平或其它用途;
8、 8位拨码开关用于控制状态的输入;
9、 32.876Hz的时钟晶振电路;
10、 利用热敏电阻和光敏电阻构成的温度和光强检测电路;
11、 外部事件触发电路;
12、 单片机通用复位电路;
13、 DIP18- DIP20- DIP28-DIP40通用插座, 可放置8、14、18、20、28、 40管脚的PIC芯片;
14、 ICSP接口;
15、 可用于添加硬件的试验区。
图1 普通版
图2 高校版
TPDEM1开发实验板可配合MPLAB ICD2使用(见图3),也可配合PICMATE2002和PICMATE2004使用。
图3 TPDEM1与ICD2的连接
MAPLAB IDE基础
一、运行 MPLAB IDE
软件安装后,要启动 MPLAB IDE,双击桌面上的图标或选择Start>Programs>Microchip MPLAB IDE vx.x>MPLAB IDE vx.x。屏幕会显示 MPLABIDE 徽标并随后显示 MPLAB IDE 界面。
MPLAB IDE 界面
注:要创建目标 PICmicro MCU 可执行的代码,需要将源文件添加到项目中,然后可以使用选定的语言工具 (汇编器、编译器和链接器等)将代码编译为可执行代码。在MPLAB IDE 中,由项目管理器控制这一过程。
要创建目标PICmicro MCU 可执行的代码,需要将源文件添加到项目中,然后可以使用选定的语言工具(汇编器、编译器和链接器等)将代码编译为可执行代码。在MPLAB IDE 中,由项目管理器控制这一过程。
所有项目均具有以下基本步骤:
• 选择器件
MPLAB IDE 的功能根据所选择的器件而有所不同。应该在开始项目之前完成器件选择。
• 创建项目
将使用MPLAB 项目向导来创建项目。
• 选择语言工具
将在项目向导中选择语言工具。就本教程而言,将使用内置的汇编器和链接器。而在其他项目中,也许需要选择Microchip 的某一编译器或其他第三方工具。
• 将文件添加到项目
将在项目中添加两个文件,一个模板文件和一个链接描述文件。这两个文件都位于MPLAB IDE 文件夹的子文件夹中。使用这两个文件,开始项目就容易多了。
• 创建代码
将向模板文件添加一些代码,从I/O 端口发出一个递增的值。
• 编译项目
将编译项目——使源文件被汇编和链接成可以在选定的PICmicro MCU 上运行的机器码。
• 使用软件模拟器测试代码
最后,将使用软件模拟器测试代码。
• 编译后的代码下载到硬件中,测试代码
如与硬件开发环境连接,将代码下载到目标板上进行实时调试和测试。
MPLAB ICD2使用的软件平台是Microchip的MPLAB-IDE v7.30(建议使用最新版本),兼容Win98、WinNT 、Win2000和WinXP等操作系统。
因为MPLAB集成环境是Microchip为其所有的开发工具研发的,故使用ICD2前需要选择工具。又由于ICD2可以充当调试器和烧写器,所以在debugger和Programmer菜单中都可以进行选择。
注意区分ICD2在这两种状态下的Program按键所
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示功能的不同。在debugger模式下,Program表示把用户目标文件和监控程序一起烧入待调试的MCU中,这个程序在离开ICD2后是不能单独运行的。
芯排线连线说明
排线可以直接把ICD2连接到用户板。只需用户板在布板时预留一个6芯插针接口(其中RB3不用接)。请注意排线的三角标记,以此来鉴别第一脚在哪边。
使用ICD2作为调试器
1.硬件连接
硬件的正确连接步骤是:
1)用USB线或连接PC和ICD2主机;
2)用6芯软线连接ICD2主机和仿真头;
3)将仿真头插到用户板上;
4)确认ICD2的电源设置后接上ICD2电源或给用户板上电;
注:如果用户不使用仿真头,而是通过用户板预留接口进行调试,那么步骤2)和3)应合并为:用6芯软线连接ICD2主机和用户板的调试接口(调试接口的连接方式见第一章的“烧写配置”章节)。
2.设置ICD2
2.1 选择芯片
首先,用户需要选择调试芯片的型号(不同系列的芯片其调试系统是不一样的),点击主菜单的Configure->Select Device,在Device窗口的下拉菜单里选择需要调试的芯片型号。如图3-1所示。
选择了相应芯片之后,用户将会在下面的“Microchip Programmer Tool Support”框和“Microchip Debugger Tool Support”框里看到各种Microchip烧写工具和调试工具对该芯片的支持情况;其中:
1)红点表示该工具目前还不支持当前芯片;
2)绿点表示该工具可以支持当前芯片;
3)黄点表示该工具目前对当前芯片的支持还处在测试状态;
在选择芯片完型号之后点击“OK”确认。
2.2 设置工具选项
2.2.1 选择工具类型
如果用户选择ICD2作为调试工具,那么需要在MPLAB IDE中进行设置。点击主菜单的Debugger->Select Tool,选择为MPLAB ICD2。
图3-1 选择芯片型号窗口
这时系统将会提示“ICDWarn0030: ICD2 is about to download a new operating system.……Downloading Operating System”。这是系统在下载配合该芯片使用的硬件操作系统,用户需要等待一段时间以便完成此操作。
当硬件操作系统下载完成之后,系统将会检查ICD2的连接情况。如果提示“Target Device **** found”那么一切正常;如果提示“ICDWarn0020:Invaild target device id ……”那么请检查电源设置以及6芯电缆的连接情况。
2.2.2 设置通信方式
如果用户连接了ICD2的USB线,并安装了相应的USB驱动程序,那么MPLAB IDE将默认ICD2的通信方式为USB接口方式。如果用户需要更改通信的方式,那么用户需要重新设置它。
点击主菜单的Debugger->Settings。系统将弹出一个ICD Debugger窗口,选择“Communication”。在“Com Port”栏里选择相应的COM口,然后在“Baud Rate”栏里选择相应的通讯波特率(如图3-2所示)。设置完成后点击下方的“应用”按钮来保存设置。
图3-2 设置通信方式
2.2.3 设置编程选项
在ICD Debugger窗口里选择“Program”来设置相应的编程选项。在“Select Memories”栏目里相应的选项之前打上钩,比如如果在“ID”前打上勾,在编程时将会写入用户ID码。
用户还可以设置编程时程序的起始和和终止地址,在“Program Memory Address”(程序存储器地址)栏目里设置相应的选项。在设置时请注意开始字节不能超过0x10,而结束地址则需要符合ICD2的编程要求为监控程序模块预留255个语句的空间。合理设置起始和结束地址可以增加调试的速度。
设置完成后点击下方的“应用”按钮来保存设置。
图3-3设置编程选项
2.2.4 电源设置
如果用户没有为目标板设计电源,那么需要选择为由ICD2提供电源的方式。在ICD Debugger窗口里选择“Power”来设置相应选项,如图3-4所示。为避免对目标板负载过重对ICD2带来损伤影响调试,编程,强烈建议采用目标板独立供电。
如果用户目标板上面已经有电源了,不需要由主机来提供那么请您把“Power target circuit from MPLAB ICD2”(从ICD2供电)前面的勾去掉。
使用“Update”按键可以让用户刷新目前目标板上的Vdd、Vpp以及主机提供的烧写电压情况。
设置完成后点击下方的“应用”按钮来保存设置。
图3-4设置电源
2.2.5 工具信息
用户还可以在ICD Debugger窗口面了解到调试器其他相关的信息:
· “Status”栏目:显示当前状态,在此栏目中可以执行自检;
· “Warning” 栏目:显示警告信息,用户可以在这个栏目里决定是否打开相关的警告信息;
· “Limitation” 栏目:从这里用户可以了解到ICD2的一些使用限制;
· “Versions” 栏目:版本信息;
当ICD Debugger窗口的所有项目设置完成后,如果点击“确定”退出设置,则系统将会保存所有当前的设置;如果点击ICD Debugger窗口右上方的“×”来退出设置,那么所有未“应用”的设置将不被保存。
2.3 设置芯片的CONFIG字
要使芯片能正确地工作用户还需要设置相应的CONFIG字,点击主菜单的Configure -> Configuration Bits来进行相应的设置。
系统将会弹出一个“Configuration Bits”窗口,如图3-5所示。
图3-5 Configuration设置窗口
点击“Setting”列里面的相应选项之后系统将会出现一个下拉菜单,用户可以在这个菜单里面选择相应的设置。请注意在使用ICD2作为调试器的时候,需要关闭“Low Voltage Program”(低电压编程)选项,以及关闭“Code Protect”(代码保护);同时将“Background Debug”(背景调试)选项打开。
用户芯片的配置是需要根据实际情况来选择,否则芯片可能无法正常工作而导致ICD2出现错误提示。
2.4 设置语言工具
如果用户需要使用C语言来编程,那么用户还需要设置语言工具的路径。
点击主菜单的Project->Set Language Tool Locations…来设置语言工具路径。在系统弹出的“Set Language Tool Locations”(设置语言工具位置)对话框里选择相应的语言工具,本例中选择的是HITECH PICC编译器。在相应的语言选项的子树“Executables”(可执行文件)树下点击相应的选项,使用“Browse”(浏览)来设置对应的可执行文件。如图3-6所示。
图3-6
设置语言工具的路径
在本例中,我们将“HI-TECH Assembler”、“HI-TECH Complier”和“HI-TECH Linker”都设置指向为D:\HT-PIC\bin\picc.exe,这是我的PC上的HITECH PICC编译器路径,用户应该根据实际安装情况来设置。
如果用户只使用汇编语言进行编程,那么他们可以不设置这项,直接使用默认设置。
3 建立工程项目
3.1 建立项目
1、用工程项目向导建立工程项目:
项目是将文件组织起来以便进行编译和汇编的方式。
使用一个用于该项目的汇编文件和一个链接描述文件。选择Project>ProjectWizard。
在Welcome (欢迎)对话框中,单击Next> 继续。
下一个对话框(Step One (第一步))让您选择器件(已选定)。确定所选择的是PIC18F452。否则,请在下拉列表中选择PIC16F877A。单击Next>。
设置语言工具
Project Wizard 的第二步设置该项目所要使用的语言工具。在Active Toolsuite (可用工具包)列表框中选择“Microchip MPASM Toolsuite”(Microchip MPASM 工具包)。然后应可在Toolsuite Contents (工具包内容)框中看到“MPASM”和“MPLINK”。可以单击任一个查看其位置。
如果将MPLAB IDE 安装到了默认目录,则MPASM 汇编器的可执行文件位于:C:\Program Files\MPLAB IDE\MCHIP_Tools\mpasmwin.exe
MPLINK 链接器的可执行文件位于:
C:\Program Files\MPLAB IDE\MCHIP_Tools\mplink.exe
MPLIB 库管理器的可执行文件位于:
C:\Program Files\MPLAB IDE\MCHIP_Tools\mplib.exe
如果未正确显示,使用Browse (浏览)按钮将它们设置为MPLAB IDE 子文件夹中的
相应文件。
项目向导——选择语言工具
为项目命名
向导的第三步让您为项目命名并将它存入文件夹。这个示例项目将被命名为MyProject。使用Browse 按钮,将项目放在名为Projects32 的文件夹中。单击Next>。
项目向导——为项目命名
将文件添加到项目中
Project Wizard 的第四步允许为项目选择文件。由于还未选择源文件,我们将使用MPLAB IDE 模板文件。这些模板文件是用于开始项目的简单文件。它们具有任何源文件的基本部分并且包含可帮助您编写和组织代码的信息。这些文件在MPLAB IDE 文件夹中,默认情况下该文件夹位于个人计算机的Program Files 文件夹中。
选择名为f877Atmpo.asm 的文件。如果将MPLAB IDE 安装在了默认位置,则该文件
的完整路径为:
C:\Program Files\MPLAB IDE\MCHIP_Tools\TEMPLATE\Object\f452tmpo.asm
项目向导——选择模板文件
单击Add>> (添加)将文件名移到右边的窗格中,然后单击文件名前面的复选框将此
文件复制到项目目录。
接下来,添加项目的第二个文件:链接描述文件。每个器件都有一个链接描述文件。这些文件定义各个器件的存储器配置和寄存器名称。链接描述文件在MCHIP_Tools文件夹下的LKR 子文件夹中。本项目使用名为16F877Ai.lkr 的文件。该文件的完整路径如下:
C:\Program Files\MPLAB IDE\MCHIP_Tools\LKR\18F452.lkr
要将链接描述文件复制到项目中,请单击对应的复选框。
项目向导——选择链接描述文件
确保您的对话框类似于上图,选中这两个复选框,然后单击Next> 完成项目向导。
项目向导的结束屏幕是一个摘要,显示了所选择的器件、工具包和新项目文件名。
项目向导—摘要
在单击了Finish (完成)按钮之后,复查MPLAB IDE 界面上的项目窗口。它看起来
应该如图2-10 所示。如果此项目窗口未打开,请选择View>Project。
项目窗口
在对源程序进行调试之前首先需要建立一个项目,这样MPLAB IDE系统就能把相关的调试信息包含进去。
二、用Project->New,来建立新的项目
点击主菜单的Project->New,来建立新的项目。在系统弹出来的“New Project”(新项目)窗口里面的“Project Name”(项目名称)栏里面是输入相应的项目名,建议项目的名称要和源程序的名次一致。然后使用“Browse”(浏览)按钮来选择源程序所在的路径。如图3-7所示。
建议用户将所有的调试所需的文件放在同一个目录里,以便于调试。在所有设置完成之后点击“OK”退出。
图3-7 建立新的项目
这时系统将在所选择的路径里生成一个后缀为.mcp的文件。
3.2添加(删除)文件
接下来需要把调试所需的文件加入到项目里。用户将会在主界面里看到一个“*.mcw”的窗口,在“*.mcp”的树下有四个分支,分别是“Source Files”(源程序)、“Head Files”(头文件)、“Object Files”(目标文件)及“Library Files”库文件。如图3-8所示。
用户可以通过右键菜单“Add Files”来添加文件,这些文件通常被称之为节点文件,是需要在调试过程调用的。
同样,用户可以在选定的文件上使用右键菜单来删除文件。在删除该文件之前请确认此文件已经不再被该项目使用。
4 使用ICD2进行调试
4.1调试准备步骤
在完成前面的设置应正确连接好硬件之后,用户就可以开始使用了。
4.1.1 连接
使用主菜单的Debugger->Connect,或直接使用工具栏上的快捷图标来连接。连接成功之后在“Output”窗口的“MPLAB ICD2”信息页里将提示 “Target Device **** found,revision=**”,如图3-10所示,如果提示“ICDWarn0020:Invaild target device id ……”那么请检查电源设置以及6芯电缆的连接情况。
图3-10 主界面及信息窗口
4.1.2 编译
接下来用户要进行编译,以便生成相应的调试文件。点击主菜单的Project->Build All来编译整个项目,或者使用工具栏上的快捷图标。如图3-10所示。
编译的结果将在“Output”窗口的“Build”页显示。如果编译发现了错误,则将不能生成调试所需的.hex文件,这样是不能继续进行下一步的。用户需要根据该页的提示改正程序之后,重新编译,直至编译器没有发现错误。
4.1.3 编程(烧写)
当“Output”窗口的“Build”页中提示编译成功之后,编译过程生成了相应的.hex文件。此时用户需要使用工具栏上的“编程”快捷图标对目标芯片进行编程,在编程时需要注意芯片的CONFIG字设置。
如果编程过程中出现“Config区校验失败”的提示,请检查芯片的MCLR脚电路。如果您采用的是直接接到电源的上拉方式,请直接断开该线路。
4.2 运行及调试
在编程成功之后用户就可以进行调试了。ICD2提供了多种运行及调试的手段。综合运用这些运行调试手段可以比较方便的验证程序的功能,并发现其中存在的缺陷和错误。
4.2.1
运行方式
按工具栏上的快捷图标的顺序由左至右,ICD2运行的方式有:
· “Run”:全速运行,如果运行过程中遇到了断点将会停止。使用这个运行方式可以直观的观察到程序的运行效果,并整体的验证其功能;
· “Halt”:停止运行。请注意,由于ICD2是通过使用Flash工艺芯片的自编程功能来实现调试功能的,在执行此功能时,并不代表芯片已经实际停止了运行,而只是不再执行当前程序的功能了。此时如果发生了掉电或者干扰导致芯片与ICD2主机之间发生了通信错误,则用户需要重新执行“连接->编程”的过程。
· “Step Into”:单步执行。使用单步的功能可以观察到当前语句执行的效果。利用单步功能可以实现多种调试目的,例如,可以使用该功能来观察程序分支的跳转方向,或者用来观察数据的转移、运算等。
· “Step Over”:块单步。使用这个功能时系统将跳过子程序的调用过程,直接执行到调用的下一语句,这样用户在遇到“CALL”语句时就可以利用这个功能直接看到调用的结果了。假如该语句调用的是没有必要进行
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
的延时子程序,那么使用此功能就可以避免陷入单步执行烦琐的循环过程的麻烦。
· “Reset”:使芯片复位。对于汇编源程序来说,执行此功能后程序PC将指向芯片的复位地址;对于C语言源程序来说,执行此功能后程序PC则是指向main()函数首地址。
4.2.2 断点设置
断点功能是在调试中经常使用到的功能,这项功能使芯片在运行到相应的程序语句时停止下来。在程序运行到断点停下为的时候,用户可以根据目标板的运行情况或者相关RAM的值来分析运行的情况。(ICD2只能提供一个断点。)
4.2.3观察变量设置
在运行调试的过程中,用户可能经常会需要观察一些寄存器的值。为了使用方便,可以把一些经常要查看的寄存器设置为观察变量。使用主菜单命令View->Watch来进行设置,系统将会弹出一个“Watch” (观察变量)窗口。如图3-11所示。
图3-11 观察变量窗口
在窗口的“Add SFR”按钮后面的下拉菜单中显示的是特殊寄存器的名称,用户可从下拉菜单中选取并使用“Add SFR”按钮将需要观察的特殊寄存器添加到观察变量列表中。同样的,用户可以在“Add Symbol”按钮后的下拉菜单中选取自定义的标号,并使用该按钮将所选标号添加到观察变量列表中去。
为了观察的方便,用户还可以利用观察变量窗口中的“Watch1”~“Watch4”4个子窗口分类添加观察变量。
ICD2提供了多种的变量观察方式,用户可以使用包括用户自行设定的观察变量以及通用存储器、程序存储器、硬件堆栈和EEPROM等窗口。使用主菜单的“View”选项可以打开或关闭这些窗口。
使用ICD2作为烧写器
1 ICD2的烧写设置
1.1 选择芯片
1.2 设置工具选项
1.2.1 选择工具类型
如果用户选择ICD2作为烧写工具,那么需要在MPLAB IDE中进行设置。点击主菜单的Programmer->Select Programmer,选择为MPLAB ICD2。
1.2.2 设置通信方式
1.2.3 设置编程选项
在“MPLAB ICD 2 Settings”窗口里选择“Program”来设置相应的编程选项。
1.2.4 电源设置
在“MPLAB ICD 2 Settings”窗口里选择“Power”来设置相应选项,在作为编程器使用时用户必须把“Power target circuit from MPLAB ICD2”(从ICD2供电)前面的勾选上。
使用“Update”按键可以让用户知道目前目标板上的Vdd、Vpp以及主机提供的烧写电压情况。
设置完成后点击下方的“应用”按钮来保存设置。
1.3 设置芯片的CONFIG字
要使芯片能被正确烧写,您还需要设置相应的CONFIG字。CONFIG配置如果和实际需求不一致,芯片将无法正常工作。
除非有特殊需要,否则最好将 “Low Voltage Program”(低电压编程)选项关闭。如果选择开启了这个选项,那么芯片将会在特定条件下启动低电压烧写模式(详情请参看该芯片的烧写资料)。
2 导入烧写代码文件
在进行烧写之前,首先要将需要烧写的代码文件(.hex文件)导入到内存中。
用户可以使用主菜单的File->Import命令来导入需要烧写的hex文件。如果用户希望从母片中导入代码文件,那么可以使用主菜单的Programmer->Read来将代码读入内存中,读入之后根据实际应用情况设置CONFIG字之后即可烧写。
3 烧写芯片
导入代码文件之后即可进行芯片的烧写,用户即可以使用主菜单的“Programmer”子菜单下的烧写相关命令,也可以使用工具栏的快捷图标来进行相关操作。工具栏的快捷图标从左到右依次对应的主菜单操作是:
· Program:烧写芯片。
· Read:读取芯片内容。注意:如果芯片已加密,那么读出的内容将不是正确的代码,而是无效代码(通常是全0)。
· Verify:程序区校验。如果芯片已加密,将提示校验失败。
· Erase Part:擦除目标芯片。执行此操作成功后,目标芯片将成为空白芯片。
· Blank Check:检验目标芯片是否为空白芯片。作为烧写器使用时的硬件配置情况请参考烧写配置。
实验一
I/O口流水灯功能实验
一、实验目的:1、对单片机有初步感性认识;2、通过对I/O口相关寄存器的设置,能够熟练的操作单片机的I/O口;3、不同方式延时程序的编制和应用。
二、实验原理:
单片机相应的I/O口设置为输出口,输出高电平时LED点亮,反之,LED不亮。利用软件延时的办法实现05S延时,实现LED流水灯的效果。本实验只演示16F877A的A口流水灯实验。其他B口、C口、D口、E口流水灯实验请自行学习,参考代码见文件夹…\start demo\ RBOUT、RCOUT、RDOUT、REOUT。
如图所示,八个LED,高电平点亮,可用于I/O口及其它信号状态的观测。
三、实验连线:
PORTD0~7按顺序连接八个LED。
四、实验步骤:
1.按照以上的实验连线正确连线。
2.实验板TPDEM1上40PIN IC座上插上芯片PIC16F877A-I/P,连接好ICD2。
3.实验板TPDEM1上电。
4.打开MPLAB IDEV7.62软件,完成项目的建立,文件的命名,文件的编辑,芯片的选择和配置位的设置,工具的选择和设置,编译器的设置。
5.编译项目,下载程序,运行程序,调试程序。
五、实验现象:全速运行程序,可看到八个LED循环点亮。间隔时间0.5S。
参考程序:
status equ 3h;定义状态寄存器地址
portc equ 8h;定义端口C的数据寄存器地址
trisc equ 88h;定义端口C的方向控制寄存器地址
;********************************
org 000h;定义程序存放区域的起始地址
nop;放置一条ICD必须的空操用指令
org 0x10;
goto main;
main bsf status,5;设置文件寄存器的体1
movlw 00h;对端口C的方向控制码00H先送W
movwf trisd;再由W转移到方向控制寄存器
bcf status,5;恢复到文件寄存器体0
movlw 01h;将00000001B先送W
movwf portd;再由W转移到数据寄存器,让RC0输出高电平点亮LED
call delay;调用廷时子程序
bcf portc,0;熄灭LED
call delay;
bsf portc,1;
call delay;
bcf portc,1;
call delay;
bsf portc,2;
call delay;
bcf portc,2;
call delay;
bsf portc,3;
call delay;
bcf portc,3;
call delay;
bsf portc,4;
call delay;
bcf portc,4;
call delay;
bsf portc,5;
call delay;
bcf portc,5;
call delay;
bsf portc,6;
call delay;
bcf portc,6;
call delay;
bsf portc,7;
call delay;
bcf portc,7;
call delay;
goto main;原地循环
;-------------------------廷时子程序----------------------
delay ;子程序名,也是子程序入口地址
movlw 0fh ;将外层循环参数值FFH经过W
movwf 20h ;送入用作外循环变量的20H单元
lp0 movlw 00fh ;将第二层循环参数值FFH经过W
movwf 21h ;送入用作内循环变量的21H单元
lp1 movlw 0ffh ;将内层循环参数值FFH经过W
movwf 22h ;送入用作内循环变量的22H单元
lp2 decfsz 22h,1 ;变量22H内容递减,若为0跳跃
goto lp2 ;跳转到LP2处
decfsz 21h,1 ;变量21H内容递减,若为0跳跃
goto lp1 ;跳跃到LP1处
decfsz 20h,1 ;变量20H内容递减,若为0跳跃
goto lp0 ;跳跃到LP0处
retlw 0 ;返回主程序
end ;源程序结束
实验二
A/D转换热敏电阻实验
一、实验目的:1、了解热敏电阻的工作原理;2、学习16F877A的AD模块的使用。
二、实验原理:
如图1-4所示,R101为NTC(负温度系数)热敏电阻,室温20摄氏度时阻值约为10KΩ,R101的阻值随温度的升高而降低,则RA1采样到的电压值越大
本实验将AD采集到的数值转换八位二进制码并通过八位发光二极管显示,系统设置一比较值,当采样值大于基准值时,连接到D端口的八位二极管全亮,否则不亮,观察灯光随温度的变化。此实验可用于自动温度调节控制。
三、实验连线:
四、实验步骤:
1.按照以上的实验连线正确连线。
2.实验板TPDEM1上40PIN IC座上插上芯片PIC16F877A-I/P,连接好ICD2。
3.实验板TPDEM1上电(如果配合PICMATE2004并在电源设置选择FROM PICMATE 5V,可忽略此步骤)。
4.打开MPLAB IDEV7.62软件,完成项目的建立,文件的命名,文件的编辑,芯片的选择和配置位的设置,工具的选择和设置,编译器的设置。
5.编译项目,下载程序,运行程序。
五、实验现象:
全速运行程序,将显示热敏电阻周围接触到的部分温度,一般为空气温度,改变热敏电阻接触的温度,将看到发光二极管显示明亮的变化。改变基准值进行再次实验。
参考程序:
#include "P16F877A";
ADRESULT EQU 0x20;
;*********************主程序********************************************
Org 0X00;
nop
org 0x04;
goto ZD;
org 0x05;
goto main;
main
call Initial;调用初始化程序
Loop
bsf STATUS,C;STATUS中借位标志设为1
Movfw ADRESULT;
sublw B'10001111';ADRESULT数值与设定值比较
btfsc STATUS,C;通过STATUS中C位的测试确定AD转换结果与设定值的大小
goto Why;小于设定,跳转
movlw 0xff;
movwf PORTD; 执行输出高电位,亮
goto Loop;返回Loop
Why
movlw 0x00;
movwf PORTD; 小于设定,执行输出低电位,不亮
goto Loop;返回Loop
end;
;**************初始化子程序**************************************************
Initial
bsf STATUS,RP0;
movlw 0x02H;
movwf TRISA;初始化端口RA1为输入
movlw 0x00;
movwf TRISD;初始化D端口全部为输出
movlw B'10001111';
movwf ADRESULT;给转换结果赋初值
bcf STATUS,RP0;
movlw 0x00;
movwf PORTD;初始化设置D端口输出低电位,不亮
banksel PIE1;
bsf PIE1,ADIE;允许AD中断
banksel ADCON1;
movlw B'00000000';设置控制字,选择AD转换输入端RA0~RA7
movwf ADCON1;参考电压为Vdd和Vss,转换结果左对齐
banksel ADCON0;
movlw B'01010001';AD转换时钟为fosc/8
movwf ADCON0;
banksel INTCON;
bsf INTCON,GIE;允许全局中断
bsf INTCON,PEIE;允许外围功能中断
bsf ADCON0,2;起动AD中断
return;
;************中断子程序**************************************
ZD
banksel PIR1;
bcf PIR1,ADIF;清除AD中断标志
movfw ADRESH,w;提取AD变换结果高8位
movwf ADRESULT;AD变换结果高8位转存到ADRESULT中
movlw 0FH;延时
movwf 21H;
Loop1
decfsz 21h,1;
goto Loop1;
banksel ADCON0;
bsf ADCON0,2;重新起动AD转换
retfie
end
实验三
A/D转换光敏电阻实验
一、实验目的:1、了解光敏电阻的工作原理;2、学习16F877A的AD模块的使用。
二、实验原理:
如图1-5所示,所用的光敏电阻在正常的室内光强下大约是100KΩ,环境光亮度越低则RA2采样到的电压值越小
本实验将AD采集到的数值转换八位二进制码并通过八位发光二极管显示,系统设置一比较值,当采样值大于基准值时,连接到D端口的八位二极管全亮,否则不亮,观察灯光随温度的变化。此实验可用于自动照明调节控制。
三、实验连线:
四、实验步骤:
1.按照以上的实验连线正确连线。
2.实验板TPDEM1上40PIN IC座上插上芯片PIC16F877A-I/P,连接好ICD2(如果用PICMATE 2004仿真,则插上PICMATE2004配套40PIN仿真线,进行仿真)。
3.实验板TPDEM1上电。
4.打开MPLAB IDEV7.62软件,完成项目的建立,文件的命名,文件的编辑,芯片的选择和配置位的设置,工具的选择和设置,编译器的设置。
5.编译项目,下载程序,运行程序。
五、实验现象:
全速运行程序,改变光敏电阻的照度,将看到发光二极管显示明亮的变化。改变基准值进行再次实验。
参考程序:
#include "P16F877A";
ADRESULT EQU 0x20;
;*********************主程序********************************************
Org 0X00;
nop
org 0x04;
goto ZD;
org 0x05;
goto main;
main
call Initial;调用初始化程序
Loop
bsf STATUS,C;STATUS中借位标志设为1
Movfw ADRESULT;
sublw B'10001111';ADRESULT数值与设定值比较
btfsc STATUS,C;通过STATUS中C位的测试确定AD转换结果与设定值的大小
goto Why;小于设定,跳转
movlw 0xff;
movwf PORTD; 执行输出高电位,亮
goto Loop;返回Loop
Why
movlw 0x00;
movwf PORTD; 小于设定,执行输出低电位,不亮
goto Loop;返回Loop
end;
;**************初始化子程序**************************************************
Initial
bsf STATUS,RP0;
movlw 0x04H;
movwf TRISA;初始化端口RA2为输入
movlw 0x00;
movwf TRISD;初始化D端口全部为输出
movlw B'10001111';
movwf ADRESULT;给转换结果赋初值
bcf STATUS,RP0;
movlw 0x00;
movwf PORTD;初始化设置D端口输出低电位,不亮
banksel PIE1;
bsf PIE1,ADIE;允许AD中断
banksel ADCON1;
movlw B'00000000';设置控制字,选择AD转换输入端RA0~RA7
movwf ADCON1;参考电压为Vdd和Vss,转换结果左对齐
banksel ADCON0;
movlw B'01010001';AD转换时钟为fosc/8
movwf ADCON0;
banksel INTCON;
bsf INTCON,GIE;允许全局中断
bsf INTCON,PEIE;允许外围功能中断
bsf ADCON0,2;起动AD中断
return;
;************中断子程序**************************************
ZD
banksel PIR1;
bcf PIR1,ADIF;清除AD中断标志
movfw ADRESH,w;提取AD变换结果高8位
movwf ADRESULT;AD变换结果高8位转存到ADRESULT中
movlw 0FH;延时
movwf 21H;
Loop1
decfsz 21h,1;
goto Loop1;
banksel ADCON0;
bsf ADCON0,2;重新起动AD转换
retfie
实验四
RS2332 串口通信实验
一、实验目的:1、了解PIC芯片232模块工作原理;2、熟悉如何实现最基本的串口通信;3、了解串口通信的处理流程与方式;4、了解通信
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
制定的一些要点。
二、实验原理:
232通信是最经典的一种上下位机通讯方式,绝大多数情况下采用MCU的硬件模块进行通信。实验通过串口调试助手,演示了最基本的串口通信方式。
如图所示,单片机通过MAX232和上位机进行通讯,RC6接TX,RC7接RX。
功能模块函数说明
T232.asm有两个函数可供使用,具体说明如下:
1)InitUart 初始化串行口函数
2)TXData
发送数据函数;入口参数 TX_End,FSR
3)RCintsever 接收数据中断服务函数;出口参数 FSR
三、实验连线:
直接用ICD2随机提供的串口延长线将TPDEM1的串口与电脑的串口连接。
四、实验步骤:
1.按照以上的实验连线正确连线。
2.实验板TPDEM1上40PIN IC座上插上芯片PIC16F877A-I/P,连接好ICD2(如果用PICMATE 2004仿真,则插上PICMATE2004配套40PIN仿真线,进行仿真)。
3.实验板TPDEM1上电(如果配合PICMATE2004并在电源设置选择FROM PICMATE 5V,可忽略此步骤)。
4.打开MPLAB IDEV7.62软件,完成项目的建立,文件的命名,文件的编辑,芯片的选择和配置位的设置,工具的选择和设置,编译器的设置。或者直接打开…\start demo\232\UART.mcp项目。
5.编译项目,下载程序,运行程序。
6. 打开串口调试助手,设置串口端口,选择波特率为9600,8位传输,校验位无,停止位1,十六进制显示,十六进制发送。
五、实验现象:
全速运行程序,可看到串口调试助手的接收区显示“41 42 43 44 45 46 47 48”。手动发送“0102030405060708091011”,打开WATCH窗口可看到50H~5AH地址单元的值为“0102030405060708091011”,请注意50H单元是串口接收数据起始存放地址,70H单元是串口接收数据结束存放地址。
参考程序:
#include
;定义所用的单片机头文件
COUNT EQU 0x20
_WREG EQU 0x21
_STATUS EQU 0x22
#define STAR_RCadd 0x50;串口接收数据起始存放地址
#define END_RCadd 0x70;串口接收数据结束存放地址
org 0x00;
nop;
goto Start;
;**************中断子程序***********
org 0X04;
INIT_V bcf INTCON,GIE;
movwf _WREG; 存WREG状态
swapf STATUS,W;存STATUS
movwf _STATUS;
bcf STATUS,RP0;
btfsc PIR1,RCIF;读走数据后硬件自动清中断标志,故无须清除;
call RCintsever;
swapf _STATUS,W;Restore STATUS;
movwf STATUS;
swapf _WREG,F;Restore WREG w/o;
swapf _WREG,W;affecting STATUS
bsf INTCON,GIE;
retfie;
;*************主程序*********************
org 0X20;
Start
clrf INTCON;
call INITDATA
clrf _WREG
clrf _STATUS;
movlw 0xC0
movwf INTCON;ENABLE GIE,PEIE
call InitUart
call TXDATA;
movlw 0X50;
movwf FSR;
goto $;
;*********串口初始化子程序**********
InitUart;初始化串行口
movlw 0x90
movwf RCSTA;ENABLE UART,8BIT DATA,连续接收允许。
bsf STATUS,RP0
bsf TRISC,7;RX INPUT
bcf TRISC,6;TX OUTPUT
movlw 0x24;
movwf TXSTA;异步方式,发送允许,8位数据,高速波特率(配合4M振荡),TSR满??movlw 0X19;9600=4000000/(16*(X+1))->X=25
movwf SPBRG;high speed mode
bsf PIE1,RCIE;接收中断允许
bcf STATUS,RP0
return
;*******数据初始化子程序************
INITDATA
movlw 0X2F;
movwf FSR; FSR=2FH
movlw 0X40;
GOINITDATA;
incf FSR,F; FSR=30H
movwf INDF;
incf INDF,F; 0X41----30H;
movf INDF,W;
btfss FSR,3; FSR=38H,FINISH 0X41-0X48-----30H-37H
goto GOINITDATA;
return;
;**********发送子程序**************
TXDATA;发送数据子程序
movlw 0X30;
movwf FSR;
GOTXDATA
movf INDF,W; 0X41----W
movwf TXREG;
bsf STATUS,RP0;
btfss TXSTA,TRMT;
goto $-1;
bcf STATUS,RP0;
incf FSR;
btfss FSR,3
goto GOTXDATA;
return
;********* 接收数据中断服务程序*******
RCintsever;接收数据中断服务程序
btfsc
RCSTA,OERR ;溢出
goto RCerror
movf RCREG,w;
movwf INDF;
incf FSR,f;
return;
RCerror
bcf RCSTA,CREN;
bsfRCSTA,CREN;
return
end
实验五
外部中断实验
一、实验目的:1、了解RB0外部中断原理;2、掌握中断的使用和中断程序的编制方法。
二、实验原理:
如图1-10所示,外部中断接RB0。RB0/INT是一个外部中断输入引脚,可通过使用INTEDG位来设置(OPTION_REG<6>)。本实验演示RB0产生外部中断时D口的LED灯产生亮暗变化。
三、实验连线:PORTD0-7接LED灯。
四、实验步骤:
1.按照以上的实验连线正确连线。
2.实验板TPDEM1上40PIN IC座上插上芯片PIC16F877A-I/P,连接好ICD2。
3.实验板TPDEM1上电。
4.打开MPLAB IDEV7.62软件,完成项目的建立,文件的命名,文件的编辑,芯片的选择和配置位的设置,工具的选择和设置,编译器的设置。或者直接打开…\start demo\RB0INT\RB0INT.mcp项目。
5.编译项目,下载程序,运行程序。
五、实验现象:全速运行程序,与PORTD0~PORTD7连接的LED不亮,按RB0 INT键,则LED亮暗切换。由于键盘无去抖动处理,可能按要多次才有反应。
参考程序:
#include