没有合适的资源?快使用搜索试试~ 我知道了~
PIC单片机C语言入门实例.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 157 浏览量
2021-10-02
16:06:53
上传
评论
收藏 218KB DOC 举报
温馨提示
试读
25页
单片机技术
资源推荐
资源详情
资源评论
PIC 单片机 C 语言入门
1.2.1 认识 PIC 单片机 C 语言
用 C 语言来开发单片机系统软件最大的好处是编写代码效率高。软件调试直观、维护升级方便、
代码的重复利用率高、便于跨平台的代码移植等等,因此 C 语编程在单片机系统设计中已得到越来
越广泛的应用。
但在单片机上用 C 语言写程序和在 PC 机上写程序绝对不能简单等同。珊在的 PC 机资源十分
丰富,运算能力强大,因此,程序员在写 PC 机的应用程序时,几乎不用关心编译后的可执行代码
在运行过程中需要占用多少系统资源,也基本不用担忧运行效率有多高。写单片机的 C 语言程序最
关键的一点是单片机内的资源非常有限,控制的实时性要求又很高,因此,如果没有对单片机体系
结构和硬件资源作详尽的了解,以笔者的愚见认为是无法写出高质量实用性很高的 C 语程序。
本书围绕 PIC 中档系统单机来展开讨论的,Microchip 公司自己没有针对 PIC 中档系列单片机
的 C 语言编译器,但很多专业的第三方公司有众多支持 PIC 单片机的 C 语言编译器提供,常见的有
Hitech、CCS、IAR、Bytecraft 等公司。其中笔者最常用的是 Hitech 公司的 PICC 编译器,它稳定可
靠,编译生成的代码效率高,在用 PIC 单片机进行系统设计和开发的工程师群体中得到广泛认可。
其正式完全版软件需要购置,但在其网站上有限时的试用版供用户评估。另外, Hitech 公司针对广
阔 PIC 的业余爱好者和初学者,还提供了完全免费的学习版 PICC-Lite 编译器套件。它的使用方式
与完全版相同,只是支持的 PIC 单片机型号限制在 PIC16F84、PIC16F877 和 PIC16F628 等几款。这
几款 Flash 型的单片机因其所具备的丰富的片上资源而最适用于单片机学习入门,因此,笔者建议
感兴趣的读者可以从 PICC-Lite 入手掌握 PIC 单片机的 C 语言编程。
我们一起来认识训练项目 2——跑马灯的仿真与演示的程序 LEDS.C。
1 #include"pic.h"
2 int a; //定义整型变量 a
3 void main( )
4 { TRISB=0X00; //定义端口 B 为输出模式
5 while(1) //while 循环语句
6 { PORTB=0XFE; //1111 1110
7 for(a=1000;a>0;a--); //for 循环语句
8 PORTB=0XFD; //1111 1101
9 for(a=1000;a>0;a--); //for 循环语句
10 PORTB=0XFB; //1111 1011
11 for(a=1000;a>0;a--); //for 循环语句
12 PORTB=0XF7; //1111 0111
13 for(a=1000;a>0;a--); //for 循环语句
14 PORTB=0XEF; //1110 1111
15 for(a=1000;a>0;a--); //for 循环语句
16 PORTB=0XDF; //1101 1111
17 for(a=1000;a>0;a--); //for 循环语句
18 PORTB=0XBF; //1011 1111
19 for(a=1000;a>0;a--); //for 循环语句
20 PORTB=0X7F; //0111 1111
21 for(a=1000;a>0;a--); //for 循环语句
22 }
1
23 }
说明:
第 1 行:#include"pic.h"是文件包含语句,表示把语句中指定文件的全部内容复制到此处,与
当前的源程序文件链接成一个源文件。该语句中指定的文件 pic.h 是 Hitech-PICC 编译器提供的头文
件,保存在“C:\HT-PIC\include”路径下,该文件包含了对 PIC 单片机特殊功能寄存器 SFR 和位名称
的定义。在编写每一个程序时,首先编写的一条语句就是#include"pic.h"。
第 2 行:int a。是定义一个整型变量 a,具体什么是整型变量?有何功能?请看数据与数据类
型号中的介绍。
第 3 行:void main( )。定义主函数 void main( )。其是 C 语言程序中必不可少的主函数,也是程
序开始执行的第一个函数。函数一般分成两个部分,一个部分为函数名:main,另一个部分为函数
体:从第 4 行的{到 23 行的}为止。
第 4 行:TRISB=0X00。是给单片机的 B 端口方向寄存器赋值,使 B 端口数据方向为输出方向,
具体 TRISB 寄存器功能请查看【知识链接 3】PIC 单片机 I/O 接口及其应用。
第 5 行:while(1)。是 while( ) 循环语句。
第 6 行:PORTB=0XFE。是给单片机的 B 端口寄存器赋值,使 B 端口寄存器为 0XFE,具体
PORTB 寄存器功能请查看【知识链接 3】PIC 单片机 I/O 接口及其应用。
第 7 行:for(a=1000;a>0;a--)。是 for 循环语句。
第 8—21 行都与第 6、7 行相类似,在此就不再重复,int 、while、for 等 C 语言知识接下将一
一介绍。
1.2.2 数据与数据类型
数据是电脑的对象,任何程序设计都要进行数据处理。具有一定格式的数字或数值称为数据,
数据的不同格式称为数据类型。
在 C 语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类,如
图 1-2-1 所示。
图 1-2-1 C 语言的数据类型
在进行 PIC 单片机程序设计时,支持的数据类型与编译器相关。Hitech-PICC 编译器所支持的
数据类型如表 1-2-1 所示,其遵循 Little-endian 标准,多字节变量的低字节放在存储空间的低地址,
高字节放在高地址。
2
数据类型
单 精 度 型
〔 float 〕
双 精 度 型
〔 double 〕
整 型
〔 int 〕
实 型 〔 浮 点
型〕
字 符 型
〔 char 〕
基本类型
构造类型
枚 举 类 型 号
〔 enum 〕
数组类型
结 构 体 类 型
〔 struct 〕
共 用 体 类 型
〔 union 〕
指针类型
空 类 型
〔 void 〕
表 1-2-1 Hitech-PICC 编译器所支持的数据类型
序号 数据类型 名称 长度〔位
数〕
值 域
1
位类型
bit 1B
0 或 1
2
有符号字符型
char 8B -128 ~ +127
3
无符号字符型
unsigned char 8B 0 ~ 255
4
有符号整型
short 16B -32768 ~ +32767
5
无符号整型
unsigned short 16B 0 ~ 65535
6
有符号整型
int 16B -32768 ~ +32767
7
无符号整型
unsigned int 16B 0 ~ 65535
8
有符号长整型
long 32B -2 147 483 648 ~ +2 147 483 647
9
无符号长整型
unsigned long 32B 0 ~ 4294 967 295
10
浮点型
float 24B -2 147 483 648 ~ +2 147 483 647
11
双精度浮点型
double
24B 或 32B
-8 388 608 ~ +8 388 607
或
-2 147 483 648 ~ +2 147 483 647
注:Hitech-PICC 编译器缺省认定 double 型变量为 24 位长,但可以改变编译选项改成 32 位长
1.2.3 常量与变量
单片机程序中处理的数据有常量和变量两种形式,二者的区别在于:常量的值在程序执行期间
是不能发生变化的,而变量的值在程序执行期间可以发生变化。
1.常量
在程序运行的过程中,其值不能改变的量称为常量。常量的数据类型有整型、浮点型、字符型
和字符串型。
〔1〕整型常量可以表示为十进制数、十六进制数或八进制数等,例如:十进制数 12、-60 等;
十六进制数以 0x 开关,如 0x13、0xAB 等;八进制数以字母 o 开关,如 o14、o17 等。假设要表示
长整型,就在数字后面加字母 L,如 104L、o34L、0Xf340L 等。
〔 2 〕 浮 点 型 常 量 可 以 分 为 十 进 制 表 示 形 式 和 指 数 表 示 形 式 两 种 , 如
0.888、3345.345、123e3、-2.4e-2 等。
〔3〕字符型常量是用单引号括起来的单一字符,如‘a’、‘9’等。
〔4〕字符串型常量是用双引号括起来的一串字符,如“test”、“ok”等。字符串是由多个字符连
接起来组成的。
2.变量
在程序运行中,其值可以改变的量称为变量。一个变量主要由两部分构成;一个是变量名,一
个是变量值。每个变量都有一个变量名,在内存中占据一定的存储单元〔地址〕,并在该内存单元
中存放该变量的值。
下例为对符号常量和变量进行说明:
1 #define CONST 60
2 void main( )
3 { int variable, result;
4 variable = 20;
5 result = variable * CONST;
3
6 }
第 1 行:#define CONST 60。这一行定义了一个符号常量 CONST,其值为 60。这样在后面的
程序中,但凡出现 CONST 的地方,都代表常量 60。
第 2 行:variable 和 result 就是变量。它们的数据类型为整型〔int〕。
注意:符号常量与变量的区别在于,符号变量的值在作用域〔本例中为主函数〕中,不能改变
也不能用等号赋值,习惯上,总将符号常量名用大写,变量名用小写,以示区别。
〔1〕变量的定义
变量必须先定义后使用,用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译
系统才能为变量分配相应的存储空间。变量的定义格式如下:
[存储种类] 数据类型 [存储器类型] 变量名表;
其中,数据类型和变量名表是必须的,存储种类和存储类型是可选项。
存储种类有四种:auto〔自动变量〕、extern〔外部变量〕、static〔静态变量〕和 register〔寄
存器变量〕。默认类型为 auto〔自动变量〕。
例如:
int a ; /*定义 a 为整型变量*/
int m,n; /*定义 m 和 n 为整型变量*/
float x,y,z; /*定义 x,y,z 单精度实型变量*/
char ch; /*定义 ch 为字符变量*/
long int t; /*定义 t 为长整型变量*/
static int r; /*定义 r 为静态的整型变量*/
进行变量定义时,应注意以下几点:
① 允许在一个数据类型标识符后,说明多外相同类型的变量,各变量名之间用逗号隔开;
② 数据类型标识符与变量名之间至少用一个空格隔开;
③ 最后一个变量名后必须以分号“;”结尾;
④ 变量说明必须放在变量使用之前,一般放在函数体的开头部分;
⑤ 在同一个程序中变量不允许重复定义。
例如:
int x,y,z;
int a,b,x; /*变量 x 被重得定义*/
〔2〕变量的初始化
在定义变量的同时可以给变量赋初值,称为变量的初始化。变量初始化的一般格式为:
数据类型标识符 变量名 1=常量 1[,变量名 2=常量 2,…………,变量名 n=常量 n];
例如:
int m=3,n=5; /*定义 m 和 n 为整型变量,同时 m,n 分别赋初值 3,5*/
float x=0,y=0,z=0; /*定义 x,y,z 为单精度实型变量,同时 x,y,z 都赋初值为 0*/
char ch=’a’; /*定义 ch 为字符型变量,同时赋初值字符’a’*/
long int a=1000,b; /*定义 a,b 为长整型变量,同时 a 赋初值 1000*/
〔3〕整型变量
整型变量的基本类型符为 int,可以根据数值的范围将整型变量定义为基本整型变量、短整型
变量或长整型变量。
① 基本整型变量用 int 表示;
4
② 短整型变量用 short int 表示〔或用 short〕表示;
③ 长整型变量用 long int 表示〔或用 long〕表示。
在电脑〔或单片机〕中数据是以二进制形式表示的,基本整型变量占用内存 2 个字节,即 16
位。16 位中最左边的一位表示符号,该位 0,表示正数;该位 1,表示负数。一个基本整型变量的
值范围为-215~〔215-1〕,即-32 768~32 767。实际应用时注意整型变量的值不能超出范围,
否则容易出错,为了充分利用变量表示数据的范围,可以将变量定义为“无符号”类型。归纳起来,
可以使用以下 6 种整型变量:
带符号基本整型变量 [signed] int
无符号基本整型变量 unsigned int
带符号短整型变量 [signed] short int
无符号短整型变量 unsigned short [int]
带符号长整型变量 [signed] long [int]
无符号长整型变量 unsigned long [int]
如果在定义整型变量时不指定 unsigned,则隐含为有符号〔signed〕。
假设定义两个变量 a 和 b 如下:
int a;
usigned int b;
则变量 a 的取范围为了-32 768~32 767。而变量 b 的取值范围为 0~65 535。图 1-2-
2〔a〕表示有符号的基本整型变量 a 的最大值〔32 767〕,图 1-2-2〔b〕表示无符号的基本整
型变量 b 的最大值〔65 535〕。
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
〔a〕有符号整型变量
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
〔b〕无符号整型变量
图 1-2-2 变量 a 和 b 的最大值
〔4〕实型变量
实型数据与整型数据在内定中的存储方式不同,实型数据是按照指数形式存放的,系统把一个
实数分成小数和指数两个部分分别进行存放。指数部分采用标准化的指数形式,例如:-21.34638
在内存中的存放形式如图 1-2-3 所示。实型号变量分为单精度〔float〕、双精度〔double〕和长双精
度〔long double〕,但 Hitech-PICC 编译器只支持单精度〔float〕和双精度〔double〕两种,具体规
则如表 1-2-1 所示。
- .2134638 2
图 1-2-3 实数在内存中的存放形式
5
=32 767
符号位
表示 数据
的最高位
=65 535
符号 小数部分 指数
- .2134638 2
剩余24页未读,继续阅读
资源评论
zhangao_fengg
- 粉丝: 17
- 资源: 5万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Yolov8改进---注意力机制:Polarized Self-Attention,效果秒杀CBAM、SE.html
- 人才网站设计-asp.net+sql-(系统源码)
- asp.net+sql人才网站设计-含系统源码
- C#应用的用户配置窗体方案
- python实现绘制爱心图形的代码
- JAVAWEB项目-校园订餐系统项目源码.zip
- flink-1.19.0-bin-scala-2.12.tgz flink-1.16.3-bin-scala-2.12.tgz
- javaWeb项目-物资管理系统项目源码.zip
- javaweb项目-物流配货项目源码.zip
- 使用C++基于颜色纹理特征的人脸活体检测实现-附项目源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功