当前位置:首页 > 嵌入式 > 嵌入式电路图
[导读]编者按:为了帮助具有PIC单片机汇编语言知识的技术人员或工程师,快速掌握利用C语言编写PIC单片机程序的方法,本刊特推出《PIC单片机C语言程序设计》系列连载文章。丈中给出

编者按:为了帮助具有PIC单片机汇编语言知识的技术人员或工程师,快速掌握利用C语言编写PIC单片机程序的方法,本刊特推出《PIC单片机C语言程序设计》系列连载文章。丈中给出的C语言程序实例,均是可执行的,读者可以放心引用。

一、汇编语言与C语言

早期的单片机程序多采用汇编语言编写。用汇编语言编程,直接、简捷,可有效地访问和控制各种硬件设备,如存储器、I/O口等,目标代码简短、占用内存少、执行速度快、语句效率高。然而,由于汇编语言是面向机器的语言,不同厂家或同厂家不同系列的单片机。其汇编语言指令系统往往互不相同,即通常所说的“不兼容”。这就出现了精通51单片机汇编语言的人不能直接编写PIC或其他单片机的汇编语言源程序,反之亦然的现象,以及产品升级换代和不同单片机问程序移植难的问题。而且,由于汇编语言是采用助记符的低级语言,可读性较差,当源程序功能多、程序长时,即使加了注释,阅读自己编写的程序也会感到困难,更不用说修改程序和增加功能了。

目前,单片机的应用越来越广,各半导体生产厂家不断推出各种高、中、低档单片机系列,以适应市场的需求。而客户对单片机系统的设计人员的基本要求,就是要选择能够满足产品性能和成本要求的单片机,并以最快的速度开发出完全满足市场需求的智能化产品。用汇编语言编程显然无法达到要求。

用C语言开发单片机系统软件的最大好处,是代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等。因此,C语言在单片机系统设计中得到越来越广泛的运用。

C语言是一种高级语言,具有低级语言的特点,原来用各种汇编语言编写的单片机程序,均可用C语言程序代换。

二、C语言的特点

C语言的特点可归纳如下。

1.语言简洁

C是一种小型语言,共有32个关键字,9种控制语句,表示方法简单,只需用规范的方法。就可以构造出功能很强的数据类型、语句和程序结构。如用++表示加1;一一表示减1;运算符省写等。

2.表达方式灵活实用

C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。

3. 表达力强

C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数据类型、指针类型和联合类型等,用来实现各种数据结构的运算。C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。

C语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。

它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。

4.C语言生成的目标代码质量高

C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。

5.结构化程序设计

C语言是一种结构化语言,提供编写结构化程序所需的控制流的结构语句,如for、while、do…while、lf…else等;用函数作为程序设计的基本单位,以实现程序的模块化;其源文件还可分割为多个源文件,以分别对各源文件进行编译,再连接生成可执行的目标码(hex)文件。

6.可移植性

汇编语言是不可移植的。而C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。

三、学习方法

用PIC单片机开发电子产品和用C语言编程,最主要的是要坚持学习,不能中断。应通过各种实例程序来学习C语言的语法规则。要熟练掌握C语言的数据类型表达方法、各种运算符、各种语句结构。

最好能背诵。要学会用C函数实现所需功能的方法。实际上,每个C函数都相当于一个功能模块,一个C函数便可实现一种功能。

此外,用C语言开发PIC单片机应用产品,必须具有PIC单片机汇编语言知识。如果你已经掌握了用汇编语言编写PIC单片机源程序的方法,最好将编写成功的PIC单片机汇编语言源程序,逐个用C语言源文件代换,从中体会C语言的优越性。

四、简单的C 语言程序

为了帮助读者进入C语言编程环境,要给大家介绍一个简单的C语言程序。

下面扼要介绍该程序所用到的C语言基本知识。更多的知识则在后文详细介绍。

1.主函数main( )

C语言程序一般由若干个函数组成。函数是完成某个功能的算法的程序段,是C语言的基本组成单位。组成一个程序的若干函数,可以保存在一个或几个源程序文件中,这些文件都以。C为扩展名(汇编语言以ASM为扩展名)。一个程序必须有且只能有一个名为main的函数,即是主函数main( )程序运行时,总是从主函数main( )开始执行的。

2.C语言函数

C语言程序的基本单位是函数。C语言程序必须有且只能有一个名为main的主函数。主函数可以调用其他函数,其他函数也可相互调用。被调用的函数可以是系统提供的库函数,也可以是程序设计者自己编写的函数——对于MCU (如PIC单片机),所用的大多是自己编写的函数。一个函数由函数头和函数体两部分组成,每个函数的形式都相同。

(1)函数头由函数名(自定义名)、函数标志——( ),即一对圆括号,以及参数表,又称函数形式参数名和参数说明(定义形式参数类型)组成。

前两项必须有,如主函数main( ),后两项为即可选项。注意:函数名可包括函数类型和函数名字等。

