PICkit2 LPC

Similar documents
mdt1030

第5章:汇编语言程序设计

AN579

PIC16F F MPLAB 08 16F LED 15 LED

2.5 idlocs PIC idloc idloc 0x1234 ; 0x config idloc HEX errorlevel errorlevel Error (Warning) Message HEX 3-14 errorlevel

文件名

INCF SEC1,F ; 將 SEC1+1 作查表取回對應數字 MOVF SEC1,W banksel STRING1 banksel PORTB RETFIE run_sec2: MOVF SEC2,W SUBLW.5 GOTO run_min ; 將秒個位數歸 0 CLRF SEC1 MOVL

33023A.book(31005A_cn.fm)

AN546

33023A.book(31006A_cn.fm)

Microsoft Word - S153B.doc

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

AN510

701PIC Introduction to PICMicro MCUs

AN541

Microsoft PowerPoint - 701_PIC-CHN_Attendee.ppt

ICD ICD ICD ICD ICD

<4D F736F F F696E74202D B5A5C6ACBBFAD3EBB5E7D7D3CFB5CDB3C9E8BCC62E707074>

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC

PIC8位单片机汇编语言常用指令的识读(上)

Microsoft Word - mdtjianjai.doc

2 PIC PIC 1 / CPU PIC MCU PIC RC

33023A.book(31026A_cn.fm)

目录 1. 产品简介 功能特性 引脚图 引脚描述 中央处理器 (CPU) 程序存储器 (OTP ROM) 堆栈 数据存储器 (RAM) INDF 寄存器.

PIC单片机16F84的内部硬件资源(一)

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

DPJJX1.DOC

<A1AAA1AA475053B4AEBFDACAFDBEDDBDD3CAD5B3CCD0F2CAB5C0FD>

41213C.book

第1章 ISIS编辑器指南

Microsoft Word - Ö¸Á.doc

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

Microsoft Word - LMB402CBC-AppNote-V0.1.doc

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

CH559指令周期.doc

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

目 录

<4D F736F F D20C7B0CBC4D5C2D7F7D2B5CCE22E646F6378>

<4D F736F F D20D4D3D6BECEC4B8E5C4A3B0E52E646F63>

Microsoft Word - ha0013s.doc

1.1 ML_ONOFF = 1 Q 3 Q 8 C 0.3V M 2 L 1 ML_ONOFF = 0 Q 3 Q 8 C 1. + R31 VCC R21 10K ML_ONOFF R15 0:off 1:on 1K Green Light VCC=5V L1 Q VDD=12V C

MSP430X1XX 系列微控制器具有以下特征 结构框图 超低功耗结构体系 A 额定工作电流在 1MHz V 工作电压 C11X P11X 和 E11X 为 V 从备用模式唤醒为 6 S 丰富的中断能力减少了查询的需要灵活强大的处理能力源操作数有七种寻址模

1. 介绍 义隆 8 位单片机指令介绍 Application Notes 义隆 8 位单片机指令介绍 EM78/EM88 系列是基于 RISC 的精简指令微控制器, 每条指令是 13 位 15 位, 除 LCALL LJMP MOV R2,A ADD R2,A 改变 PC 指针的指令是 2 个指令

MSP430ϵÁе¥Æ¬»úµÄÖ¸Áîϵͳ.pps [¼æÈÝģʽ]

41239D.book

CM ZT1

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD

STC15W4K60S4系列增强型PWM波形发生器应用

untitled

Microsoft Word - IRFWX_A051_C_SyncMOS_with_STC_APN_SC_.doc

PIC PICC C 4K C <10% C PIC 11.3 MPLAB-IDE PICC PICC MPLAB-IDE MPLAB-IDE ICE2000 ICD2 PICC MPLAB-IDE IDE Project Set Language Tool Locations

行业

Converting image (bmp/jpg) file into binary format

专业主干课程与主要专业课程教学大纲(2009年、2011年).doc

untitled

Microsoft Word - 論文終極板.doc

EN10,iphone5数据线IC,苹果配件开发

能投7月报封面

手册 doc

SMART 7P 0 HR7P OTPMCU A/D I/O OTP ROM RAM HR7P HR7P HR7PPMB MSOP0 7+input HR7PPSC HR7PPSD SOP SOP6 +input input HR7PERB SSOP0 7

DESCRIPTION

USB解决方案.ppt

STEP-MXO2 V2硬件手册

51 C 51 isp 10 C PCB C C C C KEIL

HT46R47 f SYS =4MHz 3.3~5.5V f SYS =8MHz 4.5~5.5V 13 位双向输入 / 输出口 1 个与输入 / 输出共用引脚的外部中断输入 8 位带溢出中断的可编程定时 / 计数器 具有 7 级预分频器 石英晶体或 RC 振荡器 位的程序存储器 P

untitled

DATASHEET SEARCH SITE ==

