PIC单晶片的C语言

合集下载

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语言编程入门

PICC 入门笔录PIC 单片机 C 语言编程入门笔录一、 C语言基础复习 --------没 C语言基础看起来可能有点困难。

C程序的语句语句名称一般形式说明表达式语句表达式;表达式语句由表达式加上分号“;”组成函数调用语函数名 ( 实质参数表 ) ;实质参数、形式参数二个看法要理解句控制语句附件 1控制语句用于控制程序的流程复合语句多个语句用括号 {} 括起空语句;只有分号“;”组成的语句称为空语句赋值语句变量 =( 变量 =表达式 );赋值表达式再加上分号组成的表达式语句数据输出语printf( “格式控制字符句串” )附件 1(1)条件判断语句if 语句, switch 语句(2)循环执行语句do while 语句, while 语句, for 语句(3)转向语句break 语句, goto语句, continue语句, return语句小于小于或等于关系运算符大于大于或等于等于不等于<<=>>===!=关系运算符都是双目运算符,其结合性均为左结合。

在六个关系运算符中,<,<=,>,>= 的优先级相同,高于 ==和 != ,==和!= 的优先级相同。

关系表达式的值是“真”和“假” ,用“ 1”和“ 0”表示。

与运算逻辑运算符或运算非运算&&||!&&和或运算符|| 均为双目运算符。

拥有左结合性。

非运算符”! ”为单目运算符,拥有右结合性 , 逻辑运算的值也为“真”和“假”两种,用“ 1”和“0 ”来表示。

单目运算符 >算术运算符 >关系运算符 >逻辑运算符 >赋值运算符第三章 :控制语句1.if语句C语言的 if语句有三种基本形式。

1、若是表达式的值为真,则执行此后的语句,否则不执行该语句。

if(表达式)语句;2、若是表达式的值为真,则执行语句1,否则执行语句 2 。

If( 表达式 )语句 1;else语句 2;3、依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。

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语言编程

下例中,是将整数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 链接器会在函数库目录下搜索目 标文件和库文件,其中包括在链接描述文件中指定的文件。

Proteus仿真PIC的C语言程序

Proteus仿真PIC的C语言程序

Proteus仿真PIC的C语言程序目录PICC开发环境配置 (1)使用USART同步发送数据 (5)使用MSSP模块的SPI模式扩展接口 (8)ADC模块应用示例 (12)TMR0计数器 (16)TMR1时钟(使用内部时钟) (21)TMR1时钟(使用外部晶振) (25)TMR2中断产生方波 (29)CCP输出比较模式应用 (33)CCP捕捉模式应用 (38)PICC开发环境配置2009年5月2日目前已有2,086人读过本文阅读评论发表评论在前面的一段时间里,ANY电子使用Proteus软件带你一起学习了PIC单片机的汇编语言程序的书写。

但是目前在单片机的应用开发中,绝大部分的应用都是使用C语言程序实现。

所以,在学习汇编语言熟悉了PIC单片机的基本结构之后,我们就需要面对一个单片机开发的重要问题:使用C语言开发应用。

在下面的一段时间里,我们将通过一个个具体的实例,一点点逐一向你介绍如何使用PIC 单片机的C语言在PIC的C语言环境里开发C语言程序。

需要注意的是,因为PICC开发工具应用更为广泛,所以在这里,我们将使用PICC开发工具,而不是PIC官方的C语言开发工具。

事实上,PICC开发工具其实更像PIC官方MPLAB集成开发环境的一个插件,所有关于PICC开发PIC单片机C语言程序的使用几乎都是在MPLAB中进行的;PICC没有自己独立的界面和环境。

PICC开发工具是由Hi-tech公司开发推出的,其官方网站地址是:/。

目前在中国大陆,作为学习和科研之用,可以使用其简易版本,或者是面向教育用户的版本;除此之外,你还可以在网上搜索并下载网友提供的各种破解版本。

不过需要说明的是,使用这些版本只可用来学习和科研,如果移作它用,请购买正式版本;否则,由此造成的一切后果,ANY电子不负任何责任。

安装好PICC开发工具(ANY电子安装的是9.60版本)之后,就可以打开MPLAB集成开发环境对开发语言进行配置了。

PIC 单片机的C 语言编程指南

PIC 单片机的C 语言编程指南
电子工程师之家http://Leabharlann
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语言使用(一)

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语言使用

PIC的C语言使用在MPLAB-IDE中使用HitechC编译器一、装入编译器:1、启动MPLAB-IDE,如下图所示选择Project-》Install Language Tool2、在弹出的安装语言工具对话框里“Language Suite”选项现在显示的是Microchip,点击后面的箭头来选择语言。

