PIC单片机入门_C语言编程技术

发布者:uioo9158最新更新时间:2018-07-30 来源: eefocus关键字:PIC单片机  C语言  编程技术 手机看文章 扫描二维码
随时随地手机看文章

1.为什么也是C语言?


用C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高等,因此C 语言编程在单片机系统设计中越来越广泛的运用。PIC 单片机的软件开发,同样可以用C 语言实现。

Microchip 公司没有自行开发PIC单片机的C 语言编译器,但其他公司有开发众多支持PIC 单片机的C 语言编译器,常见的有Hitech、CCS、IAR、Bytecraft 等公司。其中最常用的是Hitech 公司的PICC 编译器,它稳定可靠,编译生成的代码效率高,在用PIC 单片机开发者中得到广泛认可。

Hitech-PICC 编译器基本上符合ANSI C标准,但是不支持函数的递归调用。其主要原因是因为PIC 单片机特殊的堆栈结构。PIC 单片机的堆栈是硬件实现的,其深度已随芯片固定,无法实现需要大量堆栈操作的递归算法。  成的代码效率高,在用PIC 单片机开发者中得到广泛认可。

2.MpLab中配置PIC C编译环境,并进行项目开发


为便于PICC编译器的编译环境设置,应先在MPLAB IDE集成开发环境下创建一个PICC  C编译器的项目。

1.启动MPLAB IDE7.00集成开发环境窗口。选择集成开发环境中的Project->New菜单项,打开如下所示的新项目对话框,在此对话框中设置项目名和项目路径。


在项目名文本框中输入项目名led,在项目路径文本框中输入项目路径D:\led,也可以通过单击Browse按钮选择项目名的保存路径。

2.器件选择,其操作过程如下所示。首先在MPLAB集成开发环境中打开Configure菜单,然后单击Select Device菜单项,弹出如下所示的器件选择对话框。此处可以选择PICl6F877A作为开发芯片。


3.设置项目

在创建项目和选定器件后,接下来就可以设置工程的编译环境。首先进行语言组件的设置。

在Active Toolsuite下拉列表框中选择HI-TECH PICC Toolsuite作为开发工具组件,然后在Toolsuite Contents列表框中选择PICCCompiler项,如下图所示。  


3.PICC基本编程


3.1 PICC 中的基本变量类型


PICC 支持的基本变量类型见下表:


3.2 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;

};

3.3 PICC 对数据寄存器bank 的管理


在PIC单片机编程时,单片机数据寄存器的bank是由编程员管理的,因此在定义变量时必须决定这些变量具体放在哪一个bank 中,缺省时,所定义的变量将被定位在bank0中,例如下面所定义的这些变量:

unsigned char buffer[32];

bit flag1,flag2;

float val[8];

以上变量都是分布在bank0 中。定义在其它bank 内的变量前面必须加上相应的bank 序号,例如:

bank1 unsigned char buffer[32];  //变量定位在bank1 中

bank2 bit flag1,flag2;  //变量定位在bank2 中

bank3 float val[8];  //变量定位在bank3 中

3.4 volatile 修饰词 


PICC 中还有一个特殊的变量修饰词“volatile”,用来说明一个变量的值是会随机变化的,即使程序没有刻意对它进行任何赋值操作。

在单片机中,作为输入的IO 端口其内容将是随意变化的;很多特殊功能寄存器的值也将随着指令的运行而动态改变。所有这种类型的变量必须将它们明确定义成“volatile”类型,例如:

volatile unsigned char STATUS @ 0x03;

volatile bit commFlag;

3.5 标准库函数


PICC 提供了较完整的C 标准库函数支持,其中包括数学运算函数和字符串操作函数。在程序中使用这些现成的库函数时需要注意的是入口参数必须在bank0 中。

如果需要用到数学函数,则用 “#include ” 包含头文件;如果要使用字符串操作函数,就需要包含“#include ”头文件。在这些头文件中提供了函数类型的声明。直接查看这些头文件就可以知道PICC 提供了哪些标准库函数。

C 语言中的格式化输出函数“printf/sprintf”用在单片机的程序中时要特别谨慎。printf/sprintf 是一个非常大的函数,一旦使用,你的程序代码长度就会增加很多。 

4.C和汇编混合编程


用C 语言进行单片机应用程序开发时经常要使用汇编语句。比如,单片机的一些特殊指令操作在标准的C 语言语法中没有直接对应的描述,例如PIC 单片机的清看门狗指令“clrwdt”和休眠指令“sleep”。这样,一个项目中就会出现C 和汇编混合编程的情形,我们在此讨论一些混合编程的基本方法和技巧。

在C 原程序中直接嵌入汇编指令是最直接最容易的方法。如果只需要嵌入少量几条的汇编指令,PICC 提供了一个类似于函数的语句:

asm(“clrwdt”)  ;

双引号中可以编写任何一条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


关键字:PIC单片机  C语言  编程技术 引用地址:PIC单片机入门_C语言编程技术

上一篇:PIC单片机入门_PICC头文件介绍
下一篇:PIC单片机入门_框架与存储器

推荐阅读最新更新时间:2024-03-16 16:10

