已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机C51编程,一、C51与标准C的差异,1、库函数不同,2、头文件不同,3、数据类型有一定区别,4、增加了存储模式,5、增加了中断函数,6、输入、输出不同,C51通过串口进行。,二、C语言与汇编语言,单片机C语言编程与汇编语言编程的差异:,1、用汇编语言编写单片机程序必须要考虑其存储器结构,资源分配是汇编语言编程中的一大负担。而且不同的存储器操作对象寻址方式不同,访问的指令也不同。,3、汇编语言编程,子程序调用要考虑现场的保护与恢复,要考虑工作寄存器的分组使用,避免资源冲突。C语言编译系统自动完成这些工作。,如MOV,MOVC,MOVX访问的空间不同。,2、汇编语言中的指令繁多,功能单一。如单片机中大量的转移类指令在C语言中均由分支程序实现。,4、汇编语言编写中的循环程序是通过转移指令重复执行来现实的,C语言则通过循环语句来实现。,6、用C语言编写的单片机应用程序:(1)所有操作对象都可以看成变量或常量,没有寻址方式(数据传送由赋值语句实现,所有运算都通过表达式实现)。(2)不用像汇编语言那样须具体组织、分配存储器资源和处理端口数据.(3)子程序调用时,C语言程序的编译系统自动进行现场的保护。(5)C语言语法简单,语句紧凑,容易理解和掌握。(4)在C语言编程中,对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。,5、汇编语言编程中使用大量的算术逻辑运算指令在单片机C语言编程中全部由相应的运算表达式实现。,三、C51的数据类型,1、特殊功能寄存器类型:在C51中对特殊功能寄存器的访问必须先用sfr或sfr16进行声明。,sfrP0=0 x80;/*P0口的寄存器地址为0 x80*/,两种使用特殊功能寄存器的方法:,1)、先定义再使用:,2)、包含51单片机的头文件:,#include,voidmain(void)ucharvar1;var1=P1.while(1);,2、位类型这也是C51中扩充的数据类型,用于访问MCS-51单片机中的可寻址的位单元。在C51中,支持两种位类型:bit型和sbit型。它们在内存中都只占一个二进制位,其值可以是“1”或“0”。,bitflags;/*在bdata区定义一个位变量*/sfrP0=0 x80;/*因P0口的寄存器是可位寻址的*/sbitP0_0=P00;/*所以P0_0为P0中的P0.0引脚*/除了以上定义方式外,还可以用P0.0的地址去写,如:sbitP0_0=0 x80;,区别:用bit定义的位变量在C51编译器编译时,在不同的时候位地址是可以变化的,而用sbit定义的位变量必须与51单片机的一个可以寻址位单元或可位寻址的字节单元中的某一位联系在一起,在C51编译器编译时,其对应的位地址是不可变化的。,四、新增存贮类型变量是在程序运行过程中其值可以改变的量。一个变量由两部分组成:变量名和变量值。在C51中,变量在使用前必须对变量进行定义,指出变量的数据类型和存储模式。以便编译系统为它分配相应的存储单元。定义的格式如下:数据类型说明符存储器类型变量名1=初值,变量名2=初值;,2、六种存储器类型:,【例】变量定义存储种类和存储器类型相关情况。chardatavarl;/*在片内RAM低128B定义用直接寻址方式访问的字符型变量var1*/intidatavar2;/*在片内RAM256B定义用间接寻址方式访问的整型变量var2*/unsignedlongdatavar3;/*在片内RAM128B定义用直接寻址方式访问的自动无符号长整型变量var3*/floatxdatavar4;/*在片外RAM64KB空间定义用间接寻址方式访问的外部实型变量var4*/intcodevar5;/*在ROM空间定义整型变量var5*/unsigncharbdatavar6;/*在片内RAM位寻址区20H2FH单元定义可字节处理和位处理的无符号字符型变量var6*/,五、存储模式,C51编译器支持三种存储模式:SMALL模式、COMPACT模式和LARGE模式。不同的存储模式对变量默认的存储器类型不一样。(1)SMALL模式。SMALL模式称为小编译模式,在SMA-LL模式下,编译时,函数参数和变量被默认在片内RAM中,存储器类型为data。(2)COMPACT模式。COMPACT模式称为紧凑编译模式,在COMPACT模式下,编译时,函数参数和变量被默认在片外RAM的低256字节空间,存储器类型为pdata。(3)LARGE模式。LARGE模式称为大编译模式,在LARGE模式下,编译时函数参数和变量被默认在片外RAM的64K字节空间,存储器类型为xdata。,六、绝对地址访问,1.使用指针采用指针的方法,可实现在C51程序中对任意指定的存储器地址进行操作。例如:,#defineucharunsignedchar#defineuintunsignedintvoidtest_memory(void)ucharidataivar1;ucharxdata*xdp;/*定义一个指向xdata存储器空间的指针*/chardata*dp;/*定义一个指向data存储器空间的指针*/ucharidata*idp;/*定义一个指向idata存储器空间的指针*/xdp=0 x1000;/*xdata指针赋值,指向xdata存储器地址1000H处*/*xdp=0 x5A;/*将数据5AH送到xdata的1000H单元*/dp=0 x61;/*data指针赋值,指向data存储器地址61H处*/*dp=0 x23;/*将数据23H送到data的61H单元*/idp=/*等价于ivar1=0 x16*/,2、使用C51运行库中预定义宏C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。规定只能以无符号数方式访问,定义了8个宏定义,其函数原型如下:,#defineCBYTE(unsignedcharvolatilecode*)0)#defineDBYTE(unsignedcharvolatiledata*)0)#definePBYTE(unsignedcharvolatilepdata*)0)#defineXBYTE(unsignedcharvolatilexdata*)0)#defineCWORD(unsignedintvolatilecode*)0)#defineDWORD(unsignedintvolatiledata*)0)#definePWORD(unsignedintvolatilepdata*)0)#defineXWORD(unsignedintvolatilexdata*)0),这些函数原型放在absacc.h文件中。使用时须用预处理命令把该头文件包含到文件中,形式为:#include。其中:CBYTE以字节形式对code区寻址,DBYTE以字节形式对data区寻址,PBYTE以字节形式对pdata区寻址,XBYTE以字节形式对xdata区寻址,CWORD以字形式对code区寻址,DWORD以字形式对data区寻址,PWORD以字形式对pdata区寻址,XWORD以字形式对xdata区寻址。,【例】绝对地址对存储单元的访问#include/*将绝对地址头文件包含在文件中*/#include/*将寄存器头文件包含在文件中*/#defineucharunsignedchar/*定义符号uchar为数据类型符unsignedchar*/#defineuintunsignedint/*定义符号uint为数据类型符unsignedint*/voidmain(void)ucharvar1;uintvar2;var1=XBYTE0 x0002;/*访问片外RAM的0002字节单元*/var2=XWORD0 x0004;/*访问片外RAM的00040005单元*/.while(1);,3、使用C51扩展关键字_at_使用_at_对指定的存储器空间的绝对地址进行访问,一般格式如下:存储器类型数据类型标识符_at_地址常数;其中,存储器类型为data、bdata、idata、pdata等如省略则按存储模式规定的默认存储器类型确定变量的存储器区域;数据类型为C51支持的数据类型。地址常数用于指定变量的绝对地址,必须位于有效的存储器空间之内;使用_at_定义的变量必须为全局变量。,【例】通过_at_实现绝对地址的访问。#defineucharunsignedchar/*定义符号uchar为数据类型符unsignedchar*/#defineuintunsignedint/*定义符号uint为数据类型符unsignedint*/dataucharx1_at_0 x40;/*在data区中定义字节变量x1,它的地址为40H*/xdatauintx2_at_0 x2000;/*在xdata区中定义字变量x2,它的地址为2000H*/voidmain(void)x1=0 xff;x2=0 x1234;.while(1);,由于标准C没有处理单片机中断的定义,由此C51增加了一个扩展关键字interrupt。使用interrupt将一个函数定义成中断服务函数。对于中断服务函数,编译时会自动添加了相应的现场保护、恢复现场等,因而用户在编程时可不必考虑这些问题,减小了编程的繁琐程度。中断函数一般形式为:viod函数名()interruptnusingninterrupt后的n是中断号,n取值为04,分别对应5个中断源:外中断0、T0中断、外中断1、T1中断、串行口中断。using后的n是中断函数中所采用的工作寄存器组号,n取值03,分别对应通用工作寄存器区:第0组、第1组、第2组、第3组。using是选项可省略。若没有使用using,中断函数中使用原指定的工作寄存器组,但使用前将其内容保存到堆栈中,返回时复原。,4、C51的中断函数,例:使用一个“+”键和一个“-”键来进行数据的的修改,若用INT0和INT1作“+”键和“-”键的输入,P1口接一个数码管,显示加、减操作数据的变化信息。系统上电后初始显示数据0,每按一次加键,加1显示,加到9后再按加键自动回0;每按一次减键,减1显示,减到0后再按减键,自动回9;画出接线电路图,编程实现。,#include#defineucharunsignedchar#defineuintunsignedint/段码ucharcodeDSY_CODE=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x07;,/按键计数charKey_Counts=0;sbitAddKey=P32;sbitSubKey=P33;/延时voidDelayMS(uintx)uchari;while(x-)for(i=0;i9)Key_Counts=0;elseif(SubKey)DelayMS(10);if(SubKey)while(SubKey);-Key_Counts;if(Key_Counts40 x0f;switch(Tmp)/对03列分别附加起始值0,1,2,3case1:KeyNo+=0;break;case2:KeyNo+=1;break;case4:KeyNo+=2;break;case8:KeyNo+=3;,/开蜂鸣器voidOpen_Beep(void),BEEP=1;,/关蜂鸣器voidClose_Beep(void),BEEP=0;,/主程序voidmain()P0=0 x00;Close_Beep();while(1),/显
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 论文写作中的语法与表达规范
- 工程合同由第三方付款(3篇)
- 工业工程在产品生命周期成本管理中的应用研究
- 排座次之“对角线平移法”浅议
- 指导老师论文评语
- 初一议论文《中国教育≠教条》800字(共10)
- 浅议图书编目中的著者号与种次号
- 【浦银国际】医药行业2026年展望:更上一层楼
- 大学德育答辩评语集萃
- 浅议侘寂美学
- 急救知识培训内容烧伤课件
- 2025至2030中国供暖设备行业项目调研及市场前景预测评估报告
- 2025-2026秋学生国旗下演讲稿:第14周法育少年心护航成长路-全国法治宣传日
- 宜兴博物馆讲解
- 2025年职业健康培训考试题【含答案】
- 实验室简介课件
- 《个人形象设计》课件 15、个人风格特征
- 渠道合作管理办法
- 精神科探视管理课件
- 学堂在线 现代生活美学-插花之道 章节测试答案
- ota升级管理办法
评论
0/150
提交评论