01.ai

Page 2

PIC16F87X基本指令說明

行业

Cube20S small, speedy, safe Eextremely modular Up to 64 modules per bus node Quick reaction time: up to 20 µs Cube20S A new Member of the Cube Family

Microsoft Word - em78 sub program.doc

Microsoft Word - MAN2011A_CH_RTT.doc


Electrical and Optical Clock Data Recovery Solutions - Data Sheet

EMC单片机学习笔记.doc

提纲. 1 实验准备. 2 从实模式进入保护模式. 3 小结 陈香兰 ( 中国科学技术大学计算机学院 ) 软件综合实验之操作系统 July 1, / 11

00513D_CN.FM

SPMC75F2413A_EVM_使用说明_V1.2.doc

N79A8211系列单片机内部NVM

untitled

XNS104 产品说明书 AD 型 2.4G 高速无线收发单片机概述 2.4GHz 高速无线收发单片机 XNS104 是一个带 12 位 ADC, 以 OTP 为程序存储基础, 带 2.4G 高速无线收发芯片的单片机 无线收发单元工作在 GHz 世界通用 ISM 频段, 它集

SAPIDO GR-1733 無線寬頻分享器

Section1_16bit Arc.ppt

SPHE8202R Design Guide Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provi

F515_CS_Book.book

学习MSP430单片机推荐参考书


目录

i

untitled

OB1

1 TPIS TPIS 2 2

Microsoft Word - SMB-63-2(簡体字).doc

Transcription:

深圳市英锐恩科技有限公司 单片机集成方案全方位解决服务商 优质智能电子产品 芯 方案解决商 圣邦微电子 (SG MICRO CORP) PICkit2 LPC 产品用户参考手册 深圳市英锐恩科技有限公司 ENROO-TECH(SHENZHEN)CO.,LTD 中国 深圳市福田区福华路嘉汇新城汇商中心 27 楼 2701 Enroo-Tech Technologies CO., Limited Light-Tech International Limited 香港新界荃灣沙咀道 29-35 號科技中心 5 樓 5 室 联系电话 :86-755-82543411,83167411,83283911,61357155, 88845951 联系传真 :86-755-82543511 联系邮件 :enroo@enroo.com 公司网站 :http://www.enroo.com http:// 英锐恩科技时刻为您提供技术支持 ; 提供开发应用协助 ; 提供成熟方案 ; 提供免费样品 ; 提供详细资料, 提供销售服务 Add: 深圳市福田区福华路嘉汇新城汇商中心 27 楼 2701 Tel:+86-0755-82543411, Fax: +86-0755-82543511 http://www.enroo-tech.com http://www.enroo.com

LPC 演示板用户指南 LPC 演示板 用户指南 1

目 录 LPC 演示板用户指南 第一章.LPC 演示板概述 1.1 简介... 3 1.2 摘要... 3 1.3 LPC 演示板支持的器件... 3 1.4 LPC 演示板概述... 3 1.5 运行 PICkit 2 的演示程序... 4 第二章. 中档 PICmicro 架构概述 2.1 简介... 5 2.2 存储器结构... 5 2.3 指令格式... 6 第三章. LPC 演示板教程 3.1 简介... 8 3.2 LPC 演示板教程... 8 3.2.1 教程 1: Hello World ( 点亮一个 LED)... 8 3.2.2 教程 2: Delay Loop ( 一个 LED 闪烁 )... 9 3.2.3 教程 3: Rotate ( 循环移位 )... 10 3.2.4 教程 4: A/D 转换... 12 3.2.5 教程 5: 改变循环闪烁速度... 14 3.2.6 教程 6: 按键去抖... 15 3.2.7 教程 7: 改变循环的速度和方向... 17 3.2.8 教程 8: Function Calls( 函数调用 )... 18 3.2.9 教程 9: Timer0... 19 3.2.10 教程 10: Interrupts( 中断 )... 21 3.2.11 教程 11: 间接寻址... 23 3.2.12 教程 12: 查表 (ROM 数组 )... 23 附录 A. 硬件原理图... 26 2

LPC 演示板用户指南 第一章.LPC 演示板概述 1.1 简介 这章主要介绍低引脚数 (LPC) 器件演示板和描述 LPC 演示板的特征. 1.2 摘要 这章讨论 : LPC 演示板支持的器件 LPC 演示板概述 运行 PICkit 2 的演示程序 1.3 LPC 演示板支持的器件 器件支持列表看 PICkit 2 套件光盘的 LPC 演示板的 README 文件. 8-pin DIP Flash 器件 : PIC12F508 PIC12F629 PIC12F635 PIC12F509 PIC12F675 PIC12F683 PIC12F510 14-pin DIP Flash 器件 : PIC16F505 PIC16F630 PIC16F684 PIC16F506 PIC16F676 PIC16F688 20-pin DIP Flash 器件 : PIC16F685 PIC16F689 PIC16F785 PIC16F687 PIC16F690 1.4 LPC 演示板概述 LPC 演示板配合 PICkit 2 可帮助用户快速的学习应用 PICmicro 微控制器 这个用户指南有 12 个演示板的学习教程, 并且各自都带有汇编语言源程序. LPC 演示板如图 1-1. 3