我使用的工具是HI-TECH PICCME,所以选择为“HI-TEC H PICC”。

3、接下来在“Tool Name”里选择编译器组件的调用路径,这里有“PICC Compiler”(C编译器)、“PICC Assembler”(汇编器)和“PICC Linker”(链接器)3项都需要设置。

用“Browse”来选择调用路径,把上述3项组件的调用文件都设为PICC.EXE。

点“OK”后完成设置。

二、选用编译器:1、新建一个项目,编辑项目对话框的“Language Tool Suite”栏目默认是“Microchip”,将它改为“HI-TECH PICC”。

2、在项目文件框里点“flasha[.hex]”,这时“Node Properties”(节点属性)按钮将会亮起来。

点击进3、设置节点属性。

由于FLASHA.C还有其他相关连的源程序需要加进来,所以在“Language Tool”栏里应该选择“PICC Linker”(链接器)。

通常我们可以选择:1)Generate debug inf显示debug信息;2)Create map file:选择该项后我们将看到ROM、RAM 的使用情况;3)Error file:显示错误信息;4)Compile for MPLAB ICD:如果不使用ICD,就不必选择这个项目了。

4、设置完成之后点“Add Node”来添加节点。

这个项目有两个节点:fla.c和flasha.c,选择节点后点击“N ode Properties”或直接双击节点来进入节点属性设置。

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语言使用(一)——在MPLAB-IDE中使用HitechC编译器

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语言编程实例.pdf

PIC系列C语言编程实例.pdf

