




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理与应用,童亮,联系电话Email:T,北京信息科技大学机电工程学院 车辆工程教研室,PIC单片机指令系统及编程技术,指令系统概述 汇编语言程序设计 PIC 汇编语言的伪指令 PIC C语言编程,一、指令系统概述,1机器指令的表示方法 指令用于规定计算机的基本操作。一台计算机所能执行的指令集合就是它的指令系统。 指令共有两种表示方法,分别是机器语言表示方法和汇编语言表示方法。不同种类的单片机有不同的一套命令(即所谓“指令系统”)。,2汇编语言的表示方法 汇编语言是对机器语言的改进,它采用便于人们记忆的一些符号(例如简化的英文单词)来表示操作码、操作数和地址码等。通常把表示指令的符号称之为助记符。 001 MOVF 20H,0;将20H寄存器内容送到W寄存器(d=0)或F寄存器(d=1) 002 ANDLW 0FH;将立即数0FH与W中内容相与,结果送W 003 MOVWF 21H;将W中的内容送F寄存器 004 ADDLW 35H;W中的值与立即数35H相加后送W寄存器,一、指令系统概述,一、指令系统概述,3、PIC16F87X单片机指令 PIC16F87X单片机采用精简指令集(RISC)结构,指令效率高,功能强。它的指令为单字的宽字位(14)指令,由此生成的程序代码短。指令条数少,仅有35条。 (1)面向字节操作类 (2)面向位操作类 (3)常数操作和控制类操作。,PIC单片机指令的寻址方式,1寄存器间接寻址 所谓寄存器间接寻址指的是通过寄存器F0、F4来实现。实际的寄存器地址放在F4的低5位中,通过F0来进行间接寻址。INDF不是物理上实际存在的寄存器,而任何寻址INDF的指令都是以FSR寄存器内容为地址的RAM单元中存放着参加运算或操作的数据。,2立即数寻址,所谓立即寻址就是操作数在指令中直接给出。通常把出现在指令中的操作数称之为立即数,因此就把这种寻址方式称之为立即寻址。,PIC单片机指令的寻址方式,3.直接寻址,指令中操作数以其所在存储单元地址的形式给出,就称之为直接寻址。这种方式是对任何一寄存器直接寻址访问。,4.位寻址,这种寻址方式是对寄存器中的任一位(bit)进行操作,PIC单片机指令的寻址方式,1、PIC汇编语言指令格式 PIC系列微控制器汇编语言指令与MCS51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下: 标号 操作码助记符 操作数1,操作数2;注释 001 MOVF 20H,0;将20H寄存器内容送到W寄存器(d=0)或F寄存器(d=1) 002 ANDLW 0FH;将立即数0FH与W中内容相与,结果送W 003 MOVWF 21H;将W中的内容送F寄存器 004 ADDLW 35H;W中的值与立即数35H相加后送W寄存器,一、指令系统概述,一、指令系统概述,2.指令符号的意义说明 在PIC系列单片机指令中常把数据存储器RAM当作寄存器来使用(处理)并用字母f(或F)表示。 d代表操作数的目标选择,定义d=0,结果存入W;d=1结果存入(文件)寄存器f,当使用汇编程序指令d缺省时,默认d=1。b代表(文件)寄存器(8位)的位地址(07取值)。如寄存器的8位为b7、b6b1、b0,若b=1代表寄存器的第b1位。字母符号k代表立即数、常数和数据标号。,一、指令系统概述,二、汇编语言程序设计,1汇编语言源程序的结构 汇编语言提供了一种不涉及实际存储器地址和机器指令编码的编写源程序的有效方法。 需要掌握的是: 汇编语言的程序格式、语句格式、助记符、伪指令。 程序的4种基本结构:顺序、分支、循环和子程序。,二、汇编语言程序设计,2PIC 汇编语言的程序流程图,三、PIC 汇编语言的伪指令,用来编写汇编语言源程序的语句,主要是指令助记符,其次就是伪指令。所谓伪指令就是“假”指令的意思,不是单片机的指令系统中的真实指令。伪指令与指令系统中的助记符的不同之处是没有机器码与它对应。,三、PIC 汇编语言的伪指令,1.INCLUDE 功能: 读入外部源文件 格式:INCLUDE 说明:用于把指定文件读入源程序中作为源程序代码的一部分。文件名必须用双引号或尖括号给出,如果被指定文件非当前工作目录下,则需要指令完整的路径。 #INCLUDE “P16f877A.INC” #INCLUDE ,三、PIC 汇编语言的伪指令,2.EQU 功能:对标号赋值 格式: EQU 说明:使EQU 两端的8位值相等,即给标号赋予一个特定值或者说是给标号定义一个数值。 BCD EQU 20H BIN EQU 21H,三、PIC 汇编语言的伪指令,3.#DEFINE 功能:定义文本替换标号 格式:#DEFINE 说明:用于定义文本替换标号,在汇编时把源代码中的替换成。 DEFINE TL Tongliang,三、PIC 汇编语言的伪指令,4.ORG 功能: 存放程序单元的起始地址 格式:标号 ORG 说明:用于指定该伪指令后面的源程序存放的起始地址,也就是汇编后的机器码目标程序在单片机的程序存储器中开始存放的首地址。 ORG 0x00 ORG 04H,三、PIC 汇编语言的伪指令,5.END 功能:程序结束伪指令 格式:END 说明:这条伪指令通知汇编器MPASM结束对源程序(.ASM)的汇编,即使在后面还有语句,也将不予继续汇编。,例子:点亮RC0口的一个LED,status equ 3h ;定义状态寄存器地址 portc equ 7h ;定义端口C的数据寄存器地址 trisc equ 87h ;定义端口C的方向控制寄存器地址 ;* org 0x00h ;定义程序存放区域的起始地址 nop ;放置一条ICD必须的空操用指令 org 0x10;重新定位 goto main ;转向执行程序 main bsf status,5 ;设置文件寄存器的体1 movlw 00h ;对端口C的方向控制码00H先送W movwf trisc ;再由W转移到方向控制寄存器 bcf status,5 ;恢复到文件寄存器体0 movlw 01h ;将00000001B先送W movwf portc ;再由W转移到数据寄存器 送RC0口高电平,点亮LED goto $ ;让程序在本指令循环 end,C语言,#include main() TRISC=0X00;/*TRISC寄存器被赋值,PORTC每一位都为输出*/ while(1); /*循环执行点亮发光二极管的语句*/ PORTC=0X01;/*向PORTC送数据,点亮LED*/ ,点亮一个LED并持续3秒后熄灭,status equ 3h ;定义状态寄存器地址 portc equ 7h ;定义端口C的数据寄存器地址 trisc equ 87h ;定义端口C的方向控制寄存器地址 ;* org 000h ;定义程序存放区域的起始地址 nop ;放置一条ICD必须的空操用指令 org 0x10; goto main; main bsf status,5 ;设置文件寄存器的体1 movlw 00h ;对端口C的方向控制码00H先送W movwf trisc ;再由W转移到方向控制寄存器 bcf status,5 ;恢复到文件寄存器体0 movlw 01h ;将00000001B先送W movwf portc ;再由W转移到数据寄存器,让RC0输出高电平点亮LED call delay ;调用廷时子程序 bcf portc,0 ;熄灭LED goto $ ;原地循环,3秒钟循环点亮和熄灭如何操作,?,;-廷时子程序- delay ;子程序名,也是子程序入口地址 movlw 0fh ;将外层循环参数值FFH经过W movwf 20h ;送入用作外循环变量的20H单元 lp0 movlw 0ffh ;将第二层循环参数值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 ;源程序结束,C语言,四、PIC C语言编程,Hitech-PICC: IAR: CCS: /picc.shtml ByteCraft:/,PIC 单片机的C 语言原程序基本框架,在程序的最前面用#include 预处理指令引用包含头文件,其中必须包含一个编译器提供的“pic.h”文件,实现单片机内特殊寄存器和其它特殊符号的声明; 用“_CONFIG”预处理指令定义芯片的配置位; 声明本模块内被调用的所有函数的类型,PICC 将对所调用的函数进行严格的类型匹配检查; 定义全局变量或符号替换; 实现函数(子程序),特别注意main 函数必须是一个没有返回的死循环。,C 语言编程实例,#include /包含单片机内部资源预定义 #include “pic1687xa.h” /包含自定义头文件 /定义芯片工作时的配置位 _CONFIG (HS ,C 语言编程实例,/函数和子程序 void main(void) SetSFR(); PORTC = 0x00; TMR1H += TMR1H_CONST; LED1 = LED_OFF; LCD_Test(); /程序工作主循环 while(1) asm(“clrwdt”); /清看门狗 Clock(); /更新时钟 KeyScan(); /扫描键盘 Measure(); /数据测量 SetSFR(); /刷新特殊功能寄存器 ,PICC 中的基本变量类型,PICC 中的高级变量,数组:unsigned int data10; 结构:struct commInData unsigned char inBuff8; unsigned char getPtr; unsigned putPtr; ; 联合:union int_Byte unsigned char c2; unsigned int i; ;,PICC位操作,汇编中的位操作是很容易的。在C 中更简单。C 的头文件中已经对所有可能需要位操作的寄存器的每一位都有定义名称: 如:PORTA 的每一个I/O 口定义为:RA0、RA1、RA2。RA7。 OPTION 的每一位定义为:PS0、PS1、PS2 、PSA 、T0SE、T0CS、INTEDG 、RBPU。 可以对其直接进行运算和附值。,PICC位操作,char x; x=x|0B00001000; /*对X 的4 位置1。*/ char x; x=x bitclr(x,5),数据寄存器bank 的管理,为了使编译器产生最高效的机器码,PICC 把单片机中数据寄存器的bank 问题交由编程员自己管理,因此在定义用户变量时你必须自己决定这些变量具体放在哪一个bank 中。如果没有特别指明,所定义的变量将被定位在bank0。 bank1 unsigned char buffer32; /变量定位在bank1中 bank2 bit flag1,flag2; /变量定位在bank2中 bank3 float val8; /变量定位在bank3 中 unsigned char buffer32; bit flag1,flag2; float val8;,无BANK声明则在BANK0,点亮RC0口的一个LED,status equ 3h ;定义状态寄存器地址 portc equ 7h ;定义端口C的数据寄存器地址 trisc equ 87h ;定义端口C的方向控制寄存器地址 ;* org 000h ;定义程序存放区域的起始地址 nop ;放置一条ICD必须的空操用指令 org 0x10;重新定位 goto main ;转向执行程序 main bsf status,5 ;设置文件寄存器的体1 movlw 00h ; 端口C的方向控制码00H先送W movwf trisc ;再由W转移到方向控制寄存器 bcf status,5 ;恢复到文件寄存器体0 movlw 01h ;将00000001B先送W movwf portc ;再由W转移到数据寄存器 送 RC0口高电平,点亮LED goto $ ;让程序在本指令循环 end,#include ; #include “pic168xa.h“ /定义所用单片机的头文件 void main() TRISC=0X00; WHILE(1) PORTC=0x01; ,点亮一个LED并持续3秒后熄灭,status equ 3h ;定义状态寄存器地址 portc equ 7h ;定义端口C数据寄存器地址 trisc equ 87h ;定义端口C的方向控制寄存器地址 ;* org 000h ;定义程序存放区域的起始地址 nop ;放置一条ICD必须的空操用指令 org 0x10; goto main; main bsf status,5 ;设置文件寄存器体1 movlw 00h ; 端口C方向控制码00H先送W movwf trisc ; 由W转移到方向控制寄存器 bcf status,5 ;恢复到文件寄存器体0 movlw 01h ;将00000001B先送W movwf portc ;再由W转移到数据寄存器,让 RC0输出高电平点亮LED call delay ;调用廷时子程序 bcf portc,0 ;熄灭LED goto $ ;原地循环,;-廷时子程序- delay ;子程序名,也是子程序入口地址 movlw 0fh ;将外层循环参数值FFH经过W movwf 20h ;送入用作外循环变量20H单元 lp0 movlw 0ffh ;将第二层循环参数值 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跳
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安阳教资考试题库及答案
- 押题宝典高校教师资格证之《高等教育法规》通关考试题库附参考答案详解(典型题)
- 高血压考试试题及答案
- 组织结构调整过程中的员工培训与发展试题及答案
- 2025年电商平台数据分析与社交电商模式创新报告
- 2025年直播电商行业主播品牌合作模式优化研究分析报告
- 2025年工业互联网平台光通信技术升级对光纤光缆制造设备行业的影响报告
- 2025年海上风电场海上风电场运维成本分析与控制策略报告
- 2025至2030年中国直接接触食品材料市场深度调研分析及投资前景研究预测报告
- 解析卷-人教版7年级数学上册期中试题及参考答案详解(综合题)
- 2025年河北高考生物试卷真题答案详解及备考指导
- 宁德新能源verify测试题库
- 2023年甘肃公交建集团清傅项目收费运营工作人员招聘笔试真题
- 美术是什么 详细版课件
- 肺心病(课)课件
- 中国烟草PPT模板
- 急性淋巴管炎的护理查房
- 江苏省综合评标专家库题库
- Java-Web程序设计任务教程全书电子教案完整版课件最全ppt整本书教学教程最新讲义
- 农作物品种试验技术规程玉米
- DBJ50∕T-348-2020 装配式混凝土建筑结构工程施工工艺标准
评论
0/150
提交评论