运用PIC单片机产生SPWM信号控制逆变桥的方法在UPS电源
1 前 言 随着信息技术的不断发展和计算机应用的日益普及,高新技术设备对供电质量的要求越来越高,很多设备都要求 电源 能够持续提供恒频恒压、无崎变的纯正弦波交流电,不间断电源UPS就是用来给这些设备供电的。UPS一般采用正弦脉宽 调制 (S PWM )的控制方法将直流电逆变成正弦波交流电。目前,SPWM控制波形的产生一般有三种方式:1、用分立元件 电路 产生,主要由三角波发生器、正弦波发生器和比较器组成。分立元件电路复杂,调试困难,成本高,可靠性差,因此一般很少采用。2、用专用集成芯片产生,专用集成芯片功能强大,输出波形质量高,应用比较广泛。3、用 单片机 实现,现在许多单片机都具有产生SPWM波的功能,采用单片机可使电路
[单片机]
运用<font color='red'>PIC单片机</font>产生SPWM信号控制逆变桥的方法在UPS电源
矩阵键盘C语言程序设计
下面是c语言源程序: #include reg52.h #define uint unsigned int #define uchar unsigned char uintled ={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar a,b,c,temp; void delay7ms(void) //误差 -0.217013888891us { unsigned char a,b; for(b=208;b 0;b--) for(a=14;a 0;a--); } ucharkey() {
[单片机]
矩阵键盘<font color='red'>C语言</font>程序设计
PIC单片机之数码管
大家好, 通过前一期的学习, 我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键等资源,体会到了学习板的易用性与易学性,特别是当自己第一次动手编程点亮一个发光管时,相信对于初学者来说,一定很兴奋,很有成就感吧!现在我们就趁热打铁,再向上跨一步,一起来学习一下数码管的工作原理及使用方法,这一期实验将会更具生动性。 说到七段数码管,它在家电及工业控制中有着很广泛的应用, 例如用来显示温度、数量、重量、日期、时间等,具有显示醒目、直观的优点。在一般的人机对话中,输入器件一般都是以按键为主,但输出器件则以数码管或LCD 为主。数码管作为一种应用十
[单片机]
<font color='red'>PIC单片机</font>之数码管
SPI总线驱动(C语言源程序)
/*-------------------- 〖说明〗SPI总线驱动源程序 默认11.0592Mhz的晶振。 〖文件〗93CXX.C ﹫2003/5/12 ---------------------*/ /*通用93c06-93c86系列使用说明 93c06=93c4693c56=93c6693c76=93c86*/ //dipx 可以自行定义 #i nclude AT89X52.H #i nclude "intrins.h" /*----------------------------------------------------- SPI93cXX系列时序函数调用(普通封装) 调用方式:自行定义﹫2001/05/12 函数
[单片机]
关于PIC单片机“读-修改-写”的相关说明
关于PIC单片机 读-修改-写 的相关说明 Topic: I have seen references to Read-Modify-Write instructions in your datasheet, but I do not know what that is. Can you explain what it is and why I need to know this? 我曾在数据手册里看到 读-修改-写 的相关说明,但我不知道这是什么。你能解释一下它的含义以及为什么要注意它吗? Discussion: An easy example of a Read-Modify-Write (or RMW) instru
[单片机]
单片机C语言程序设计:从左到右的流水灯程序
/*   名称:从左到右的流水灯 说明:接在 P0 口的 8 个 LED 从左到右循环依次点亮,产生走 马灯效果 */ #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int     //延时 void DelayMS(uint x) { uchar i; while(x--) {   } } for(i=0;i 120;i++);   //主程序 void main() { P0=0xfe; while(
[单片机]
基于PIC单片机控制雷达跳频系统设计
  在研制雷达系统时,常常需要应用频率合成技术来实现跳频信号源。频率合成是指从一个高稳定的参考频率,经过各种技术处理,生成一系列稳定的频率输出?眼1?演。现在应用最广的是锁相环(PLL)频率合成技术,它是通过变化PLL中的分频比N来实现输出频率的跳频的,但无法避免缩短环路锁定时间与提高频率分辨率的矛盾,因此很难同时满足高速和高精确度的要求。直接数字式频率合成(DDS)是近年发展起来的一种新的频率合成技术。它将先进的数字处理理论与方法引入频率合成领域,是继直接频率合成(DS)和间接频率合成(IS)之后的第三代频率合成技术。DDS的优点是:相对带宽很宽,频率转换时间极短(ns级),频率分辨率很高(可达μHz),全数字化结构便于集成,输
[单片机]
基于<font color='red'>PIC单片机</font>控制雷达跳频系统设计
如何在ATE中集成对PIC单片机的编程烧写功能
做ATE,要对DUT内部的PIC单片机进行在线烧写, 在网上看到别人的一个说法(作者 Claud Zhang),内容如下: --------------------------------------------------------- 一种简单高效低成本的Microchip MCU编程方法 Claud Zhang 对于一些研发工程师来说,工厂的的MCU编程有时候是个比较头疼的问题.在研发过程中,大家都和习惯于用仿真器去编程,这个对工程师来说是个非常简单的过程,但是在工厂生产,工厂认为太复杂了。工厂希望是个傻瓜式的过程。最好的方法是通过ATE自动编程,不需人工参与。 在以往的通常有2种方法
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved