PIC单片机C语言编程入门

上传人:gao****ang 文档编号:174456582 上传时间:2022-12-15 格式:DOCX 页数:9 大小:27.96KB
收藏 版权申诉 举报 下载
PIC单片机C语言编程入门_第1页
第1页 / 共9页
PIC单片机C语言编程入门_第2页
第2页 / 共9页
PIC单片机C语言编程入门_第3页
第3页 / 共9页
资源描述:

《PIC单片机C语言编程入门》由会员分享,可在线阅读,更多相关《PIC单片机C语言编程入门(9页珍藏版)》请在装配图网上搜索。

1、PICC 入门笔记PIC单片机C语言编程入门笔记、C语言基础复习没C语言基础看起来可能有点困难。C程序的语句语句名称一般形式说明表达式语句表达式;表达式语句由表达式加上分号“;”组成函数调用语 句函数名(实际参数表);实际参数、形式参数一个概念要理解控制语句附件1控制语句用于控制程序的流程复合语句多个语句用括号括起空语句只有分号“;”组成的语句称为空语句赋值语句变量=(变量=表达式);赋值表达式再加上分号构成的表达式语 句数据输出语 句printf( “格式控制字符 串”)附件1(1) 条件判断语句if语句,switch语句(2) 循环执行语句do while 语句, while 语句, fo

2、r 语句(3) 转向语句break 语句,goto 语句,continue 语句,return 语句关系运算符小于小于或等于大于大于或等于等于不等于=!=关系运算符都是双目运算符,其结合性j ,=的优先级相同,咼于=和!=,均为左结合。在六个关系运算符中, =和!=的优先级相同。关系表达式的值是“真”和“假”,用“1”和“0”表示。逻辑运算符与运算或运算非运算&|!&和或运算符|均为双目运算符。具有左结合性。非运算符”!”为单目运算符, 具有右结合性,逻辑运算的值也为“真”和“假”两种,用1”和“0 ”来表示。单目运算符算术运算符关系运算符逻辑运算符赋值运算符第三章: 控制语句1if语句C语言

3、的if语句有三种基本形式。1、如果表达式的值为真,则执行其后的语句, 否则不执行该语句。 if(表达式)语句;2、如果表达式的值为真,则执行语句 1,否则执行语句 2 。lf(表达式)语句 1;else语句 2;3、依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳 到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句N。 然后继续执行后续程序。lf(表达式1)语句 1;else if(表达式2)语句 2;else if(表达式3)语句 3;else if(表达式m) 语句 m;else 语句 n;2、条件运算符和条件表达式 由条件运算符组成条件表达式的一般形式为

4、:表达式1? 表达式2: 表达式3 其求值规则为:如果表达式 1 的值为真,则以表达式 2 的值作为条件表达式的 值,否则以表达式3的值作为整个条件表达式的值。例:max=(ab)?a:b;意义:如果在条件语句中,只执行单个的赋值语句时, 常可使用条件表达式来 实现。不但使程序简洁,也提高了运行效率。3、switch 语句C语言还提供了另一种用于多分支选择的switch语句,其一般形式为: switch(表达式)case 常量表达式 1: 语句 1;case 常量表达式 2: 语句 2;case 常量表达式 n: 语句 n;default : 语句 n+1;其语义是:计算表达式的值。 并逐个与

5、其后的常量表达式值相比较,当表达式 的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断, 继续执行后面所有 case 后的语句。 如表达式的值与所有 case 后的常量表达式 均不相同时,则执行 default 后的语句。4、循环结构程序 while语句 while语句的一般形式为:while(表达式)语句;特点:判断后执行说明:1. 循环体如包括有一个以上的语句,则必须用括起来, 组成复合语句。2. 应注意循环条件的选择以避免死循环。dowhile 语句do-while 语句的一般形式为:do语句;while(表达式);do-while 语句的语义是:先执行循环体语句一次,

6、 再判别表达式的值,若为真(非 0)则继续循环,否 则终止循环。do-while语句和while语句的区别在于do-while是先执行后判断,因此do-while 至少要执行一次循环体。而while是先判断后执行,如果条件不满足,则一次循 环体语句也不执行。for语句for语句是C语言所提供的功能更强,使用更广泛的一种循环语句。其一般形式 为:for(表达式1 ;表达式2;表达3) 语句;表达式1-通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语 句外给循环变量赋初值,此时可以省略该表达式。表达式 2 通常是循环条件,一般为关系表达式或逻辑表达式。 表达式 3 通常可用来修改循环变

