DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 247|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 14:12:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                      本文是讲座《单片机C 语言程序设计》的结束篇,为了帮助大家更好地掌握前面所学的知识,我们将归纳性地介绍初学者用C 语言编辑PIC 单片机实用程序时应具备的思维方法和基本知识,并通过下面的实例进行一次小结,以期对大家今后深入学习PIC 单片机C 语言程序设计有所帮助。
  十六、PIC单片机C语言程序的组成
  一个完整的PIC 单片机C 语言源程序应包括:包含头文件、变量定义、常量说明、函数定义、主函数main( )、若干个其他功能函数、各种功能C 语句,以及已定义的函数和函数体、注释等部分组成。
  说明:对PIC 单片机中级或中级以下的产品,其头文件是#include 和#include; 对高级产品,如PIC18F452 器件,其头文件是#include 和#include。
  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 // 头文件
  void delay(unsigned long int K)
  // 延时函数开始
  {
  unsigned int long j=0;
  // 说明语句
  do
  // 由do-while 组成的延时执行语句
  {
  j++;
  }
  while(j // 头文件
  void delay( K ) // 延时函数
  unsigned long int K;
  // 形参数(k) 说明
  {
  unsigned long int d=K;
  // 说明语句
  while(--d)
  // 由while 组成的延时执行语句
  {;
  }
  }
  main( ) // 主函数开始
  {
  TRISB=0x00
  // 设置PORTB 口全为输出
  INTCON=0x00; // 关闭所有中断
  PORTB=0x00; //RB 口先送低电平
  loop: // 语句标号(无限循环)
  PORTB=0x55;
  //RB 口外接LED 其1、3、5、7 点亮
  delay(37000);
  // 点亮的LED 延时1 秒后关闭
  PORTB=0xAA;
  //RB 口外接LED 其2、4、6、8 点亮
  delay(74000 );
  // 点亮的LED 延时2 秒后关闭
  PORTB=0xFF; //RB 口外接LED 全亮
  delay(111000);
  // 全亮的LED 延时3 秒后关闭
  goto loop; // 跳转到loop 处循环
  }
  说明:a. 上述程序中,延时函数带形参数k,且由while 语句组成。
  b. 主函数main( ) 调用delay(k) 时,其k 分别是37000(1 秒)、74000(2 秒)和1110000(3 秒)。
  c. LED 灯点亮时的无限循环,由goto 无条件转移执行语句完成。其中loop 为语句标号。对goto 语句使用时应慎重,在简单的C 程序中使用goto 语句是必要的,但编辑复杂的C 程序结构,会使程序的可读性变差。
  (3) C 程序三,文件名为pic11.c, 清单如下:
  #include  // 头文件
  unsigned int h; // 无符号的整型变量
  void delay(unsigned long int M)
  // 延时函数开始
  {
  unsigned int long i,j; // 说明语句
  for(i=0;i // 头文件
  void delay(unsigned long int M)
  // 延时函数开始
  {
  unsigned int long j; // 说明语句
  for(j=0;j // 头文件
  # define PORTAIT ( add , bit ) ( ( unsigned )
  (&add)*8+(bit))
  static bit PORT _ 2@ PORTAIT ( PORTA , 2 ) ;
  //PORTA 口位定义
  static bit PORT_3 @PORTAIT(PORTA,3);
  static bit PORT_4 @PORTAIT(PORTA,4);
  unsigned int x=0; // 无符号的整形变量
  void delay(unsigned long int k )
  // 延时函数开始
  {
  unsigned long int i; // 说明语句
  for(i=0;i0) //while 语句开始
  {
  PORTA=0x1F;
  //PORTA 口的低位输出高电平
  PORTB=SEG7[unit_bit];
  // 个位字段码数组送B 口
  RA3=0; //RA3 赋值0,LED 个位显示
  delay(200); // 延时以便观察
  RA3=1; //RA3 赋值1,LED 个位数灭
  delay(2); // 短延时
  PORTB=SEG7[ten_bit];
  // 十位字段码数组送B 口
  RA2=0; //RA2 赋值0,LED 十位数显示
  delay(200); // 延时以使观察
  RA2=1; //RA2 赋值1,LED 十位数灭
  delay(2); // 短延时
  d--; //d 自减量
  }
  }
  void main( ) // 主函数开始
  {
  TRISB=0x00; //B 口全为输出
  TRISA=0x10; //A 口低4 位为输出
  PORTB=0x40; // 给B 口低位输出0
  INTCON=0x00; // 关闭所有中断
  PORTA=0x10; //A 口低位输出0
  x=99; // 给整形变量x 赋值99
  while(RA4) // 显示起动信号
  {; //RA4 为0,计时开始
  }
  while(1) // while 循环语句开始
  {
  display(x); // 调用显示函数
  x--; //x 自减
  if(x==-1) // 若x 自减到-1
  x=99; // 给x 赋值99
  }
  }
  说明:a. 对上述的C 源程序,只需将显示函数display(x) 中的无符号整型变量d(unsignedint d) 从5700 改为95,即可变成以秒为单位的99 ~ 0 倒计数程序,因为d 值决定了数码管显示的个位时间 ( 具有唯一性)。
  b. 若要使用上述程序, 且对计时( 分或秒)的精度有严格要求时,可对整型变量d 值(57000)以标准时钟为准进行微调,以实现高精度的分或秒定时。
  c. 上述所有PIC 单片机的C 源程序,都是可执行的, 初学者可放心使用。
  5. 关于PIC 单片机c 语言程序SIM 软件仿真的问题
  在《单片机C 语言程序设计(11)》、《单片机C 语言程序设计(12)》中,详细介绍了C 程序的SIM 软件仿真过程。软件仿真对初学者编辑PIC 单片机C 语言程序十分有用, 利用它不仅可以观察到程序运行过程,而且可以发现程序中的问题,即使是已掌握了PIC 编程技术的专业人员,也常通过SIM 软件仿真来找出程序中的问题。
  结束语
  上面介绍的延时函数的三种表达式、电路功能相同形式不同的四种C 程序、端口的位定义、LED 数码显示函数和C 语言程序SIM 软件仿真问题等内容,均是初学PIC 单片机用C 语言编辑源程序的基本知识,大家要理解其内容,最好能熟记和背诵。在此基础上,还要自己独立想一些简单电路功能,用PIC 单片机C 语言完成(一定是编译成功可执行的程序)。之后,即可进一步学习C 语言中的运算符、结构、联合、A/D 转换、串行通信等内容。学习时,仍应以编辑可执行的实用程序为目标。
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-11-13 00:24 , 耗时 0.083497 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表