《单片机及嵌入式系统原理》单片机课件 第六章 C程序设计_第1页
《单片机及嵌入式系统原理》单片机课件 第六章 C程序设计_第2页
《单片机及嵌入式系统原理》单片机课件 第六章 C程序设计_第3页
《单片机及嵌入式系统原理》单片机课件 第六章 C程序设计_第4页
《单片机及嵌入式系统原理》单片机课件 第六章 C程序设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章

C程序设计本章内容6.1概述(了解)6.2C51程序结构(了解)6.3C51的数据类型(重点)6.4数据的存储器类型和存储器模式(重点)6.5指针(重点)6.6SFR、寻址位、存储器和I/O口的定义(重点)6.7C51的运算符(了解)6.8函数(了解)6.9汇编语言和C语言的混合编程(掌握)6.10开发工具简介(KeilC)(了解)6.1概述(1)从教学的角度,本章不是重点;从学习的角度,本章是重中之重,因此学生必须在课下自学,甚至查阅大量课外参考书。(2)本章许多内容与C《语言》一致,课堂上可以略讲。(3)本章可以安排到课程即将结束时讲解,那时单片机的接口和扩展也可以用C语言编写程序。(4)在讲解时,建议老师将科研中所用到的C语言编程与教学相结合。6.2C51程序结构

(1)C51程序是由函数构成的。函数是C51程序的基本单位。一个函数由两部分组成:

1)函数说明部分。包括函数名、函数类型、函数属性、函数参数(形参)名、形式参数类型。一个函数名后面必须跟一个圆括号,函数参数可以没有,例如main()。

2)函数体。即函数说明下面的大括号之内的部分。(2)一个C51程序总是从main函数开始执行,而不论main函数在整个程序中所处的位置如何。(3)C51程序书写格式自由,一行内可以写几个语句,一个语句可以分写在几行上。在Keil集成开发环境中,C51编辑器带有行号,可以方便编辑和调试。但行号的有无对于C51程序的执行没有影响。(4)每个语句和数据定义的最后必须有一个分号。分号是C51语句的必要组成部分。分号不可少,即使是程序中的最后一个语句也应包含分号。(5)C51本身没有输入输出语句。标准的输入和输出(通过串行口)是由scanf和printf等库函数来完成的。对于用户定义的输出,比如直接以输出端口读取键盘输入和驱动LED,则需要自行编制输出函数。(6)可以用“/*…*/”对C51程序中的任何部分作注释。在Keil

uVision3中,还可以使用“//”进行单行注释。

6.3C51数据类型

数据类型长

度值

域unsigned

char单字节0~255signed

char单字节-128~+127unsigned

int双字节0~65535signed

int双字节-32768~+32767unsigned

long四字节0~4294967295signed

long四字节-2147483648~+2147483647float四字节±1.175494E-38~±3.402823E+38指针1~3字节对象的地址bit位0或1sfr单字节0~255sfr16双字节0~65535sbit位0或16.4C51存储类型

存储器类型与物理存储空间的对应关系data直接寻址片内数据存储器的低128字节,访问速度快bdatadata区中可位寻址区域20H~2FH(16字节),允许位与字节混合访问idata间接寻址片内数据存储区(256字节),可访问片内全部RAM空间pdata分页(256字节)的外部数据存储区,通过P0端口的地址对其访问xdata片外数据存储区(64KB),通过DPTR访问code程序存储区(64KB),通过DPTR访问(1)指针就是指变量或数据所在的存储区地址(2)存放变量地址的变量称为“指针变量”

(3)通型用指针指向任何存储器空间(4)存储器型指针所指向的对象具有明确的存储器空间一些例子:char*xdata

psy;/*将通用型指针psy自身指定在xdata区*/longcode*xdata

l_ptr;/*指针变量l_ptr指向的是code区中的long型变量,l_ptr自身在片内存储区xdata中*/chardata*c_ptr;/*指针c_ptr指向的是data区中的char型变量*/

int

xdata*i_ptr;/*指针i_ptr指向的是xdata区中的int型变量*/6.5C51指针

特殊功能寄存器SFR定义

C51使用关键字sfr对特殊功能寄存器SFR进行定义,有两种定义方式:(1)自主定义方式定义后,在程序中即可直接引用寄存器名。例如:

sfrIE=0xa8;/*定义中断允许寄存器IE,地址为A8H*/

sfrACC=0xe0;/*定义A累加器,地址为E0H*/

sfrP1=0x90;/*定义P1端口,地址为90H*/(2)利用C51建立的reg51.h(reg52.h)进行定义使用包含语句#include<reg51.h>后,就可直接引用SFR名称,或直接引用位名称。头文件对所有的SFR和其可寻址位进行了sfr、sbit定义。特别注意:引用SFR或位名称时必须大写。*/6.6课题:嵌入式打标机中的I/O口定义

对位变量的定义有3种方法:(1)将变量用bit类型的定义符定义为bit类型例如:bitmm;/*定义mm为位变量,其值为0或1,由C51自行安排在bdata区。*/(2)采用字节寻址变量^位的方法例如:

bdata

int

ixy;/*ixy定义为整型变量*/

sbit

bnn=ixy^13;/*bnn定义为ixy的D13位,其中:位是运算符“^”相当于汇编中的“·”*/(3)对SFR中可寻址位的定义对SFR中可寻址位的定义有4种方法:1)使用头文件reg51.h及sbit定义符;多用于无位名称的可寻址位:例如:

#include<reg51.h>

sbitP2_3=P1^1;/*定义P2_3为P1口的D1位*/

sbitflag=ACC^5;/*定义flag为累加器A的D5位*/6.6SFR、可寻址位、存储器和I/O口的定义

利用绝对地址访问的头文件absacc.h可对不同的存贮区进行访问。该头文件中定义的关键字有:CBYTE(访问code区字符型)DBYTE(访问data区字符型)PBYTE(访问pdata或I/O区字符型)XBYTE(访问xdata或I/O区字符型)

CWORD(访问code区int型)DWORD(访问data区int型)PWORD(访问pdata区int型)XWORD(访问xdata区int型)在利用绝对地址访问时,程序中一定要包含absacc.h,关键字CBYTE、DBYTE、PBYTE、XBYTE、CWORD、DWORD、PWORD必须大写。6.6课题:嵌入式打标机中的内存访问定义

6.7-6.8,6.10省略

(1)直接在C语言程序中嵌入汇编语句1)使用关键字asm

格式1:asm<操作码><操作数><;/换行符>

格式2:__asm<操作码><操作数><;/换行符>

格式3:__asm{汇编指令}2)在C文件中嵌入汇编代码的地方加上如下代码:#pragmaASM汇编程序的代码#progmaENDASM6.9汇编和C的混合编程

(2)C语言调用汇编语言子程序【例6-】无参数传递的函数调用。其中example.c和example.a51为项目中的两个文件。 ***********************example.c**************************************externvoiddelay100();/*说明被调函数delay100()(在example.a51中)*/main() {delay100;}/*调用函数delay100()*/*******************************example.a51***************************

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论