PIC单片机C语言程序设计_第1页
PIC单片机C语言程序设计_第2页
PIC单片机C语言程序设计_第3页
PIC单片机C语言程序设计_第4页
PIC单片机C语言程序设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、程序也会感到困难,更不用说修改程序和增加功能了。目前,单片机的应用越来越广,各半导体生产厂家不断推出各种高、中、低档单片机系列,以适应市场的需求。而客户对单片机系统的设计人员的基本要求,就是要选择能够满足产品性能和成本要求的单片机,并以最快的速度开发出完全满足市场需求的智能化产品。用汇编语言编程显然无法达到要求。用C语言开发单片机系统软件的最大好处,是代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等。因此,C语言在单片机系统设计中得到越来越广泛的运用。C语言是一种高级语言,具有低级语言的特点,原来用各种汇编语言编写的单片机程序,均可用C语言程序代换。二、C语言

3、的特点C语言的特点可归纳如下。C是一种小型语言,共有32个关键字,9种控制语句,表示方法简单,只需用规范的方法。就可以构造出功能很强的数据类型、语句和程序结构。如用+表示加1;一一表示减1;运算符省写等。C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。3. 表达力强C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数据类型、指针类型和联合类型等,用来实现各种数据结构的运算。C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。C语言能

4、直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言是一种结构化语言,提供编写结构化程序所需的控制流的结构语句,如for、while、dowhile、lfelse等;用函数作为程序设计的基本单位,以实现程序的模块化;其源文件还可分割为多个源文件,以分别对各源文件进行编译,再连接生成可执行的目标码(hex)文件。汇编语言是不可移植的。而C语言在不同机器上的C编译程序,86的代码是公共的,所以

5、C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。三、学习方法用PIC单片机开发电子产品和用C语言编程,最主要的是要坚持学习,不能中断。应通过各种实例程序来学习C语言的语法规则。要熟练掌握C语言的数据类型表达方法、各种运算符、各种语句结构。最好能背诵。要学会用C函数实现所需功能的方法。实际上,每个C函数都相当于一个功能模块,一个C函数便可实现一种功能。此外,用C语言开发PIC单片机应用产品,必须具有PIC单片机汇编语言知识。如果你已经掌握了用汇编语言编写PIC单片机源程序的方法,最好将编写成功的PIC单片机汇编语言源程序,逐个用C

6、语言源文件代换,从中体会C语言的优越性。四、简单的C 语言程序为了帮助读者进入C语言编程环境,要给大家介绍一个简单的C语言程序。下面扼要介绍该程序所用到的C语言基本知识。更多的知识则在后文详细介绍。1.主函数main( )C语言程序一般由若干个函数组成。函数是完成某个功能的算法的程序段,是C语言的基本组成单位。组成一个程序的若干函数,可以保存在一个或几个源程序文件中,这些文件都以。C为扩展名(汇编语言以ASM为扩展名)。一个程序必须有且只能有一个名为main的函数,即是主函数main( )程序运行时,总是从主函数main( )开始执行的。C语言程序的基本单位是函数。C语言程序必须有且只能有一个

7、名为main的主函数。主函数可以调用其他函数,其他函数也可相互调用。被调用的函数可以是系统提供的库函数,也可以是程序设计者自己编写的函数对于MCU (如PIC单片机),所用的大多是自己编写的函数。一个函数由函数头和函数体两部分组成,每个函数的形式都相同。(1)函数头由函数名(自定义名)、函数标志( ),即一对圆括号,以及参数表,又称函数形式参数名和参数说明(定义形式参数类型)组成。前两项必须有,如主函数main( ),后两项为即可选项。注意:函数名可包括函数类型和函数名字等。(2)函数体由一对花括号:括起来,括号内由若干语句组成。这些语句有两种类型:一类是说明语句,又称变量定义,其作用是定义函

8、数中用到的变量;另一类是执行语句,又称函数功能的执行部分。用于完成一定的功能,即算法处理。注意:有的函数没有变量定义部分,但有若干执行语句。而在特定的情况下,则既无声明部分,也无执行部分,如:Dump( )这是一个空函数。什么也不做,它也是合法的函数。再有,每个语句和数据定义的最后,必须有一个分号“;”(#define的不加分号)。分号是C语言环境首先接触到的基本符号,在以后的文章中我们还会深入介绍这些符号的用途。PIC单片机C语言程序设计(2)五、C语言的标识符和关键字一个完整的PIC单片机C语言程序,通常由包含文件(即头文件1,变量定义、变量说明、函数定义、函数体和注释等六部分等组成。所谓

9、标识符,实际上是一些由程序编写者自定义的名称,类似于PIC单片机汇编语言中给寄存器(RAM)的命名。C语言中所用到的变量名、函数名、数组名、文件名等都是由标识符组成的。标识符是由一串字母(常指英语字母)、数字和下线符(或称下划线)组成的字符串。标识符的第一个字符必须是字母或下线符。按照惯例,以下线符开头的标识符是系统程序专用的,程序员最好不用。程序员可将下线符作为分段符使用,如SUM_1。同一字母的大小写被视为不同的标识符。即同一字母的大小写是不同的标识符。不同的C编译器对标识符的长度有不同的限制。为了避免所编写的源文件能被所有C编译器认可,可将标识符的长度限定在8个字符以内(即1个字节)。标

10、识符的命名(即自定义),最好简捷、含意清晰、便于阅读,如用deIay表示延时;用sum表示求和;用loop表示循环等。关键字,又称保留字,是指那些已由系统作了特殊定义、具有特定含义的标识符。,程序员编写C程序时,可用关键字来对所用函数参数进行说明、定义一些物理量,它们是C语言语句的重要组成部分,有的还直接组成简单语句。因此,用户是不能将此类标识符(关键字)作为自定义标识符使用的。C语言的关键字分为三类,即数据类、程序控制类和预处理类,如表1所示。表1表1中所列关键字,读者在编写C程序时,将逐步学会其使用。六、C语言的数据类型在编写C语言程序时,首先要涉及的是数据描述和功能描述。数据是实现功能的

11、过程,功能是数据运算(或处理)的结果,没有数据,C程序就无法实现单片机规定的功能,可见数据在C语言程序中的重要性。C语言的数据类型,有基本型、构造型、指针型三类。对此,笔者将在使用时逐一介绍。标准型数据属于基本型数据,是由C语言本身提供的基本数据类型,结构简单、使用频率高。下面以实例对C语言程序中的标准型数据予以说明。标准型数据又分为整型数据、实型数据和字符型数据三种,每种数据又有常量和变量之分。笔者将其分类以表格形式列出,既可供初学者编写C语言程序时查找,亦可与本文中实例程序的注释进行对比学习,以加深对标准型数据的理解。PIC单片机C语言程序设计(3)for语句在前面的程序实例中已使用过一次

12、。这里作进一步介绍。一般形式:说明语句;for(初始化条件;条件表达式;自增量+)执行语句;运行过程如下:先求解初始化条件(初始化值由用户设置);再判断条件表达式,若其值满足条件表达式,则执行for的内嵌语句(for以下的执行语句);在执行for的内嵌语句之后,求自增量4-+;求解自增量+之后,返回运行过程的第2)步继续执行。如果在继续执行过程中出现了不满足条件表达式的值。则退出循环。for语句是组成延时函数的主要成分,即:void aelay() /延时函数Int i;/整型变量()说明语句)For(i=0;i=k;i+)/for语句Continue;/转向下次循环对照本上期的程序实例中的f

13、or语句,由该程序中,点亮LED的延时是一个固定值,所以来用无参数延时(delay)函数voiddelay()。其for语句中的k是基本的整型变量int型,故取值上限不应超过两个字节(见本连载2009年11期的表3)。在该实例中,k=20000。k值越大,延时越长。上述for语句也可以改为:说明语句;for(初始化条件;条件表达式;自减量-)执行语句;其功能是等效的。读者可以按需选用。从上述for语句的组成可以看出,for语句实际上是一种按设计者要求编写的循环计数器,利用它可使程序按指定的次数重复执行一个语句或者一串语句,所以常常用作延时功能。在延时函数中,为了增加延时量,可将for语句按不同