图 1-1: LPC 演示板 LPC 演示板用户指南 1.5 运行 PICkit 2 的演示程序 LPC 演示板带有一个已编程演示程序固件的器件. 把演示板插到 PICkit 2, PICkit 2 通过 USB 电缆连接到 PC, 启动 PICkit 2 编程软件, 选择 target power 的复选框. 演示板上的四个红色 LED 将轮流闪烁. 按按键 SW1, LED 亮的顺序会和前一次相反. 旋转电位器 RP1, 会改变 LED 闪烁的频率. 这个演示程序是用户指南中第七个教程的程序. 4

LPC 演示板用户指南 第二章. 中档 PICmicro 架构概述 2.1 简介这章介绍 LPC 演示板上的中档 PICmicro 的架构. 图 2-1: 简化的中档 PICmicro 模块图 2.2 存储器结构 PICmicro MCU 带有各自独立的程序存储区和数据存储区. 地址总线和数据总线分开, 使 MCU 具有更高的执行效率, 除分支指令外, 所有的指令均为单周期指令. 数据存储器包含在文件寄存器. 访问文件寄存器的指令地址长度是 7 bits, 因此只能寻址 128 个文件寄存器. 文件寄存器被分成几个 bank. 另外的两个位 RP0 和 RP1 ( 在状态寄存器里 ) 允许用来访问多个 bank. 这两个位能够有效的改变文件寄存器地址的高两位. 中档器件在每个 bank 上保留前面 32 个地址, 作为特殊功能寄存器 (SFRs). 特殊功能寄存器用来编程控制器件的外设. 控制寄存器和数据寄存器是在 SFR 空间. 在每个 bank 的地址 0x20 到每个 bank 的最后一个地址是通用寄存器 (GPR), 这些空间 5

LPC 演示板用户指南用来存储程序的变量. 一些使用频繁的寄存器可以从其他任何 bank 访问. 例如, 状态寄存器总是可访问的, 即使没有通过 RP 位来选择 bank. 最后的 16 字节 (0x70-0x7F) 可能也可以从其他 bank 访问. 程序存储器可通过 13 位的程序计数器 (PC) 来访问. 低 8 bits 可通过 SFR (PCL) 来访问, 高 5bits 在 PCLATH. 详细资料请看 PIC16F685/687/689/690 数据手册 (DS41262) PC 的 PCL 和 PCLATH 部分. 当程序存储器指令超过 1k 时,PCLATH 变得非常重要, 在做查表程序时也是一样, 看教程 12 2.3 指令格式指令集包括以下三种基本类型 : 字节操作类指令 位操作类指令 立即数操作类指令字节操作类指令包含 7-bit 的数据地址, 一个目标寄存器位和 6 位操作代码. 数据地址加上 RP0 和 RP1 位组成 9 位的操作数的数据存储器地址, 其他的操作数是工作寄存器 (W 或 Wreg). 在指令执行后, 目标寄存器位指定操作的结果存储在 W 或指令后面的文件寄存器. 例如 : ADDWF data,f 寄存器包括 Wreg 和 data, 操作结果存储在 data. 位操作类指令是对文件寄存器的指定的位段进行操作. 包含 7 位数据地址, 3 位位地址和 4 位操作码. 这些指令可能用来对指定的文件寄存器的位段置 1 或清 0. 也可能用来测试指定的文件寄存器的位段. 例如 : BSF STATUS,RP0 Status 寄存器的 RP0 位置 1. 立即数操作类指令操作数包含在指令里.W 寄存器作为另外一个操作寄存器. Call 和 GOTO 用一个 11 位的数作为立即数地址. MOVLW 'A' 把 A 的 ASCII 码值移动到 Wreg. 2.3.1 汇编语言程序基础汇编语言数字的格式除非有指定, 否则汇编编译器会把程序里的任何数字认为是十六进制数. 汇编编译器也支持二进制, 十进制, 八进制和 ASCII 码. 十六进制 : 12 或 0x12 或 H'12' 十进制 :.12 或 D'12' 八进制 : O'12' 二进制 : B'00010010' ASCII 码 : A'c' 或 'c' Org (Origin) Org 告诉编译器产生代码的起始地址. 通常代码起始地址在 0000, 但是它能够被设置在程序存储器的任何地址单元. 低档的器件有一个复位向量在程序存储器的最后一个地址单元, 所以它需要一个 GOTO 指令来指定程序的起始地址. End End 告诉编译器停止编译. 它必须写在所要编译程序的结束的位置. 它没必要放 6

