新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > PIC单片机C语言程序设计(15)

PIC单片机C语言程序设计(15)

作者:时间:2013-01-26来源:网络收藏
  本文是讲座《单片机C 语言》的结束篇,为了帮助大家更好地掌握前面所学的知识,我们将归纳性地介绍初学者用C 语言编辑PIC 单片机实用程序时应具备的思维方法和基本知识,并通过下面的实例进行一次小结,以期对大家今后深入学习PIC 单片机C 语言有所帮助。

  十六、程序的组成

  一个完整的PIC 单片机C 语言源程序应包括:包含头文件、变量定义、常量说明、函数定义、主函数main( )、若干个其他功能函数、各种功能C 语句,以及已定义的函数和函数体、注释等部分组成。

  说明:对PIC 单片机中级或中级以下的产品,其头文件是#includepic.h> 和#includepic1687x.h>; 对高级产品,如PIC18F452 器件,其头文件是#includepic18.h> 和#include pic18fxx2.h>。

  C 程序的运行,总是从主函数main( ) 开始(可以通过模拟仿真直接观察到),由主函数调用其他函数,其他函数也可互相调用, 如此运行工作。而C 语句,又可按其执行方式的不同而分为顺序结构、选择结构和循环结构等。这里的顺序结构, 是指程序按语句的顺序逐条执行;选择结构, 是指程序根据相关条件选择的执行顺序; 循环结构, 是指程序根据某条件的存在执行一段程序,直到条件消失为止,若该条件永远存在,就形成无限循环。

  1. 延时函数的三种表达式

  用汇编语言编辑一个较大的PIC 单片机程序时,一般分为多个程序模块,每个模块的子程序实现一个特定的功能。而用C 语言编辑该程序时,模块的功能是用函数实现的,即函数相当于汇编语言的子程序。下面我们以延时函数应用的实例,来说明PIC 单片机C 语言程序的基本组成格式。

  延时函数是PIC 单片机源程序中出现频率较高的函数,而且具有相同功能的延时函数也有多种形式,我们选择常用的三种延时函数进行讨论。

  所引用的三种延时函数都是由循环控制语句——while、do_while 和for 等实现的。

  (1)带形式参数的由for 语句组成的延时函数。

  void delay(unsigned int k)

  {

  unsigned int i, j;

  fir(i=0;i=81;i++)

  fir(j=0;j=k;j++)

  cONtinue;

  }

  该延时函数由两个for 语句组成,第一个for语句中的81 是笔者设置的常数(可任意设定),用于使延时值增加; 第二个for 语句中的k 是在程序中主函数main( ) 调用delay(k) 时,由用户给定的值,k 值不同,延时时间就不等, 所以该延时函数可在一个C 程序中实现不同的多个延时量,显然比汇编语言延时子程序简单多了。在延时量要求较短时, 该延时函数种的两个for 语句的功能可用一个for 语句来实现。

  (2)带形式参数的由while 循环语句组成的延时函数。

  Void deley(unsigned long int k)

  {

  Unsigned long int d=k;

  While(--d)

  {;

  }

  {

  此延时函数简单、容易记忆。使用时,在程序中主函数main( ) 调用delay(k) 时,由用户给定不同的k 值,亦可实现多种延时值。

  (3)带形式参数的由do-while 语句组成的延时函数。

  Void delay(unsigned long int k)

  {

  Unsigned int long j=o;

  do {

  j++;

  }

  While(j =k);

  j=o;

  }

  该延时函数简单易记。使用时,在程序中主函数main( ) 调用delay(k) 时,由用户给定不同的k 值,即可实现多种延时值。

  需要说明的是,上述由while 循环语句和由do-while 语句组成的延时函数中的形式参数,不一定用长整型(long ink)。

  ⒉ 电路功能相同形式不同的四种C 程序

  下面介绍利用PIC16F84A 单片机的PORTB端口外接的8 只LED, 采用四种C 程序控制端口的LED 灯,来说明编辑C 语言程序时的基本格式及其灵活性。电路参见《电子制作》2009 年9期《单片机C 语言(1)》一文中的图1,程序流程如图64 所示,采用的是无限循环工作方式。

图64

  (1)C 程序一,文件名为pic09.c, 清单如下:

  #include pic.h> // 头文件

  void delay(unsigned long int K)

  // 延时函数开始

  {

  unsigned int long j=0;

  // 说明语句

  do

  // 由do-while 组成的延时执行语句

  {

  j++;

  }

  while(j=K);

  j=0;

  }

  main( ) // 主函数开始

  {

  TRISB=0x00;

  // 设置PORTB 口全为输出

  INTCON=0x00; // 关闭所有中断

  PORTB=0x00; //RB 口先送低电平

  while(1) // 永久循环开始

  {

  PORTB=0x55;

  //RB 口外接LED 其1、3、5、7 点亮

  delay(45000);

  // 点亮的LED 延时1 秒后关闭

  PORTB=0xAA;

  //RB 口外接LED 其2、4、6、8 点亮

  delay(98000);

  // 点亮的LED 延时2 秒后关闭

  PORTB=0xFF; //RB 口外接LED 全亮

  delay(155000);

  // 全亮的LED 延时3 秒后关闭

  }

  }


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