C51程序设计基础解析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长度上比较:高级语言比汇编语言长15%~200%; 执行时间上比较:高级语言比汇编语言增长50%~300%。 C51用于编写复杂的大型程序,对要求反应灵敏、控制及 时,实时检测等控制系统都是用汇编语言和C语言联合编 写的。对时钟要求严格时,使用汇编语言是唯一的方法。
1.3 C语言程序设计知识
简单C程序举例 void main( ) { int b ,a=1; // a表示一个整型变量,变量名为a // ;为语句结束符号 b=++a; // a的值加一变为2,然后将a的值赋给b }
变量
变量有3个相关参数:变量名、变量值、变量地址。 • 变量名由字母、数字、下划线组成,首字母必 须是字母或下划线。 • 在程序定义变量时首先要选择它的数据类型, 一个变量可能有多大值,要几个字节能存下, 在够用的情况下,尽量选一个字节的char。 例: bit b_Start; char c_Start; int i_Start; • 变量使用前必须进行定义。
本课程主要内容
• 单片机基础知识(复习) • C51编程语言及开发环境Keil uVision • 功能模块的C语言编程实现
MCS-51系列单片机的结构
(1)面向控制的8位CPU; (2)128B的片内数据存储器; (3)可以寻址64KB的片外程序存储器; (4)可以寻址64KB的片外数据存储器; (5)32根双向和可单独寻址的I/O线; (6)一个全双工的异步串行口; (7)两个16位定时/计数器; (8)5个中断源,两个中断优先级; (9)有片内时钟振荡器; (10)采用高性能HMOS生产工艺生产; (11)有布尔处理(位操作)能力; (12)含基本指令111条,其中单机器周期指令64种。
位数 字节数 32 4
32 32 1 8 16 4 4 1 2
值域 -2147483648~ 2147483647 0~4294967295 0.175494E- 38 ~0.402823E+38 0~1 0~255 0~65535
单片机中使用最多的是char,int型,默认为有符号型。 sbit ,sfr ,sfr16是C51对C的扩展。
主要内容:
• 单片机程序设计语言 • 单片机汇编语言与C语言的特点 • C语言程序设计知识(复习)
1.1 单片机程序设计语言
(1)机器语言 如: 7401 7802 38 :机器可以识别的语言 0111010000000001 0111100000000010 00111000
(2)汇编语言:由指令助记符书写的语言 如: MOV A, #01H MOV R0,#02H ADD A, R0 (3)C语言:通用程序设计语言,由函数组成 如: void main( ) { int m; m=1+2; }
三种语言的特点
• 机器语言:计算机可以识别,直接面向硬件、程序代码短、
可直接运行、运行速度快、但难懂、难记、开发慢;
• 汇编语言:必须“翻译”成机器语言,直接面向硬件、运
行速度快、但通用性差、不易移植;
容易理解,通用性好、易移植。
• C语言:使用了与人的思维更接近的关键字和操作函数,
应用C语言设计单片机程序可以大大加快开发速度,增强程 序可读性,便于修改、扩充、移植,是目前开发人员用的 最多的一种单片机开发语言。
MCS-51系列单片机的内部总体结构
8 8 ROM/EPROM
微处理器 (运算部 件)
数据存储 器RAM B
P0口
P2口
程序存储 器
VCC
VSS
XTAL1 控制部件 XTAL2 P1口
串 行 口
定 时 / 计数器
中断 系统
特殊功 能寄存 器 ( SFR)
P3口
PSEN EA
ALE RESET
8
8
第一讲 C51程序设计基础
关系运算符
运算符 > < == >= <= != 范例 a>b a<b a==b a>=b a<=b a!=b 说 明 测试a是否大于b 测试a是否小于b 测试a是否等于b 测试a是否大于或等于b 测试a是否小于或等于b 测试a是否不等于b
结果为逻辑值真“1”、假“0”。
例:设x=4,y=3,z=2 ,则x>y的值为1,x>y>z的值 为0。(左结合性)
• 一般当程序必须作多选1时,可以采用switch语句。
break:是跳出循环的命令,任何由switch、for、 while、do-while构成的循环,都可以用break来跳 出。 必须注意的是break一次只能跳出一层循环,通常都和if 连用,当某些条件成立后就跳出循环。 default:当所有case的条件值都不成立时,就执行 default所指定的动作,作完后也要使用break指令跳出 switch循环。 范例 SwitchDemo.c(P58)
果与某个条件值相符合,则执行该case的动作,之后一 定要写break退出循环。
• 如果所有的条件值都不符合,则执行default的动作,每
一个动作之后一定要写break,否则会继续执行。
Hale Waihona Puke Baidu
• 另外case之后的条件值必须是数据常数,不能是变量,
而且不可以重复,即条件值必须各不同,如果有数种 case所做的动作一样时,也可以写在一起,即上下并列。
1.3.3 C语言的基本运算符--算术运算符
运算符
+ * / %
范例
a+b a-b a*b a/b a%b
说 明
a变量值和b变量值相加 a变量值和b变量值相减 a变量值乘以b变量值 a变量值除以b变量值 a变量值除以b变量值的余数
赋值运算符
运算符
= += -= *= /= %=
范例
a=6 a+=b a-=b a*=b a/=b a%=b
说 明
将6赋值给a变量,即a变量值等于6 等同于a=a+b,将a和b相加的结果又存回a 等同于a=a-b,将a和b相减的结果又存回a 等同于a=a*b,将a和b相乘的结果又存回a 等同于a=a*b,将a和b相除的结果又存回a 等同于a=a%b,a值除以b值的余数又存回 a
• 有两个操作数的运算符都可写成复合形式 • 变量 运算符 =变量 等效为 变量=变量 运算符 变量 • x>>=y 等效为 x=x>>y
单片机C51程序设计教程与实验
主讲教师:董蕴华 实验指导教师:杨其锋
教学安排
• 本课程共45学时(理论25学时,实验20学
时) • 课程性质:考查 本课程考试以应用程序设计 作为考查的评分依据
学习本课应具备的基础知识
学习本课程应具备的基础知识 ☆ 单片机原理及应用 ☆ C语言程序设计
学习本课应具备的硬件 ☆ 实验板一块 ☆ 程序下载线一条
条件运算符:表达式1?表达式2:表达式3
条件运算符表达式的运算规则:如果表达式1的值为真, 那么整个表达式的值就是表达式2的值,否则是表达式3 的值。 各种运算符时,要考虑运算符的优先级及结合性。(P51)
1.3 C51控制流
• 顺序结构 • 选择结构 • 循环结构
选择结构
(1) if (条件表达式) { 动作 } 如果条件表达式的值为真(非零数), 则执行{ }内的动作,如果条件表达式为假, 则略过该动作而继续往下执行。
注意:汇编语言中字节做与或非运算(ANL ORL XRL CPL ) 为按位操作。
位操作
位操作可大大提高单片机程序的运行速度,方便用户编程, 经常用到。
运算符 范 例 ︱ & ^ ~ >> << a︱b a&b a^b ~a a>>b a<<b 说 明 a和b按位作OR运算 a和b按位作AND运算 a和b按位作XOR运算 将a的每一位取反 将a按位右移b个位,左侧补“0”,溢出舍去 将a按位左移b个位,右侧补“0”,溢出舍去
(4) switch-case语句
switch (条件表达式) { case条件值1: case条件值2: case条件值3: default: }
动作1 break;
动作2 break;
动作3 break; 动作4 break;
• switch内的条件表达式的结果必须为整数或字符。 • Switch用条件表达式的值来与各case的条件值对比,如
注意:C51中没有循环移位,需自己编程实现。
自增减运算
• • • • • • • •
++,--,相当于变量=变量+1 例:设x=0x23 则 y=x++; //y=23H, x=24H y=++x; //y=24H, x=24H y=x--; //y=23H, x=22H y=--x; //y=22H, x=22H x++是先赋值,后自加; ++x是先自加,后赋值
逻辑运算符
运算符 && 范例 a&&b 说 明 a和b逻辑与,两个变量都是“真”, 结果才为 “真”否则结果为“0”
||
!
a||b
!a
a和b作逻辑OR,只要有任何 一个变量为“真”,结果就为“真” !
将a变量的值取反,即原来为“真”则 变 “假”,为“假”则变为真
“0”代表假,“非0”代表真 例:a=3, b=6 , 则 !a的值为0 a&&b的值为1
C的优势
• C语言作为一种方便语言得到广泛支持,多个硬件
• •
开发都用C,如单片机、DSP、ARM。 C本身不依赖于机器硬件系统,基本上不作修改就 可将程序从不同单片机中移植过来。 C提供很多数学函数并支持浮点运算,开发效率高。
1.2 C51与ASM-51相比的优势
• 对单片机的指令系统不要求了解,仅要求对8051
逗号运算符
• 表达式1,表达式2,‥‥表达式n • 表达式按从左到右的方式运算,整个表达式的值 • •
取决于最后一个。 例:unsigned char x=100; unsigned char y; y=(x=x/10,x/2) //先计算 x/10=10,然后计算 x/2=5,所以y=5
条件运算符
(2) if (条件表达式) { 动作1 } else { 动作2 } 如果条件表达式为真,则执行动作1,略过else 的部分,接着往下执行,如果条件表达式为假, 则略过if的部分而执行else的动作2,然后再往下 执行。 范例 IfDemo2.C (P54)
(3)if (条件表达式1) if (条件表达式2) if (条件表达式3) { 动作A } else { 动作B } else { 动作C } else { 动作D } 动作 A:条件表达式1,2,3都成立时才会执行。 动作 B:条件表达式1,2成立,但条件表达式3不成立时才会 执行。 动作 C:条件表达式1成立,条件表达式2不成立时才会执行。 动作 D:条件表达式1不成立时才会执行。 范例 IfDemo3.C
说明:
C程序从main开始执行程序,前一个void表示无值返回; C程序中用到的变量一定要先定义变量的数据类型,只有定义 了变量的数据类型后,变量才会在内存中按其数据类型长度给其分配 空间。
1.3.1 数据类型
数据类型 位数 bit 1 signed char 8 unsigned char 8 enum 16 signed short 16 unsigned short 16 signed int 16 unsigned int 16 字节数
1 1 2 2 2 2 2
值域 0~1 -128~+127 0~255 -32768~+32767 -32768~+32767 0~65535 -32768~+32767 0~65535
数据类型(二)
数据类型 signed long
unsigned long float sbit sfr sfr16
unsigned int a; for(a=100;a>=0;a--)
1.3.2 常量与变量
常量:使用预定义对常量进行定义,使用一个标识符代替一 个常量。 例:#define CONST 10 为了与变量区别,常量一般使用大写。
#define 宏名 字符串 以一个宏名称来代表一个字符串,当程序任何地方使用宏名 称时将以代表的字符串来替换,可以是一个常数、表达式 等。 #define uchar unsigned char #define unit unsigned int
• •
的存储结构有初步了解; 寄存器分配,不同存储器的寻址及数据类型等细 节由编译器管理; 程序有规范的结构,可分成不同的函数,这种方 式可使程序结构化; 提供的库包含多个标准子程序,具有较强的处理 能力; 由于具有方便的模块化设计,便于移植。


汇编语言特点
• 代码执行效率高; • 占用存储空间少; • 可移植性差。
相关文档
最新文档