1、PIC单片机原理及应用,1,主讲:许辉 邮箱:,西安电子科技大学国家电工电子教学基地 西电MICROCHIP公司联合实验室(E楼II-406),PIC单片机原理及应用实验,内容安排: 全校任选课() PIC单片机原理介绍 (16学时) 基本功能及综合设计实验 (16学时),2,PIC单片机原理及应用,第1章 概述,3,1.1 单片机简介,什么是单片机?单片机(single chip microcontroller)是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示
2、驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。 目前,在很多范围更广的应用场合中被称为微控制器(MCU- Microcontroller Unit ),4,1.1 单片机简介,单片机、微控制器和微处理器有何区别? 微处理器(MPU)通常代表一个功能强大的CPU, 这种芯片往往是个人计算机和高端工作站的核心CPU。 早期的微控制器是将一个计算机集成到一个芯片中,实现嵌入式应用,故称单片机(single chip microcomputer)。随后,为了更好地满足控制领域的嵌入式应用,单片机中不断扩展一些满足控制要求的电路单元。目前,单
3、片机已广泛称作微控制 器(MCU)。数字信号处理器(DSPs) 是专门设计用来极快地进行离散时间信号处理计算的,比如那些需要进行音频和视频通信的场合。DSPs内含乘加器,能比其它处理器更快地进行这类运算。,什么是嵌入式系统?它和通用微机有何不同? 嵌入式系统(embedded system)是计算机硬件和软件的集合体。它包括一个处理器,涉及对硬件的直接控制,是为了嵌入到对象体系中完成某种特定的功能而设计的,是嵌入式计算 机系统的简称。 嵌入式系统可以是以微控制器 (单片机)或是以微处理器为主构成的计算机系统。单片机(微控制器)是专门用作嵌入式应用而设计的单芯片型计算机,单片机(微控制器)是一个
4、典型的普及型的嵌入式系统, 通用计算机(通用微机) 却不是用来完成某个特定功能的, 相反,它可以做各种不同的事情。,1.1 单片机简介,1.2 单片机主要应用领域,7,7,办公设备,工业控制,通信系统,电子玩具,金融电子,仪器仪表,汽车工业,家用电器,舰船设备,航空航天,1.3 PIC单片机产品系列,8,PIC单片机是由 Microchip Technology Inc.(美国微芯科技公司) 推出的系列产品。,1.4 PIC单片机命名规则,1、 PIC单片机编号包括下列5个部分:2、器件类型和代号关系如:PIC16F877,9,PICXXXXXXX -XX X /XX XXX器件类型 振荡频率
5、 温度 封装 存储器编程方式,1.4 PIC单片机命名规则,3、振荡方式/频率和代号关系:4、温度与代号关系:,10,1.4 PIC单片机命名规则,5、程序存储器编程方式 FLASH:可在线进行程序的反复擦写 OTP:一次编程方式(一个产品周期后降低成本用,专用设备完成烧写,适合小批量非定型产品) QTP:快速批量编程 SQTP :连续批量编程 ICSP:电路内连续编程 掩模ROM:一个产品周期后降低成本用,适合大批量定型产品,必须请制造商借助专用设备完成,11,1.4 PIC单片机命名规则,dsPIC30 /33F产品器件编号规则,12,PIC单片机原理及应用,第2章 PIC单片机架构,13
6、,2.1 内部架构,CPU 内核是器件运行所必需的基本部分。 CPU 数据存储器 程序存储器 DSP 引擎 中断,14,系统集成可以降低系统成本提高系统可靠性提高设计灵活性。 振荡器 复位 看门狗定时器和低功耗模式 闪存和EEPROM 编程 器件配置 低电压检测,外设功能是允许器件与外界交换信息。 1. I/O 端口 2. 定时器 3. 输入捕捉模块 4. 输出比较模块 5. 正交编码器接口(QEI) 6. 10 位AD 转换器 7. 12 位AD 转换器 8. UART 模块 9. SPITM 模块 10.I2CTM 模块 11. CAN 模块12.数据转换器接口(DCI )模块,2.2 C
7、PU内核,CPU 内核(8/16/32 位数据)采用改良的哈佛结构 哈佛结构是一种并行体系结构,程序和数据存储在不同的存储空间中,每个存储器独立编址、独立访问。 与两个存储器相对应的是系统的4条总线:程序的数据总线与地址总线,数据的数据总线与地址总线。从而提高CPU执行速度和数据的吞吐率。,17,ALU能进行执行8/16/32位的加、减、单位移位和逻辑运算。除非特别指明,算术运算一般是以2 进制补码形式进行的。,由一个高速17 位x 17 位乘法器、一个桶形移位寄存器和一个40 位加法器/ 减法器组成。 单周期可完成小数或整数DSP 乘法、有符号或无符号DSP 乘法、常规或收敛舍入,在单指令迭
8、代除法下支持16/16 位有符号小数除法运算,以及32/16 位、16/16 位有符号和无符号整数除法运算,寄存器是一种存储单元,通常由触发器组成。包括通用寄存器、专用寄存器、控制寄存器 每个W工作寄存器可以充当数据、地址、地址偏移量寄存器,数据存储器RAM ( random access memory)又称作随机存储器 数据存储器可读可写,用来存放数据变量、堆栈,掉电时数据会消失; 8/16/32 位的单片机,其内部数据存储器的数据宽度分别是8/16/32位。,23,特殊功能寄存器SFR(Special Function Register)是各功能部件对应的寄存器,用于存放相应功能部件的控制
9、命令,状态,数据 每个单元已经定义过,用户不能自己定义,数据存储器简介,24,MCU操作时作为一个线性空间访问,数据从统一的空间进行读写, DSP操作时分为X 和Y 数据空间,乘运算的数据从两个空间读取 用户可以自己定义,25,以上两个空间统称为Near 数据存储器。可通过所有文件寄存器指令中的13 位绝对地址字段直接对Near 数据存储器寻址。,用于保存应用程序代码,同时还可以用于保存程序执行时用到的数据 根据内部程序存储器类型的不同可分为ROM型、FLASH Memory型,27,中断向量是中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址 把所有的中断向量
10、集中起来,按中断类型号从小到大的顺序存放到存储器的某一区域内,这个存放中断向量的存储区叫做中断向量表,即中断服务程序入口地址表,程序存储器简介,28,用于保存用户编写的应用程序代码,同时还可以用于保存程序执行时用到的数据,29,EEPROM(带电可擦写可编程只读存储器),掉电后数据不会丢失,程序计数器用于存放下一条指令所在单元的地址 在程序开始执行前,CPU按照 PC的指示从程序内存读取第一条指令(取指)。当执行指令时,CPU自动地修改PC的内容,即每执行一条指令PC增加2,2这个量等于指令所含的字节数(指令字节数),使 PC总是指向下一条将要取指的指令地址。,PC用于在程序存储器空间中对连续
11、指令字寻址。 PC 以2 为增量,LSb 置为“0”,使之与数据空间寻址相兼容。,31,32,2.3 系统集成,系统集成可以降低系统成本提高系统可靠性提高设计灵活性。 复位 振荡器 看门狗定时器 低功耗模式 低电压检测,系统集成,34,RESET指令:只要何时执行了RESET 指令,器件都会产生主复位信号SYSRST 信号,从而将器件置于特殊复位状态,1. 复位模块,主复位信号SYSRST 信号,35,引脚复位(MCLR):只要MCLR 引脚拉为低电平,输入脉冲比规定的最小宽度长,当 引脚被释放产生高电平后,在下一个指令时钟周期将产生SYSRST 信号并开始复位向量取指。,1. 复位模块,36
12、,WDTR 看门狗定时器复位:只要何时发生看门狗超时,器件将异步产生SYSRST 信号 看门狗(Watch Dog Timer)实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。,1. 复位模块,37,上电复位:在检测到VDD 电压上升时会产生内部上电复位脉冲。复位脉冲会产生10 s短时间的延时,以确保内部器件偏置电路稳定。,1. 复位模块,38,BOR欠压复位:主要用途是在发生欠压条件时产生器件复位。欠压条件通常由AC 电源上的干扰信号或
13、接入大负载时过电流造成电压下降产生的。,1. 复位模块,2. 振荡器系统,振荡器系统包含时钟源、时钟倍频器、可编程时钟后分频器、时钟监视器等模块。 (1)振荡源 带多时钟模式的主振荡器 辅助振荡器(低功耗的32 kHz 晶振) FRC 振荡器:快速内部RC (8 MHz) LPRC 振荡器:低功耗内部RC (512 kHz),39,系统时钟源FOSC,(2)PLL 时钟倍频器: 与XT 或EC 时钟模式的主振荡器配合工作 输入频率范围为4 MHz-10 MHz 4 倍频增益模式(Fout = 16 MHz-40 MHz) 8 倍频增益模式(Fout = 32 MHz-80 MHz) 16 倍频
14、增益模式(Fout = 64 MHz-120 MHz) 带有“失锁”陷阱选项的PLL VCO 锁定提示 (3)可编程时钟后分频器 可编程时钟后分频器分频比为4、16 和64,41,系统时钟源FOSC,系统时钟源FOSC 系统时钟源四分频可产生内部指令周期时钟Fcy 系统时钟源和指令执行之间的关系如下图:,44,3. 低压检测模块(LVD),LVD 模块可应用于电池供电的应用场合。当电池消耗能量时,电池电压缓慢下降。电池的源阻抗也随着能量的损耗而不断增大。 LVD 模块检测到电池电压(即器件的VDD 电压)低于阈值时,即认为是接近电池使用寿命的终点。这时应用程序自动关闭。 LVD 模块使用内部参
15、考电压与供电电池电压进行比较。阈值电压VLVD 可编程设置。,45,4. 低功耗模式,有两种低功耗模式,可以通过执行PWRSAV指令进入:休眠模式:CPU、系统时钟源和任何依靠系统时钟源工作的外设都被禁止。这是器件的最低功耗模式。模式退出:中断源、器件复位。空闲模式:CPU 被禁止,但是系统时钟源继续工作。外设继续工作,但可以有选择地禁止。模式退出:中断源、器件复位、 WDT 超时。 WDT 也可用于将器件从休眠或空闲模式唤醒。,46,PIC单片机原理及应用,第3章 开发工具,47,3.1 开发工具快速入门,芯片数据手册:可在 查找及下载,目前大多数新的芯片均有中文数据手册 免费的集成编译调试
16、环境MPLAB IDE集成了工程管理、语法高亮显示的文本文件编辑器、汇编编译器、功能强大的软仿真调试器等,同时可外挂多种C编译器、硬件仿真调试器、烧写器等。,3. 主要的C语言编译器: 目前MPLAB支持所列的所有C编译器的内嵌调试,单步,全速都没问题。不同的单片机系列必须使用不同的编译器,目前大多数编译器都有免费的试用版或限制版本下载。,4. 低成本下载器、在线调试器:PICKIT2:是廉价的产品,本身保护电路设计不完善,比较容易出问题。好处是可以支持脱机烧写和KEELOQ的片子烧写 ICD2:现在市场上的都是国产授权的ICD2,价格中等,之前很多人采用,编程速度显的有点慢,连接上比较容易出
17、现问题。 PICKIT3是低端在线调试器,PICKIT2的升级版,可支持脱机编程,编程速度方面有提高,性价比比较好的调试器。 ICD3算是中端的调试器,采用FPGA内核,支持软件断点多,编程速度快,而且本身的稳定性比较好,可以看作是一款简化版的REAL ICE。,3.2 MPLAB IDE的使用方法,安装MPLAB IDE(集成开发环境) 8.56要求:系统用户账户名为英文,安装文件夹路径中不能有中文存放文件名必须为英文 安装C30编译器 MPLAB C30 V1.30 MPLAB C30 V2.00 Upgrade,MPLAB IDE 软件环境使用分为下面几步骤进行:创建文件 使用项目向导创
18、建项目 编译项目 使用MPLAB SIM 软件模拟器进行调试 使用PIC kit3进行在线调试,新建源文件:选择 FileNew 打开一个新的空白的源文件。 保存源文件,MPLAB IDE 软件环境使用分为下面几步骤进行:创建文件 使用项目向导新建项目 编译项目 使用MPLAB SIM 软件模拟器进行调试 使用PIC kit3进行在线调试,选择 ProjectProject Wizard 来创建新项目。将出现一个欢迎页面。点击Next 继续。 在“Step One:Select a Device”中,通过下拉菜单选择dsPIC30F6014 芯片,点击 Next 继续。 在“Step Two:
19、Select a language toolsuite”中,选择“Microchip C30Toolsuite” 在“Step Three:Name your project”中,键入项目名MyProject 并点击BROWSE 进入MPLAB C30 安装目录下的examples 文件夹。然后点击NEXT 继续 在“Step Four: Add any existing files to your project”中,将添加两个文件到项目中。 在Summary (摘要)窗口中重新检查“项目参数”,验证芯片、工具包和项目文件的位置是否正确,设置编译选项 现在已经可以用dsPIC30F 工具来编
20、译项目,但是,需要检查项目和工具编译选项。 选择ProjectBuild Options 并点击“Project”显示整个项目的Build Options(编译选项)对话框。,MPLAB IDE 软件环境使用分为下面几步骤进行:创建文件 使用项目向导创建项目 编译项目 使用MPLAB SIM 软件模拟器进行调试 使用PIC kit3进行在线调试,选择 ProjectBuild All 对项目进行编译、汇编和链接。如果有任何错误或警告消息,会显示在输出窗口中。 如果在项目编译后出现错误,可双击显示错误消息的行直接进入导致该错误的源代码行。如果您使用的是例子中的代码,那么最常见的错误就是拼写错误、
21、漏掉了分号或大括号不匹配,MPLAB IDE 软件环境使用分为下面几步骤进行:创建文件 使用项目向导创建项目 编译项目 使用MPLAB SIM 软件模拟器进行调试 使用PIC kit3进行在线调试,通过选择DebuggerSelect ToolMPLAB SIM 将MPLAB SIM 软件模拟器作为调试工具。 设置断点:方法一:在源文件中,将光标移动到行上,然后通过鼠标右键选择“Set Breakpoint”设置断点。方法二:将光标移动到行上,双击设置断点。 选择 ViewWatch 打开Watch 窗口。从Add Symbol 旁边的下拉扩展菜单中选择counter,然后点击Add Symb
22、ol。 点击工具栏中的RUN 运行程序。程序将在执行设置了断点的语句之前停下。源代码窗口左边空白处的绿色箭头指向下一个要执行的语句。Watch 窗口中红色字体显示,表明变量的值发生了变化。,MPLAB IDE 软件环境使用分为下面几步骤进行:创建文件 使用项目向导创建项目 编译项目 使用MPLAB SIM 软件模拟器进行调试 5. 使用PIC kit3进行在线调试,Debug管脚选择 拨动开关 1,2 on 3,4 off,ICD2/ PICkit3在线调试器接口 Kit3上的白色箭头对应白色线,注意右边的一列跳线 分别是:右,右, 左,左,右,(1)如图所示选择PICkit3在线调试器,(2
23、)出现下图,点击OK,(3)选择debuggersettings,(4)Settings中选择Power,如下进行勾选,实验一、 MPLAP IDE软件和在线调试器的使用,一. 实验目的(1)掌握MPLAP IDE集成开发环境的基本操作。(2)掌握软件模拟器的调试方法。(3)掌握在线调试器的使用方法。(4)学会查阅相关数据手册。 二. 实验仪器设备(1)MPLAP IDE开发软件一套;(2) ICD2或kit3在线调试器一套;(3)APP009实验板一套; 三. 实验任务(1)编写两数相加或泡泡排序程序练习MPLAP IDE集成开发环境的使用。(上)(2)调用函数库编写在屏幕上输出时间信息的程
24、序,并用软件模拟器调试完成。(下)(3)通过在线调试器将ICD显示程序下载到APP009实验板。(下),PIC单片机原理及应用,第4章 MPLAB C 程序设计,70,4.1 MPLAB C 编译器,MPLAB C编译器 是一个遵循ANSI C标准的C 编译器, MPLAB C编译器带有一个完整的ANSI 标准函数库。这个函数库包括字符串处理、动态存储器分配、数据转换、计时和数学函数(三角、指数和双曲线函数)、文件处理的标准I/O 函数。 MPLAB C30还包括针对dsPIC嵌入式控制应用的语言扩展。 编译器使用代码优化技术将C源代码编译为高效而紧凑的代码,软件开发工具数据流图,4.2 常用
25、文件,1. xxx.c : C源文件,用户编写,可有多个 2. xxx.a : 汇编源文件,用户编写,可有多个 3. xxx.h : 头文件,编译器提供,或用户编写。 处理器头文件,如:#include 函数库头文件,参见数据手册dsPIC语言工具库如:#include #include 4. xxx.hex: 烧写到单片机中被执行的文件 5.编译过程中的其他文件: file.s 汇编代码,编译器生成 file.i 不应预处理的源文件。 file.o 目标文件。 file.p 预过程抽象汇编语言文件。 file.S 必须预处理的汇编代码。,与编译器有关的目录,4.3 程序设计,1. 数据类型,
26、void delay(void) int i;for (i=0;i2000;i+); ,void delay(void) long int i;for (i=0;i65000;i+); ,2. 常量、变量及其存储方式常量:程序运行过程中其值不改变的数据,不占用存储空间如:#define PI 3.1415926#define coef 2*PI变量:程序运行过程中其值会改变的数据。 一般情况下,不加限定时,存放于RAM数据存储器中,如:int i,j; 加限定时,被限定的变量将被分配到程序存储器, 如:const unsigned k_data;。,3. 数组 int i,j,s=0,l, v
27、3; /定义一维数组v3; static int a53= 80,75,92,61,65,71,59,63,70, 85,87,90,76,77,85 ; /定义二维数组a5 3,并赋值; for(i=0;i3;i+) for(j=0;j5;j+) s=s+aj; Vi=s/5; /给一维数组v3赋值; s=0; l=(v0+v1+v2)/3; /数组的使用,4. 运算符 (1)算术运算符:+ - * / (2)关系运算符: = 右移位赋值及读取:xxxxxx bits. Xxxxx =0/1寄存器名称 位名称5. 流程控制 (1)条件语句:ifelse (2)开关语句:switch/case
28、 (3)循环语句:while; for,6.函数 (1)一个c程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对较大的程序,一般不把所有内容全放在一个文件中,而是将它们分别放在若干个源文件中,由若干个源程序文件组成一个c程序。这样便于分别编写和编译,调高调试效率。 (2)一个源程序文件由一个或多个函数以及其他有关内容(如指令,数据声明与定义等)组成。 (3)c程序的执行是从main函数开始的,若在main函数中调用其他函数,调用后流程返回main函数,在main函数中结束整个程序的进行 (4)所有函数都是平行的,即定义函数时是分别进行的,是互相独立的。函数间可以互相调用,但不能
29、调用main函数。main函数是被操作系统调用的。,(5)从用户的角度来看函数分为两种a:库函数,由系统提供,用户不必自己定义,可直接使用它们b:用户自己定义的函数。它是以解决用户专门需求的函数。 (6)从函数的形式来看,函数分为两类: a:无参函数。无参函数可以带回或不带回函数值,但一般不带回函数值较多。b:有参函数。在调用函数时,主调函数在调用被调函数时,通过参数向被调函数传递数据。一般情况下,执行调用函数时会得到一个函数值,供主调函数使用。,例1:两数相加的简单C 程序,#include /*这个头文件提供了该器件的所有特殊功能寄存 器的定义*/ unsigned int Add(uns
30、igned int a, unsigned int b); /函数定义 unsigned int x, y, z; /变量定义 Int main(void) /主程序 x = 2; y = 5; z = Add(x,y); return 0; unsigned int Add(unsigned int a, unsigned int b) /函数调用 return(a+b); ,例2:编译多个文件,文件1 /* add1.c */ #include int main(void); unsigned int Add(unsigned int a, unsigned int b); unsigne
31、d int x, y, z; int main(void) x = 2; y = 5; z = Add(x,y); return 0; 通过库管理器和链接器,可以将一个项目中的多个文件编译链接生成可执行文件,文件2 /* add2.c */ #include unsigned int Add(unsigned int a, unsigned int b) return(a+b); ,例3:调用函数库,#include /* 调用time.h 中的clock函数获得时间*/ #include /*调用stdio.h中的printf函数进行输出*/ volatile int i; int main
32、(void) clock_t start, stop; int ct; start = clock(); for (i = 0; i 10; i+) stop = clock(); printf(“start = %ldn“, start); printf(“stop = %ldn“, stop); ,7. 宏的使用 (1)配置位设置 使用宏设置目标板配置位可在C 源代码开头前插入代码,如: _FOSC(CSW_FSCM_ON ,(3)数据存储器分配 如: #define _NEAR _attribute_(near)/将变量分配到near 数据存储区中 (4)中断服务程序声明 下面的宏可用于
33、声明中断服务程序(ISR):#define _ISR _attribute_(interrupt)#define _ISRFAST _attribute_(interrupt, shadow) 如:声明timer0 中断的中断服务程序:void _ISR _INT0Interrupt(void);声明SPI1 中断的快速现场保护中断服务程序:void _ISRFAST _SPI1Interrupt(void);,例4:LCD显示,#define _dsPIC30F4011_ #include #include #include “APP009V2_LCD.h“#define FCY 14745
34、600 / OSC配置为 XT模式,PLL * 8 ,XT = 7.3728 Mhz#define LED13 LATDbits.LATD0 #define LED14 LATDbits.LATD1 #define DIR_LED13 TRISDbits.TRISD0 #define DIR_LED14 TRISDbits.TRISD1 #define INPUT 1 #define OUTPUT 0,Struct /结构的定义 unsigned T3OV : 1 ;unsigned :15 ; Flags ;_FOSC(CSW_FSCM_OFF ,实验一、 MPLAP IDE软件和在线调试器
35、的使用,一. 实验目的(1)掌握MPLAP IDE集成开发环境的基本操作。(2)掌握软件模拟器的调试方法。(3)掌握在线调试器的使用方法。(4)学会查阅相关数据手册。 二. 实验仪器设备(1)MPLAP IDE开发软件一套;(2) ICD2或kit3在线调试器一套;(3)APP009实验板一套; 三. 实验任务(1)编写两数相加或泡泡排序程序练习MPLAP IDE集成开发环境的使用。建议分成两个文件实现。(上) (2)通过KIT3调试器将LCD显示程序下载到APP009实验板。(下),(3)调用函数库编写在屏幕上输出时间信息的程序,并用软件模拟器调试完成。(下) (设置1:projectbuild optionprojectMPLAB LINK30heap size=1) (设置2:debuggersettingsUart IO.),