本文由chentaiyou1986贡献 //PIC C语言 显示屏外圈电路 //外圈模式: 单方向的 //主芯片:PIC16C54 //更改日期20080815 //版本:01 #include #include <math.h> #include  //一个全局的或静态的变量可以定位绝对地址, 使用如下格式 //unsigned char Portvar @ 0x06; //这里定义了一个名为'Portvar'的变量, 地址为06h,注意,编译器并不保留任何 //单元,仅仅是将一个变量分配在06h 单元. 它等价于汇编语言: _Portvar EQU 06h //编译器及连接器都不作任何检查, 完全由程序员保证分配不会发生冲突. //#define TRISc = 0x05; //#define TRISB = 0x06; /* STATUS bits */ //static bit GPWUF @ (unsigned)&STATUS*8+7; //static bit PA0 @ (unsigned)&STATUS*8+5; //static bit TO @ (unsigned)&STATUS*8+4; //static bit PD @ (unsigned)&STATUS*8+3; //static bit ZERO @ (unsigned)&STATUS*8+2; //static bit DC @ (unsigned)&STATUS*8+1; //static bit CARRY @ (unsigned)&STATUS*8+0; static volatile unsigned char myvar @ 0x15; static bit t0ycbz@(unsigned)&myvar*8+7; unsigned char crpaztdat; //状态指示 unsigned char degree; //计次 unsigned char degree02; //计次 unsigned char degree03; //计次 #define chu RA3 #define ru RA2 #define ping RA0 #define an RA1 #define lck RB0 #define sck RB1 #define sdi RB2 #define led1 RB4 #define led2 RB5 #define led3 RB6 unsigned char a; //数组寻址单元 unsigned int intdat; //显示暂存单元 //const unsigned int dispbuf[4]={0x0000,0x0000,0xfefe,0xfffe}; //code //const,ROM; static,固定RAM void SPIINIT(void) //初始化子程序 { TRISA = 0X00; //A口引脚为输出 TRISB = 0X00; //B口引脚为输出 #asm option #endasm } void csxsdata(unsigned int dat,unsigned char deg) //74H595操作/dat数据/degree输出位数 {  for(;deg>0;deg--) { asm("clrwdt"); //看门狗 sck = 0; //输入数据时钟 lck = 0; //移位时钟 asm("nop"); dat = dat >> 1; sdi = CARRY; asm("nop"); asm("nop"); asm("nop"); asm("nop"); lck = 1; //输入数据时钟 asm("nop"); asm("nop"); asm("nop"); asm("nop"); lck = 0; //输入数据时钟 asm("nop"); asm("nop"); asm("nop"); asm("nop"); sck = 1; //移位时钟 asm("nop"); asm("nop"); asm("nop"); asm("nop"); sck = 0; //移位时钟 } } //延时子函数(delaytime为秒数据变量)//主频455K. void mdelay(unsigned char ysdata)  { unsigned char j;  for(;ysdata>0;ysdata--) {  for(j=0;j<10;j++) //2ms { asm("clrwdt"); //看门狗 //CLRWDT(); //看门狗 } } } void tmrsz() //定时器 { if(TMR0>160) //176=0.4s TMR0 = 0x00; t0ycbz = 1; //定时标志 } } void crpacaozuo(unsigned char ztdata) //出入平安操作 { asm("clrwdt"); //看门狗 SPIINIT(); //初始化子程序 switch(ztdata) { case 1:PORTA = 0x08; break;  case 2:PORTA = 0x04; break;  case 3:PORTA = 0x01; break;  case 4:PORTA = 0x02; break; case 5:PORTA = 0x00; break; case 6:PORTA = 0x08; break; case 7:PORTA = 0x0c; break;  case 8:PORTA = 0x0d; break;  case 9:PORTA = 0x0f; break;  case 10:PORTA = 0x0; break; case 11:PORTA = 0x0f; break; case 12:PORTA = 0x0; break; default: break;  } } void crpaxs(void) //出入平安 {  SPIINIT(); //定时/IO口 crpacaozuo(crpaztdat); tmrsz(); //定时检测 if(t0ycbz==1) { t0ycbz=0; crpaztdat++; if(crpaztdat>12) crpaztdat=1; } } void main() asm("clrwdt"); //看门狗 SPIINIT(); //定时/IO口 mdelay(30); //15*20ms=0.3s TMR0=0; t0ycbz=0; //定时标志 crpaztdat=1; //出入平安状态 while(1) { //外圈显示 intdat=0x0000; for(degree=1;degree<17;degree++) { asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16); csxsdata(intdat,degree); //显示 led1=0; led2=0; mdelay(150); //15*20ms=0.3s  intdat=intdat >> 1; } for(degree=15;degree>0;degree--) { asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 CARRY=1; intdat=intdat << 1; led1=1; //消影 led2=1; csxsdata(0xffff,16); csxsdata(intdat,degree); //显示 led1=0; led2=0; mdelay(150); //15*20ms=0.3s  } //2 for(degree=3;degree>0;degree--) { csxsdata(0x0000,16); //显示 led1=0; led2=1; led3=1; crpaxs(); //出入平安显示 mdelay(150); //15*20ms=0.3s led1=1; led2=0; led3=1; crpaxs(); //出入平安显示 led2=1; led3=0; crpaxs(); //出入平安显示 mdelay(150); //15*20ms=0.3s } //3 // intdat=0xfefe; for(degree=1;degree<17;degree++) {  asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16);  csxsdata(0xfefe,degree); //显示 led1=0; led2=0; led3=0; mdelay(150); //15*20ms=0.3s  } //4 intdat=0x0000; for(degree=1;degree<17;degree++) { asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16); csxsdata(intdat,degree); //显示 led1=0; led2=0; led3=0; mdelay(150); //15*20ms=0.3s  intdat=intdat >> 1; } for(degree=15;degree>0;degree--) { asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 CARRY=1; intdat=intdat << 1; led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16); csxsdata(intdat,degree); //显示 led1=0; mdelay(150); //15*20ms=0.3s  } //5 //intdat=0xfffe; for(degree02=3;degree02>0;degree02--) { for(degree=1;degree<17;degree++) {  asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16);  csxsdata(0xfffe,degree); //显示 led1=0; led2=0; led3=0; mdelay(150); //15*20ms=0.3s  } } /* for(degree02=3;degree02>0;degree02--) { for(degree=1;degree<17;degree++) {  asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16);  csxsdata(dispbuf[a],degree); //显示 led1=0; led2=0; led3=1; mdelay(150); //15*20ms=0.3s  } } */  } } 1本文由chentaiyou1986贡献 //PIC C语言 显示屏外圈电路 //外圈模式: 单方向的 //主芯片:PIC16C54 //更改日期20080815 //版本:01 #include #include <math.h> //一个全局的或静态的变量可以定位绝对地址, 使用如下格式 //unsigned char Portvar @ 0x06; //这里定义了一个名为'Portvar'的变量, 地址为06h,注意,编译器并不保留任何 //单元,仅仅是将一个变量分配在06h 单元. 它等价于汇编语言: _Portvar EQU 06h //编译器及连接器都不作任何检查, 完全由程序员保证分配不会发生冲突. //#define TRISc = 0x05; //#define TRISB = 0x06; /* STATUS bits */ //static bit GPWUF @ (unsigned)&STATUS*8+7; //static bit PA0 @ (unsigned)&STATUS*8+5; //static bit TO @ (unsigned)&STATUS*8+4; //static bit PD @ (unsigned)&STATUS*8+3; //static bit ZERO @ (unsigned)&STATUS*8+2; //static bit DC @ (unsigned)&STATUS*8+1; //static bit CARRY @ (unsigned)&STATUS*8+0; static volatile unsigned char myvar @ 0x15; static bit t0ycbz@(unsigned)&myvar*8+7; unsigned char crpaztdat; //状态指示 unsigned char degree; //计次 unsigned char degree02; //计次 unsigned char degree03; //计次 #define chu RA3 #define ru RA2 #define ping RA0 #define an RA1 #define lck RB0 #define sck RB1 #define sdi RB2 #define led1 RB4 #define led2 RB5 #define led3 RB6 unsigned char a; //数组寻址单元 unsigned int intdat; //显示暂存单元 //const unsigned int dispbuf[4]={0x0000,0x0000,0xfefe,0xfffe}; //code //const,ROM; static,固定RAM void SPIINIT(void) //初始化子程序 { TRISA = 0X00; //A口引脚为输出 TRISB = 0X00; //B口引脚为输出 #asm movlw 0x07 //把分频器给定时器用并置256分频 option #endasm } void csxsdata(unsigned int dat,unsigned char deg) //74H595操作/dat数据/degree输出位数 {  for(;deg>0;deg--) { sck = 0; //输入数据时钟 lck = 0; //移位时钟 asm("nop"); dat = dat >> 1; sdi = CARRY; asm("nop"); asm("nop"); asm("nop"); asm("nop"); lck = 1; //输入数据时钟 asm("nop"); asm("nop"); asm("nop"); asm("nop"); lck = 0; //输入数据时钟 asm("nop"); asm("nop"); asm("nop"); asm("nop"); sck = 1; //移位时钟 asm("nop"); asm("nop"); asm("nop"); asm("nop"); sck = 0; //移位时钟 } } //延时子函数(delaytime为秒数据变量)//主频455K. void mdelay(unsigned char ysdata)  { unsigned char j;  for(;ysdata>0;ysdata--) {  for(j=0;j<10;j++) //2ms { asm("clrwdt"); //看门狗 //CLRWDT(); //看门狗 } } } void tmrsz() //定时器 { if(TMR0>160) //176=0.4s { TMR0 = 0x00; t0ycbz = 1; //定时标志 } } void crpacaozuo(unsigned char ztdata) //出入平安操作 { asm("clrwdt"); //看门狗 SPIINIT(); //初始化子程序 { case 1:PORTA = 0x08; break;  case 2:PORTA = 0x04; break;  case 3:PORTA = 0x01; break;  case 4:PORTA = 0x02; break; case 5:PORTA = 0x00; break; case 6:PORTA = 0x08; break; case 7:PORTA = 0x0c; break;  case 8:PORTA = 0x0d; break;  case 9:PORTA = 0x0f; break;  case 10:PORTA = 0x0; break; case 11:PORTA = 0x0f; break; case 12:PORTA = 0x0; break; default: break;  } } void crpaxs(void) //出入平安 {  SPIINIT(); //定时/IO口 crpacaozuo(crpaztdat); tmrsz(); //定时检测 if(t0ycbz==1) { t0ycbz=0; crpaztdat++; if(crpaztdat>12) crpaztdat=1; } } void main() { asm("clrwdt"); //看门狗 SPIINIT(); //定时/IO口 mdelay(30); //15*20ms=0.3s TMR0=0; t0ycbz=0; //定时标志 crpaztdat=1; //出入平安状态 while(1) { intdat=0x0000; for(degree=1;degree<17;degree++) { asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16); csxsdata(intdat,degree); //显示 led1=0; led2=0; mdelay(150); //15*20ms=0.3s  intdat=intdat >> 1; } for(degree=15;degree>0;degree--) { asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 CARRY=1; intdat=intdat << 1; led1=1; //消影 led2=1; csxsdata(0xffff,16); csxsdata(intdat,degree); //显示 led1=0; led2=0; mdelay(150); //15*20ms=0.3s  } //2 for(degree=3;degree>0;degree--) { csxsdata(0x0000,16); //显示 led1=0; led2=1; led3=1; crpaxs(); //出入平安显示 mdelay(150); //15*20ms=0.3s led1=1; led2=0; led3=1; crpaxs(); //出入平安显示 mdelay(150); //15*20ms=0.3s led1=1; led2=1; led3=0; crpaxs(); //出入平安显示 mdelay(150); //15*20ms=0.3s } //3 // intdat=0xfefe; {  asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16);  csxsdata(0xfefe,degree); //显示 led1=0; led2=0; led3=0; mdelay(150); //15*20ms=0.3s  } //4 intdat=0x0000; for(degree=1;degree<17;degree++) { asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16); csxsdata(intdat,degree); //显示 led1=0; led2=0; led3=0; mdelay(150); //15*20ms=0.3s  intdat=intdat >> 1; } for(degree=15;degree>0;degree--) { asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 CARRY=1; intdat=intdat << 1; led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16); csxsdata(intdat,degree); //显示 led1=0; led2=0; led3=0; mdelay(150); //15*20ms=0.3s  } //5 //intdat=0xfffe; for(degree02=3;degree02>0;degree02--) { for(degree=1;degree<17;degree++) {  asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16);  csxsdata(0xfffe,degree); //显示 led1=0; led2=0; led3=0; mdelay(150); //15*20ms=0.3s  } } /* for(degree02=3;degree02>0;degree02--) { for(degree=1;degree<17;degree++) {  asm("clrwdt"); //看门狗  crpaxs(); //出入平安显示 led1=1; //消影 led2=1; led3=1; csxsdata(0xffff,16);  csxsdata(dispbuf[a],degree); //显示 led1=0; led2=0; led3=1; mdelay(150); //15*20ms=0.3s  } } */  } }1。