(2)函数体由一对花括号:{}括起来,括号内由若干语句组成。这些语句有两种类型:一类是说明语句,又称变量定义,其作用是定义函数中用到的变量;另一类是执行语句,又称函数功能的执行部分。

用于完成一定的功能,即算法处理。注意:有的函数没有变量定义部分,但有若干执行语句。而在特定的情况下,则既无声明部分,也无执行部分,如:

Dump( )

{}

这是一个空函数。什么也不做,它也是合法的函数。

再有,每个语句和数据定义的最后,必须有一个分号“;”(#define……的不加分号)。分号是C语言环境首先接触到的基本符号,在以后的文章中我们还会深入介绍这些符号的用途。[!--empirenews.page--]

(3)赋值运算符赋值号“=”,即赋值运算符。

赋值运算符有三种表达形式,这里先介绍一种简单的赋值运算符。

格式:变量=表达式。

功能:先计算出表达式值(有些表达式已有结果,勿需计算),并将该值赋给等式左端的变量。赋值运算符是按照“自右而左”的顺序进行作业的。例如:

PORTB=0X0 3

TRISB=0×0 0

TRISA=0X0 F (0X代表十六进制)

分别执行以下操作:把等式右边的0X0 3送给等式左边的端口寄存器PORTB口,即B口低两位为高电平,其余6位为低电平;把0X0 0送给方向寄存器TRISB,即设置B口为输出;把0×0 F送给方向寄存器TRISA,即设置A 口低四位为输入,高四位为输出。

3.PIC16F84A点灯电路和C语言程序

下面以控制PIC16F84A单片机端口寄存器PORTB口外接的8只LED任一位的亮灭为例,介绍相关C语言程序的编写。电路如图1所示。

 

笔者使用的是MPLAB tDE V7 40集成开发环境及PICC编译器,所生成的C语言源程序又称源文件。

在编写C的源程序时,需要定义硬件的标志头文件(也称包含头文件或头文件)。因为用户经常使用的标准寄存器地址和其位地址都被定义在Pic h标志头文件中,按C语言编译器编译源程序的语法规则,在编写C语言程序时,必须使用#include语句,把这个pic.h头文件包含到自己的源程序中。即对于PIC中级产品的单片机,C语言程序的开头是固定格式#include。编译器在编译处理#include语句时,会把pic.h的内容。复制到你的源程序中,这样PICC才认为用户使用的标准寄存器的端口地址和端1:3的位地址已经被定义,源程序就会合法地使用这些标准寄存器及其对应的位。关于MPLAP IDE V7.4和picc编译器,在后文还会详细介绍。

4.PIC单片机端口寄存器的位定义

4.PIC单片机端口寄存器的位定义

这里介绍的PIC单片机端口的位定义,属于需要背诵的内容。

以PIRTB为例,PIC单片机端口寄存器的位(即8位)定义,实写如下:

 

5.延时函数

PiC单片机C语言中的延时函数(即延时一定值),有多种等效的编写,这里介绍一种最简延时函数,在后文中,我们还会详细介绍各种延时函数。

 

函数中的K为给定的整形值

6.C语言程序清单

PIC16F84A单片机PORTB口外接8只LED间亮和位1、2、6外接的LED分别点亮的程序清单如下(源文件名PIC01.C):

 

 

说明:以上是一个完整的,可执行图1 LED点灯的C程序,主要由端口寄存器PORTB 1:3的位定义,延时函数delay ()定义; 主函数main()、延时函数void delay( )及各种语句等组成。

该C程序第三行以符号“∥”开头的说明文是一个注释,它可在一行内写完,亦可分多行写完。注释可写在程序的任何位置,用于帮助阅读和理解程序。说明程序的相关功能、注意事项,以及说明有关算法等。注释应尽可能简捷。在编译时,注释不产生代码。C程序还可用“ ”开头到“ ”结尾之间的内容作注释,与符号“∥”开头的注释是等效的。

上述程序的第一行,是引导程序开始的用#in—clude语句的头文件。

第二行是PIC单片机PORTB口的位定义,这里指8位,即(&ddd)*8。

第三行是第二行端口寄存器PORTB的位定义的注释。

第四行~第六行是端口寄存器PORTB口的RBO、RB1、RB6三位的定义,以便在后续程序中对其赋值之用。

第七行是RBO、RB1、RB6三位的定义注释。

第八行是延时函数的定义第九行到结尾的功能(参看相关注释)。

关于端口寄存器的位表达方式。在用C语言编写PIC单片机源文件时,一旦端口的位被定义,即(以端口PORTB为例);#daefine PORTBIT (ddd,bit)((unsigned)(&ddd) 8+(bie)),在该条件下,端口PORTB的位有两种表达方式,在C程序中均是等效的。以PORTB的0位为例:

 

它们都是等效的。但一旦位定义中用了PORTB_ O.则在赋值时也应用PORTB—O: 或位定义用了PORT_O,对应赋值时也应用PORT_O。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