在程序文件的最后, 但是 END 后面的语句将不会被编译. 定义存储器位置定义数据存储器的位置有三种方式 ( 看例 2-1). 例 2-1: 定义数据存储器 #define Length 0x20 ;C 语言的语法 Length equ 0x20 ; 标号 Length 的值等于 0x20 LPC 演示板用户指南 cblock 0x20 Length Width Area:2 Girth endc ; 开始变量的块定义 ; 变量 Length 的地址在 0x20 ; 变量 Width 的地址在 0x21 ; 定义一个两字节长的变量, 起始地址在 0x22 ; 变量 Girth 的地址在 0x24 除非要把某个变量指定在一个特殊的位置, 否则 cblock/endc 是最好的变量定义方法. 这个方法的优点是变量定义和开发的过程中, cblock 能够保持变量块最小. 用其他方法, 你可能还要回过头来查找没有用到的单元. 7

LPC 演示板用户指南 第三章. LPC 演示板教程 3.1 简介以下的教程包含了 LPC 演示板的基本特征. 如有必要请看应用文档. 源代码和 HEX 文件安装在 C:\Microchip\PICkit 2 \Lessons\. 也可在 PICkit 2 光盘目录 \PICkit 2 Lessons\ 中找到. 3.2 LPC 演示板教程 教程 1: Hello World ( 点亮一个 LED) 教程 2: Delay Loop ( 延时循环 ) 教程 3: Rotate ( 循环移位 ) 教程 4: Analog-to-Digital(A/D 转换 ) 教程 5: Variable Speed Rotate( 改变循环闪烁速度 ) 教程 6: Switch Debounce( 按键去抖 ) 教程 7: Reversible Variable Speed Rotate( 旋转电位器改变 LED 闪烁速度和方向 ) 教程 8: Function Calls( 调用函数 ) 教程 9: Timer0 教程 10: Interrupts( 中断 ) 教程 11: Indirect Data Addressing( 间接寻址 ) 教程 12: Look-up Table ( 查表 ) 3.2.1 教程 1: Hello World ( 点亮一个 LED) 教程 1 展示怎样点亮一个 LED. 并讨论 I/O 口的结构. 新指令 : BSF 位置 1 指令 BCF 位置 0 指令 LED 连接到 I/O 口 RC0 RC3. 当这些 I/O 的其中一个输出高电平, 相应的 LED 就被点亮. 这些 I/O 能够被配置位输入或输出. 在上电时默认的是输入. TRIS 寄存器的某位段为 0 则相应的 I/O 口为输出, 为 1, 则相应的 I/O 为输入. 我们想要用数字输出, 所以必须配置 TRIS. 例 3-1: PICkit 2, 教程 1: HELLO WORLD ; PICkit 2 Lesson 1 - 'Hello World' ; #include <p16f690.inc> config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF) org 0 Start BSF STATUS,RP0 ; 选择寄存器 bank 1 BCF TRISC,0 ; 设置 I/O 口 RC0 为输出 BCF STATUS,RP0 ; 选择寄存器 bank 0 BSF PORTC,0 ;RC0 输出 1, 点亮 LED GOTO $ ; end 8

LPC 演示板用户指南 ; 开始一个注释段, 任何在分号行后的文字都会被编译器忽略. #include 在一个 include 文件定义 PIC16F690 所有可用的特殊功能寄存器和有效的存储区. 这些定义的名称和器件数据手册匹配. Config 定义配置字. 这些标号已在 p16f690.inc 里定义. 它们的逻辑关系是 AND. Org 0 告诉编译器产生代码的起始位置. 代码可能在程序存储器的任何单元开始生成. 中档 PICmicro 器件的起始地址是 0, 0 也是器件的复位向量. BCF TRISC,0 告诉处理器清 0 文件寄存器 TRISC 的 0 位. TRISC 是三态寄存器. TRISC 寄存器的某位段为 0 则相应的 I/O 口为输出, 为 1, 则相应的 I/O 为输入. 我们要把它设为输出, 所以必须清 0. BSF PORTC,0 告诉处理器把 PORTC 的 0 位置 1. I/O 口将输出高电平, 点亮 LED. GOTO $ 告诉处理器在当前的指令循环. 更多的信息请参考 PIC16F685/687/689/690 数据手册 (DS41262) 的 I/O 口部分. 3.2.2 教程 2: Delay Loop ( 一个 LED 闪烁 ) 教程 1 展示怎样点亮一个 LED, 这个教程将展示怎样让一个 LED 闪烁. 新指令 : CLRF 文件寄存器清 0 INCF 文件寄存器加 1 DECF 文件寄存器减 1 INCFSZ 文件寄存器加 1, 假如为 0, 则跳到下一条指令 DECFSZ 文件寄存器减 1, 假如为 0, 则跳到下一条指令 GOTO 跳到程序的另一个位置例 3-2: PICkit 2, 教程 2: 闪烁 Loop BSF PORTC,0 ; 点亮连接到 RC0 的 LED BCF PORTC,0 ; 熄灭连接到 RC0 的 LED GOTO Loop ; 循环, 再做一次 加上 BCF 指令, 使 LED 循环闪烁,LED 闪烁的速度非常快, 你只能看到黯淡的红光. 这个循环需要执行 4 个指令周期. 第一条指令点亮 LED. 第二条指令熄灭 LED. GOTO 需要 2 个指令周期, 这意味着一个循环中 LED 只被点亮 25% 的时间. 这样的配置,PICmicro 每秒执行 100 万条指令. 在这个速度下, 要使肉眼能看到闪烁, 必须降低闪烁的频率, 这就需要用延时循环. 文件寄存器加 1 或减 1 INCFSZ 和 DECFSZ 指令是给指定的文件寄存器加上 1 或减去 1, 并且当结果为 0 时, 条到下一条指令. 例 3-3 是一个循环延时的例子 CLRF 清 0 计数器单元 DECFSZ 文件寄存器减 1, 假如为 0, 则跳到下一条指令 9