14、的变量组合使用,以下的延时函数:Void delay()/延时函数Int i ;Int j;For(i=0;i=k1;i+)For(j=0;jb) c=b ;满足条件ab,将b 赋值给c例2 :i f ( t t r = = 9 9 9 9 )ttr=0 ; 满足运算条件ttr=9999 ;将0 赋值给ttr if(条件表达式) 语句1else 语句2例1 :if(ab) c=b ;满足ab,将b 赋值给celse c=a ; 不满足ab 时, 将a 赋值给c例2:若比较两个整量a、b,要求其大者送x,即可用if 语句实现;If(ab)x=a;/如果ab,将a赋值给xElse x=b;/如果条

15、件不满足,将b赋值给x 表达式赋值(简化式)的条件语句。读者在阅读一些书籍上的单片机C 语言程序时,会遇到条件语句的一种简化形式,其格式如下:表达式1 ?表达式2 ;表达式3如以上if 语句的形式中的例2,即可简化为条件表达式的赋值语句;X=(ab ? a:b);/如果ab ,将a赋值给x如果条件不满足,则b赋值给xIf 语句尚有一些其他格式,这里暂略去。在电子技术中,数码管显示(09)是最常见的显示技术。数码管显示时,可用LCD(液晶),也可用LED 数码管显示09 的数。这里首先介绍用PIC16F84A控制的数码管LED 的显示电路,如图3 所示。图3 是四位数码管的,也可以扩展更多的位或

16、减少到一位数的显示。PIC16F84A 的引脚 是低电平复位端,外接复位按钮K0和R1、二极管D0 以及电容C0组成的复位电路。引脚、脚外接晶振(4M)和电容C1、C2组成的单片机时钟电路。RA4 位(脚)外接微动开关按键,其用途按图3 电路具体功能而定,如该电路用于计数,K1 可作起动计数作用;如该电路用作时钟,K1 可作时钟人工预置起始时刻用。PIC16F84A 的PORTB 口,其中的RBOBB6 位通过限流电阻R3R9 与LED 数码管笔段码a、b、c、d、e、f、g 分别对应相连。PORTA 口的RA3、RA2、RA1 和RA0 通过电阻R10R13与三极管(PNP 型)V4V1 的

17、基极相连。三极管的集电极分别与对应的数码管的供电端(、脚)相连。三极管的发射极都接到电源+5V 上。该三极管V4V1 用于数码管LED 动态扫描时的电源开通信号。数码管上的符号DP 为数显时的小数点位,用户可按需要在其某位数码管的DP 上外接一只470 电阻和LED(与电阻串联),用于四位数码管特征显示标记,如数码管计数时的百位段;记时的时位段等。图3 电路的数码管LED,笔者选用共阳型数码管,其实物的引脚和内部电路如图4 所示。为了读者使用方便, 所以图3中的数码管LED 的电路是以实物结构绘制的。所述的图3 电路即将在后文的数码管LED 计数和时钟(包括可预置的时钟)派上用场。PIC单片机

18、C语言程序设计(5)九、C语言的运算符C语言提供了30多个运算符,范围很大,应用广。除了控制语句和输入、输出之外,几乎所有的基本操作,都是按照运算符来进行处理的,可见其在C语言中的重要性。C语言的运算符可以灵活地与运算对象组合成运算表达式。按其在表达式中的作用,运算符可分成基本运算符和其他运算符。基本运算符有8类,即算术运算符、关系运算符、逻辑运算符、自增运算符、自减运算符、字位运算符、赋值运算符、条件运算符、逗号运算符等。而其他运算符有指针运算符和杂项运算符等。每类运算符又包含了多种运算符。(1)算术运算符及自增、自减运算符。表4列出了加、减、乘、除、取模5种算术运算符,以及自增、自减运算符

19、的操作说明。其中,除法运算符又分两种情况,一是整除, 口两个整数相除,所得商舍尾数,仅取整数部分,如510等于0;二是实除,即两个实数相除,所得商也是实数,如5.010等于0.5。表4 算术和自增自减运算符自增运算符+和白减运算符一一,是C语言中最具特色的单目(一个量)运算符,其操作对象必须是整型变量,而不能为常量或表达式,其功能分别是使变量增1或减1。自增运算符+和自减运算符一有前缀运算符和后缀运算符两种应用方式,两者产生的效果有些不同:前缀运算符,如+i或-j,在使用j之前,先使j的值+1或-1;后缀运算符j+或j-。在使用i之后,才使i的值加1或减1。例如,Y的原值等5,则:语句X=+y

