教学课件PPT 89C51单片机的C51程序设计.ppt

上传人:小小飞 文档编号:3833849 上传时间:2019-09-28 格式:PPT 页数:22 大小:222.53KB
返回 下载 相关 举报
教学课件PPT 89C51单片机的C51程序设计.ppt_第1页
第1页 / 共22页
教学课件PPT 89C51单片机的C51程序设计.ppt_第2页
第2页 / 共22页
教学课件PPT 89C51单片机的C51程序设计.ppt_第3页
第3页 / 共22页
教学课件PPT 89C51单片机的C51程序设计.ppt_第4页
第4页 / 共22页
教学课件PPT 89C51单片机的C51程序设计.ppt_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《教学课件PPT 89C51单片机的C51程序设计.ppt》由会员分享,可在线阅读,更多相关《教学课件PPT 89C51单片机的C51程序设计.ppt(22页珍藏版)》请在三一文库上搜索。

1、第4章 C51程序设计,1.C51存储类型 2.特殊功能寄存器的C51定义 3.绝对地址单元的C51访问 4.集成开发环境uVision2,本章学习要求:,单片机原理及应用,4.1 C51程序设计语言概述,4.1 C51程序设计语言概述,机器语言: 用二进制代码表示的指令,也是CPU唯一能够接受的指令形式. 如:MOV A,R0;机器语言(机器码)为:1110_1000b MOV R1,A;机器码为:1111_1001b 汇编语言: 汇编语言就是用助字符表示的指令,与机器语言指令一一对应。 如:两个寄存器相加汇编语言指令:ADD A,R0 C51语言: 语法同标准C语言。开发效率高,可读性强,

2、是目前使用最为广泛的单片机开发语言。一条C语言通常需要由多条机器语言组成。,4.1 C51程序设计语言概述,1.降低学习难度,仅需要掌握存储器接口; 2.打破不同单片机之间的界限; 3.程序可读性强、可移植性强、开发效率高。,1.单片机的程序存储器做得越来越大、越来越便宜。 2.单片机的主频越来越高,现在51单片机很多都可以做到40M/80M/100M,而且还有很多是单周期的。,是否存在不好之处?,C51设计单片机的好处:,1.生成机器语言代码冗余,占用较多程序存储单元; 2.程序的执行效率不高,导致运行速度慢 。,4.2 C51程序设计基础,4.2.1 C51变量/常量存储类型,C51存储类

3、型定义举例:,unsigned char data x,y,z; /*在内部RAM区定义了3个无符号字节型变量x,y,z*/,unsigned int data i,j,k; /*在内部RAM区定义了3个无符号整型变量i,j,k*/,unsigned char code pfb10 = 0,1,4,9,16,25,36,49,64,81 /*在程序存储器里定义了10字节的常量数组*/,4.2 C51程序设计基础,4.2 C51程序设计基础,4.2.2 特殊功能寄存器的C51定义,特殊功能寄存器的定义方法: sfr 特殊功能寄存器名 = 地址常数; 例如:sfr P0 = 0x80; /*定义P

4、0口地址为80H*/,为了在C51程序中能够直接访问位于内部数据存储器中的21字节SFR以及其中11字节可位选址的位,C51语言提供了与标准C语言不兼容的定义方法,扩充了关键字“sfr”和“sbit”,利用这种扩充的关键字可以在C51程序中直接操作21字节的特殊功能寄存器和11字节可位寻址的位。,方法三:sbit 位变量名 = 特殊功能寄存器地址位位置; 例如:sbit P10 = 0x900;,方法一:sbit 位变量名 = 位地址常数; 例如:sbit OV = 0xD2;,特殊功能寄存器中可位寻址位的定义有三种方法:,方法二:sbit 位变量名 = 特殊功能寄存器名位位置; /*必须先用

5、sfr定义特殊功能寄存器名*/ 例如:sfr PSW = 0xD0; sbit CY = PSW7;,4.2 C51程序设计基础,说明: 1.我们并不需要动手使用sfr和sbit定义每一个特殊功能寄存器和位,因为在C51编译器里提供了一个“reg51.h”的头文件,在该头文件里已经定义好所有特殊功能寄存器和可寻址位 2.只要在程序开始处增加一条包含指令“#include ”,4.2 C51程序设计基础,4.2.3绝对地址单元的C51访问,4.2 C51程序设计基础,unsigned char data rval; /定义变量rval,位于内部数据存储器 rval=CBYTE0x0002; /将

