PIC编程指导文档
PIC编程说明
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单片机的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 C语言编程
下例中,是将整数0X80的低2位置为1。
|)
10000000 00000011 —————— 10000011
(5)按位异或
01111111 ^) 01111000 —————— 00000111
7 条件运算符
条件运算符(?:)能用来代替某些if—then— else形式的语句。 一般形式为: EXP1 ? EXP2 : EXP3
9 增1和减 运算符 和减1运算符 和减
(前缀)++操作数 或 --操作数 (后缀)操作数++ 或 操作数—
x=++n; //n先加1,再赋给x。 结果是n=6,x=6 x=n++; //先把n值赋给x,n值在加1。 结果是n=6,x=5;
10 取地址运算符 取地址运算符“&”和取内容运算符 和取内容运算符“*” 和取内容运算符 “&”运算符用于取出操作数的地址,“*”运算符 是通过指针间接的访问一个值,在指针类型中 应用很多。
PIC单片机C语言编程
2011.3
内容
C语言编译器 C语言编程
C语言编译软件
PICC Microchip公司的第三方公司HITECH公司 编写的C语言编译器。 MAPLAB C18 Microchip公司编写的C语言编译器。
MAPLAB C18
1 建立项目
选择Project>New 来创建一个新项目。然后在所显示的对话框 中输入项目名及其路径,再点击OK。
下图所示的“General”选项卡中输入MPLAB C18 安装目录中 头文件和函数库子目录的路径。可以直接输入路径或点击 Browse 指定路径。MPLAB C18 会在指定的头文件目录下搜 索包含的.h 文件。MPLINK 链接器会在函数库目录下搜索目 标文件和库文件,其中包括在链接描述文件中指定的文件。
PIC课设指导(内有点阵LCD说明)
为了让同学们可以自由组合线路,本设计采用短路插和杜邦线连接的方式。图 1(a)为一个具有 6 个短路插的端子,本指导书中将短路插中较小引脚编号(一般在左侧)作为短路插的编号,图 1(b) 表示短路插 2 和短路插 4 短接。杜邦线即二头为孔的导线,将其直接与要相连的二端连接即可。
图1 短路插说明图
本设计内容分为焊接、线路设计、绘制 Proteus 线路图、编程调试几个部分。
1、焊接部分
根据附图 1~附图 6,焊接所给的 PCB 板,要求如下: 1)元件排列整齐、高度方向要一致。 2)具有极性的元件如二极管、三端稳压器件、发光二极管、集成电路等在焊接前应确定正确的方 向才能焊接。 3)外形相同,参数不同的要确定好参数后再焊接,如电阻,应根据色环或用数字万用表测量后再 焊接。 4)单片机(U20)不要直接焊接在 PCB 板上,用一圆针插座焊接于 PCB 板上。 5)变压器要注意原边与副边引脚的区别,如接错将造成电源短路,烧毁变压器。接 220V 的线圈 引线通常为红色,用数字式万用表的电阻档测量其电阻为几百欧至几千欧。低压侧线圈的三个引线的中 间抽头(黑色)接板上变压器副边的中间点,副边线圈间测量的电阻接近于 0 欧; 6)焊点要均匀、饱满,所焊接的焊点从另一面看应有少许“渗透”; 7)焊接顺序要求,从最矮的元件先焊,最后焊接最高的元件; 8)焊接完毕先检查外观,是否有漏焊元件或焊点等,无误后在不接单片机芯片的条件下通电,检 查+5V、-5V 是否正确,电压在(±4.80V)~(±5.20V)内为正确,则焊接任务完成。否则应立即向 指导教师明
6)具有门控功能的定时器 TMR1 887 增加了利用引脚 RB5/T1G 或比较器 C2 的输出作为 TMR1 的门控端,控制 TMR1 计数的功能。 TMR1 的门控端为 RB5/T1G 或比较器 C2。TNR1 默认的门控端为 RB5/T1G,如要使用此引脚作为 TMR1 的门控信号,要把 RB5 设置为 IO 口,并设置为输入。 当 TMR1 门控使能即 TMR1GE=1 时,如果 T1GINV=0,则 T1G=0 时 TMR1 计数,T1G=0 时 TMR1 停止计数。 T1GINV=1 时则相反。 图 11 为与 877A 新增的 T1CON 的 7、6 位说明。
PIC 单片机的C 语言编程指南
PIC 单片机的 C 语言编程指南
2005-8
1/57
项目开发
芯片解密
零件配单
TEL:15013652265
QQ:38437442
电子工程师之家
目
录
1.PIC 单片机 C 语言编程简介 ................................................................................................. 5 2.HITECH-PICC 编译器 ............................................................................................................ 5 3.MPLAB-IDE 挂接 PICC ......................................................................................................... 5 4.C 语言程序基本框架 .............................................................................................................. 6 5.PICC 编译选项设置 ................................................................................................................. 7 5.1 选择单片机型号 ..................
PIC单片机的C语言程序设计
4、函数声明、调用以及传参 unsigned int test(unsigned int t); unsigned char test(unsigned char*)
5、中断函数的实现 关键字:interrupt 对应地址:0x0004 函数形式: void interrupt fouc_name(void) {//无需现场保护和现场恢复 ; } 中断函数的原则
6、局部变量与全局变量 (1)定义 (2)声明位置 (3)注意保护全局变量
7、页管理 每个bank中有128个字节,其中一部分被 特殊功能寄存器占用。 错误信息: Error[000]:can’t find 0x12C words for psect rbss_1 in segment bank1 为了避免ห้องสมุดไป่ตู้繁的bank切换,提高代码的效 率,尽量把实现同一任务的变量定义在一 个bank内。
PIC单片机的C语言程序设计
——胡耀航
主要内容
1、C语言语法基础(基于PIC单片机) 2、开发环境的安装及程序的编写和调试 3、实例演示
一、C语言基础
1、数据类型
类型 bit char unsigned char short unsigned short int unsigned int long unsigned long float double 长度(位数) 1 8 8 16 16 16 16 32 32 24 24或32 数学表达式 布尔值 有符号字符型变量 无符号字符型变量 有符号整型数 无符号整型数 有符号整型数 无符号整型数 有符号长整型 无符号长整型 浮点型 浮点型,缺省为24
8、绝对定位 bit RA0 PORTA*8+0;//定义PORTA第0位为RA0 9、const关键字 作用:将一些固定不变的数据放到ROM中, 节约数据存储空间
PIC单片机编程器A用户手册(V1.0)
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间。
PIC单片机实验指导书
单片机原理与应用实验指导书(试用版)童亮编北京信息科技大学机电工程学院车辆工程实验室本实验指导书结合教材并围绕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.1
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汇编编程规范
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学习指南--C语言
if(PORTB_4==0) j=0X03;
PORTB=0XFB;
if(PORTB_5==0) j=0X02;
if(PORTB_4==0) j=0X04;/*以上根据按下的键确定相应的键值*/
PORTB=0X00;
/*恢复 PORTB 的值*/
while(1)
{ if((PORTB_5==1)&&(PORTB_4==1)) break;/*等待键盘松开*/
/*等待发送完毕*/
SSPIF=0;
/*清除 SSPIF 标志*/
} /*主程序*/
main()
{
unsigned I; initial();
/*系统初始化*/
SPIINIT() ;
/*SPI 初始化*/
for(i=8;i>0;i--)
/*连续发送 8 个数据*/
{ data=table[i];
/*通过数组的转换获得待显示的段码*/
/*进行键盘的识别*/
data=table[j];
/*获得需要送出显示的段码*/
0;
/*LACK 信号清 0,为锁存做准备*/
SPILED(data);
RA5=1;
/*最后给一个锁存信号,代表显示任务完成*/
}
/*中断服务程序*/
void interrupt keyint(void)
{
DELAY();
单片机学习指南
资料提供:上海齐济电子有限公司
第1章 PIC16F877 的外围功能模块
1.1.2 简单应用实例
该例用于令与 PORTD 口相连的 8 个发光二极管前 4 个点亮,后 4 个熄灭。在调试程序
前,应使与 PORTD 口相连的 8 位拔码开关拔向相应的位置。
PIC编程指导文档(修订版)
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开发环境。
工学PIC单片机指令系统
2.4 常数和控制操作类指令
4.常数或指令
第52页/共106页
2.4 常数和控制操作类指令
5.常数异或指令
第53页/共106页
2.4 常数和控制操作类指令
6.看门狗计数器清零指令
第54页/共106页
2.4 常数和控制操作类指令
7.常数传送指令
第55页/共106页
2.4 常数和控制操作类指令
3.位测试,为零则跳指令
第47页/共106页
2.3 位操作指令
4.位测试,为1则跳指令
第48页/共106页
2.4 常数和控制操作类指令
1.常数加法指令
第49页/共106页
2.4 常数和控制操作类指令
2.常数减法指令
第50页/共106页
2.4 常数和控制操作类指令
3.常数与指令
第51页/共106页
第67页/共106页
2.5 汇编语言程序设计
2.5.1 汇编语言程序设计知识 2.PIC 汇编语言的程序流程图
③循环程序流程图 循环程序的结构包含以下4个组成部分: 循环初始化部分:为循环程序作准备。如循环变
量设置,即指定或定义一个循环变量作循环次数 计数器或地址指针,并给它设置一个初始值。
2.2 ~2.4指令集
第21页/共106页
2.2 ~2.4指令集
第22页/共106页
2.2 ~2.4指令集
第23页/共106页
2.2 ~2.4指令集
第24页/共106页
2.2 ~2.4指令集
第25页/共106页
2.2 ~2.4指令集
第26页/共106页
2.2 ~2.4指令集
第27页/共106页
2.1 指令系统概述
PIC单片机C语言编程入门
PICC入门笔记PIC单片机C语言编程入门笔记一、C语言基础复习--------没C语言基础看起来可能有点困难。
(1) 条件判断语句if语句,switch语句(2) 循环执行语句do while语句,while语句,for语句(3) 转向语句break语句,goto语句,continue语句,return语句第三章: 控制语句1.if语句C语言的if语句有三种基本形式。
1、如果表达式的值为真,则执行其后的语句,否则不执行该语句。
if(表达式) 语句;2、如果表达式的值为真,则执行语句1,否则执行语句2 。
If(表达式)语句1;else语句2;3、依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。
然后跳到整个if语句之外继续执行程序。
如果所有的表达式均为假,则执行语句n 。
然后继续执行后续程序。
If(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;…else if(表达式m)语句m;else语句n;2、条件运算符和条件表达式由条件运算符组成条件表达式的一般形式为:表达式1? 表达式2:表达式3其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。
例:max=(a>b)?a:b;意义:如果在条件语句中,只执行单个的赋值语句时,常可使用条件表达式来实现。
不但使程序简洁,也提高了运行效率。
3、switch语句C语言还提供了另一种用于多分支选择的switch语句,其一般形式为:switch(表达式){case常量表达式1: 语句1;case常量表达式2: 语句2;…case常量表达式n: 语句n;default : 语句n+1;}其语义是:计算表达式的值。
并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。
第4章PIC指令系统
PIC单片机原理
例:已知(50H)=5AH,(30H)=60H,(FSR)=50H ,
(40H)=00H MOVF 40H,F ;结果 Z=1
MOVF 50H,W ;结果(W)=5AH,Z=0 MOVLW 20H ;结果(W)=20H,Z=? MOVWF 30H ;结果(30H)=20H,Z= ?
W 和f 异或运算
操作数: 0 ≤ f ≤ 127
d ∈ [0,1]
操作: (W) .XOR. (f) 目标寄存器)
受影响的状态位:Z
说明: W 寄存器与“f”寄存器的内容进行异或运
算。 如果“d”为0,结果存入W。 如果“d”为1,
结果存回到寄存器“f”。
PIC单片机原理
11)
ANDLW k
PIC单片机原理
4)
DECFSZ f,d f
减1,为0 则跳过
操作数: 0 ≤ f ≤ 127
d ∈ [0,1]
操作:(f) - 1 目标寄存器) ;如果结果为0 则跳过 ( 受影响的状态位:无 说明:寄存器“f”的内容递减, 如果“d”为0,结果存入 W 寄存器。如果“d”为1,结果存回到寄存器“f”。如果 结果非0,执行下一个指令。如果结果为0,则执行NOP 指令,使其成为2TCY 的指令。
ADDWF INDF,W ;(W)=5AH,Z=0,C=0 ,DC=0
SUBWF 30H ,F ;(30H)-(W) =06H,Z=0,C= ? ,DC=?
PIC单片机原理
3、逻辑运算类指令
1) CLRF f 操作: 00h (f)
有14条
f 清零 ;1 Z
操作数: 0 ≤ f ≤ 127
PIC单片机C语言指南
PIC单片机C语言指南第一部分为了对PIC单片机有更好的支持,PICC在标准C的基础上作了一些扩充:z定义I/O函数,以便在你的硬件系统中使用中定义的函数。
z用C语言编写中断服务程序z用C语言编写I/O操作程序z C语言与汇编语言间的接口1-1 与标准C的不同PICC只在一处与标准C不同:函数的重入。
因为PIC单片机的寄存器及堆栈有限,所以PICC不支持可重入函数。
1-2 支持的PIC芯片PICC 支持很多PIC单片机,支持PIC单片机的类型在LIB目录下的picinfo.ini文件中有定义。
1-3 PICC 包含一些标准库1-4 PICC 编译器可以输出一些格式的目标文件,缺省设置为输出Bytecraft的'COD' 格式和 Intel的'HEX'格式。
你可以用表1-1中的命令来指定输出格式。
表1-1格式名称描述PICC 命令文件类型Motorola HEX S1/S9 type hex file -MOT .HEX Intel HEX Intel style hex records(缺省) -INTEL .HEX Binary Simple binary image -BIN .BIN UBROF Universal Binary Image Relocatable Format -UBROF .UBR Tektronix HEX Tektronix style hex records -TEK .HEX American Hex format with symbols for American -AAHEX .HEX Automation HEX Automation emulatorsBytecraft .COD Bytecraft code format(缺省) n/a(缺省) .COD Library HI-TECH library file n/a .LIB1-5 符号文件PICC -G 命令用于生成符号文件,有了符号文件,你就可以进行源程序调试.命令格式为:PICC -16F877 -G test.c在使用仿真器时必须使用-G命令。
PIC单片机的C语言编程指南
PIC单片机汇编编程规范
PIC单片机汇编编程规范1000字
PIC单片机汇编编程规范
1.注释:注释应该在指令上面且不应该超过一行。
可以使用“;”或“#”来注释指令或者是数据。
注释应该清晰明了,简短明了,并且应该遵循英文语法规则。
2.代码布局:代码应该分成模块或者函数,每个模块或函数应该有一个标签或标识符以及该模块或函数的注释。
代码应该根据它们的功能分组。
3.变量命名:变量应该有一个清晰的名称,并且应该遵循英文命名规则,例如,变量名不应该包含特殊字符或空格。
变量名称应该有一些含义,并且应该简短明了。
4.缩进:代码的缩进非常重要,可以增加代码的可读性。
应该使用适当的缩进来表示代码层次结构。
5.默认数据类型:可以使用“C”作为默认的数据类型,例如:DAT 0xC0 ;定义一个BYTE类型变量。
6.标签:标签应该有一个清晰明了的名称,并且应该简短明了。
标签应该在对应代码的上方,使用适当的缩进。
7.空格:应该在运算符的两侧加上空格,例如,“ADDWF F, W”而不是“ADDWFF,W”。
8.注释:应该在指令上方加上注释,并且注释应该简短明了。
9.代码格式:代码应该有适当的空格和缩进,应该使用换行符来分割不同的代码块。
10.常量定义:常量定义应该有适当的注释,并且应该使用适当的缩进。
总之,遵循上述规范可以使汇编代码更加清晰易懂,在编写和调试时也更加方便。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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相联系的。