20、, 表示y先加1再运算, 得y=y+1.6,x=y=6;语句=y+, 表示Y先运算再加1, 得x=y=5,y=y+1=6。在电子制作2009年第10期,PIC单片机C语言程序(1)的延时函数中,我们已用过后缀运算符i+,大家可以从中体会其用法。(2)逻辑运算符。逻辑运算符是基本运算符中的一种。逻辑运算符有:与“”、或“| 、非“!”等3三种。逻辑运算符、|为双目(两个量)运算符,!为单目运算符。它们要求的操作对象是非0的整型值和整型0表示的逻辑量。其运算规则如下:1)若两个操作对象都为非0整型值(真),则相与的结果为1(真),否则为0(假);2)若两个操作对象都为整型值0(假),则相或结果为0

21、(假),否则为1(真);3)若操作对象为非0整型值(真),求非的结果为0(假),否则为1(真)。这里补充一点,算术运算符中的加、减和乘,与大家熟悉的算术运算规则完全相同,而除运算符应按上述规范使用。C语言的运算符内容较多,限于篇幅,这里仅概况地加以介绍,希望读者在学习时,根据PIC单片机书籍,深入学习C语言的运算符,并通过编写C语言程序,掌握每个运算符的意义和使用规则。(1)硬件电路。利用电子制作2010年第1期PIC单片机C语言程序(4)一文中的4位LED数码管显示电路(图3),可以制成24小时或12小时循环显示的时钟电路。且该时钟可以由人工预置起始时刻,即电路插上电源后,可根据当时的实时时

22、刻,如手机或电视屏上显示的时刻,进行人工校时,之后即可作时钟用;若不进行人工预置(校时),该电路就自动从00,O0开始,以分为单位起始计时,此时,该电路可作人工守候定时器。该时钟电路不显示秒,而是以分钟开始的显示。该电路仍采用PIC16F84A芯片,当写入本文下面给出的程序后,即可作24小时时钟用。其使用方法如下:插上电源,LED数码管显示OO.O0,按下图3中的K1键,数码管全灭,松开K1键,再按下K1键,数码管从0(分位)开始计数,到达指定的分钟显示时,放开K1键,又按K1键,时位显示,到达指定的时显示时,放开K1,时钟即按人工预置起始时刻工作,操作十分简单。注意:如果预置时间的时位是从0

23、0开始而仅有分钟的有效值时,当预置分钟指定值后,仍要再按下K1键,使时位从00递增又回到00,时钟即可工作,否则时钟电路不会工作。(2)24小时的时钟C程序。根据图3编写的24小时时钟电路的功能,可绘出相关流程图(限于篇幅,这里从略,若需要,可根据PlC单片机C语言程序(4)一文的图5,09999的计数流程图,加上下面的C程序中的注释,扩展绘出),再由流程图编写出24小时的时钟C程序。该程序命名为pic0.5.C,其清单如下:#include#define PORTAIT(add.bit)(unsigned)(&add)*8+(bit))Static bit PORTA_0 PORTAIT(P

24、ORTA,0);/PIC16F84AStatic bit PORTA_1PORTAIT(PORTA,1);/A 位定义Static bit PORTA_2PORTAIT(PORTA,2);Static bit PORTA_3PORTAIT(PORTA,3);Static bit PORTA_4PORTAIT(PORTA,4);Unsigned int ttr=0;Unsigned char x=0,y=0,sign_a=0;Void key_server();Void display(unsigned,int x);Void display_set(unsigned int x);Void d

25、elay_1m()Void delay(unsigned long int k);Unsigned long int i;For(i=0;i0)进行d- 的100 次循环(因d=100),模拟仿真这种循环太费时。且在该循环语句while(d0)中, 又要调用延时函数delay(200), 使仿真更复杂。尽管这种仿真可以在MPLAB IDE 中完全正常运行,但是操作者等待时间太长。解决上述问题的最佳方法, 是改写程序pic07.C 中的一些参数,以快速完成程序模拟仿真的全过程。改写程序仍在MPLAB IDE(较高版本)集成环境下进行,改写的原则是不能减少C 程序的代码数(量),仅改写其中少数参数