例 3-3: 循环延时 LPC 演示板用户指南 Short Loop Loop CLRF Delay DECFSZ Delay,f GOTO Loop Long Loop Loop CLRF Delay1 CLRF Delay2 DECFSZ Delay1,f GOTO Loop DECFSZ Delay2,f GOTO Loop GOTO Loop ( 在例 3-3) 返回到 Loop 继续下个循环. 一个循环需要 3 个指令周期 ; DECFSZ 指令消耗一个周期, GOTO 指令消耗两个周期 ( 看注意 ), 程序将执行 256 个循环, 总的是 768 个指令周期, 执行时间 768μs. 第二个循环程序的执行时间为 ( 768 + 3 ) * 256 = 197376μs = 0.197s. 打开 Blink.asm 并编译. 然后导入 HEX 文件到 PICkit 2, 编程器件,LED 的闪烁速度大约 2 Hz. 3.2.3 教程 3: Rotate ( 循环移位 ) 教程 1 和 2 展示怎样点亮 LED 并让它闪烁, 这个教程将展示怎样循环点亮四个 LED. 先点亮 DS4 然后移到 DS3, 然后 DS2, 然后 DS1, 再回到 DS4. 新指令 MOVLW 把一个立即数装入到 Wreg MOVWF 把 Wreg 的值移到文件寄存器 MOVF 把相关的文件寄存器的值移到 Wreg 或同一个文件寄存器 ( 看注意 ) RRF 文件寄存器位循环右移 RLF 文件寄存器位循环左移 10

循环程序流程 首先, 初始化 I/O 口 然后, 把显示变量赋给 I/O 口 显示一段时间 循环显示图 3-1: 循环程序流程 LPC 演示板用户指南 循环移位循环移位指令 (RRF 或 RLF) 带进位位向左或向右移动文件寄存器所有的位. 进位位移到文件寄存器的低位或高位, 文件寄存器移出的位写到进位位 C. 在执行移位指令前进位位 C 被清 0, 所以多余的位不会进入 display. 进位位 C 也用来指示 display 是否为 0. 当进位位 C 为 1 时, 必须重新把 display 的 bit 3 设置为 1. PICmicro MCU 有两条循环移位指令 : 循环左移 (RLF) 和循环右移 (RRF). 图 3-2: 循环左移 11

LPC 演示板用户指南 例 3-4: 循环移位例程 3.2.4 教程 4: A/D 转换这个教程将展示怎样配置 ADC 模块, 用来读取一个由板上的电位器 (RP1) 控制的模拟电压, 并在四个 LED 上显示转换结果的高 4 位. PIC16F690 片内有一个精度为 10 bits 的 11 通道 ADC 模块. 这个 AD 转换器的参考电压可由器件的 VDD 或一个外部参考电压源提供. LPC 演示板的 AD 参考源为 VDD. 模拟电压和参考电压之间的比例关系可以计算出 AD 转换的结果. ADC = V/VREF * 1023 反过来用 ADC 转换的结果和参考电压也可以算出模拟电压值. V = ADC/1023 * VREF 当用 AD 读一个传感器时, 计算电压值仅仅是第一步, 还可能要一些数学计算 例如, 读一个热敏电阻, 计算出电压仅仅是计算温度的第一步. 用其它方法也可以转换 ADC 值, 包括直接查表和分段线性插补. 从原理图 ( 附录 A. 硬件原理图 ) 可以看到电位器是连接到 PIC16F690 的 RA0. 以下是这个教程程序的配置步骤 : 配置 PORTA 为模拟输入, TRISA<0> = 1, ANSEL<0> = 1 在 ADCON1 选择 AD 转换时钟. 在 ADCON0 选择采样通道, 对齐方式和 VREF 参考源 3.2.4.1 ADCON1 ADCON1 用来选择处理器时钟速度和 AD 转换速度的比例 这是非常重要的, 因 12