6、程序存贮器的0002H地址单元的值赋给rval rval=DBYTE 0x32; /将内部数据存储器的32H地址单元的值赋给rval rval=XBYTE 0x0002; /将外部数据存储器的0004H地址单元的值赋给rval,说明: 1.C51编译器里头文件“absacc.h”定义有多个地址直针,包括CBYTE、DBYTE、PBYTE、XBYTE、CWORD、DWORD、PWORD、XWORD,可以通过单元地址直接访问程序存储器、内部数据存储器、分页寻址外部数据存储器、外部数据存储器。 2.使用这些指针之前,必须要在程序中增加一条包含指令“include”。,4.2 C51程序设计基础,4.

7、2.4 C51运算符与常用语句,4.2 C51程序设计基础,表4-2 算术运算符,4.2 C51程序设计基础,表4-3 关系运算符,4.2 C51程序设计基础,表4-4 逻辑运算符,表4-5 位运算符,4.2 C51程序设计基础,表4-6 常用语句,4.2 C51程序设计基础,表4-6 常用语句,4.3 C51程序举例,例1:设变量放在片内RAM 20H单元,其取值范围为0-5,要求编制一段程序,查出变量的平方值,并放入片内RAM 21H单元。 分析:该例需要掌握如何访问一个指定地址的存储单元。,/ #include #include #define uchar unsigned char v

8、oid main(void) uchar number; uchar code table6=0,1,4,9,16,25; number = DBYTE0x20; switch(number) case 0 : DBYTE0x21=table0;continue; case 1 : DBYTE0x21=table1;continue;,case 2 : DBYTE0x21=table2;continue; case 3 : DBYTE0x21=table3;continue; case 4 : DBYTE0x21=table4;continue; case 5 : DBYTE0x21=tabl

9、e5;continue; default : break; while(1); ,4.3 C51程序举例,#include #define uchar unsigned char void main(void) uchar data x,y; x = DBYTE0x30; if(x=100) y=0x20; else if(x100) y=x; else y=x-49 DBYTE0x30 = y; while(1); ,例2:设变量x以无符号单字节数形式存放在内部RAM 30H单元,函数y与x有如下关系,试编制程序,根据x的大小求出y并放回原单元。,4.3 C51程序举例,#include #

10、define uchar unsigned char void main(void) uchar data x,y; x=DBYTE0x50; y=DBYTE0x51; if(xy) DBYTE0x60 = x; else DBYTE0x60=y; while(1); ,例3:试编写程序,将片内RAM 50H和51H单元两个无符号单字节数中较小的数存放到60H单元。,4.3 C51程序举例,例4:把外部数据RAM中从地址2000H单元开始的100个有符号数逐一取出,若为正数则放回原单元,若为负数则求补后放回。,#include #define uchar unsigned char #defi

11、ne uint unsigned char void main(void) uchar data numb = 0; uchar data i; uint data xadd = 0x2000; for (i=0; i100; i+) if(XBYTExadd0) numb=(XBYTExadd)+1; XBYTExadd = numb; xddr+; ,4.3 C51程序举例,例5:假定有两个无符号二进制数分别存放于内部RAM 40H和41H单元,编写程序求这两个数的和,并将和存放在42H单元。,#include #define uchar unsigned char uchar SUM(u

12、char x1, uchar x2); void main(void) uchar number1; uchar number2; uchar val; number1 = DBYTE0x40; number2 = DBYTE0x41; val = SUM(number1,number2); DBYTE0x42 = val; whilie(1); ,uchar SUM(uchar x1, uchar x2) uchar x; x= x1+x2; return x;,4.3 C51程序举例,例6:假定P1口连接有8只供阴极发光二极管,试编写程序,以1秒为间隔,依次选环点亮每只发光管。,#include #define uchar unsigned char void delay1s(void); void main(void) uchar data temp,j; whilie(1) temp=1; for(j=0;j8;j+) P1=temp; temp1; delay1s(); ; ,void delay1s(void) uchar data x,y,z; for (x=0;x100;x+) for(y=0;y100;y+) z+; ,4.4 集成开发环境uVISION2,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育


经营许可证编号:宁ICP备18001539号-1