PIC单片机C语言指南
PIC C语言使用简要说明
第一部分为了对PIC单片机有更好的支持,PICC在标准C的基础上作了一些扩充:• 定义I/O函数,以便在你的硬件系统中使用中定义的函数。
• 用C语言编写中断服务程序• 用C语言编写I/O操作程序• 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 .HEXIntel 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单片机的C语言使用PIC(Perpheral Interface Controllers)单片机是一种高性价比的嵌入式处理器,也是应用最广泛的单片机之一、它们常常用于各种电子设备,例如家电、汽车、电子仪器仪表和医疗设备等。
PIC单片机的优点是具有较低的成本、低功耗和高性能。
在C语言中使用PIC单片机可以实现许多功能,例如控制输入输出、实现逻辑运算、实现算法等。
```c#include <xc.h>#include <pic.h>void mainTRISB=0x00;//将PORTB定义为输出口PORTB=0x00;//将PORTB的值初始化为0while(1)PORTB=0xFF;//将PORTB的值设置为全高电平__delay_ms(1000); // 延时1秒PORTB=0x00;//将PORTB的值设置为全低电平__delay_ms(1000); // 延时1秒}```上述示例程序中,我们使用了XC8编译器,它是一个用于编译PIC单片机C语言程序的开源编译器。
在以上代码中,我们将PORTB定义为输出口,然后在一个无限循环中将PORTB设置为全高电平,并延时1秒,然后将PORTB设置为全低电平,并再次延时1秒。
```c#include <xc.h>#include <pic.h>void mainADCON1=0x0F;//将ADCON1寄存器设置为模拟输入模式TRISB=0x00;//将PORTB定义为输出口PORTB=0x00;//将PORTB的值初始化为0while(1)ADCON0bits.GO = 1; // 启动A/D转换while(ADCON0bits.GO); //等待转换完成//读取A/D转换结果并进行温度转换int adcValue = ADRES;int temperature = (5 * adcValue) / 1023;PORTB = temperature; // 将温度值显示在PORTB上}```在以上代码中,我们首先将ADCON1寄存器设置为模拟输入模式,然后将PORTB定义为输出口,并初始化为0。
PIC单片机的C语言使用
PIC单片机的C语言使用(一)在MPLAB-IDE中使用HitechC编译器一、装入编译器:1、启动MPLAB-IDE,如下图所示选择Project-》InstallLanguageTool2、在弹出的安装语言工具对话框里“LanguageSuite”选项现在显示的是Microchip,点击后面的箭我使用的工具是HI-TECHPICCME,所以选择为“HI-TECHPICC”。
3、接下来在“ToolName”里选择编译器组件的调用路径,这里有“PICCCompiler”(C编译器)、“P (汇编器)和“PICCLinker”(链接器)3项都需要设置。
用“Browse”来选择调用路径,把上述3项组件的调用文件都设为。
点“OK”后完成设置。
二、选用编译器:1、新建一个项目,编辑项目对话框的“LanguageToolSuite”栏目默认是“Microchip”,将它改为“HI-TECHPICC”。
2、在项目文件框里点“flasha[.hex]”,这时“NodeProperties”(节点属性)按钮将会亮起来。
点击进入。
3、设置节点属性。
由于还有其他相关连的源程序需要加进来,所以在“LanguageTool”栏里应该选择“PICCLinker”(链接器)。
通常我们可以选择:1)Generatedebuginfo:显示debug信息;2)Createmapfile:选择该项后我们将看到ROM、RAM的使用情况;3)Errorfile:显示错误信息;4)CompileforMPLABICD:如果不使用ICD,就不必选择这个项目了。
4、设置完成之后点“Add Node”来添加节点。
这个项目有两个节点:和,选择节点后点击“NodeProperties”或直接双击节点来进入节点属性设置。
5、节点文件的工具这时应该选择为“PICCCompiler”(C编译器),蓝色圈子里的4项依次是:1)显示debug信息;2)局部优化;3)全局优化;4)ICD编译配件。
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 语言编程指南
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语言
第3步:在项目名文本框中输入项目名 led,在项目路径文 本框中输入项目路径 D:\led ,也可以通过单击 Browse 按钮 选择项目名的保存路径。
第4步:单击新项目对话框的OK按钮,出现如下所示的项 目树窗口,说明项目已经建立。
⒉选择器件 在开始其他工作之前,应先选择开发过程中所需器件, 其操作过程如下所示。 首先在MPLAB集成开发环境中打开Configure菜单,然 后单击Select Device菜单项,弹出如下所示的器件选择对 话框。此处可以选择PICl6F877A作为开发芯片。
第4步:设置完包含文件路径和库文件路径后,在设置语 言组件的对话框中,单击OK按钮,设置语言组件完成。 至此PICC的项目设置完毕,可以对项目进行编译、调 试和运行了。
三、PICC 基本编程
㈠PICC 中的基本变量类型 PICC 支持的基本变量类型见下表:
㈡PICC 中的高级变量 基于上表的基本变量,除了bit 型位变量外,PICC 完 全支持数组、结构和联合等复合型高级变量,这和标准的 C 语言所支持的高级变量类型没有什么区别。例如: 数组:unsigned int data[10]; 结构体:struct commInData { unsigned char inBuff[8]; unsigned char getPtr, putPtr; }; 联合体:union int_Byte { unsigned char c[2]; unsigned int i; };
PICCV8.05PL1编译器在安装完成后应在激活后使用, 如果不激活只能作为DEMO版使用,DEMO版使用有时间 限制。PICCV8.05PL1编译器的激活方法是:单击PICC编 译器开始菜单中的Compiler Activation项,可出现如下所示 的编译器激活窗口。
PIC单片机的C语言使用(一)
PIC单片机的C语言使用(一)在MPLAB-IDE 中使用HitechC 编译器一、装入编译器:1、启动MPLAB-IDE,如下图所示选择Project-》Install Language Toolscreen.width-300)this.width=screen.width-300” border=0>2、在弹出的安装语言工具对话框里“Language Suite”选项现在显示的是Microchip,点击后面的箭头来选择语言。
screen.width-300) this.width=screen.width-300” border=0>我使用的工具是HI-TECH PICCME,所以选择为“HI-TECH PICC”。
3、接下来在“Tool Name”里选择编译器组件的调用路径,这里有“PICC Compiler”(C 编译器)、“PICC Assembler”(汇编器)和“PICC Linker”(链接器)3 项都需要设置。
screen.width-300)this.width=screen.width-300” border=0>用“Browse”来选择调用路径,把上述3 项组件的调用文件都设为PICC.EXE。
点“OK”后完成设置。
screen.width-300)this.width=screen.width-300” border=0>二、选用编译器:1、新建一个项目,编辑项目对话框的“Language Tool Suite”栏目默认是“Microchip”,将它改为“HI-TECH PICC”。
screen.width-300)this.width=screen.width-300” border=0>2、在项目文件框里点“flasha[.hex]”,这时“Node Properties”(节点属性)按钮将会亮起来。
点击进入。
screen.width-300)this.width=screen.width-300”border=0>3、设置节点属性。
PIC单片机C语言入门实例
PIC单片机C语言入门1.2.1 认识PIC单片机C语言用C语言来开发单片机系统软件最大的好处是编写代码效率高。
软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此C语编程在单片机系统设计中已得到越来越广泛的应用。
但在单片机上用C语言写程序和在PC机上写程序绝对不能简单等同。
珊在的PC机资源十分丰富,运算能力强大,因此,程序员在写PC机的应用程序时,几乎不用关心编译后的可执行代码在运行过程中需要占用多少系统资源,也基本不用担心运行效率有多高。
写单片机的C语言程序最关键的一点是单片机内的资源非常有限,控制的实时性要求又很高,因此,如果没有对单片机体系结构和硬件资源作详尽的了解,以笔者的愚见认为是无法写出高质量实用性很高的C语程序。
本书围绕PIC中档系统单机来展开讨论的,Microchip公司自己没有针对PIC中档系列单片机的C语言编译器,但很多专业的第三方公司有众多支持PIC单片机的C语言编译器提供,常见的有Hitech、CCS、IAR、Bytecraft等公司。
其中笔者最常用的是Hitech公司的PICC编译器,它稳定可靠,编译生成的代码效率高,在用PIC单片机进行系统设计和开发的工程师群体中得到广泛认可。
其正式完全版软件需要购置,但在其网站上有限时的试用版供用户评估。
另外,Hitech公司针对广大PIC的业余爱好者和初学者,还提供了完全免费的学习版PICC-Lite编译器套件。
它的使用方式与完全版相同,只是支持的PIC单片机型号限制在PIC16F84、PIC16F877和PIC16F628等几款。
这几款Flash型的单片机因其所具备的丰富的片上资源而最适用于单片机学习入门,因此,笔者建议感兴趣的读者可以从PICC-Lite入手掌握PIC单片机的C语言编程。
我们一起来认识训练项目2——跑马灯的仿真与演示的程序LEDS.C。
1 #include"pic.h"2 int a; //定义整型变量a3 void main( )4 { TRISB=0X00; //定义端口B为输出模式5 while(1) //while循环语句6 { PORTB=0XFE; //1111 11107 for(a=1000;a>0;a--); //for循环语句8 PORTB=0XFD; //1111 11019 for(a=1000;a>0;a--); //for循环语句10 PORTB=0XFB; //1111 101111 for(a=1000;a>0;a--); //for循环语句12 PORTB=0XF7; //1111 011113 for(a=1000;a>0;a--); //for循环语句14 PORTB=0XEF; //1110 111115 for(a=1000;a>0;a--); //for循环语句16 PORTB=0XDF; //1101 111117 for(a=1000;a>0;a--); //for循环语句18 PORTB=0XBF; //1011 111119 for(a=1000;a>0;a--); //for循环语句20 PORTB=0X7F; //0111 111121 for(a=1000;a>0;a--); //for循环语句22 }23 } 说明:第1行:#include"pic.h"是文件包含语句,表示把语句中指定文件的全部内容复制到此处,与当前的源程序文件链接成一个源文件。
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单片机C语言教程
PIC单片机C语言教程PIC单片机(Peripheral Interface Controller)是德州仪器(Texas Instruments)公司生产的一款微控制器芯片。
它具有高性能、低功耗、易编程等特点,因此被广泛应用于各种电子设备中。
PIC单片机的编程语言主要是C语言。
C语言是一种广泛使用的高级程序设计语言,它结构简洁、表达能力强、可移植性好。
通过使用C语言,我们可以轻松地编写控制PIC单片机的程序,并且可以充分发挥PIC单片机的特性和功能。
在PIC单片机的C语言教程中,首先需要了解C语言的基础知识,包括变量、数据类型、运算符、控制语句等。
接下来,我们需要学习如何使用C语言编写PIC单片机的程序。
1.引脚配置:在PIC单片机的程序中,我们需要配置引脚的状态,包括输入输出模式、电平状态等。
通过使用C语言,我们可以方便地配置引脚,实现与外部器件的连接和通信。
2.中断编程:中断是PIC单片机的重要特性之一,可以使控制器在特定条件下停止当前任务执行,转而执行中断服务程序。
通过使用C语言,我们可以编写中断服务程序,实现特定条件下的任务切换和响应。
3.定时器编程:定时器是PIC单片机的另一个重要功能,可以实现一定时间间隔内的定时操作。
通过使用C语言,我们可以编程设置定时器的参数,以实现特定的定时操作。
4.串口通信:PIC单片机具有串口通信功能,可以与其他设备进行数据交换。
通过使用C语言,我们可以编写串口通信的程序,实现与其他设备的数据传输和交互。
5.外设控制:PIC单片机可以连接各种外设,如LCD显示屏、键盘、驱动器等。
通过使用C语言,我们可以编写控制程序,实现与外设的连接和控制。
以上只是PIC单片机C语言教程的一部分内容。
除了上述内容,我们还可以学习其他更高级的主题,如编码技巧、优化技术等。
通过系统学习和实践,我们可以掌握PIC单片机的C语言编程技巧,实现各种功能和应用。
总的来说,PIC单片机的C语言教程是一个庞大而丰富的话题,需要通过实践和深入学习来掌握。
PIC单片机的C语言编程
PIC单片机的C语言编程简介PIC(Peripheral Interface Controller)是一种广泛使用的单片机系列,由美国微芯科技公司(Microchip Technology Inc.)开发和生产。
其特点是体积小、功耗低、功能强大,并且具有高性价比,因此在嵌入式系统领域得到了广泛的应用。
在PIC单片机的编程中,C语言是最常用的编程语言之一。
本文将介绍如何在PIC单片机上使用C语言进行编程。
准备工作在开始C语言编程之前,我们需要准备以下工具和设备:1.PIC单片机开发板:选择一款适合你的需求的PIC单片机开发板,例如PIC16F877A。
2.编程软件:Microchip公司的MPLAB IDE是最常用的PIC单片机编程软件之一,可以在官方网站上免费下载安装。
3.编程语言:C语言是PIC单片机常用的编程语言,具有丰富的库函数和易于学习的语法。
第一个C程序编写第一个C程序是入门PIC单片机编程的第一步。
以下是一个简单的LED闪烁程序示例:#include <xc.h>// 包含使用于PIC单片机的头文件#define _XTAL_FREQ 4000000 // 定义晶振频率为4MHz// 主函数void main(void){TRISB = 0b00000000; // 将PORTB所有引脚设为输出PORTB = 0b00000001; // 将RB0引脚输出高电平while(1){PORTBbits.RB0 = 1; // RB0引脚输出高电平__delay_ms(1000); // 延时1秒PORTBbits.RB0 = 0; // RB0引脚输出低电平__delay_ms(1000); // 延时1秒}}在这个程序中,我们使用了xc.h头文件来包含适用于PIC单片机的库函数和宏定义。
使用#define指令定义了晶振频率为4MHz,可以根据自己的实际情况进行修改。
在main函数中,通过TRISB寄存器将PORTB所有引脚设置为输出模式,并使用PORTB寄存器将RB0引脚输出高电平。
PIC单片机的C语言
㈣ volatile 修饰词 PICC 中还有一个特殊的变量修饰词“volatile”,用来 说明一个变量的值是会随机变化的,即使程序没有刻意对 它进行任何赋值操作。 在单片机中,作为输入的IO 端口其内容将是随意变 化的;很多特殊功能寄存器的值也将随着指令的运行而动 态改变。所有这种类型的变量必须将它们明确定义成 “volatile”类型,例如: volatile unsigned char STATUS @ 0x03; volatile bit commFlag;
Hitech-PICC 编译器基本上符合ANSI C标准,但是不 支持函数的递归调用。其主要原因是因为PIC 单片机特殊 的堆栈结构。PIC 单片机的堆栈是硬件实现的,其深度已 随芯片固定,无法实现需要大量堆栈操作的递归算法。
二、PICC C编译器的安装 PICC C编译器可以运行在Windows操作系统上,可 以在MPLAB IDE集成开发环境下进行项目开发。 下面介绍在MPLAB IDE 7.00集成环境下安装和设置 PICCV8.05 PL1 PICC编译器,以及在此环境下编译和调 试源程序的基本方法。
第3步:单击对话框中的Browse按钮,弹出如下图所示的 打开文件对话框。在缺省PICC V8.05PL1编译器安装目录 C:\HT-PIC\bin\下,选择plcc.exe作为编译程序。然后单击 “打开”按钮,可以发现PICC Compiler项已选择picc.exe 作为编译程序。
同样,PICC Assembler和PICC Linker都选择picc.exe 作为汇编和链接程序,如下图所示。
㈤标准库函数 PICC 提供了较完整的C 标准库函数支持,其中包括 数学运算函数和字符串操作函数。在程序中使用这些现成 的库函数时需要注意的是入口参数必须在bank0 中。 如果需要用到数学函数,则用 “#include <math.h>” 包含头文件;如果要使用字符串操作函数,就需要包含 “#include <string.h>”头文件。在这些头文件中提供了函 数类型的声明。直接查看这些头文件就可以知道PICC 提 供了哪些标准库函数。 C 语言中的格式化输出函数“printf/sprintf”用在单片 机的程序中时要特别谨慎。printf/sprintf 是一个非常大的 函数,一旦使用,你的程序代码长度就会增加很多。
pic单片机c语言编程
pic单片机c语言编程如何在单片机中使用C语言进行编程单片机是一种集成电路,具有微处理器核心、存储器、输入输出端口等基本功能。
它通过程序控制来实现各种应用,而C语言是一种高级编程语言,具有结构清晰、可读性强和可移植性好的特点。
将C语言与单片机相结合,可以方便地开发各种应用。
一、概述在单片机中使用C语言编程,需要具备以下几个基本环境:1. 开发环境:包括编译器和开发工具。
2. 单片机:根据不同的应用需求选择合适的单片机。
3. 硬件连接:将单片机与外围设备连接以实现相应的功能。
二、选择开发环境和编译器选择开发环境和编译器是进行单片机C语言编程的首要任务。
常用的开发环境有Keil、IAR Embedded Workbench等,它们都提供了C语言编译器和调试工具,方便开发者进行程序编写和调试。
选择合适的开发环境和编译器有助于提高开发效率和代码的可靠性。
三、学习单片机的基本知识在编写单片机C语言程序之前,需要对单片机的基本知识有一定了解。
包括单片机的架构、寄存器、存储器、时钟等方面的知识。
掌握这些基础知识对于编写高效、可靠的程序非常重要。
四、编写程序单片机的C语言程序主要分为两个部分:主函数和中断服务函数。
主函数是程序的主要入口,用于初始化各种硬件资源,并进行程序的主要逻辑处理。
中断服务函数则是在发生中断时由单片机自动调用的程序段,用于处理中断事件。
1. 编写主函数主函数是程序的入口函数,在程序的最开始进行一些初始化的操作。
例如,设置IO口的输入输出方向、初始化串口等。
接着,进入一个无限循环,用于处理程序的主要逻辑。
示例代码如下:c#include <reg52.h> 引入单片机头文件void main(){初始化操作while(1){程序的主要逻辑}}2. 编写中断服务函数中断服务函数是在中断事件发生时由单片机自动调用的函数,用于处理中断事件。
它需要在程序的开始处进行中断的配置和使能。
具体的中断服务函数的编写需要根据具体的应用需求进行。
PIC 单片机的C 语言编程
PIC单片机C语言编程讲义奥科电子工作室(内部资料)2006年元月第一版第1章 PIC 单片机的C 语言编程1.1 PIC 单片机C 语言编程简介用C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此C 语言编程在单片机系统设计中已得到越来越广泛的运用。
针对PIC 单片机的软件开发,同样可以用C 语言实现。
但在单片机上用C 语言写程序和在PC 机上写程序绝对不能简单等同。
现在的PC 机资源十分丰富,运算能力强大,因此程序员在写PC 机的应用程序时几乎不用关心编译后的可执行代码在运行过程中需要占用多少系统资源,也基本不用担心运行效率有多高。
写单片机的C 程序最关键的一点是单片机内的资源非常有限,控制的实时性要求又很高,因此,如果没有对单片机体系结构和硬件资源作详尽的了解,以笔者的愚见认为是无法写出高质量实用的C 语言程序。
这就是为什么前面所有章节中的的示范代码全部用基础的汇编指令实现的原因,希望籍此能使读者对PIC 单片机的指令体系和硬件资源有深入了解,在这基础之上再来讨论C 语言编程,就有水到渠成的感觉。
本讲稿围绕中档系列PIC 单片机来展开讨论,Microchip 公司自己没有针对中低档系列PIC单片机的C 语言编译器,但很多专业的第三方公司有众多支持PIC 单片机的C 语言编译器提供,常见的有Hitech、CCS、IAR、Bytecraft 等公司。
其中笔者最常用的是Hitech 公司的PICC 编译器,它稳定可靠,编译生成的代码效率高,在用PIC 单片机进行系统设计和开发的工程师群体中得到广泛认可。
其正式完全版软件需要购置,但在其网站上有限时的试用版供用户评估。
另外,Hitech 公司针对广大PIC 的业余爱好者和初学者还提供了完全免费的学习版PICC-Lite 编译器套件,它的使用方式和完全版相同,只是支持的PIC 单片机型号限制在PIC16F84、PIC16F877 和PIC16F628 等几款。
PIC单片机的C语言使用(一)——在MPLAB-IDE中使用HitechC编译器
一、装入编译器:1、启动MPLAB-IDE,如下图所示选择Project-》Install Language2、在弹出的安装语言工具对话框里“Language Suite”选项现在显示的是Microchip,点击后面的箭头来选择语言。
我使用的工具是HI-TECH PICCME,所以选择为“HI-TECH PICC”。
3、接下来在“Tool Name”里选择编译器组件的调用路径,这里有“PICC Compiler”(C编译器)、“PICC Assemble Linker”(链接器)3项都需要设置。
用“Browse”来选择调用路径,把上述3项组件的调用文件都设为PICC.EXE。
点“OK”后完成设置。
二、选用编译器:1、新建一个项目,编辑项目对话框的“Language Tool Suite”栏目默认是“Microchip”,将它改为“HI-TECHPICC”。
2、在项目文件框里点“flasha[.hex]”,这时“Node Properties”(节点属性)按钮将会亮起来。
点击进入。
3、设置节点属性。
由于FLASHA.C还有其他相关连的源程序需要加进来,所以在“Language Tool”栏里应该选择“PICC Linker”(链接器)。
通常我们可以选择:1)Generate debug info:显示debug信息;2)Create map file:选择该项后我们将看到ROM、RAM的使用情况;3)Error file:显示错误信息;4)Compile for MPLAB ICD:如果不使用ICD,就不必选择这个项目了。
4、设置完成之后点“Add Node”来添加节点。
这个项目有两个节点:fla.c和flasha.c,选择节点后点击“Node Properties”或直接双击节点来进入节点属性设置。
5、节点文件的工具这时应该选择为“PICC Compiler”(C编译器),蓝色圈子里的4项依次是:1)显示debug 信息;2)局部优化;3)全局优化;4)ICD编译配件。
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单片机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后的语句。
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单片机 C 语言一、简介PIC(Peripheral Interface Controller)单片机是一种微控制器系列,由美国微芯科技公司推出。
PIC单片机广泛应用于嵌入式系统、自动化控制、仪器仪表等领域。
本文将介绍PIC单片机C语言编程的基础知识。
二、PIC单片机的开发环境准备在开始PIC单片机C语言编程前,我们需要准备开发环境。
以下是常用的开发环境工具:•MPLAB X IDE:Microchip官方推出的集成开发环境(IDE)。
可从Microchip官网免费下载。
•XC8编译器:Microchip官方提供的C语言编译器。
与MPLAB X IDE 配合使用,可编译生成PIC单片机的机器语言。
•PICKIT系列编程器:用于将编译生成的机器语言烧录到PIC单片机中。
在安装好开发环境工具后,我们可以开始进行PIC单片机C语言编程了。
三、PIC单片机的基本语法PIC单片机C语言编程的语法与标准C语言相似,但也有一些特殊的语法规则需要注意。
以下是一些常用的语法要点:1. 声明和定义变量在PIC单片机C语言中,我们可以使用关键字int、char、float等来声明和定义变量。
例如:int a; // 声明一个整型变量achar b; // 声明一个字符型变量bfloat c; // 声明一个浮点型变量c2. 控制语句PIC单片机C语言中的控制语句与标准C语言相似,包括条件语句、循环语句等。
例如:if (condition) {// 条件为真时执行的代码} else {// 条件为假时执行的代码}while (condition) {// 循环体}for (initialization; condition; update) {// 循环体}3. 函数在PIC单片机C语言中,我们可以定义和调用函数。
例如:int add(int a, int b) {return a + b;}int result = add(3, 5); // 调用函数add,并将返回值赋给result变量四、PIC单片机C语言编程实例下面我们以一个简单的实例来演示PIC单片机C语言编程的过程。
PIC单片机的C语言编程指南
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一部分为了对PIC单片机有更好的支持,PICC在标准C的基础上作了一些扩充:z定义I/O函数,以便在你的硬件系统中使用<stdio.h>中定义的函数。
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命令。
1-6 配置字PIC单片机的配置字可以用__CONFIG命令来定义:#include <pic.h>__CONFIG(x)其中x是配置字,头文件中定义了相应的配置说明符,如:__CONFIG(WDTDIS & XT & UNPROTECT);这将关闭看门狗,设置XT振方式,程序不加密。
注意:不同的配置符间用'&'相联,未定义的部分保留未编程状态。
详细的情况请参考头文件及PIC数据手册。
1-7 ID 位置有些PIC单片机在程序空间外还有ID空间,可用下面的方法来定义:#include <pic.h>__IDLOC(x)其中x是ID标示,如:__IDLOC(15F0);将ID的四个单元定义为:1, 5, 15, 0. ID的具体位置由所指定的PIC芯片自动设定。
1-8 EEPROM 数据有些PIC单片机支持用外部编程器对内部的EEPROM进行编程。
__EEPROM_DATA()可以将用于初始化的数据放入HEX文件中,如:__EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7)可将0-7八个数放入HEX文件中,在用外部的编程器进行编程时将这八个数写入PIC单片机中。
__EEPROM_DATA不是用于运行时写入EEPROM数据的,在运行时请用EEPROM_READ(), EEPROM_WRITE()。
1-9 位指令只要有可能,PICC总是采用位指令。
如:int foo;foo |= 0x40;的编译结果为:bsf _foo, 6为了方便可以定义如下宏:#define bitset(var, bitno) ((var) |= (1 << (bitno)))#defien bitclr(var, bitno) ((var) &= (1 << (bitno))) 上一条语句可写为:bitset(foo, 6);1-10 支持的数据类型PICC 支持1,2,4字节的基本类型。
所有的多字节类型都采用低有效位在前的格式,表1-2列出了所有数据类型及它们所占空间大小。
表1-2类型大小(位) 数字类型值bit 1 逻辑类型0 或 1signed char 8 有符号字符-128..+127unsigned char 8 无符号字符0..255signed short 16 有符号整数-32768..+32767unsigned short 16 无符号整数0..65535signed int 16 有符号整数-32768..+32767unsigned int 16 无符号整数0..65535signed long 32 有符号整数-2147483648..+2147483647 unsigned long 32 无符号整数0..4294967295float 24 浮点double 24 or 32 浮点由-D24, -D32决定1-10-1 常量及进制表示PICC 支持标准C的进制表示方法。
l或L后缀表明常量为long类型,u或U后缀表示常量为unsinged类型。
浮点数为double类型,可以用f或F指定浮点数为float类型。
字符型由单引号括起,如'a'.字符串由双引号括起,如"Hello world".1-10-2 位数据类型PICC 支持一位的变量,用bit来定义。
如:static bit init_flag;变量必须是全局的或静态的,它不能是自动变量或一个函数的参数,但可以作为一个函数的返回类型。
位变量很象unsigned char,但它只有0或1两个值,位变量占用空间少,且运算速度快. 所有的位变量在startup是被清0,请在程序开始处初始化它们。
如果将一个整型数赋给位变量,只是将最低位赋给位变量,如果你是想要将一个整型变量是否为0赋值给一个位变量,请用: bitvar = other_var != 0;如要你使用了PICC的-STRICT命令,bit将被视为非法命令。
1-10-2-1 使用可位寻址的寄存器位变量的定义可以与绝对地址的定义结合起来使用。
如:为了访问STATUS中Power Down位,先定义STATUS的绝对地址为3,然后再定义一位变量绝对地址为27static unsigned char STATUS @ 0x03;static bit PD @ (unsigned)&STATUS*8+3;注意: 头文件中已定义所有的特殊功能寄存器及相应的位寄存器.1-10-3PICC浮点数使用IEEE754 32位格式和IEEE754(截断)24位格式.float类型使用24位格式,double使用24位或32位格式, 由PICC命令控制, -D24使用24位格式, -D32使用32位格式.1-11 绝对地址变量一个全局的或静态的变量可以定位绝对地址, 使用如下格式:unsigned char Portvar @ 0x06;这里定义了一个名为'Portvar'的变量, 地址为06h,注意,编译器并不保留任何单元,仅仅是将一个变量分配在06h单元. 它等价于汇编语言: _Portvar EQU 06h 编译器及连接器都不作任何检查, 完全由程序员保证分配不会发生冲突.1-12 结构与联合PICC 支持struct及union, 它们可以作为函数的参数及返回值, 也可以作为指针指向的目标.1-12-1 结构限定PICC 支持在结构上使用限定符, 如果在一个结构上使用限定符, 那么, 这个结构的所有成员都被限定.如:bank1 struct {int number;int *ptr;}在这个结构里,number, ptr 都被放在bank1寄存器内.1-12-2 结构中定义位成员PICC 支持在结构中定义位成员.位成员按最低有效位在前的方式存储,位成员总是按8位字节方式存放, 当当前字节放满后再放下一个字节,位成员不会跨字节存放. 如:struct {unsigned hi: 1;unsigned dummy: 6;unsigned lo: 1;} foo @ 0x10;结构foo占用10h单元, hi为10h单元的第0位, lo为10h单元的第7位, dummy为10h 单元的2-6位,(第6位为最高有效位)不使用的位可用未命名的位成员来定义, 如果我们不使用dummy, 就可定义为:struct {unsigned hi: 1;unsigned : 6;unsigned lo: 1;} foo @ 0x10;1-13 在ROM及RAM存放字符串.一个未说明的字符串总是存放在ROM中, 并且只能通过常量指针为访问.#define HELLO "Hello word"SendBuff(HELLO);一个非常量的数组被一个字符串初始化, 如:char fred[] = 'Hello world";将在RAM中保留一个数组, 在startup时, 用存放在ROM中的"Hello world"来初始化.如果要将一个常数字符串作为函数参数或将它赋给一个指针, 必须定义一个常数指针.如: void SendBuff(const char * ptr)1-14 const, volatile 类型限定符.PICC 支持标准C的const, volatile类型限定符const类型限定符通知编译器一个目标含有的常量并且不会改变. 一个常量被放在ROM中, 显然一个常量是不能被赋值的. 如:const int version = 3;volatile 类型限定符通知编译器, 一个目标不能保证在连续的访问中不被改变.这将禁止编译器对该目标的优化. 所有的I/O口及在中断中使用的变量必须有volatile 类型限定符. 如:volatile unsigned char P_A @ 0x05;对volatile目标的访问与对non-volatile的访问是不同的, 如对volatile目标置1是先将该目标清0后加1, 而对non-volatile目标置1是先将1放在W中后再将W赋值到目标中.1-14 特别的类型限定符.PICC 支持一些特别的类型限定符: persistent, bank1, bank2及bank3,这些限定符不可用于自动变量.1-14-1 persistent按C的标准, 所有的C变量在startup时被清为0. 但是在有些情况下, 我们希望在复位后仍保持一些变量的值. persistent类型限定符使被其限定的变量在startup时不被清0, 而保留原有的值.1-14-2 bank1, bank2及bank3类型限定符.bank1, bank2及bank3类型限定符用于指定变量所在的寄存器页. 如:static bank3 unsigned char fred;bank3 unsigned char *ptrfred;缺省页是bank01-15 C语言中的中断处理在PICC C语言中可以用"interrupt"限定符来编写中断服务程序.一个中断服务函数必须用 interrupt void 来定义, 不能有参数, 并且不能被C 语言直接调用. 如:long tick_count;void interrupt tc_int(void){++tick_count;}1-15-1 在中断中保存环境PIC单片机硬件只保存PC, PICC 编译器自动地保存其它可能用到的变量. 但是编译器无法确定inline中的汇编语言段使用变量的情况, 你必须自已保护它们.1-15-2 开启中断在PIC.H中定义了所有的中断位, di()关闭所有中断, ei()打开所有中断. 如:ADIE = 1; // A/D interrupt will be usedPEIE = 1; // all peripheral interrupts are enabledei(); // enable all interruptsdi(); // disable all interrupts1-16 在C中使用汇编语言 #asm, #endasm, asm()可以在C语言中直接使用汇编语言. #asm, #endasm用来加入一段汇编语言, 而asm()用来加入一条汇编语言. 如:#include <stdio.h>unsinged char var;void main(void){var = 1;#asmrlf _var, 1rlf _var, 1#endasmasm("rlf _var, 1");}1-17 函数调用变换由于PIC5X只有两级堆栈, PICC 编译器使用转移指令来调用函数, 这样被套调用层次增加, 但调用速度下降, 请在需要快速调用的函数前加fastcall来指定编译器直接使用调用指令调用函数.对于14位的PIC单片机, 将永远使用调用指令调用.1-18 MPLAB使用的调试控制项-FACKLOCAL 命令用于在MPLAB下观察函数内的局部变量-MPLAB_ICD命令用于使用ICD调试C语言.第二部分2-1安装PICC将CD-ROM装入光驱, 自动运行程序将自动启动, 如果你已禁止自动运行功能, 可以直接运行: cd_drive:\compiler\install.exe安装程序将指导你完成PICC的安装.2-2设置伟福集成环境在伟福集成环境中, 将编译器路径指向PICC 所在目录将C命令行设置为: -16F877 –G –O –Zg -c将连接命令行设置为: -16F877 –G –O -Zg其中: -16F877 为芯片型号–G –O -c为源程序调试设置项, 不可修改–Zg 为打开优化你可以在命令行中加入其它控制项2-3调试C语言在WA VE\SAMPLES目录下有一个PIC C语言的例子程序: PIC_C.PRJ.1. 打开PIC_C项目.2. 编译该项目(F9)3. 用F7,F8单步调试例子程序4. 打开观察窗口观察变量。