7、量的值,一般是赋值语句。1. 首先计算表达式 1 的值。2. 再计算表达式 2的值,若值为真(非 0)则执行循环体一次, 否则跳出循环。3然后再计算表达式3的值,转回第2步重复执行。在整个for循环过程中,表 达式 1 只计算一次,表达式 2和表达式, 3 则可能计算多次。转移语句在C语言中提供了 4种转移语句:goto,break, continue和return1 goto 语句一般不使用goto 语句也称为无条件转移语句,其一般格式如下: goto 语句标号;其中语 句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(: )。 语句标号起标识语句的作用,与 goto 语

8、句配合使用。2.break 语句break语句只能用在switch语句或循环语句中,其作用是跳出switch语句或跳 出本层循环,转去执行后面的程序。由于break语句的转移方向是明确的,所以 不需要语句标号与之配合。break语句的一般形式为:break;使用break语句 可以使循环语句有多个出口,在一些场合下使编程更加灵活、方便。3. con ti nue 语句continue 语句只能用在循环体中,其一般格式是: continue;其语义是:结束本次循环,即不再执行循环体中 continue 语句之后的语句,转 入下一次循环条件的判断与执行。应注意的是, 本语句只结束本层本次的循环,

9、并不跳出循环。第四章: 数组1数组定义如: int a10,b3+2,c7+FD; FD 是常量说明:不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或 常量表达式。2数组元素的表示方法 数组元素的一般形式为: 数组名下标如: a5,ai+j,ai+说明:下标可以是变量或变量表达式3初始化赋值一般形式为:static类型说明符 数组名常量表达式=值,值值; 例: static int a10= 0,1,2,3,4,5,6,7,8,9 ;第五章: 函数 一定义的一般形式 1无参函数的一般形式 过程 如: void delay(void) 2.有参函数的一般形式类型说明符 函数名(形式参

10、数表) 型式参数类型说明类型说明 语句说明: return 返回值命令 二函数调用的一般形式为:可以用以下几种方式调用函数:1、z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。 另一种为现代格式,其一般形式为:类型说明符 被调函数名(类型 形参,类型 形参); 函数的值只能通过return语句返回主调函数。return语句的一般形式为: return 表达式;或者为: return (表达式);在C语言中,对变量的存储类型说明有以下四种: auto自动变量register寄存器变量extern外部变量static静态变量第六章:指针1指针变量的类型说明其一般形式为: 类型说明

11、符 *变量名; staic int *p2/*p2 是指向静态整型变量的指针变量*/说明:定义时要使用 * 号2指针变量的赋值方法 (1)指针变量初始化的方法 int a; int *p=&a; /*定义并赋值*/ int a5,*pa=a /或写成: int a5,*pa=&a0数组名也是数组的首地址(2)赋值语句的方法 int a;int *p;/定义p=&a;/赋值说明:定义后,再赋值这时不能加 * 号,它是一个指针变量 3指针变量的运算取地址运算符&,取内容运算符*int a=5,*p=&a;这里的*P是定义指针变量并赋值&a是表示指数据开的地址printf (%d,*p);这里的*卩

12、是表示取指针P地址中的内容4加减算术运算对于指向数组的指针变量,可以加上或减去一个整数n。设pa是指向数组a 的指针变量,则 pa+n , pa-n , pa+ , +pa , pa- -pa 运算都是合法的。第七章:枚举,位运算 1位运算符 & 按位与 | 按位或 人按位异或 取反 右移二、汇编转向 PICC1.话言代码头文件:#includevpic.h,它是很多头文件的集合。寄存器赋值比较:C语言汇编语言PORTA=200MOVLW200MOVWFPORTA说明: C 操作一个寄存器时候,不用考虑页面的问题,一切由 C 自动完成。 而汇编不行。位操作的比较:C语言汇编语言RA0=0BCF

