PIC编程指导文档
- 格式:pdf
- 大小:2.65 MB
- 文档页数:23
PIC编程说明在编程过程中由于一个端口可能有多个功能,所以在初始化时应该详细设置所以的端口的功能,当使用一种功能时应该将其他功能关闭,否则端口的功能将不能正常工作。
汇编:C语言:-------picc1、在用C语言编程之前,得确定用户用的是哪个辅助C编译器(因为MPLAB IDE 不提供C编译器,不过在8.33版本有捆绑了PICC的C编译器用户可以直接选用)。
注意设置连接编译器的路径。
2 在程序的最前面用#include 预处理指令引用包含头文件,其中必须包含一个编译器提供的“pic.h”文件(在picc18里为:pic18.h),实现单片机内特殊寄存器和其它特殊符号的声明;3 用“__CONFIG”预处理指令定义芯片的配置位;4 声明本模块内被调用的所有函数的类型,PICC 将对所调用的函数进行严格的类型匹配检查;5 定义全局变量或符号替换;6 实现函数(子程序),特别注意main 函数必须是一个没有返回的死循环。
现提供个C 原程序的范例:#include <pic.h> //包含单片机内部资源预定义#include “pc68.h” //包含自定义头文件//定义芯片工作时的配置位__CONFIG (HS & PROTECT & PWRTEN & BOREN & WDTDIS);//声明本模块中所调用的函数类型void SetSFR(void);void Clock(void);void KeyScan(void);void Measure(void);void LCD_Test(void);void LCD_Disp(unsigned char);//定义变量unsigned char second, minute, hour;bit flag1,flag2;//函数和子程序void main(void){SetSFR();PORTC = 0x00;TMR1H += TMR1H_CONST;LED1 = LED_OFF;LCD_Test();//程序工作主循环while(1) {asm(“clrwdt”); //清看门狗Clock(); //更新时钟KeyScan(); //扫描键盘Measure(); //数据测量SetSFR(); //刷新特殊功能寄存器}}为了使编译器产生最高效的机器码,PICC 把单片机中数据寄存器的bank 问题交由编程员自己管理,因此在定义用户变量时你必须自己决定这些变量具体放在哪一个bank 中。
PIC单片机的C语言编程指南PIC单片机是一种常用的嵌入式系统开发平台,其具有低功耗、成本低廉、易于编程等优点,在工业自动化、电子设备控制等领域有着广泛应用。
本文将为读者提供一份PIC单片机的C语言编程指南,帮助初学者快速入门并掌握基本的编程技巧。
首先,我们需要了解一些PIC单片机的基本概念。
PIC单片机采用哈佛结构,具有多种型号和系列,每个系列有多个型号可供选择。
不同的型号和系列有不同的特性和功能,因此在编程时需要根据具体的芯片型号进行适配。
PIC单片机的编程语言常用的是C语言,其语法简洁,易于理解和学习,并且具有较高的可移植性。
在编写PIC单片机的C语言程序时,我们需要按照以下步骤进行:1. 引入头文件:使用#include指令引入所需的头文件,头文件包含了定义和声明所需的函数和变量。
3.初始化:在程序开始时对所需的资源进行初始化,包括引脚配置、中断设置、定时器初始化等。
4.主循环:编写主循环代码,其中包括需要重复执行的功能,例如读取传感器数据、处理输入输出等。
5.中断处理:根据需要,编写中断处理函数,处理外部中断、定时器中断等。
6.清理工作:在程序结束时,进行一些清理工作,例如释放资源、关闭设备等。
下面是一个PIC单片机的C语言编程示例:```c#include <xc.h> // 引入XC8编译器的头文件#define LED_PIN RC0 // 定义LED连接的引脚void iniTRISC0=0;//配置RC0引脚为输出模式void maiinit(; // 初始化while(1)LED_PIN=1;//点亮LED__delay_ms(500); // 延时500毫秒LED_PIN=0;//关闭LED__delay_ms(500); // 延时500毫秒}```上述代码实现了一个简单的功能,即使LED灯以500毫秒的间隔交替点亮和关闭。
在程序中,我们首先引入了`<xc.h>`头文件,然后定义了一个宏`LED_PIN`来表示连接LED的RC0引脚。
PIC单片机编程器A用户手册V1.0宁波单片机开发网nbdpj@2009年07月目录第一章驱动程序的安装------------------------------------------------------------------------------------------------------3 第二章软件操作---------------------------------------------------------------------------------------------------------------5 第三章编程器接口说明------------------------------------------------------------------------------------------------------14 第四章编程器支持器件------------------------------------------------------------------------------------------------------16装箱单:序号内容数量1 PIC单片机编程器A 12 USB数据线 1第一章驱动程序的安装1 驱动程序下载1.1 驱动程序可到宁波单片机开发网主页()下载专区进行下载,文件名PL2303驱动程序。
1.2 下载到硬盘后,进行解压后待用,注意该驱动为非安装型驱动,不能通过EXE文件直接安装。
2 安装USB驱动程序2.1利用USB数据线将编程器与电脑USB接口连接,系统将提示发现新硬件并跳出找到新硬件向导选项如上图,单击下一步选择如上图,单击下一步选择如上图,点击浏览将文件定位于1.2所准备的USB驱动程序,点击确定。
文件定位后,单击下一步,直至安装完成。
2.2 USB驱动程序安装验证USB程序安装后需要验证是否安装正确,可按如下不骤:2.2.1 右键击我的电脑,点击属性,硬件栏目里面点击设备管理器见上图,如果驱动安装成功,系统会为该USB设备虚拟出一个端口,本例是COM7,该端口号是由系统给定,不是唯一的,一般会在COM3-COM10间。
单片机原理与应用实验指导书(试用版)童亮编北京信息科技大学机电工程学院车辆工程实验室本实验指导书结合教材并围绕TPDEM1上的各个功能模块展开。
实验硬件环境包括实验板TPDEM1和MAPLAB-ICD2集成仿真开发系统组成,软件以MAPLAB IDE汇编语言为基础的软件开发系统。
实验DEMO程序提供传统的汇编单文件风格的代码以及说明文档,主要供教学使用并提供学生参考。
本实验制指导书的所有DEMO程序均以PIC16F877A芯片为例编写的,若是其他型号的芯片请自行移植代码。
TPDEM1开发实验板概述 (4)MAPLAB IDE基础 (6)芯排线连线说明 (7)使用ICD2作为调试器 (8)使用ICD2作为烧写器 (17)实验一I/O口流水灯功能实验 (18)实验二A/D转换热敏电阻实验 (21)实验三A/D转换光敏电阻实验 (24)实验四RS2332 串口通信实验 (27)实验五外部中断实验 (31)实验六CCP模块PWM实验 (33)实验七CCP模块输入捕捉实验 (36)实验报告模板 (40)TPDEM1开发实验板概述TPDEM1 (普通版见图1,I/O口接口是插针的形式;高校版见图2,I/O口接口是插孔的形式)开发实验板硬件采用模块化设计,便于用户灵活组成科研项目所需的硬件结构。
硬件有: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、可用于添加硬件的试验区。
PIC单片机入门教程V1.1PIC单片机入门教程一、简单介绍本文档主要介绍PIC单片机开发环境的建立、集成开发环境使用方法、简单示例程序说明、PIC单片机开发注意事项等。
ZC-ADK开发板作为Android外设开发套件(Accessory Developer Kit)时,提供两种与Android手机通信的方法,分别是USB和蓝牙通信,如果使用ZC-ADK做USB 外设开发时,只需支持USB Accessory的Android手机;如果使用ZC-ADK做蓝牙外设开发时,需要添加ZC-BLUE模块。
1.所需硬件:ZC-ADK开发板开发板数据线2.所需软件:集成开发环境:MPLAB_IDE_8_50,将代码编辑、编译、调试等功能集成于图形界面下的应用程序。
C编译器:MPLAB C30,用于将C源文件进行编译,生成汇编语言文件,并将编译器产生的文件与其他目标文件与库文件进行汇编和链接,产生最终的应用程序。
应用程序库:microchip-application-libraries,PIC单片机的应用程序库文件,包含图形、USB、Android外设等应用程序库。
程序下载:HIDBootloader,用于通过USB下载编译好的应用程序。
二、MPLAB IDE 8.50安装1.将MPLAB_IDE_8_50.zip解压缩,双击setup.exe开始安装,出现图2-1界面,点击NEXT继续。
图2-12.出现图2-2界面,选择I accept,点击Next图2-23.出现图2-3所示界面,选择Complete,点击Next。
图2-34.出现图2-4界面,选择安装目录,点击Next。
图2-45.出现图2-5界面,选择I accept,点击Next。
图2-56.出现图2-6界面,选择I accept,点击Next。
图2-67.出现图2-7界面,点击Next,开始安装。
图2-78.出现图2-8界面,询问现在是否安装HI-TECH C编译器,选择否。
PIC汇编编程规范
一、程序命名规范
程序文件名由两部分构成:一部分为产品型号或功能描述,一部分为软件版本号。
产品型号用字母描述,可为英文或中文拼音。
软件版本号为4 位,前一位固定为字母”V”,后3 位为数字,编写软件版本号应按照从小到大的顺序递增。
开发阶段版本号从001 开始;中试之后版本号从100 开始。
例如:光电感烟探测器JTY-GD-G3 程序GDG3V001
电子差定温探测器JTW-ZCD-G3N 程序GWG3NV101
二、程序头格式
在每个文件的开始要有一个对该文件总体功能的描述,软件版本,以及作者及编写时间。
采用模版统一格式。
1. 在功能描述中,除了对软件实现的功能做简要描述外,还应包括使用的单片机,晶振频率,以及主要I/O 口实现的功能。
2. 如果程序升级时应增加如下说明。
1) 程序升级后的版本号:例如“版本号:Ver105”
2) 程序升级的修改作者:例如“更改人:×××”
3) 程序升级的修改日期:例如“更改日期:01 12 17”
4) 应对程序升级进行简单修改说明。
5) 应给出程序增加、更改、删除项说明,每项总处数。
1.
程序头如采用如下统一格式:
;****************
;* 文件名*。
PIC-CCS编程教程 内部资料写在扉页希望尽我的绵薄之力给你一臂之力!赠言:生命因抗争而尊贵!整理:Frankey 2010-5-1第一部分:综述相信通过前面单片机课程和智能电子制作二的学习,大家都已经很熟悉51单片机的编程规则和编程环境了,现在我们又将要接触PIC系列单片机的编程和学习,面对新的开发环境和芯片,有些同学觉得这个转换很难,其实一点都不难,大家都要有信心才行,对于每种芯片和其对应的开发环境,大家只要做到把握里面的规律,学起来是不会难的,在下面的学习中我们对PIC系列单片机选用MPLAB软件编写代码,编译器选用CCS编译器,不管是51单片机系统的开发还是PIC系列单片机的开发,其基础全是C语言(或者汇编语言),所不同的是各个编译器拥有不同的数据类型定义和各种特殊的处理器指令以及预处理指令。
1、CCS编译器定义的数据类型在编写程序之前,我们首先需要了解CCS编译器支持的数据类型:2、CCS编译器特有的处理器指令以及预处理指令这一部分大家可以参看CCS_Microchip_PIC.pdf电子文档中的内容得到详细的结果。
在CCS_Microchip_PIC书本的第三章对其进行了详细的讲解。
第二部分:IO端口操作1、IO端口操作常用函数如下表所示:上表常用的函数的参数具体使用规则可以通过下面两个途径得到:(1)芯片的头文件(本材料里面采用的芯片为PIC16f883,所以可以在CCS编译器安装路径中找到PIC16f883.h头文件了解)。
(2)通过MPLAB的帮助键调出CCS编译器的帮助文件进行查找了解。
2、有关IO口操作的最简单的例子利用芯片A口的第1位(即RA0)来控制LED的点亮。
PIC单片机晶振为10M。
具体代码如下:#include "16f883.h" //head file#fuses HS,NOWDT //set pic#use delay(clock=10000000) //set clock#use fast_io(A) //set IOvoid main(void){ //main functionset_tris_a(0b00000000); //set io directionoutput_high(PIN_A0);while(1){output_low(PIN_A0); //LED ondelay_ms(500);output_high(PIN_A0); //LED offdelay_ms(500);}}最简单的例子的分析:注意:默认情况下CCS编译器是不区分大小写的!通过该例子大家可以了解掌握最基本的PIC编程格式,熟悉PIC编程的基本流程,CCS 编译器的基本知识以及MPLAB开发环境。
3、上面LED点亮的另一钟实现形式程序代码:#include "16f883.h" //head file#fuses HS,NOWDT //set pic#use delay(clock=10000000) //set clock#use fast_io(A) //set IO#define PORTA 0x5#define PORTB 0x6#define PORTC 0x7#bit LED=PORTA.0void main(void){ //main functionset_tris_a(0b00000000); //set io directionLED=1;while(1){LED=0; //LED ondelay_ms(500);LED=1; //LED offdelay_ms(500);}}注意:对PIC单片机来说,一般IO口都是从0x05地址开始依次递增的!4、IO口操作的扩展----LED流水灯使用PIC芯片的C口来点亮LED流水灯,LED共阴极。
代码如下:#include "16f883.h" //head file#fuses HS,NOWDT //set pic#use delay(clock=10000000) //set clock#use fast_io(A) //set IO#define PORTA 0x5#define PORTB 0x6#define PORTC 0x7void main(void){ //main functionint i,led;set_tris_c(0b00000000); //set io direction*PORTC=0x00;while(1){led=0x01;for(i=0;i<8;i++){*PORTC=led; //对led变量取反delay_ms(500);led=led<<1;}}}第三部分:中断处理1、基础知识该部分内容具体参见CCS_Microchip_PIC.pdf电子文档中的第三章第7小节的内容,下面给出重点的摘抄内容,注意上表中的指令应根据具体的芯片型号来定,具体的芯片不同,上面的资源也不同,具体芯片有什么类型的中断,需要查阅对应的头文件。
在CCS 编译器中,中断没有中断向量号,这点和51是不同的,而且各个中断的级别是一样的,没有优先级的分别,同样在编写中断应用程序时,也是需要打开总中断和各自的中断开关,在CCS编译器中采用enable_interrupts(int_level)打开中断(或者称作允许中断),使用disable_interrupts(int_level)来关掉中断(或者叫禁止中断)。
2、有关中断应用程序的例子利用外部中断来控制LED灯的点亮。
对于16F883,只有一个外部中断,其触发方式有两种,我们选用上升沿触发。
代码如下:#include "16f883.h" //head file#fuses HS,NOWDT //set pic#use delay(clock=10000000) //set clock#use fast_io(A) //set IO#define PORTA 0x5#define PORTB 0x6#define PORTC 0x7#bit LED=PORTC.0#INT_EXTvoid EXT_ISR(void){ //interrupt ISRLED=~LED; //LED--ON--OFF}void main(void){ //main functionset_tris_c(0b00000000); //set io directionset_tris_b(0b11111111);port_b_pullups(true); //B口做输入时,要打开内部弱上拉EXT_INT_EDGE(L_TO_H); //set EXT modeenable_interrupts(global); //enable interruptenable_interrupts(int_ext);LED=0;while(1);}注意:有关弱上拉的叙述:不同的芯片IO端口有没有上拉是不同的,这个要具体查看相应的芯片的数据手册,如果该端口带有内部弱上拉时,当要使用该端口作为输入引脚的话,就需要打开其内部弱上拉!第四部分:定时器PIC系列的单片机不同的型号具有不同数目的定时器,例如我们用到的16F883有3个定时器,其中Timer0和Timer2是8位的定时器,Timer1是16位的定时器。
1、定时器02、定时器13、定时器24、定时器应用相关的函数注意:PIC单片机中定时器选择内部时钟时应用的时钟频率是F OSC/4!5、定时器的应用实例(1)Timer0的应用利用Timer0在RC0引脚输出一个周期为1s的方波信号。
实现代码如下:#include "16f883.h" //head file#fuses HS,NOWDT //set pic#use delay(clock=10000000) //set clock#use fast_io(A) //set IO#use fast_io(B) //set IO#use fast_io(C) //set IO#define PORTA 0x5#define PORTB 0x6#define PORTC 0x7#bit LED=PORTC.0int16 timer=0;char flag;#int_timer0void timer0_TSR(void){ //1 ms interruptset_timer0(100);timer++;if(timer==500){timer=0;flag=1;} }#zero_ram //开机自动清零所有用到的RAM void main(void){ //main function set_tris_c(0b00000000); //set io direction LED=0; flag=0;setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16); //set T0 mode set_timer0(100); //T0 initial value enable_interrupts(global); //enable interrupt enable_interrupts(int_timer0); while(1){ if(flag){ flag=0;LED=~LED;} } }说明:a 、定时器定时时间的计算:PIC 采用外部晶振,晶振大小是10M ,预分频值为16,所以定时器时钟信号的周期是:011 6.410()416t T u M f ===s ms 定时器从100开始计数到256计数溢出后产生中断,所以定时器定时时间长度是:0(256100)*998.61t T T us =−=≈b 、关于setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16)语句中使用内部时钟的谈论:如果你的程序中没有设置使用内部RC 时钟也即没有使用setup_oscillator()命令,那么就是说你使用的是外接的晶振,那么这个定时器时钟信号Fclk/4中的Fclk 就是你所接的外部晶振的大小,如果使用了内部RC 那么就是这个Fclk 就是内部RC 的的频率大小;定时器所说的内部、外部指的是使用Fclk/4作为时钟信号,还是使用外部输入信号做时钟信号! (2)定时器1的应用从定时器0的应用我们看到,在计算定时器的定时时间的时候做了近似操作,所以得到的定时时间是有误差的,当时间积累的很多的时候,或者定时时间很长的时候,会出现很大的误差,那么怎么样才能得到精确的时间呢?下面我们采用比较模块来实现精确的定时,因为比较模块是和定时器1相联系的。