




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章PIC单片机应用实训实训4.1简易LED闪烁彩灯实训4.2162点阵字符液晶显示器的应用实训4.3PIC单片机A/D转换器的应用
实训4.4单线数字温度传感器的应用实训4.1简易LED闪烁彩灯
1.实训目的
(1)了解PIC单片机的开发过程,掌握MPLAB-ICD低成本开发工具的使用方法。
(2)了解PIC16CF877单片机的特点、硬件结构与外围电路。
(3)掌握PIC单片机汇编程序的基本结构,了解其指令系统,熟悉基本指令的应用。2.实训设备与器件1)MPLAB-ICD——一种廉价的PIC单片机在线调试器图4.1.1MPLAB-ICD的外观图MPLAB-ICD有如下特性:在线调试功能;源程序级的代码调试;实时、单步或断点运行程序;寄存器观察;由目标系统提供工作电压;工作电压范围为3.0~5.5V;工作频率范围为32kHz~20MHz;工作于MPLAB-IDE集成开发环境,该软件兼容MicrosoftWindows3.X、Windows95/98、WindowsNT和Windows2000等操作系统;通过RS-232接口与PC机连接。2)ICDDEMO教学实验板
ICDDEMO教学实验板由高奇晶圆公司专门为PIC单片机初学者设计,如图4.1.2所示,它可配合MPLABICD使用。
ICDDEMO教学实验板包括以下电路:LED显示电路:8个LED灯与RD口相连;
LCD显示电路:162型STN字符型液晶显示模块(黄绿背光),采用半字节显示模式;光控电路:单片机A/D输入端连接光电转换电路,光暗与光亮时产生不同的电压,用来控制LCD模块背光;测温电路:通过热敏电阻测量温度;I2C模块:用I2C总线连接外部E2PROM存储器;可调节的PWM模块演示电路:模拟直流电机的运行;捕捉功能电路:用捕捉功能测量电机转速;RS-232电路:实现与PC通信的实验;485通信接口电路(预留线路)。图4.1.2ICDDEMO教学实验板3)用于安装MPLAB-IDE集成开发环境的PC机对PC机的要求如下:奔腾(Pentium)系列PC或兼容计算机;微软公司的操作系统:Windows95/98、WindowsNT或者Windows2000;至少16MB的系统内存,推荐使用32MB的系统内存;45MB可使用的磁盘空间;一个空余的串行通信口。
3.项目设计要求编写一段程序,使ICDDEMO教学实验板上的8只LED按一定的花样闪烁。在此基础上用按键实现不同花样程序的切换。
4.实训内容
1)硬件设计
(1)PIC16F877引脚排列。PIC16F877采用双列直插和表面贴装等3种封装形式:PDIP40、PLCC44和QFP44。图4.1.3给出了40脚PDIP封装的引脚排列图。由图可以看出,PIC16F877多数引脚具备第二种功能,甚至具有第三种功能,这是因为该系列单片机是目前世界上集成外围模块最多的单片机之一。功能增多而引脚不增加,只能采用引脚功能复用的方式。图4.1.3PIC16F877引脚排列图(2)电路原理图。该实训电路图为ICDDEMO教学实验板提供的8个LED的驱动线路,如图4.1.4所示。也可以用万能板自行按此图焊接一块实验板。PIC16F877内部具有复位电路,也可以通过在MCLR/VPP端(1脚)输入低电平复位。图4.1.4中的S1为外部复位开关。RA4端为通用I/O、A/D输入和计数脉冲输入端多用端口,S2为脉冲开关,按一次输入一个脉冲,C3为消颤电容,避免按一次S1而产生多个脉冲。OSC1与OSC2之间接晶体振荡器,该晶体振荡器为系统时钟。LED采用高电平驱动,输出“1”时点亮。图4.1.4PIC16F877控制8个LED连线图(3)在MPLAB-ICD开发环境下设计硬件时的注意事项。MPLAB-ICD是一种廉价的开发工具,它使用MICROCHIP“在线串行编程”技术,在仿真调试过程中要占用所仿真单片机的部分资源。设计硬件时要避免使用这些被占用的资源,以免发生冲突,给开发带来不便。MPLAB-ICD将会占用仿真单片机中的以下资源:MCLR/VPP脚(系统复位/编程电压脚);禁止低电压“在线串行编程(ICSP)”;RB6和RB7保留为编程和在线调试用;6个通用文件寄存器保留给调试监控程序;程序存储器第一条指令(地址0X0000)必须是空操作指令NOP;程序存储器的最后256或88个字被保留用来存放调试代码。表4.1.1MPLAB-ICD调试代码所占用的空间2)软件设计
(1)PIC16F877内部资源。①PIC16F877的程序存储器(ROM)和堆栈。
PIC16F877的程序存储器与堆栈如图4.1.5所示,其程序计数器宽13位,图中用“PC<12:0>”表示。其程序存储器与其他单片机不同的是采用了分页结构,以2K为单位进行分页,共分4页。这种分页结构给编程带来了不便,程序跨页时必须进行必要的页面设置。程序存储器中有2个单元地址比较特殊,一个是0000H,专门用作复位向量,单片机复位时程序计数器指向该单元,也是主程序的入口地址;另一个是0004H,专门用作中断向量,当单片机因任何原因引起中断时,程序计数器指向该单元,即中断入口。图4.1.5PIC16F877的程序存储器和堆栈PIC16F877采用是硬件堆栈方式,其堆栈具有8×13位的独立空间(即8级堆栈),这既不占用程序存储器和数据存储器空间,也不需要进栈和出栈之类的堆栈操作指令。当执行“CALL”指令或者单片机响应中断而发生程序跳转时,程序计数器的值(即被中断的程序的断点地址)自动压入堆栈;当执行返回指令“RETURN、RETFIE或RETLW”时,堆栈弹出,恢复程序计数器PC原来的值。堆栈遵循“后进先出”的规则。②PIC16F877的数据存储器(RAM)布局。传统概念上的RAM一般只能实现数据的读出和写入,而PIC单片机中的RAM功能要强大得多,它除了普通RAM的功能以外,还能实现移位、置位、清位、位测试等一系列寄存器才能完成的功能。因此,在MICROCHIP公司给PIC单片机中的RAM一个别名——文件寄存器。图4.1.6为PIC16F876/877的RAM布局图,必须要注意的几点是:标有(2)的单元为保留单元;标有(1)的单元对于28脚的PIC16F876没有配置;带有阴影的部分单元物理上不存在;带有“*”的单元不是一个物理存在的单元,仅用于实现间接寻址。RAM数据存储器在空间上分成4个“体(Bank)”,按横向排列,4个体分别记作“体0”、“体1”、“体2”、“体3”,这是与其他类型单片机有很大区别的地方。当我们对寄存器进行操作时,不但要关心其地址,还要注意是否作了体选择操作,体选择操作是通过设置状态寄存器的有关位来实现的。图4.1.6PIC16F876/877数据存储器(RAM)布局图PIC16F876/877的RAM按功能可分为特殊功能寄存器和通用寄存器,前者占据RAM各个体的上半部分,后者占据RAM各个体的下半部分。其中一些寄存器单元在4个体上是相互映射的,例如状态寄存器STATUS、间接寻址寄存器INDF、程序计数器低8位PCL、文件选择寄存器FSR、程序计数器高位锁存器PCLATH和中断控制寄存器INTCON。也就是说,在4个体的相同位置,物理上是同一个寄存器单元,所以该单元具有4个不同的地址。通用寄存器由用户自由安排和存放随机数据(单片机上电复位后,其内容是不确定的)。③PIC16F877的状态寄存器。状态寄存器的内容用来记录算术逻辑单元ALU的运算状态和算术特征、CPU的特殊运行状态以及RAM数据存储器的体间选择等信息。状态寄存器与通用寄存器不完全一样,其中某些位只能读不能写,另一些位的状态会根据运算结果而随时变化。状态寄存器各位的含义如表4.1.2所示。表4.1.2状态寄存器各位的含义表4.1.2状态寄存器各位的含义(2)软件流程图。图4.1.78位LED闪烁彩灯的软件流程图(3)源程序。源程序如下:;本程序的功能是使一个发光二极管右循环移动点亮8次,再左循环移动点亮8次;----------------------------------------------------------------------------;在编程前先用汇编伪指令对各操作寄存器地址与有关位进行定义,方便以后编程;在定义时一般赋于一个有意义的名字提高程序的可读性;----------------------------------------------------------------------------STATUS EQU 0x03 ;状态寄存器TRISD EQU 0x08 ;RD口方向寄存器PORTD EQU 0x08 ;RD口数据寄存器C EQU 0 ;定义状态寄存器的进位/借位标志位RP0 EQU 5 ;定义数据存储器体选择位,用以选择RAMDE_CNT0EQU 0x25;定义两个延时计数器DE_CNT1EQU 0x26COUNTEQU0x27;定义循环次数计数器;--------------定义程序载入地址和复位指针--------------------- ORG 0x00GOTO MAIN ORG 0x10;----------------------主程序--------------------------------MAIN BCF STATUS,C;清状态寄存器中的进位标志
BSF STATUS,RP0;选择RAM“体1”,准备操作寄存器TRISD CLRF TRISD ;设置RD口为输出方式
BCF STATUS,RP0 ;选择体“0”LOOP MOVLW0x08 ;初始化循环次数计数器,把十进制“8”送 到COUNT MOVWFCOUNT
MOVLWB'10000000';把8位二进制数“10000000”赋给W寄存器LOOP1 MOVWFPORTD ;把W的数据赋给RD口,点亮LED CALLDELAY ;延时,使LED点亮一段时间
RRF
W,1 ;将W寄存器内数据循环右移1位,结果放 入W寄存器
DECFSZCOUNT,1 ;判断是否已左移循环8次,若是则结束循 环左移
GOTO
LOOP1;8次没有循环完,继续循环右移LOOP3 MOVLW 0X08 ;初始化循环次数计数器,把十进制 “8”送到COUNT MOVWF COUNT MOVLW B'00000001'LOOP2 MOVWF RD ;把W的数据赋给RD口,点亮LED CALL DELAY;延时,使LED点亮一段时间
RLF W,1 ;将W寄存器内数据循环右移1位,结果放入W寄存器
DECFSZ COUNT,1 ;判断是否循环了8次,若是则结 束循环左移
GOTO LOOP2 ;8次没有循环完,继续循环左移
GOTO LOOP;----------------------延时子程序-----------------------------DELAY MOVLW 0FFH MOVWF DE_CNT0 MOVWF DE_CNT1DELAY0 DECFSZ DE_CNT0,1 GOTO DELAY0 DECFSZ DE_CNT1,1 GOTO DELAY0 RETLW 0;-------------------------------------------------------- END;--------------------------------------------------------
5.调试方法与步骤
1)硬件安装
(1)用PC机串口连接ICD主机。用一端为公头,另一端为母头的9针电缆线连接PC机串口与ICD主机。
(2)ICD主机与ICDDEMO教学演示板。有两种连接方式,效果等同。方式1:连接ICD主机与仿真头;方式2:连接ICD主机与DEMO板上的RJ-6口。连接完毕,接上电源(电源插孔在演示板上,电源规格为9V-600mA)。接通电源后,演示板上的红灯会亮,ICD上“ACTIVE”指示灯会闪烁。这时,如果液晶模块的电源跳线是接通的,液晶屏上第一行会显示一行16个5×7点阵黑色方块。2)MPLAB-IDE软件安装
(1)获取MPLAB-IDE。从MICROCHIP的网站上或MPLAB-ICD配套光盘上可以找到MPLAB-IDE安装软件,目前的版本是V7.0,它是PIC单片机的集成开发环境,功能非常丰富。
(2)找到安装执行文件。利用Windows的查找功能找到该执行文件,如图4.1.8和图4.1.9所示。图4.1.8利用Windows的查找功能进行查找图4.1.9查找“mp*.exe”文件(3)开始安装。用鼠标双击MPLAB-IDE安装文件,开始安装。当安装程序出现图4.1.10的画面时,在“MPLABICDDebuggerSupportFiles”选项前打“√”。在“PICSTARTPlusSupportFiles"的选项前也要打“√”,这是后面使用“PICSTARTPlus”PIC全系列编程器所必需的。图4.1.10选择安装组件3)设置MPLAB-ICD开发环境
(1)执行MPLAB。由Windows画面左下方的“开始”菜单,选择“开始→程序→MicrochipMPLAB→MPLAB”执行MPLAB程序。
(2)“DevelopmentMode(开发模式)”设定。进入MPLAB程序后,在菜单栏中选择“Option”选项,会出现一个下拉式菜单,在其中选择“DevelopmentMode”,将开启一个名为“DevelopmentMode”的窗口,如图4.1.11所示。“DevelopmentMode”对话框中包含6张卡片,我们只对“Tools”中的选项进行设定:选择“MPLAB-ICDDebugger”,从“Processor”下拉列表中选择一种单片机型号(在这里我们选择PIC16F877)。此时,点击“Apply”按钮,打开MPLAB-ICD工作对话框,如图4.1.12所示。图4.1.11“DevelopmentMode”对话框图4.1.12MPLAB-ICD工作对话框(3)MPLAB-ICD工作窗口的设置。图4.1.13“ICDOption”窗口(4)“ICDOption”窗口设置。在MPLAB-ICD工作窗口上单击“Option”,开启“ICDOption”窗口,如图4.1.13所示。“ConfigurationBits”部分的设定如下:Oscillator(晶振):XT;WatchdogTimer(看门狗定时器):off/disable;Brownoutdetect(掉电检测):off/disable;Poweruptimer(上电定时器):off/disable;Lowvoltageprogram(低电压编程):disable;CodeprotectdataEE(E2PROM数据保护):codeprotectionoff;Flashmemorywrite(Flash存储器写):nomemorywrittentobyEECON;
Codeprotect(代码保护):codeprotectionoff。其他选项为默认。此时,在Voltages部分出现VDD为5.0V+/-5%,VPP为14V+/-5%,表示MPLAB-ICD已和PC机完成联机。若没有电压显示,表示连接失败,可单击“Update”按钮,重复联机。在设置正确且联机正常的情况下,将“ICDOption”窗口关闭或最小化,但图4.1.12的MPLAB-ICD工作窗口必须最小化,不能关闭,以保持与PIC16F877联机,烧录程序要用。最后单击“DevelopmentMode”窗口上的“OK”按钮,完成MPLAB-ICD环境的设定。4)编辑源程序编辑源程序有两种途径:可以利用MPLAB内置的源程序编辑器编辑,也可以用其他的文本编辑软件编辑。图4.1.14给出在MPLAB中创建或打开源程序的方法。源程序编辑好以后,以英文和数字组合作为文件名存于某一工程目录(目录名也应为英文和数字组合),本例中用为“LED.asm”。图4.1.14利用MPLAB创建/打开源程序5)建立十六进制调试文件
(1)新建项目。在开发过程中,用户需要建立一个新“项目”(*.pjt),以便将源文件*.asm和建立的十六进制文件*.hex包含在内进行调试。建立调试文件前,在计算机硬盘上建立一个工程目录,如“D:\pic16f877”,把源程序拷贝到该目录下。点击“project”下拉菜单,如图4.1.15所示,选择“NewProject”并单击,出现如图4.1.16所示的对话框;在“FileName”处键入“led.pjt”,在“Directories”中选择我们的源程序(led.asm)文件所存放的文件夹(D:\pic16f877),然后单击“OK”按钮,这时我们会进入如图5.1.17所示的“Editproject”对话框。图4.1.15“project”下拉式菜单图4.1.16新建工程对话框图4.1.17“EditProject”对话框(2)将源程序加入项目。在“EditProject”对话框中,点击“AddNode(增加节点)”,打开添加节点会话窗口。选择“D:\pic16f877\led.asm”,然后点击“OK”即可。
(3)设置节点属性。节点属性会话窗口显示出涉及到MPLAB-ICD的参数开关,这些参数都是MPASM汇编器所需要的。当首次打开该会话窗口时,所看到的设置均为该开发工具的默认设置。对于本例,没有必要修改该默认设置。
(4)从“Editproject”对话框进入“DevelopmentMode”设定。在“Editproject”对话框中单击“Change”按钮,可进入“DevelopmentMode”对话框进行MPLAB-ICD环境的设定。当然,若前面设置正确,就没有必要在这里设置了。6)编译程序程序编译有三种方式。第一种方式:在MPLAB主窗口下选择“Project→MakeProject”,这种方式只编译包含一个汇编程序的项目,第二种方式:在MPLAB主窗口下选择“Project→BuildAll”,这种编译方式会将所有包含在项目内的汇编程序全部编译;第三种方式:在MPLAB主窗口下选择“Project→BuildNode”,这种方式只编译所选择的汇编程序。我们选用第二种方式编译程序。编译后主窗口会出现三种信息:一是“error(错误)”,表示源文件在指定地方有错误,必须排除才能编译,双击此错误可直接跳到错误行进行修改;二是“wanring(警告)”,警告不会影响程序执行;三是“message(信息)”,程序编译成功会出现信息。7)将程序烧写到PIC16F877单片机中程序编译完成后,有两种方式可将程序烧写到PIC16F877单片机中。一是在图4.1.12所示的MPLAB-ICD工作窗口中单击“Program”按钮,二是在图4.1.13所示的“ICDOption”窗口中单击“Program”按钮。不论哪种方式,程序下载完毕,都会在“STATUS”字段出现“Waitingforusercommand”,表示程序烧录成功。
8)执行程序在执行程序前,先在MPLAB主窗口上选择“Debug→Run→Rest”,将程序指针指向起始位置。选择“Debug→Run→Run”执行程序;选择“Debug→Run→Halt”可停止正在执行的程序。9)程序调试
(1)特殊功能寄存器的观察。在程序调试过程中,我们往往需要观察特殊功能的寄存器,通过选择“Windows→specialfunctionregisters”可打开特殊功能寄存器观察窗口,如图4.1.18所示。图4.1.18特殊功能寄存器观察窗口(2)其他调试手段与技巧。①使用MPLAB上的各功能快捷图标可以给调试带来方便;②使用变量观察窗可以集中观察用户关心的变量寄存器内的数据变化情况;③使用单步可以观察到执行该行指令后的效果;④使用连续单步可以较为直观地观察到程序的运行路径,子程序的跳转情况;⑤设置断点可以让程序在某一句停下,因此可以用来判断某一子程序的入口条件是否准确,可以让程序迅速地停在要分析的程序段上。
6.实训分析与总结
1)PIC16F87X系列单片机的特点
(1)哈佛总线与精简指令集计算机(RISC)结构。单片机的总线结构有两种,一是冯·诺依曼(VoNeumann)总线结构,以MCS-51单片机为代表,其特点是指令和数据共用一条总线,取指令和取数据分时进行;二是以PIC单片机为代表所采用的哈佛总线结构,其特点是指令空间和数据空间是完全分立的,取指令和取数据可同时进行。显然,前者限制了工作带宽,取指令时无法取数据,有所谓的“瓶颈”问题,限制了单片机运行速度的提高;后者对指令和数据可同时访问,并可使用较数据总线更宽的指令总线以增加单条指令的信息量,从而大大提高运行速度。PIC单片机取指令和执行指令采用指令流水线结构,当一条指令被执行时允许下一条指令同时被取出,使得在每个时钟周期可以获得最高效率。MCS-51单片机在12MHz时钟时执行单周期指令所需的时间为1μs,而PIC在4MHz时钟时执行单周期指令的时间为1μs,加之PIC指令功能强大,速度的提高是显然的。PIC单片机采用精简指令集计算机(RISC,ReduceInstructionSetComputer)结构,使指令的功能增强,效率大大提高。低、中、高三级产品指令字宽分别为12、14和16位,且分别只有33、35和58条指令,它们向上兼容。这些指令中绝大部分是单字节指令,没有功能相交叉的指令,整个指令系统十分简洁。而采用集中指令集计算机(CISC,ComplexInstructionSetComputer)结构的单片机通常有50~111条指令(如MCS-51),绝大多数为多周期、多字节指令,执行速度慢,对使用者提出了较高的要求。单字节指令提高了软件设计的效率,减少了所需程序存储器的容量,提高了代码效率,学习和实现都非常快。(2)优越的电气性能与高可靠性。PIC单片机的电气性能是相当出众的。其I/O口高电平时最大允许拉出和低电平时最大允许吸进的电流为25mA,可直接驱动LED数码管或给外部器件供电(如外接串行E2PROM可通过PIC单片机引脚获取电能)。PIC单片机I/O口的强驱动能力是其他单片机无法比拟的。同时,PIC单片机I/O引脚内置性能优良的瞬态保护二极管,有很强的瞬态抑制能力。其引脚可直接通过三极管驱动电磁继电器,无需光电隔离电路;也可经限流电阻直接与220V/50Hz市电相接,完成零点检测、频率测量等。(3)寄存器组与强大的位寻址功能。PIC单片机的I/O口寄存器、定时器、程序计数器及通用RAM都以寄存器形式统一编址,只需一个周期就可完成访问和操作。而且,所有寄存器的每一位可直接寻址,一条指令操作,较MSC-51的位寻址简便很多。位寻址功能的强大对实时控制、I/O口模拟实现各种串行通信协议是十分有利的。2)PIC单片机典型的程序格式(1)程序格式。;------------------------------------------------------------------------------------------------ORG0000GOTOMAIN ;跳过中断矢量
ORG0004GOTOINTSRV ;0004H为中断服务程序入口地址;------------------------------------------------------------------------------------------------ORG10H ;从0005H开始存放MAIN
…
;主程序区
INTSRV…
;中断服务程序区SUBRTN…
;子程序区
END ;程序结束符(2)操作数的表示。①十进制(如255)表示为:D'255'或直接写为255;②十六进制(如16)表示为:H'16'或16H或ox16;③二进制(如00110011)表示为:B'00110011';④八进制(如567)表示为:O'567';⑤字符(如C)表示为:'C'。(3)注意事项。①标号必须顶格书写,即标号的第一个字母必须位于每行的第一列,标号与指令助记符之间至少有一个空格;②指令助记符(包括伪指令)不能顶格,若指令行没有标号,则前面至少要有一个空格;③操作数中不能有空格;④注释语句前要加“;”。3)PIC16F877单片机值得开发应用的功能模块
PIC16F877单片机内部资源十分丰富,本实例涉及得很少,有待读者开发应用的还有:中断功能、定时/计数器、低功耗模式、看门狗定时器、A/D转换、PWM输出、用户可用的E2PROM与FLASHROM和串行与并行通信。
7.思考与练习题
(1)怎样建立MPLAB-ICD与微机之间的通信?
(2)利用图4.1.4中的RTCC按键实现三种以上花样的切换,自行设计闪烁花样程序。
(3)利用高奇晶圆公司(http://)提供的有关资料,借助MPLAB-ICD和ICDDEMO教学实验板开发PIC16F877单片机的LCD显示、A/D转换与PWM功能。
(4)利用PIC16F877设计一个工频(50Hz)交流电频率计。实训4.2162点阵字符液晶显示器的应用
1.实训目的
(1)了解PIC单片机实时在线仿真技术,熟悉PICMATE2002开发系统的使用方法。
(2)掌握PIC单片机常用型号PIC16C74的特点、硬件结构与外围电路。
(3)掌握162点阵字符液晶(LCD)与PIC单片机接口的硬件、软件设计方法。
(4)学习PIC单片机按键程序的设计方法。
(5)加深对PIC指令系统的了解,学会编写较复杂的PIC汇编程序,熟练掌握其调试方法。2.实训设备与器件PICMATE2002实时在线仿真器1台PICMATE2002实时在线仿真器的外形如图4.2.1所示,它采用专用仿真芯片,能对PIC单片机全实时地进行仿真,不占用任何资源。同时又提供了强大的仿真调试功能,如多种断点、指令跟踪与逻辑记录,极大地提高了PIC单片机的开发效率,是一款性价比很高的硬件仿真器。图4.2.1PICMATE2002实时在线仿真器外观2)PICSTART-PLUS全系列编程器1台
PICSTART-PLUS是在MICROCHIP公司MPLAB-IDE集成开发环境下使用的PIC系列单片机烧写工具,如图4.2.2所示,它可烧写几乎所有的PIC系列单片机。该编程器性能可靠,尤其适合PIC单片机开发阶段或中、小批量生产的芯片烧写。其主要特点如下:
(1)用串行接口(COM端口,RS-232方式)与PC机相连,便于携带安装。
(2)可以方便地读出芯片程序区的内容。
(3)全自动烧写校验。
(4)全面的信息提示,让用户清楚了解工作状态。
(5)配备40脚的DIP烧写座,能直接烧写8~40引脚的PIC系列DIP芯片。图4.2.2PICSTART-PLUS编程器外观3)PICMATE2002配套实验板1块为便于用PICMATE2002开发PIC16C74单片机,我们设计了一款实验板,如图4.2.3所示。板上配备了162点阵字符液晶显示器、DS1302时钟电路、DS18B20单线数字温度传感器、24C01EEPROM存储器和MAX232接口芯片等。
4)开发用PC机1台由于利用PICMATE2002开发PIC单片机需要在PC机上安装其仿真软件和编程软件MALAB,因此PC机配置建议为:586以上,EPP模式打印口,32MB以上内存和Windows98/2000操作系统。5)PIC16F74单片机1片本实训以PIC16C74为开发对象,为便于多次编程,实际选用该型号新的FLASH替代品种:PIC16F74。PIC16F74在功能和结构上与PIC16C74完全一样,但其程序存储器为FLASH存储器,可反复擦写。
3.项目设计要求设计162点阵字符液晶与PIC16F74的硬件接口,编写与调试接口程序;并利用8个按键K0、K1、K2、K3、K4、K5、K6、K7(分别对应RD0、RD1、RD2、RD3、RD4、RD5、RD6、RD7)作为输入(此处的开关符号与实物图保持一致),依次按下K0~K7时(口线由高变低),在162LCD第一行第一格开始依次显示“A、B、C、D、E、F、G、H”8个字母。图4.2.3自制实验板4.实训内容1)硬件设计(1)PIC16F74引脚图。图4.2.4PIC16F74引脚图(PDIP封装)(2)162LCD与PIC16F74的连接。本实训所用硬件为图4.2.3所示的自制实验板,其原理图如图4.2.5所示,162LCD与PIC16F74的连接如下:①LCD的DB4~DB7依次与单片机的RB2~RB5连接,为数据线,DB0~DB3未使用。②RS为显示、指令选择线,与单片机RB1连接,当RS为高电平时单片机向LCD模块进行读/写操作。
③E为数据接收、发送标志,与单片机RA5相连,每当E线向LCD模块发送一个脉冲,LCD模块与单片机之间将进行一次数据交换。④R/W为读/写选择线,接地,单片机只做对LCD模块的写操作。⑤A、K分别是LCD模块背光的正、负电源,我们将用单片机RE0/AN5控制背光。2)软件设计
(1)PIC16F74内部资源。①程序存储器布局。PIC16F74片内程序存储器共4K,分为两页,程序计数器宽度为13位,如图4.2.6所示。其复位地址、中断向量与PIC16F877相同。②数据存储器布局。PIC16F74的数据存储器的布局如图4.2.7所示,共分两页,每页128字节,其中第一页的20h~7Fh和第二页的A0h~FFh为通用寄存器。③状态寄存器各位的定义。PIC16F74的状态寄存器各位的定义与PIC16F877相同,如表4.1.2所示。图4.2.6PIC16F74程序存储器布局图图4.2.7PIC16F74数据存储器配置(2)程序流程图。本实训中,PIC16F74与162液晶采用4线连接的间接控制方式,先对162LCD进行初始化设置。162LCD初始化的参考流程如图4.2.8所示。图4.2.8162LCD4线连接时的初始化流程图4.2.9主程序流程(3)源程序。源程序如下:;----------------------------INDF EQU 0HTMR0 EQU 1HPCL EQU 2HSTATUS EQU 3HFSR EQU 4HRA EQU 5HRB EQU 6HRC EQU 7HRD EQU 8HRE EQU 9H;----------------------------TRISA EQU 85HTRISB EQU 86HTRISC EQU 87HTRISD EQU 88HTRISE EQU 89HINTCON EQU 0BHPIR1 EQU 0CHADRES EQU 1EHADCON0 EQU 1FHPIE1 EQU 8CHADCON1 EQU 9FH ;----------状态寄存器位定义----------C EQU 0DC EQU 1Z EQU 2PD EQU 3TO EQU 4RP0 EQU 5RP1 EQU 6IRP EQU 7;----------复位地址--------------PIF74 EQU 0000H;--------数据寄存器定义----------COUNT EQU 34HCOUNT1 EQU 35HR0 EQU 36HR1 EQU 37HR2 EQU 38H;----------------------------------------------;LCD有关宏定义;----------------------------------------------;------定义LCD控制I/O口--------LCD_DATA EQU RBLCD_CNTL1 EQU RBLCD_CNTL2 EQU RARS EQU 1E EQU 5;--------LCD模块命令----------------------DISP_ON EQU 0x0C ;开显示DISP_ON_C EQU 0x0E ;开显示,开指针DISP_ON_B EQU 0x0F ;开显示,开指针,开闪烁DISP_OFF EQU 0x08 ;关显示CLR_DISP EQU 0x01 ;清显示的操作数ENTRY_INC EQU 0x06 ;操作数ENTRY_INC_S EQU 0x07 ;操作数ENTRY_DEC EQU 0x04 ;操作数ENTRY_DEC_S EQU 0x05 ;操作数DD_RAM_ADDR EQU 0x80 ;初始化第一行显示的操作数DD_RAM_UL EQU 0xc0 ;初始化第二行显示的操作数;-------设置LCD显示相关寄存器-------------Byte EQU 20HCount EQU 21HCount1 EQU 22HCount2 EQU 23HLCD_DATA1 EQU 24HLINE1 EQU 25HLINE2 EQU 26HDAT EQU 27H;-----------------------------------------------------;主程序;----------------------------------------------------- ORG PIF74 GOTO MAINMAIN CALL LCDMAIN0 CALL KEY GOTO MAIN0
KEY BSF STATUS,RP0;选种bank1 MOVLW 0FFH MOVWF TRISD ;RD设为输入
GOTO KEY10KEY10BCF STATUS,RP0 MOVF RD,1 SUBWF RD,0 BTFSC STATUS,Z ;若运算结果为0,则Z=1 GOTO K0 RETURN;--------按键判断---------------------K0 CALL DELAY1 ;延时去抖
MOVF RD,1 BTFSS RD,0 GOTO KEY0 BTFSS RD,1 GOTO KEY1 BTFSS RD,2 GOTO KEY2 BTFSS RD,3 GOTO KEY3 BTFSS RD,4 GOTO KEY4 BTFSS RD,5 GOTO KEY5 BTFSS RD,6 GOTO KEY6 BTFSS RD,7 GOTO KEY7 RETURN;-------------------------------------------------------------KEY0 BTFSS RD,0 ;判断KEY0是否释放
GOTO KEY0 MOVLW 'H';
CALL putcLCD RETURNKEY1 BTFSS RD,1 ;判断KEY1是否释放
GOTO KEY1 MOVLW 'B' ;
CALL putcLCD RETURNKEY2 BTFSS RD,3 ;判断KEY2是否释放
GOTO KEY2 MOVLW 'C' ;
CALL putcLCD RETURNKEY3 BTFSS RD,3 ;判断KEY3是否释放
GOTO KEY3 MOVLW 'D' ;
CALL putcLCD RETURNKEY4 BTFSS RD,4 ;判断KEY4是否释放
GOTO KEY4 MOVLW 'E' CALL putcLCD RETURNKEY5 BTFSS RD,5 ;判断KEY5是否释放
GOTO KEY5 MOVLW 'F' CALL putcLCD RETURNKEY6 BTFSS RD,6 ;判断KEY6是否释放
GOTO KEY6 MOVLW 'G' ;
CALL putcLCD RETURNKEY7 ;判断KEY7是否释放
BTFSS RD,7 GOTO KEY7 MOVLW 'H' ;
CALL putcLCD RETURN;---------------------------------------------LCDCALLBRIGHT CALL InitLCD ;初始化LCD显示
RETURN;------------------------------------------------;162LCD显示子程序;---------点亮背光---------------------------BRIGHTBSF STATUS,RP0;选种bank1MOVLW 0MOVWF TRISEBCF STATUS,RP0BCF RE,0 ;打开背光
BSF RE,1 ;光蜂鸣器
RETURN;---------LCD初始化子程序---------------InitLCD BSF STATUS,RP0 ;Bank1 MOVLW 0xc1 ;设置RB1~RB5为输出
MOVWF TRISB BCF TRISA,5 ;E为输出
BCF STATUS,RP0 ;bank0;------------------------------------------------- BCF LCD_CNTL1,RS ;RS=0; MOVLW B'00110000' ;DB7=0,DB6=0,DB5=1,DB4=1 MOVWF LCD_DATA BSF LCD_CNTL2,E ;E=1 NOP BCF LCD_CNTL2,E ;E=0; CALL delay_10ms;------------------------------------------------- BCF LCD_CNTL1,RS ;RS=0; MOVLW B'00110000' ;DB7=0,DB6=0,DB5=1,DB4=1 MOVWF LCD_DATA BSF LCD_CNTL2,E ;E=1 NOP BCF LCD_CNTL2,E ;E=0; CALL delay_10ms;------------------------------------------------- BCF LCD_CNTL1,RS ;RS=0; MOVLW B'00110000' ;DB7=0,DB6=0,DB5=1,DB4=1 MOVWF LCD_DATA BSF LCD_CNTL2,E ;E=1 NOP BCF LCD_CNTL2,E ;E=0;
CALL delay_10ms;--------------功能设置----------------------- MOVLW b'00101000' ;使用4位总线LCD显示两行
CALL SendCmd MOVLW DISP_ON_B ;开显示
CALL SendCmd MOVLW ENTRY_INC ;设置指针移动方式
CALL SendCmd MOVLW DD_RAM_ADDR ;设置起始地址
CALL SendCmd MOVLW 0x01 ;清屏
CALL SendCmd RETURN;---------------------------------------------------------------------------;putcLCD:将字符数据送入LCD;本程序将字符数据分成了高半字节和低半字节分别输入;先送入的是高半字节;--------------------------------------------------------------------------putcLCD MOVWF Byte SWAPF Byte,W ;写入高半字节
MOVWF LCD_DATA1 RLF LCD_DATA1,1 RLF LCD_DATA1,1 MOVLW 0x3c ANDWF LCD_DATA1,1 MOVF LCD_DATA1,w MOVWF LCD_DATA BSF LCD_CNTL1,RS ;设置为送数据模式
BSF LCD_CNTL2,E ;发送数据
BCF LCD_CNTL2,E MOVF Byte,W ;送低半字节
MOVWF LCD_DATA1 RLF LCD_DATA1,1 RLF LCD_DATA1,1 MOVLW 0x3c ANDWF LCD_DATA1,1 MOVF LCD_DATA1,w MOVWF LCD_DATA BSF LCD_CNTL1,RS ;设置为送数据模式
BSF LCD_CNTL2,E ;发送数据
BCF LCD_CNTL2,E CALL delay_10ms RETURN;-----------------------------------------------------------------------------;SendCmd:送命令到LCD;本程序将命令数据分成了高半字节和低半字节分别输入;先送入的是高半字节;-----------------------------------------------------------------------------SendCmd MOVWF Byte SWAPF Byte,W ;送入命令的高字节
MOVWF LCD_DATA1 RLF LCD_DATA1,1 RLF LCD_DATA1,1 MOVLW 0x3c ANDWF LCD_DATA1,1 MOVF LCD_DATA1,w MOVWF LCD_DATA BCF LCD_CNTL1,RS ;设置为送命令模式
BSF LCD_CNTL2,E ;发送数据信号
BCF LCD_CNTL2,E MOVF Byte,W ;送命令的低字节
MOVWF LCD_DATA1 RLF LCD_DATA1,1 RLF LCD_DATA1,1 MOVLW 0x3c ANDWF LCD_DATA1,1 MOVF LCD_DATA1,w MOVWF LCD_DATA BCF LCD_CNTL1,RS;设置为送命令模式
BSF LCD_CNTL2,E ;发送数据信号 BCF LCD_CNTL2,E CALL delay_10ms RETURN;------------------------------------------------------;clrLCD:清除LCD显示;------------------------------------------------------clrLCD MOVLW CLR_DISP ;
CALL SendCmd RETURN
;------------------------------------------------------;L1homeLCD:将显示指针定位在第一行;------------------------------------------------------L1homeLCD MOVLW DD_RAM_ADDR CALL SendCmd RETURN;-----------------------------------------------------;L2homeLCD:将显示指针定位在第二行;------------------------------------------------------L2homeLCD MOVLW DD_RAM_UL CALL SendCmd RETURN;-----------------------------------------------------;LongDelay:延时25ms子程序;-----------------------------------------------------LongDelay CLRF Count MOVLW D'100' MOVWF Count1 MOVLW 0x03 MOVWF Count2LDloop DECFSZ Count,f GOTO LDloop DECFSZ Count1,f GOTO LDloop RETURN;-----------延时1ms-------------------------------------delay_10ms CLRF Count MOVLW D'40' MOVWF Count1Ldloop1DECFSZ Count,f GOTO Ldloop1 DECFSZ Count1,f GOTO LDloop RETURN;-----------------------延时1ms---------------------------DELAY1MOVLW D'150' MOVWF CNT1DEL2MOVLW D'150'MOVWFCNT0DEL1DECFSZ CNT0GOTO DEL1DECFSZ CNT1GOTO DEL2RETURN;------------------------------------------------------------ END;------------------------------------------------------------
5.调试方法与步骤
1)安装PICMATE2002仿真软件运行PICMATE2002安装软件setup.exe,根据提示即可安装成功。安装成功后在安装目录下产生下列文件:PICMATE2002.EXE:仿真软件;PICMATE.HELP:帮助文件;MPASMWIN.EXE:编译文件。2)PICMATE2002仿真软件使用步骤
(1)正确连接硬件。PICMATE2002仿真软件不提供软件仿真功能,因此它不能脱离硬件工作。用户在使用之前必须正确连接好硬件。
(2)启动软件。双击PICMATE2002运行快捷方式,或者从开始菜单来运行它。
(3)系统配置。点击系统操作栏上的“系统”菜单,选择“设置”,在“设置”窗口中选择相应的功能,如图4.2.10所示。图4.2.10PICMATE2002系统设置(4)仿真器自检。为了确认仿真器是否已经可靠连接,并且硬件各部分功能均正常,一般在使用之前执行一次仿真器自检操作。点击系统操作栏上的“系统”菜单,选择“仿真器自检”。3)编辑源程序源程序可在PICMATE2002的编辑区中编辑,如果这样做,一种方法是应先按“4)新建一个项目”后进行源程序编辑。另一个可行的方法是,在其他文本编辑软件中编辑好源程序,在“新建项目”时作为节点文件加进项目文件中,进行编译调试。
4)新建一个项目
(1)输入项目管理文件名。首先使用“项目”菜单下的“新建项目”命令打开项目管理文件命名对话框,如图4.2.11所示。在文件名栏下输入项目管理文件名(以下称项目名)。同时在这个对话框内选择文件的存取路径。完成后按“保存”按钮,自动进入编辑项目属性界面。图4.2.11创建项目管理文件名对话框(2)编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳务合同补充协议合同范本
- 单位房屋借用合同范本
- 劳动使用期合同范本
- 利用合同范本挣钱
- 上海徐汇金杯租车合同范本
- 监控弱电维护合同范本
- 医院电动车租售合同范本
- 备案的借住合同范本
- 单位之间借支合同范本
- 2003劳务合同范本
- 2024年辽宁现代服务职业技术学院高职单招语文历年参考题库含答案解析
- 2024年湖南环境生物职业技术学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 《化工流程教案》课件
- 后循环缺血治疗
- 体育学科核心素养解析
- 2024年浙江绍兴杭绍临空示范区开发集团有限公司招聘笔试真题
- 2025年体检科医疗质量控制工作计划
- 2024年萍乡卫生职业学院单招职业适应性测试题库参考答案
- 飞行器小学生课件
- 无人机法律法规与安全飞行 第2版2-2 领空
- 应急突发处置
评论
0/150
提交评论