[工学]ch04-C51及编程(1).ppt

上传人:豆**** 文档编号:26926676 上传时间:2022-07-20 格式:PPT 页数:49 大小:1.03MB
返回 下载 相关 举报
[工学]ch04-C51及编程(1).ppt_第1页
第1页 / 共49页
[工学]ch04-C51及编程(1).ppt_第2页
第2页 / 共49页
点击查看更多>>
资源描述

《[工学]ch04-C51及编程(1).ppt》由会员分享,可在线阅读,更多相关《[工学]ch04-C51及编程(1).ppt(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C语言的特点和应用n编译型程序设计语言n兼有高级语言之特点,汇编语言之功能n结构化,模块化支持n可读性强,便于维护,缩短开发周期n代码可重用,可移植n已成为嵌入式系统开发的主流选择n可以与汇编混合编程C语言的优点语言的优点n 广泛的支持广泛的支持u非常方便非常方便u编译,集成开发环境编译,集成开发环境n 可移植可移植u源代码不依赖特定的硬件体系源代码不依赖特定的硬件体系(指令系统指令系统)u源代码另行编译就可支持其它系列的源代码另行编译就可支持其它系列的CPUn 库函数丰富库函数丰富u内部函数支持内部函数支持C语言的运算语言的运算u数学函数、特别是浮点运算库数学函数、特别是浮点运算库u字符串处

2、理字符串处理n 嵌入式操作系统嵌入式操作系统u简化的程序开发简化的程序开发u向平台应用靠拢向平台应用靠拢 C-51与与ASM-51对比对比n只要求了解,不要求彻底掌握指令系统只要求了解,不要求彻底掌握指令系统n寄存器分配、不同存贮器的寻址由编译器管寄存器分配、不同存贮器的寻址由编译器管理;理;n通过库函数,支持更多数据类型,甚至浮点通过库函数,支持更多数据类型,甚至浮点数;数;n程序结构化:即函数调用函数;程序结构化:即函数调用函数;n代码效率高,可读性好;代码效率高,可读性好;C51与ANSI C的区别n 要求掌握要求掌握MCS-51MCS-51系列的存贮器组织;系列的存贮器组织;n 变量的

3、定义必须具体指出存储空间,否则编译变量的定义必须具体指出存储空间,否则编译器不能正确地分配和定位。器不能正确地分配和定位。n 增加了位变量增加了位变量n 增加了特殊功能寄存器增加了特殊功能寄存器n 增加了中断函数的支持增加了中断函数的支持n 如果你对如果你对C已经忘掉,就应该复习一下。已经忘掉,就应该复习一下。n 考不及格的都是不肯接受该建议,也不肯好好考不及格的都是不肯接受该建议,也不肯好好做实验的。做实验的。关键词关键词 存储空间存储空间 地址范围地址范围data 直接寻址片内直接寻址片内RAM0 x00-0 x7fidata 间接寻址片内间接寻址片内RAM0 x00-0 xffbdata

4、 可位寻址片内可位寻址片内RAM0 x20-0 x2F 按字节访问按字节访问bit 在在bdata空间定空间定义义0 x00-0 x7F 按位访问按位访问sfr 特殊功能寄存器特殊功能寄存器0 x80-0 xff sbit 特殊功能寄存器中的可位寻址的位特殊功能寄存器中的可位寻址的位xdata 扩展扩展 RAM 0 x0000-0 xffff pdata 页式寻址扩展页式寻址扩展RAM0 xPP00-0 xPPff PP=(P2)code 程序程序ROM 0 x0000-0 xffffC-51数据的存储类型数据的存储类型存储类型的变量的定义n 一般格式 数据类型 存储类型 变量名;n 带存储类

5、型的变量定义举例char data var1;bit bdata flags;float idata x,y,z;unsigned int pdata var2;unsigned char vector34;char data var1;bit flags;unsigned char xdata vector10;存储模式存储模式nSMALL默认的存储类型是datanCOMPACT默认的存储类型是pdatanLARGE默认的存储类型是xdata开发环境默认的初始状态是SMALL可以修改C51的基本数据类型的基本数据类型数据类型长度(bit)长度(byte)值域bit110,1unsigned

6、char810255signed char81128127unsigned int 162065535signed int 1623276832767unsigned long32404294967295signed long 32421474836482147483647float 3241.176E383.40E+38(6位数字)double6481.176E383.40E+38(10位数字)整型数的存储结构 0 x120 x34+0+1地址 0 x120 x340 x560 x78.+0+1+2+3地址 长整型变量的存储结构 浮点型变量(float)n 4个字节(32位),IEEE-75

7、4标准n 含数符、阶码和尾数三部分u 1位符号位: “0正1负”u 8位阶码(2的指数):偏移0 x7Fu 24位尾数。最高位始终为“1”,实际不占位,只保存23位。具有24位精度例:浮点数 -12.5的存储形式是: 0 xC1480000C51的数据类型扩充定义的数据类型扩充定义SFRnsfr:特殊功能寄存器声明特殊功能寄存器声明 sfr sfr-name = 地址;nsfr16:16位位sfr的寄存器声明的寄存器声明例:例:sfr SCON = 0 x98; / 串口通信方式字地址 sfr TMOD = 0 x89;/ 定时/计数器方式字地址 sfr P0 = 0 x80 ; / 定义P0

8、口地址 sfr P1 = 0 x90 ; / 定义P1口地址 sfr16 T2 = 0 xCC; n用法:头文件用法:头文件reg51.h预定义所有预定义所有SFR,只要,只要加加include到源程序头部即可。到源程序头部即可。C51的数据类型扩充定义的数据类型扩充定义bitnbit:位变量声明位变量声明nsbit:u特殊功能寄存器的位声明特殊功能寄存器的位声明 例:例:sbit OV = PSW2;u已声明已声明bdata型型8位或位或16位变量的按位定义位变量的按位定义例:例:unsigned char bdata x1; sbit Motor = x15;例例1 先定义变量的数据类型和

9、存储类型:bdata int ibase; /* 定义ibase为bdata整型变量 */bdata char bary4;/* bary4定义为bdata字符型数组 */然后可使用sbit定义可独立寻址访问的对象位:sbit mybit0 = ibase0 ;/* mybit0定义为ibase的第0位 */sbit mybit15 = ibase15;/* mybit0定义为ibase的第15位 */sbit Ary07 = bary07 ;/* Ary07定义为abry0的第7位 */sbit Ary37 = bary37 ;/* Ary37定义为abry3的第7位 */ 对象ibase和

10、bary也可以字节寻址: ary37=0; /* bary3的第7位赋值为0 */ bary3=a; /* 字节寻址,bary3 赋值为a */ sfr PSW=0 xD0 ; /* 定义PSW寄存器地址为D0H */ sbit OV=PSW2 ; /* 定义OV位为PSW.2,地址为D2H */ sbit CY=PSW7 ; /* 定义CY位为PSW.7,地址为D7H */ C-51的常用头文件的常用头文件n reg51.h 定义特殊功能寄存器和位寄存器定义特殊功能寄存器和位寄存器n math.h 浮点运算库浮点运算库n ctype.h 字符函数字符函数n stdio.h 标准输入输出标准输

11、入输出n stdlib.h 标准库函数标准库函数n absacc.h 辅助宏,支持绝对地址说明辅助宏,支持绝对地址说明例:例:I/O口定义口定义#include #define port XBYTE0 x1000+ - + - * * / / (加(加 减减 乘乘 除)除) = = (位右移(位右移 位左移)位左移)& |& | ( (按位与按位与 按位或按位或) ) ( (按位异或按位异或 按位取反按位取反) )C51的运算符(与的运算符(与ANSI C相同相同)清零程序清零程序 ( (将将2000H20FFH2000H20FFH的内容清零的内容清零) ) C C5151程序程序#inclu

12、de main( ) int i; unsigned char xdata *p=0 x2000; / 指针指向指针指向2000H单元单元 for(i=0;i256;i+) *p=0; p+; /*清零清零2000H-20FFH单元单元*/; 汇编语言程序汇编语言程序 ORG 0000HL00: MOV R0,#10H ;查找查找16个字节个字节 MOV R1,#00H MOV DPTR,#2000HL11: MOVX A,DPTR CJNE A,#00H,L16 ;取出内容与取出内容与00H相等吗相等吗? INC R1 ;取出个数加取出个数加1L16: INC DPTR DJNZ R0,L1

13、1 ;未完继续未完继续 MOV DPTR,#2100H MOV A,R1 MOVX DPTR,A ;相同数个数送相同数个数送2100HL1E: SJMP L1E例:查找零的个数(在例:查找零的个数(在2000H-200FH2000H-200FH中查出有几个中查出有几个字字 节是零,把个数放在节是零,把个数放在2100H2100H单元中)单元中)汇编很麻烦汇编很麻烦C51查找零的个数程序查找零的个数程序#include main ( ) unsigned char xdata *p = 0 x2000; /指针指针p指向指向2000H单元单元 int n=0,i; for (i=0;i16;i+

14、) if(*p=0) n+; / 若该单元内容为零,则若该单元内容为零,则n+1 p+; / 指针指向下一单元指针指向下一单元 p = 0 x2100; / 指针指针p指向指向2100H单元单元 *p = n; / 把个数放在把个数放在2100H单元中单元中C51-程序开发环境C51编译器连接器(多模块目标代码,库)生成可执行的代码程序集成环境KEIL/Franklin代码紧凑和使用方便存储器类型idataxdatapdatadatacode值12345通用指针通用指针n ANSI C的指针被C51沿用,表示地址;n 扩展通用一般指针:n C51所特有,增加了指针变量的类型,由3个字节构成存储