26、值(值大的),即不改变程序的整体工作模式。比如,将pic07.C显示函数中说明语句unsigned int d=100, 的d 值改为3,d 值决定0 99 每个增量的时间,d=100,增量时间约1 秒, 同一循环操作时间大大减少,以便我们进入程序的其他运作。又如,将pic07.C 循环语句while(d0) 中的延时( 调用)delay(200) ;改为delay(4), 将无限循环语句while(1) 中调用显示函数display(x) ;中的if(x=99) 改为if(x=4)。这样整个程序的逻辑功能操作,便可较快地通过模拟调试全部完成。经上述改写后的程序重新命名为pic07a.C,其清

27、单如下:#include#define PORTAIT(add,bit)(unsigned)(&add)*8+(bit)Static bit PORT_2 PORTAIT(PORTA,2);Static bit PORT_3 PORTAIT(PORTA,3);Static bit PORT_4 PORTAIT(PORTA,4);/A口位定义Unsigned int x=0;Void delay(unsigned long int k)Unsigned long int i;For(i=0;i0)PORTA=0X1F;/秒不显示PORTB=SEG7unit_bit;/个位字段码送B口RA3=0;

28、/显示个位Delay(4);RA3=1;/关闭个位显示Delay(2);PORTB=SEG7ten_bit;/十位字段码送B口RA2=0;/显示十位Delay(4);RA2=1;/关闭十位显示Delay(2);d-;/d 从3开始减量,到零跳出Void main()TRISB=0X00;/B i/o初始化TRISA=0X10;PORTB=0X40;INTCON=0X00;/关闭中断PORTA=0X10;X=0;While(RA4)/判断RA4/RA4=0 跳出循环While(1)Display(x);/调显示函数x+;if(x=4)x=0;/if x=4 -x=0PIC单片机C语言程序设计(1

29、3)十四、城市交通路口管理的红、绿灯在城市大街的十字交通路口,都安置了各种由红、绿色高亮度LED组成的指示图案,用于管理机动车辆、非机动车辆和行人,使之能够安全、顺利地通过各自的路口道。这些红绿灯图案,多种多样。笔者以其中一种十字路口的红绿灯图案的控制为例,来说明PIC单片机C语言在城市交通灯管理中的应用。图55a是一种由红色高亮LED组成的掌形指示图案,路口显示该图案。表示此时该方向禁止行人通过。图55b、图55c分别是用绿色高亮LED组成的仿人形和仿自行车形的指示图案,在路口显示该图案,表示此时允许人们通行。图56是由红、绿色两种颜色的高亮LED组成的圆形指示图案(红、绿色分时显示), 以

30、提示是否允许机动车辆通行。上述指示图案均设在交通路13,以分时方式交替显示,各指示图案显示时间的长短,是根据不同路13的车流和人流的实际情况来设定的,一般在80秒1 40秒之间(特殊路口可长达180秒,甚至更久)。图55图56利用PIC16F877或PIC16F876单片机的端121位,加上相应的驱动电路,去分别驱动组成图55、图56所示指示图案的各个高亮红、绿色LED,使之按所需时序进行显示,便可实现上述功能。把它们用箱体装好,安装在交通路口的指定地点,就能够进行路口的交通管理了。PIC单片机C语言程序设计(14)十五、Pic单片机的A/D转换在电子技术中,传感器是一种很重要的器件,传感器的

31、种类也有多种,如温度传感器、光敏传感器、压力传感器,其特点是能把非电量,如温度、光度、压力等转换成相关的电量(电流或电压)。这些电量都是模拟量,可用Pic 单片机的A/D 转换,将上述的模拟量转换成数字量,再将数字量进行各种处理,如LED、LCD 显示。Pic16F87X 系列单片机, 具有A/D 转换的功能。Pic16F876/873 芯片为28 引脚, 有5 个模拟输入端的10 位A/D 转换(5 通道);Pic16F877 为40 引脚,有8 个模拟输入端的10位A/D 转换(8 通道)。Pic16F876/873 芯片的模拟输入端为AN0AN3,其引脚是 脚和脚AN4,几乎占用了Pic