13、 PORTA, 0RA2=1BSF PORTA,2说明: C 中不用考虑页面问题。内存分配问题:C语言汇编语言INT X=5000在汇中定义 个内存是 件很小心INTY=1000的问题,要考虑太多的问题,C语言INT Z=X/Y不需要考虑太多。PICC 简单延时程序:void delay(uint m)uint i,j;for(i=0;im;i+) for(j=0;j100;j+);1、PIC单片机的c语言原程序基本框架特别注意:main函数必须是一个没有返回的死循环。#include /包含单片机内部资源预定义 第一步 #include “pc68.h”/包含自定义头文件/声明本模块中/定义

14、变量/函数和子程序_CONFIG (HS & PROTECT & PWRTEN & BOREN & WDTDIS); / 定义芯片工作时的配置位void SetSFR(void); 所调用的函数类型 void Clock(void);void KeyScan(void); void Measure(void);void LCD_Test(void);void LCD_Disp(unsigned char);unsigned char second, minute, hour; bit flag1,flag2;void main(void) SetSFR();PORTC = 0x00;TMR1H

15、 += TMR1H_CONST;LED1 = LED_OFF;LCD_Test();while(1)/程序工作主循环asm(“clrwdt”);/清看门狗Clock();/更新时钟KeyScan();/扫描键盘Measure();/数据测量SetSFR();/刷新特殊功能寄存器2、 PICC 中常用变量类型bit 1布尔型位变量,0 或1 两种取值char 8有符号或无符号字符变量,PICC缺省认定char型变量为无符号数,但可以通过编译选项改为有符号字节变量unsigned char 8 无符号字符变量3、PICC对数据寄存器bank的管理如果没有特别指明,所定义的变量将被定位在bankO如

16、:bitflag1,flag2除了bankO内的变量声明时不需特殊处理外,定义在其它bank内的变量前面必 须加上相应的bank序号。女如bank2 bitflag1,flag2 ;为避免频繁的bank切换以提高代码效率,尽量把实现同一任务的变量定位在同 一个bank内4、PICC 中的局部变量PICC把所有函数内部定义的auto型局部变量放在bankO。为节约宝贵的存储 空间,它采用了一种被叫做“静态覆盖”的技术来实现局部变量的地址分配。但这时不能 出现函数递归调用(自已调用自己)既然所有的局部变量将占用bankO的存储空 间,因此用户自己定位在bankO内的变量字节数将受到一定的限制,在实

17、际使用 时需注意。5、PICC 中的位变量bit型位变量只能是全局的或静态的。PICC将把定位在同一bank内的8个位 变量合并 成一个字节存放于一个固定地址6、PICC 的其它变量修饰关键词(1)extern 外部变量声明例: externbank1unsignedcharvar1, var2;声明bank1外部变量(2)volatile 易变型变量声明 例: volatile unsigned char STATUS 0x03 ;volatile bit commFlag ;说明:在单片机中,作为输入的10端口其内容将是随意变化的;在中断内被 修改的变量相对主程序流程来讲也是随意变化的;很

18、多特殊功能寄存器的值也 将随着指令的运行而动态改变。所有这种类型的变量必须将它们明确定义成 “volatile 类型( 3)const 常数型变量声明例: const unsigned char name=”This is a demo” ; /定 义一个常量字符串( 4)persistent 非初始化变量声明例: persistent unsigned char hour,minute,second; /定义 时分秒变量按照标准C语言的做法,程序在开始运行前首先要把所有定义的但没有预置初 值的变量全部清零。PICC提供了 “persistent”修饰词以声明此类变量无需在 复位时自动清零。7

19、、 PICC 中的指针(1)PICC在编译C原程序时将指向RAM的指针操作最终用FSR来实现 间接寻址。这样就势必产生一个问题:FSR能够直接连续寻址的范围是256字节( bank0/1或bank2/3),要覆盖最大512字节的内部数据存储空间,又该如何让定义指针? PICC 还是将这一问题留给编程员自己解决:在定义指针时必须明确指定该指 针所适用的寻址区域,例如:un sig ned char *ptrO;/定义覆盖 ban kO/1 的指针bank2 unsigned char *ptr1; /定义覆盖bank2/3 的指针 bank3 unsigned char *ptr2; /定义覆盖bank2/3 的指针(2)指向ROM常数的指针如果一组变量是已经被定义在ROM区的常数,那么指向它的指针可以这样定 义:const unsigned char company=”Microchip”; /定义ROM 中的常 数const unsigned char *romPtr; /定义指向ROM 的指针

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!