15、类型偏移地址高位偏移地址低位指针存储地址+0+1+2例:指向扩展RAM 的0 x1234地址,指针可表示为地址+0+1+2内容0 x020 x120 x34 用常数作指针,常用于一些宏,例如XBYTE #define XBYTE ( (char *) 0 x20000L) / 类型2 偏移量0000H 如果将常数值0 x09写入绝对地址为0 x8000的外部数据存储器。语句可以为XBYTE0 x8000 = 0 x09 ; XBYTE被定义为一般指针, XBYTE8000指向外部数据存储器的0 x8000绝对地址。Keil编程环境的使用nKeil支持MCS-51n以工程为单位管理源代码只一个模

16、块也要建立工程n模块化的开发n连接生成可下载到芯片的执行程序n支持联机调试n软件模拟运行逼真可信调试:观察执行过程中的寄存器存储器(变量)CPU状态,外设输入输出等;模块化编程ASM FilesC51 Files汇编编译.OBJ.OBJLibLIB51LINK, LOCHexLibHex文件可以固化到芯片中运行文件可以固化到芯片中运行集成开发环境Keil Vision2n功能:51系列开发环境/各大厂商芯片支持n语言:C51高级语言/ASM51汇编语言/混合编程n编辑、汇编、编译、生成目标代码n调试:纯软件模拟/联机调试n观察修改寄存器窗口、源程序窗口、内部数据窗口、代码窗口、外部数据窗口n单