32、16F876/873 所有的A 口。由于Pic 单片机的端口具有复用功能,所以上述的模拟输入口不会影响I/O 端口的通用特性。上述芯片的A/D 转换,都已模块化,具有10 位(二进制的)分辨率,所以完全可以满足大多数测量精度的要求,此外,还可利用Pic 单片机睡眠状态下进行A/D 转换(利用内部自带的RC 振荡作时钟),因在睡眠模式下,部分数字电路的开关噪声已停止,所以可获得更高的A/D 转换精度。Pic 单片机的A/D 转换功能的操作,远比本连载113 中介绍的各种功能的C 程序要复杂些,学会编写A/D 转换的C 程序,也是进一步学习Pic 单片机C 程序设计的重要内容之一。因为在编辑A/D

33、 转换的C 程序时,会用到芯片内部多个专用寄存器(控制模块),学会相关模块的使用方法,可为编辑其它复杂功能的C 程序建立良好的思维方法。1.Pic16F87X 的 A/D 转换必备知识 A/D 转换控制寄存器ADCON1ADCON1 是8 位的可读写的寄存器,如图59 所示,其功能是A/D 转换时,选择芯片引脚输入信号的类型(模拟量A 或数字量D),以及A/D 转换结果存放的格式(见下文)。图59ADCON1 的第6、5、4 位,在A/D 转换中未派上用场,读作“0”。 ADCON1 的第3、2、1、0 位(Bit3、Bit2、Bit1 和Bit0), 是管理Pic16F87X 引脚功能(A

34、或D)的选择(可参看相关书藉的A/D 转换引脚功能选择表,因该表占用版面多,这里略去),例如在下文C 程序中,设ADCON1=0x8a 时, 选择Pic16F873A 的AN0(RA0)、AN1(RA1)RA4(AN4)、RA5(AN5)为模拟量输入、(AN6、AN7 为数字量输入),AN3、AN2 参考电压设置端(十、一)。 A/D 转换结果寄存器ADRESH、ADRESL。因Pic16F87X 的A/D 转换值是10 位的二进制数(代码),而A/D 转换的结果是存放在指定的结果寄存器中,因结果寄存器是8 位的,所以A/D 转换结果的10 位数, 利用ADRESH存放A/D 的高字节;利用A

35、DRESL 存放A/D的低字节。存放方法是利用前述的ADCON1( 图59) 的第7 位(bit)ADFM 进行选择, 当令ADFM=1 时,A/D 转换结果的低8 位存放在ADREL 中;高两位存放在ADRESH 中;当令ADFM=0 时,A/D 转换结果的低两位存放在ADRESL 中,余下的高8 位存放在ADRESH 中,这由C 语言设计者自由选择。若对A/D 转换代码的分辨率要求不高(如实验程序),可取A/D转换的高8 位而舍去低2 位,以使C 程序简化。 A/D 转换控制寄存器ADCON0ADCON0 的功能是用于控制A/D 转换的操作,其相关位的功能如图60 所示。图60图中ADCO

36、NO 的第0 位(Bit0),ADON是A/D 转换允许位(俗称打开A/D 转换),当令ADON=1 时,打开的A/D 转换;AD0N=0 时,关闭A/D 转换。ADCON0 的第1 位, 未使用读作0。ADCON0 的第2 位也是重要的功能位:在ADON=1 时,若令=1,启动A/D 转换;若令=0,A/D 转换完成。ADCONO 的53 位(Bit5、Bit4 和Bit3)CHS2、CHS1、CHS0 是A/D 转换模拟通道的选择,对Pic16F873A 芯片,有下述关系:ADCONO 的第7、6 位即ADCS1和ADCS0,是A/D 转换时钟选择位,有以下关系:此外,在A/D 转换时,还

37、会用到外围接口中断标志寄存器PIR1 的标志位ADIF(Bit6)和外围接口中断使能寄存器PIE1 的使能位ADIE。当令ADIF=1 时, 代表A/D 转换已完成;ADIF=0 时,A/D 转换未完成。当令ADIE=1 时, 打开A/D 转换中断;ADIE=0 时,关闭A/D 转换中断。PIC单片机C语言程序设计(15)本文是讲座单片机C 语言程序设计的结束篇,为了帮助大家更好地掌握前面所学的知识,我们将归纳性地介绍初学者用C 语言编辑PIC 单片机实用程序时应具备的思维方法和基本知识,并通过下面的实例进行一次小结,以期对大家今后深入学习PIC 单片机C 语言程序设计有所帮助。十六、PIC单片机C语言程序的组成一个完整的PIC 单片机C 语言源程序应包括:包含头文件、变量定义、常量说明、函数定义、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论