LPC 演示板用户指南 为 ADC 转换每一位需要的的最少时间是 1.6μs 假如转换的时钟速度太高, 精度会降低 处理器的时钟速度增加, 时钟分配器必须保证转换所需的最少时间 当时钟速度为 4MHz, 时钟分配器设置最小为 8:1 的比例, 这时转换速度为 2μs 参考 PIC16F685/687/689/690 数据手册 (DS41262) 的推荐配置表格 TAD vs. Device Operating Frequencies 寄存器 3-1: ADCON1 A/D AD 控制寄存器 1 ( 地址 : 9Fh) bit 7 未用 : 读作 0 bit 6-4 ADCS<2:0>: A/D 转换时钟选择位 000 = FOSC/2 001 = FOSC/8 010 = FOSC/32 x11 = FRC (AD 模块内部专用的 RC 振荡器 = 500 khz ) 100 = FOSC/4 101 = FOSC/16 110 = FOSC/64 bit 3-0 未用 : 读作 0 3.2.4.2 ADCON0 ADCON0 控制 ADC 操作的寄存器. Bit 0 开启 ADC 模块,Bit 1 开始一次 AD 转换,bits <5:2> 选择 ADC 的通道 VCFG bit< 6> 选择 AD 参考源 VREF, 可能是 VDD 或一个独立的参考电压 ADFM bit <7> 选择 10 bits 是左对齐还是右对齐 在这个教程中,ADC 模块必须开启, 并选择采样通道 RA0(AN0) 选择内部电压参考源和 8TOSC 转换时钟 ADC 在变换采样通道后需要大约 5μs, 使 ADC 采样电容稳定 最后, 我们就可以把 ADCON0 的 GO 位置 1 开始转换 GO 位也同样作为转换完成的标志, 当 AD 转换完成时,GO 位将被清 0,AD 转换结果被保存在 ADRESH:ADRESL 中 在这个教程中转换结果的高四位将被显示在 LED 中 关于 ADC 模块的更多资料请看 PIC16F685/687/689/690 数据手册 (DS41262) 的 Analog-to-Digital 部分 寄存器 3-2: ADCON0 A/D 控制寄存器 ( 地址 : 1Fh) bit 7 ADFM: A/D 结果格式选择位 1 = 右对齐,ADRESH 寄存器的高 6 位读为 0 0 = 左对齐,ADRESL 寄存器的低 6 位读为 0 bit 6 VCFG: 参考源选择位 1 = VREF 0 = VDD bit 5-2 CHS<3:0>: 模拟通道选择位 0000 = 通道 00 (AN0) 13

LPC 演示板用户指南 0001 = 通道 01 (AN1) 0010 = 通道 02 (AN2) 0011 = 通道 03 (AN3) 0100 = 通道 04 (AN4) 0101 = 通道 05 (AN5) 0110 = 通道 06 (AN6) 0111 = 通道 07 (AN7) 1000 = 通道 08 (AN8) 1001 = 通道 09 (AN9) 1010 = 通道 10 (AN10) 1011 = 通道 11 (AN11) 1100 = CVREF 1101 = VP6 1110 = 保留. 未用 1111 = 保留. 未用 bit 1 GO/DONE: A/D 转换状态位 1 = A/D 转换正在进行. 置 1 开始一个 A/D 转换周期 ( 当转换完成时, 该位由硬件自动清 0 ) 0 = A/D 转换已完成或未进行 AD 转换 bit 0 ADON: A/D 使能位 1 = 开启 A/D 模块 0 = A/D 模块关闭, 没有消耗工作电流 3.2.5 教程 5: Variable Speed Rotate( 改变循环闪烁速度 ) 教程 5 结合教程 3 和教程 4 用 AD 转换来控制 LED 循环闪烁的速度 新指令 BTFSS 位测试指令, 为 1 跳转 BTFSC 位测试指令, 为 0 跳转每个主循环都进行一次 AD 转换, 转换结果用来控制延时程序的外围循环 ( 看例 3-5). 例 3-5: 改变循环闪烁速度例程 14

图 3-3: 程序流程 LPC 演示板用户指南 3.2.6 教程 6: 按键去抖机械开关在计算机, 微处理器和微控制器的应用中扮演着及其重要的角色 机械开关便宜 简单且可靠 开关会产生一些干扰, 显然噪声是按键在关闭和断开时引起的 消除按键抖动两个最好的方法是连接一个阻容电路, 或连接到可重定位的移位寄存器 ( 看 3-4 和 3-5) 这些方法是非常有效的, 但是要增加成本 但是如果程序存储器够用, 用软件的方法消抖, 可以节省这些成本 15