PIC单片机C语言编程教程

PIC单片机C语言编程教程

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 等几款。

这几款Flash 型的单片机因其所具备的丰富的片上资源而最适用于单片机学习入门,因此笔者建议感兴趣的读者可从PICC-Lite 入手掌握PIC 单片机的 C 语言编程。

手把手教你学PIC单片机C语言设计(十一)驱动128×64点阵图形液晶模块的实验(续一)

手把手教你学PIC单片机C语言设计(十一)驱动128×64点阵图形液晶模块的实验(续一)
1 0 B s 1 O /F ee 0 O O O uy0 NO FRst
该 操作 将 H 6 2 2接 口部 的输 出寄 存 器 内容 读 出 , D 10 然后 列 地址计数器 自动加一。必须注意的是 , 进行读操作之前 , 必须有 次 空读 操 作 , 紧接 着 再读 才 会读 出所 要 读 的单 元 中 的数据 。
页。 f 1 - 1 D D D D _ D D D D
显示 R M 数据 的 X地址 A A 二进制 ) A A ( 被设置在 ×地址寄
O 1 D D D D D D D j D
读状 态
_
_
R ,D 7IB B D4 D 3 B D 1 B , D B 6D 5 W I D B B 2 B D O D
B s= u y ,等 待
MCU的访 问。
ON 0F : 示 当前 的显 示 状态 。 0NOF = 表 示关 显 示状 , F表 / F1 态 ; , F 示开 显 示状 态 。 ONOF 表 R s t当 R s t 1状 态 时 , D 10 e e : e e= H 6 2 2处于 复位 工作 状 态 ; 当 R st0 e e= 状态时 , 6 2 2为正常工作状态。 HD 1 0

R ~ D, ^ I
0 O
DB7 DB6 DB5 DB DB DB2 4 3 DB1 DB 0
1 0 1 1 1 A A A
RW D/ DB DB6 / l 7j DB DB DB DB DB1 DB 5 4 3 2 0
显 示开 始 行

1 .I PC单片 机驱动 1 8 6 0 2 x 4点阵 图形液 晶模 块的 子 函数
为 了实 现对 1 8 6 x 4点 阵 图形 液 晶模 块 的高 效控 制 , 们 也 2 我 必须 按 照模 块 设 计 方 式 , 立起 相 关 的子 程 序 模块 , 建 下面 详 细介 绍 各 功 能子 函数 。 判 L M 忙 子 函 数 C /一 一 一 … 一 一 … 一 一一 ~ 一 一 … … 判 L M 忙 子 函 数 C

PIC单片机C语言程序设计实例之C语言if语句与LED数码管显示

PIC单片机C语言程序设计实例之C语言if语句与LED数码管显示

PIC单片机C语言程序设计实例之C语言if语句与LED数码管显示if 语句也称为条件语句,是C 语言中转移语句之一。

在设计C 语言程序时,常常要根据某些条件以决定程序运行的流向,这时就需要if 语句来实现。

任何if语句(包括else 部分),都可当作一条C 语句使用。

格式:if(表达式)语句1else 语句2其中else 为选择项;即可有、可无的。

所以条件语句,可分为两种;if 语句和if—else 语句。

式中的表达式为关系表达式或逻辑表达式以及由条件运算符(有关运算符将在后文介绍)构成的一种表达式。

功能:先计算if 中的条件表达式,其值为真(满足条件时),执行语句1 ;其值为假(不满足条件时),若有else,就执行语句2。

If 语句常用有几种形式:⑴if(条件表达式)语句该形式无选择项else。

例1 :if(a>b)c=b ;∥满足条件a>b,将b 赋值给c例2 :i f (t t r = = 9 9 9 9 )ttr=0 ;∥满足运算条件ttr==9999 ;将0 赋值给ttr⑵if(条件表达式)语句1else 语句2例1 :if(a>b)c=b ;∥满足a>b,将b 赋值给celse c=a ;∥不满足a>b 时,将a 赋值给c例2:若比较两个整量a、b,要求其大者送x,即可用if 语句实现;⑶表达式赋值(简化式)的条件语句。

读者在阅读一些书籍上的单片机 C 语言程序时,会遇到条件语句的一种简化形式,其格式如下:表达式1 ?表达式2 ;表达式3如以上if 语句的形式⑵中的例2,即可简化为条件表达式的赋值语句;If 语句尚有一些其他格式,这里暂略去。

3.LED数码管显示的硬件电路在电子技术中,数码管显示(0~9)是最常见的显示技术。

数码管显示时,可用LCD(液晶),也可用LED 数码管显示0~9 的数。

这里首先介绍用PIC16F84A控制的数码管LED 的显示电路,如图3 所示。

PIC单片机C语言编程入门

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语言编程指南
5.1 选择单片机型号........................................................................................................... 8 5.2 普通编译选项(General)设定 .................................................................................. 8 5.3 全局选项设定(PICC Global) .................................................................................. 8 5.4 编译器选项设定(PICC Compiler) .......................................................................... 8 5.5 连接器选项设定(PICC Linker) .............................................................................. 9 5.6 汇编器选项设定(PICC Assembler) ........................................................................ 9 6.PICC 中的变量定义.............................................................................................................. 10 6.1 基本变量类型.......................

Microchip单晶片上的C语言应用说明(一)(第八期双月刊)

Microchip单晶片上的C语言应用说明(一)(第八期双月刊)

Microchip單晶片上的C語言應用說明(一)Microchip的PIC單晶片雖然只有37個指令,指令少雖然容易了解,但要做複雜的運算,則非常難以撰寫程式,為了減少開發時間,唯有使用C語言來開發。

筆者這次要跟大家談的是用C語言來開發八位元單晶片,在過去或許聽來覺得不可思議,因單晶片它通常只有幾K的記憶體(數K的ROM合幾十bytes的RAM),那麼少的記憶體還用C語言來開發,真是非常的浪費及不實用,在我參加了Microchip的研討會及使用後,我改變了看法;通常會使用組合語言無非是要求快及精簡,但事實上真的快及精簡了嗎?對於高手而言,或許真的精簡及速度變快,但需花費多少時間呢?一搬來說需比用C語言來開發多三倍以上的時間,有些人甚至用組合語言寫出的程式碼比用C語言轉譯出的組合語言還長,且C語言易懂易維護,他有跨平台的特點,就算換了微處理器也只需些許修改就可以RUN了,組合語言則不然,它必須重新改寫程式碼;至於用C語言寫出來的程式它執行的(程式碼較長)速度較慢,在以前或許存在,現今各微處理器的速度都相當快,速度慢已不是問題,且開發時間可以縮短,是許多工程師及老闆的不二選擇。

因中心在八位元的單晶片上皆使用Microchip的PICmicro Devices,所以就以PICmicro Devices來做說明如何使用C語言來開發,Microchip所生產的單晶片有PIC16、PIC17及PIC18系列,這些都是八位元的單晶片,這些晶片都有A/D轉換、Timer、PWM、IIC、RS232等功能,一般控制會用到的功能這裡都有,以一顆單晶片可以取代像早期8051需搭配一些週邊才能達到目前PIC系列的功能,不僅成本減少、相對板子面積也變小且IC數量較少產品也較穩定,且目前Microchip所開發的PIC系列單皆片皆為FLASH的版本,對於個人或小公司而言,晶片可以重複燒寫測試,非常的經濟實惠,相對開發費用較少,對於產品量少及小公司實在是不二選擇。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


第3步:按一下對話方塊中的Browse按鈕,彈出如下圖所 示的打開文件對話方塊。在缺省PICC V8.05PL1編譯器安 裝目錄C:\HT-PIC\bin\下,選擇plcc.exe作為編譯器。然後 按一下“打開”按鈕,可以發現PICC Compiler項已選擇 picc.exe作為編譯器。
同樣,PICC Assembler和PICC Linker都選擇picc.exe 作為彙編和連結程式,如下圖所示。
Hitech-PICC 編譯器基本上符合ANSI C標準,但是不 支援函數的遞迴呼叫。其主要原因是因為PIC 單片機特殊 的堆疊結構。PIC 單片機的堆疊是硬體實現的,其深度已 隨晶片固定,無法實現需要大量堆疊操作的遞迴演算法。
二、PICC C編譯器的安裝 PICC C編譯器可以運行在Windows作業系統上,可 以在MPLAB IDE整合式開發環境下進行專案開發。 下面介紹在MPLAB IDE 7.00集成環境下安裝和設置 PICCV8.05 PL1 PICC編譯器,以及在此環境下編譯和調 試來源程式的基本方法。
按一下圖中Next按鈕,會進入PICC C編譯器安裝過程。 經過一段時間後,出現如下所示的提示畫面。按一下畫面 上的“是”按鈕,安裝即成功,並要求重新啟動。
㈡啟動PICC C編譯器 安裝完PICCV8.05PL1編譯器,其安裝目錄下還有一個 picc_mplab6_setup.exe檔,這是PICCV8.05PL1編譯器運行 在MPLABV6.0以上版本的支援檔。
PIC單片機的 C語言程式設計
一、PIC 單片機C 語言程式設計簡介 用C 語言來開發單片機系統軟體最大的好處是編寫代 碼效率高、軟體調試直觀、維護升級方便、代碼的重複利 用率高等,因此C 語言程式設計在單片機系統設計中已得 到越來越廣泛的運用。PIC 單片機的軟體發展,同樣可以 用C 語言實現。 Microchip 公司沒有自行開發PIC單片機的C 語言編 譯器,但其他公司有開發眾多支援PIC 單片機的C 語言編 譯器,常見的有Hitech、CCS、IAR、Bytecraft 等公司。 其中最常用的是Hitech 公司的PICC 編譯器,它穩定可靠, 編譯生成的代碼效率高,在用PIC 單片機開發者中得到廣 泛認可。
㈤標準庫函數 PICC 提供了較完整的C 標準庫函數支援,其中包括 數學運算函數和字串操作函數。在程式中使用這些現成的 庫函數時需要注意的是入口參數必須在bank0 中。 如果需要用到數學函數,則用 “#include <math.h>” 包含標頭檔;如果要使用字串操作函數,就需要包含 “#include <string.h>”標頭檔。在這些標頭檔中提供了函 數類型的聲明。直接查看這些標頭檔就可以知道PICC 提 供了哪些標準庫函數。 C 語言中的格式化輸出函數“printf/sprintf”用在單片 機的程式中時要特別謹慎。printf/sprintf 是一個非常大的 函數,一旦使用,你的程式碼長度就會增加很多。

第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; };
PICC C編譯器的安裝 ㈠安裝PICCV8.05 PL1 運行檔picc8.05-pl1.exe即可進入安裝過程,在安裝過 程中會出現下圖所示的編譯器安裝路徑和磁碟空間需求情 況的提示畫面。
注意:應使用英文路徑和檔案名,不要使用中文。 圖中的C:\HT-PIC是編譯器缺省安裝路徑,若要改變 安裝路徑,可以通過Browse按鈕選擇安裝路徑。 指定路徑後,按一下圖中的Next按鈕,出現如下所示 的開始安裝PICC V8.05PL1編譯器畫面。
PICCV8.05PL1編譯器在安裝完成後應在啟動後使用, 如果不啟動只能作為DEMO版使用,DEMO版使用有時間 限制。PICCV8.05PL1編譯器的啟動方法是:按一下PICC 編譯器開始功能表中的Compiler Activation項,可出現如下 所示的編譯器啟動視窗。
找到啟動編譯器所需的Serial、Company Name、 Registration和Activation項的相關資訊,分別填入編譯器啟 動視窗對應的文字方塊中,按一下“下一步”按鈕,編譯 器即被啟動。 ㈢PICC C編譯器的啟動運行 PICC C編譯器安裝完成後,便可以在MPLAB IDE整 合式開發環境下運行。
雙引號中可以編寫任何一條PIC 的標準彙編指令。例如: for (;;) { asm("clrwdt"); //清看門狗 asm("sleep"); //休眠 asm(“nop”); //空操作延時 } 如果需要編寫一段連續的彙編指令,PICC 支援另外 一種語法描述:用“#asm”開始彙編指令段,用 “#endasm”結束。例如下面的一段嵌入彙編指令實現了 將0x20~0x7F 間的RAM 全部清零: #asm movlw 0x20 movwf _FSR clrf _INDF incf _FSR, f btfss _FSR,7 goto $-3 #endasm

第4步:選擇完成後,按一下上圖OK按鈕,完成選擇工具 元件的工作。
⑵設置語言元件 其操作步驟如下: 第1步:在MPLAB中打開Project->Set Language Toolsuite功 能表,彈出如下圖所示的設置語言元件對話方塊。

第2步:在設置語言元件對話方塊中,選擇HI-TECH PICC Toolsuite項,按一下HI-TECH PICC Toolsuite項前的“+” 號,打開目錄樹,如下圖所示。
四、程式設計實例 ㈠PICC的標頭檔 PICC支持下的C程式碼中一定要包含pic.h標頭檔,該 檔安裝在HT-PIC\include目錄下。它是很多頭檔的集合, C編譯器在pic.h中根據使用者選擇的晶片自動載入相應的 其它標頭檔,例如使用者選擇的晶片是PIC16F877,則 pic.h會把pic1687x.h載入;例如使用者選擇的晶片是 PIC16F877A,則pic.h會把pic168xa.h載入。載入的標頭 檔中其實是聲明晶片的寄存器和一些函數。例如以下程式 片段: static volatile unsigned char TMR0@0x01; static volatile unsigned char PCL@0x02; static volatile unsigned char STATUS@0x03;
㈥C 和彙編混合程式設計 用C 語言進行單片機應用程式開發時經常要使用彙編 語句。比如,單片機的一些特殊指令操作在標準的C 語言 語法中沒有直接對應的描述,例如PIC 單片機的清看門狗 指令“clrwdt”和休眠指令“sleep”。這樣,一個項目中就 會出現C 和彙編混合程式設計的情形,我們在此討論一些 混合程式設計的基本方法和技巧。 在C 原程式中直接嵌入彙編指令是最直接最容易的方 法。如果只需要嵌入少量幾條的彙編指令,PICC 提供了 一個類似於函數的語句: asm(“clrwdt”);
⒊設置專案 ⑴選擇語言元件 在創建項目和選定器件後,接下來就可以設置工程的 編譯環境。首先介紹語言元件的設置,操作步驟如下:

第1步:在MPLAB整合式開發環e Toolsuite功能表,彈出如下的選擇語言元件對話 方塊。

第2步:上圖所示對話方塊用來選擇開發工具元件,在 Active Toolsuite下拉式清單方塊中選擇HI-TECH PICC Toolsuite作為開發工具元件,然後在Toolsuite Contents清 單方塊中選擇PICCCompiler項,如下圖所示。

第3步:在專案名文字方塊中輸入專案名led,在專案路徑 文 字 方 塊 中 輸 入 專 案 路 徑 D:\led , 也 可 以 通 過 按 一 下 Browse按鈕選擇專案名的保存路徑。

第4步:按一下新項目對話方塊的OK按鈕,出現如下所示 的專案樹視窗,說明專案已經建立。
⒉選擇器件 在開始其他工作之前,應先選擇開發過程中所需器件, 其操作過程如下所示。 首先在MPLAB整合式開發環境中打開Configure功能表, 然後按一下Select Device功能表項目,彈出如下所示的器 件選擇對話方塊。此處可以選擇PICl6F877A作為開發晶片。
設置PICC的編譯環境 ㈠設置PICC的編譯環境 為便於PICC編譯器的編譯環境設置,應先在MPLAB IDE整合式開發環境下創建一個PICC C編譯器的項目。 ⒈創建項目 具體操作步驟如下:


第1步:啟動MPLAB IDE7.00整合式開發環境窗口。 第2步:選擇整合式開發環境中的Project->New功能表項目, 打開如下所示的新項目對話方塊,在此對話方塊中設置專 案名和專案路徑。

上圖中,子目錄Executables下,PICC Compiler、PICC Assembler和PICC Linker在選擇語言工具元件中都已選擇 picc.exe作為編譯、彙編、連結的處理常式。 第3步:在目錄樹的子目錄Default Search Paths&Directories 下,Include Search Path和Library Search Path 分別選擇 C:\HT-PIC\include和C:\HT-PIC\lib作為搜索路徑。
相关文档
最新文档