17、步、宏单步跟踪执行、连续执行n断点n执行时间观察,主窗口文件菜单n建立新文件n打开已存在文件n保存n另存为n保存全部工程菜单n 建立新工程n 打开新工程n 关闭工程n 其余不常用或使用工具栏已有工程可以利用文件关联,双击自动打开。新建一个工程nWindows功能新建一个文件夹;nKeil新建一个文本文件,test1.asm并保存,(也可以是拷贝一个文件到该文件夹)n新建工程,输入工程名,选择到上述文件夹并保存n弹出器件选择显示为厂商,再点击前面的“+”号,就能展开选择厂商选择器件类似可选其它厂商的其它型号工程窗口nTarget项,点击可以改名(如需要)n在Target区域点击右键,将出现浮动窗

18、口n点击Options for Option_Targetn Xtal中选晶体频率,影响指令执行时间的显示n 核选Use On-Chip ROM(0 x0-ox1FFF)n Off-Chip选项Option_Output如果需要,预先建立一个文件夹以存放中间文件,这里点击“Select Fold for Objects”如果目标代码需要下载到芯片中运行,就需要核选Create Hex File添加文件Target前有加号,表示已经有程序组;如没有,右键点选Targets,Group,Files创建;右键点击一个组,选择Add Files to Group 工程文件的组成可以有多个组每个组可以有

19、多个文件编辑修改文件n点击工程窗口的文件名,编辑窗中出现文件,可以任意修改,只要符合语法;n语法敏感编译/汇编/连接n 对C51语言是编译;对ASM51语言是汇编;n 都是对属于工程的文件有效;n 生成LST文件,如果没有错误,就生成OBJ文件。n 连接全部OBJ文件和库文件;生成M51文件;n 如果正确,再生成调试文件和HEX文件等;n 若OBJ文件比C或ASM文件旧,则自动编译/汇编;n 该步正确完成,才能进入调试。n 重新编译/汇编属于工程的所有文件;n 连接全部OBJ文件和库文件;生成M51文件;n 如果正确,再生成调试文件和HEX文件等;进入调试进入进入/退出退出调试调试/模拟运行模

20、拟运行显示显示/去除去除工程窗口工程窗口显示显示/去除去除输出窗口输出窗口调试按钮单步跟踪运行从子程序调出暂停(连续运行期间)连续运行执行并停止于光标所在行宏单步运行复位CPUF5 ESC F11 F10观察窗口n观察反汇编窗口 与源程序比对n变量与调用窗口 增加被观察的变量n串行口窗口 模拟串行通信n存储器窗口 观察各存储器存储器窗口n 在存储器窗中任选一页:n 键入 C:0 x0000显示代码空间窗口n 键入 D:0 x00 显示内部RAM空间窗口n 键入 X:0 x0000显示扩展RAM空间窗口存储单元内容修改(1)n选择需要修改的存储空间;n鼠标移动到需要修改的字节;n点右键,出现浮动菜单;点击 Modify Memory at 存储单元内容修改(2)n在窗口输入新数据;n修改连续几个存储单元,可以一次输入几个数据,分别以逗号隔开;n数据格式:10进制自动转为16进制;n16进制数用 0 x引导或以h结尾;寄存器内容修改n在需要修改的数据上点击一下,虚线框出现,指示该寄存器被选中;n再点一下,原来的数据变成可修改状态;n修改后在附近其它位置点一下,看到刚才的修改已被接受。接口模拟可以修改P1口锁存器的值;P1口引脚的状态。结束结束

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