图 3-4: 滤波消抖方案 LPC 演示板用户指南 图 3-5: 移位寄存器消抖方案 一个简单的按键消抖的方法是, 连续采样按键信号直到信号稳定, 或者直到信号没有反弹 那么连续采样的时间要多长呢, 通常 5 ms 就足够了 LPC 演示板的按键没有消抖, 但是它是按键消抖很好的时间平台 16

图 3-6: 简单的按键消抖程序流程 LPC 演示板用户指南 3.2.7 教程 7: Reversible Variable Speed Rotate( 改变循环的速度和方向 ) 教程 7 结合教程 5 和 6 当按键按下时改变循环的方向, 调整电位器控制循环的速度 程序必须保持原来的循环方向的代码, 还要加上另一方向循环的代码 教程 5 是用右循环, 并检测进位位 C, 为 1 时进入下个循环 教程 7, 我们也同样需要左循环, 并检测 display 的 bit 4 是否为 1 当 display 的 bit 4 为 1 时, 把 bit 4 清 0, 并把 bit 0 置 1 17

例 3-6: 改变循环的速度和方向例程 LPC 演示板用户指南 3.2.8 教程 8: Function Calls( 函数调用 ) 教程 8 展示怎样改变 LED 循环闪烁的方向, 用一个函数作为延时程序 新指令 CALL 调用函数或子程序 RETURN 中止函数或子程序 RETLW 中止函数或子程序函数或子程序通过 CALL 指令来调用, 用 RETURN 或 RETLW 来中止 RETURN 程序返回到执行 CALL 指令的下一单元的语句 RETLW 同样也返回到 CALL 指令的下一单元的语句, 但是 W 载入了一个常量 中档 PICmicro MCU 器件的 CALL 堆栈能够保持 8 个 return 地址. 假如产生了第九个 CALL, 第一次写入的返回地址会被覆盖 传递自变量 Wreg 可以很方便的传递一个字节,FSR 也可能被用来传递另外一个字节 假如要传递更多的数据, 就必须要有一个固定的缓冲器 当调用延时函数时,ADC 结果移到 W, 然后调用 Delay 子程序 RETURN 返回到 CALL 的下一条指令 18

例 3-7: 函数调用 LPC 演示板用户指南 3.2.9 教程 9: Timer0 Timer0 是一个计数器 它能够用作处理器时钟周期或外部事件的计数器 教程 9 把它配置为指令周期的计数器 Timer0 一个具有预分频器的 8-bit 计数器 图 3-7: TIMER0 简图 TMR0 是一个特殊功能寄存器 (SFR), 可通过程序来读写 预分频器不是 SFR, 因而不能读写 可是, 对 TMR0 的所有指令写入操作都将对预分频器清 0 定时器可能被处理器时钟或外部事件驱动 由处理器时钟驱动时, 它每个指令周期加 1 这是一个很方便的计时方法, 比循环延时更好, 这样处理器不用浪费时间来处理循环延时 预分频器通过 OPTION_REG 来配置, 看图 3-8. 19

图 3-8: OPTION_REG 配置预分频器 LPC 演示板用户指南 教程 9 把 Timer0 的预分频器配置为最大, 以获得最长的延时时间 预分频器将处理器时钟进行 256 分频 因此,Timer0 溢出标志位每 65536μs (0.0000001 s * 256 * 256) 被置 1 一次,1s 大约 15 次 例 3-8: TIMER0 例程 20

LPC 演示板用户指南 3.2.10 教程 10: Interrupts( 中断 ) 新指令 RETFIE 中断返回指令 SWAPF 文件寄存器半字节交换指令中断源大部分的外设能够产生一个中断, 同样一些 I/O 也能被配置为当状态改变时产生中断 当一个外设需要中断服务, 它的中断标志位会被置 1 每个中断标志位和中断使能位进行 AND, 然后各个中断标志位和中断使能位 AND 的结果再进行 OR, 产生一个主中断请求信号 这个主中断与全局中断使能位 (GIE), 进行 AND 看 PIC16F685/687/689/690 数据手册 (DS41262) 的完整中断逻辑图 这个全局中断使能位决定 PICmicro 是否响应外设的中断请求 图 3-9: 中断逻辑简图 当主中断请求信号产生,PICmicro 将结束当前的指令, 把下一条指令的地址保存在堆栈, 然后跳到中断服务程序 (ISR) 进入 ISR 后, 硬件自动清 0 GIE 位, 以防止响应其它中断请求 中断的现场保护进入 ISR 后第一件事是进行中断现场保护, 在中断返回到主程序前要恢复被保护的寄存器的内容 任何在 ISR 里可能被改变的 SFR 都必须保存, 至少要保存 Wreg 和 Status 寄存器 PIC16F690 的文件寄存器的最后 16 bytes 是 accesses 区, 最好用来存放所保护的寄存器的内容, 这 16 bytes 寄存器可以从任何 RAMBank 存取, 而不要设置 Status 寄存器的 RP0 和 RP1 识别触发中断的事件接下来,ISR 要检测中断标志位, 以确定触发中断的外设 当发现中断源时, 就处理该外设的中断服务程序 中断的现场恢复一旦处理完中断服务程序, 就需要恢复中断现场并返回主程序 恢复中断现场不能用 MOVF W_Temp,w, 因为 MOVF W_Temp,w 可能会影响 Z 标志 用两个 SWAPF 指令能够恢复 Wreg, 并且不会影响 Status 寄存器的 z SWAPF 用来交换寄存器的高四位和低四位 第一次交换后存到文件寄存器, 第二次交换结果保存到 Wreg 21

