1.3 单片机C语言的学习方法

单片机C语言是一种计算机语言,它是开发单片机系统的工具。所以,学习的时候要抓住它的应用性,多实践,多看他人编好的C语言程序。听一百遍,看一百遍还不如自己做一遍。所以,建议读者在学习单片机C语言时,多动手、动脑,在实践中掌握关键知识点。

1.3.1 学会看C语言程序

优秀的C51程序一般都会有说明文档和关键程序注释。我们在阅读这些程序的时候可以先通过说明文档对整个程序所要完成的任务或程序功能做一个大致的了解。通过程序注释,我们可以知道为什么要用这条语句以及这条语句能做什么事情,能完成什么样的任务等。因为,C51语言是一种结构化的语言,阅读程序的时候可以根据结构来判断这些函数或语句的功能。因此,就算我们不理解或不知道某条语句的含意,但是这并不影响我们理解整个程序的功能。

例3:下面是一段完成PWM初始化操作的程序。

/********************************************************************************************************

* Copyright (C), 2008-2010, XTDPJ System .

* Name : PWM227initial()

* Description : 227PWM驱动模块 out1

* Others : www.xtdpj.com

********************************************************************************************************/

PWM227initial()

{

PIO = 0x3F; //pwm选通 pwm 6 7 使能pwm输出,其他口为通用I/O

PWMCON4 =0x30; //PWM6,7脉冲输出允许

PWMEN = 0xC0; //enable pwm输出功能

PWMCON2 =0X9C; //enable PWM break 功能-- 脉冲停止输出,IO口为低

PWMPH = 0X0F;

PWMPL = 0XFF;

PWMCON1= 0X08; //LOAD RUN PWM6I = 1(输出翻转)

}

我们在阅读程序例3时,通过阅读程序说明文档,可以知道:这段程序的版本是2008-2010,是由XTDPJ System提供。它的程序名是PWM227initial(),主要功能是对W79E227单片机的PWM功能初始化操作等信息。根据PWM227initial()函数中程序语句后面的注释,我们可以很清晰的知道这些语句的作用。因而,可以大致明白这个函数的功能及实现这些功能的方法。

1.3.2 编C51语言程序的一般步骤

C语言是一种高级程序设计语言,提供了十分完备的规范化流程控制结构。在使用C51语言设计单片机应用系统程序时,应尽可能采用结构化的程序设计方法。这样会使的整个应用系统程序有清晰的结构,以便于程序的调试和维护。对于较大的应用程序,应将整个程序按功能分成若干个模块,不同模块完成不同的功能。各个模块可以分别编写,甚至还可以由不同的程序员编写。因为,单个模块完成的功能较为简单,所以设计和调试时也比较容易。

在C语言中,一个函数就可以认为是一个模块。所谓程序模块化,不仅是要将整个程序划分成若干个功能模块,更重要的是,还应该注意保持各个模块之间变量的相对独立性,即保持模块的独立性,尽量少使用全局变量等。对于一些常用的功能模块,还可以封装为一个应用程序库,以便需要时可以直接调用。其一般编程步骤如下所述:

(1)将整个系统要完成的任务按功能划分为多个小模块,如初始化、按键扫描、LCD显示驱动等。

(2)分别编写和调试各小模块需要完成的功能。

(3)将各个小模块整合到一个工程项目中,根据系统整体功能进行综合调试。

例4:设计一个具有校时功能的LCD数字钟。

在设计这个系统时,我们首先要分析它的功能。根据要求,它的功能主要有:显示时间、校正时间、时钟功能等。然后分别根据功能模块编写LCD显示函数、校时函数、时钟函数等。最后将这些功能模块进行整合,综合调试。

1.3.3 通过编程、仿真学习C51语言程序设计

单片机系统设计,最终是要完成系统的功能。这些功能是通过编程来实现的,因此在学习C51语言的时候,我们可以通过实例编程和借助编程软件、仿真软件来分析程序。例如,在学习C51扩展数据类型相关内容时,可以使用C51编写一个点亮LED操作的程序,然后通过软件仿真来看它能不能完成这个操作。有关软件仿真的内容将在第二章中讲解。

另外,我们还可以将我们编写好的这个程序编译为单片机可执行的文件(BIN或HEX文件)并将这些文件通过工具写入到单片仿真板或实验板上,然后观察它的运行情况。根据运行情况我们再来分析我们编写的程序是否完成我们所需要的功能。

例5:用单片机的P1.0点亮1个LED。

由于功能比较单一,所以无须进行功能分析。可直接编写其代码。其代码如下:

sfr P1 = 0x90; //定义P1口的地址

sbit P1_0 = P1^0; //将P1_0定义为P1.0

void main()

{

P1_0 = 0 ; //点亮LED,低电平有效,如果把LED反过来接,那么就是高电平有效

}

1.3.4 通过实例学习C51语言程序设计

在掌握知识点之前我们可以通过模仿已有的程序代码来完成一些功能设计。在模仿的过程中,我们慢慢理解这些知识点,如编程格式、程序结构等。本书每个知识点都附有1个或多个实例程序,读者在学习的时候可以参考这些实例程序进行编程。如我们需要2ms延时程序,我们只需要修改例6中的j

例6:利用软件延时1ms的延时函数。

/********************************************************************************************************

* Copyright (C), 2008-2010, XTDPJ System .

* Name : Delay1ms

*Description : 简单延时1mS

********************************************************************************************************/

void Delay1ms

{

unsigned char j;

for(j=0;j

{;}

}

1.4 本章小结

本章主要介绍了单片机开发时使用的语言工具以及常见编程语言的基本概念。另外本章还介绍了C语言与汇编语言的特点,并将它们进行了比较。通过上述内容的学习读者应在概念上认识汇编语言及C51语言。C51是单片机开入时使用较多的一种程序编写语言,在学习C51的时候,建议读者多看程序,多编程序,多动脑筋,以便能快速掌握单片机系统开发时所需的基本语言工具。下一章节将介绍单片机应用系统开发环境的使用。

1.5 习题

1.什么是单片机?

2.什么是汇编语言?

3.汇编语言与C语言各有什么特点?

4.什么是C51语言?

5.用单片机设计1个简单的8路抢答器(用LED作抢答成功状态指示)时,它可以由哪些功能模块构成?

提示:作为抢答器系统,首先要有抢答按扭处理、抢答成功者的状态显示等功能。读者根据各种功能可将其细分为按键处理、LED驱动、优先编码等模块。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180114G0AW1P00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券