例 3-9: 现场恢复 LPC 演示板用户指南 最后,RETFIE 返回原程序, 并把 GIE 置 1, 重新使能中断 图 3-10: SWAPF 指令 3.2.11 教程 11: 间接寻址 FSR ( 文件选择寄存器 ) 用来指定一个文件寄存器地址 一个对 INDF( 间接文件寄存器 ) 的读或写操作, 就是对 FSR 所指定的地址的文件寄存器操作 这可以用来实现数字滤波 在一个数列中保存最后 n 个值, 然后求平均值 这个滤波需要两个部分 : 一个循环队列和一个计算平均值的函数 22

图 3-11: 平均值滤波 LPC 演示板用户指南 在一个中档 PICmicro 中计算平均值最好用 FSR 来保存下一个被插入的值 这能够确保原来的值总是被新的值覆盖 例 3-10: 文件选择寄存器例程 教程 11 加入了一个平均值滤波到教程 4 的 ADC 代码中 旋转电位器改变模拟电压值,AD 模块读取这个电压值 经过滤波后送到 LED 显示 3.2.12 教程 12: 查表 (ROM 数组 ) 教程 8 介绍函数调用 教程 12 展示怎样调用函数和计算并修改程序指针, 也就是查表程序 ( 看例 3-11). 它有时候用来实现一个表格到另外一个值的转换 在高级语言可以这样表示 : y = function(x); 23

LPC 演示板用户指南 x 返回后会把相应的值赋给 y PICmicro MCUs 用直接修改程序指针的方法来实现 例如, 一个十六进制数到相应的 ASCII 的转换 索引值用来确定相应的 RETLW 指令的程序指针, 把一个常量导入到 Wreg, 并返回到调用程序 例 3-11: 查表 假如表格与一个 256 byte page 边界交叉, 或假如不知何故查表是调用索引值以外的值, 程序将跳到表格外一个位置 如果在表格后只有十六条指令, 必须确定索引值不超过 16 简单的方法是在修改 PCL 前与 W 进行逻辑与 : ANDLW 0x0F. 假如与表格一个 256 byte page 边界交叉, 程序指针是 13 位宽, 但是 PCL 只有 8 位 ( 看图 3-12) 剩下的高 5 位是保存在 PCLATH 可是低 8 位溢出时是不能自动加载到 PCLATH 的, 这需要在程序里修改 PCLATH 关于怎样用 PCLATH 的更多资料, 请看 PIC16F685/687/689/690 数据手册 (DS41262) 的 PCL 和 PCLATH 部分 图 3-12: PC 这个教程用查表程序来实现一个二进制数到格雷码的转换, 这经常用在解码应用上教程中也同样先获得一个 AD 值, 然后转换为格雷码在 LED 显示 ( 看图 3-12) 格雷码的转换十进制二进制 0 0000 1 0001 2 0011 3 0010 4 0110 5 0111 6 0101 7 0100 8 1100 9 1101 10 1111 11 1110 24

12 1010] 13 1011 14 1001 15 1000 例 3-12: 二进制到格雷码的转换 LPC 演示板用户指南 25

LPC 演示板用户指南 附录 A. 硬件原理图 图 A-1: LPC 演示板原理图 26

深圳市英锐恩科技有限公司 全球销售及服务网点 单片机集成方案全方位解决服务商 优质智能电子产品 芯 方案解决商 PARTNER 联系信息 : 深圳市英锐恩科技有限公司 ENROO-TECH(SHENZHEN)CO.,LTD 中国 深圳市福田区福华路嘉汇新城汇商中心 27 楼 2701 Enroo-Tech Technologies CO., Limited Light-Tech International Limited 香港新界荃灣沙咀道 29-35 號科技中心 5 樓 5 室 联系电话 :86-755-82543411,83167411,83283911,61357155, 88845951 联系传真 :86-755-82543511 联系邮件 :enroo@enroo.com 公司网站 :http://www.enroo.com http:// Add: 深圳市福田区福华路嘉汇新城汇商中心 27 楼 2701 Tel:+86-0755-82543411, Fax: +86-0755-82543511 http://www.enroo-tech.com http://www.enroo.com