周国运 Keil C51应用 2005.4 Email:zhouguoyun@sina.com 主 页:http://freeweb.nyist.net/~zhougy/

Slides:



Advertisements
Similar presentations
单片机 C 语言应用程序设计 主讲教师:廉哲 QQ: 电话: 办公室:综合楼 C318.
Advertisements

现代电子技术实验 ——综合实验之单片机部分
企劃撰寫.
四資二甲 第三週作業 物件導向程式設計.
第一章 C语言概述 计算机公共教学部.
人体的激素调节.
地價稅簡介.
华东师范大学 软件工程硕士答辩名单 时间:2016年5月14日、15日.
2017/3/22 如何用C 来完成SN8系列芯片的程序设计 2017/3/22.
生育保险 朝阳社保中心支付部:黄玮.
《环游西藏》之二 碧玉湖 音乐《白塔》 摄制:C&Y.
第四章 指令系统及汇编语言程序设计.
项目2 2个LED发光二极管控制 知识与能力目标 熟悉单片机的I/O口功能与特性。
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
本章小结 C51单片机指令系统概述 C51单片机寻址方式 C51单片机指令系统
C语言程序设计 第十二章 位运算.
.NET 程式設計入門(使用 C#) 講師:鄧智鴻.
第2章 MCS-51单片机指令系统与汇编语言程序设计
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
第十一章 复位、时钟和省电方式控制.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第六章 运行时存储空间的组织和管理 术语 本章内容 讨论一个活动记录中的数据布局 程序执行过程中,所有活动记录的组织方式 过程的活动
第五章 单片机的C语言程序设计及仿真调试.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第3章 變數、常數與資料型態 3-1 C語言的識別字 3-2 變數的宣告與初值 3-3 指定敘述 3-4 C語言的資料型態
第五章 单片机的C语言程序设计及仿真调试.
单片机原理及应用 ——基于Proteus与Keil C 哈工大出版社
单片机原理 单 片 机 单片机接口技术 单片机应用技术.
第七章 定时/计数器.
第十章 人机交互接口 本章学习目标 掌握键盘接口技术 掌握数码、液晶显示技术 了解数码管显示驱动和键盘扫描控制专用芯片.
明解C++教學手冊 柴田望洋 博士 著 書號:PG20269
Ch02-基礎語法.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
合泰半导体股份有限公司 技术讲座 - Holtek V3 C Compiler介绍 主讲人:王幼端 2017/06/15.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
Holtek C Compiler V3--advanced
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
Java變數 2014/6/24.
第2章 数据类型及表达式 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
单片机原理与应用 主讲人:张荣刚 福建师范大学福清分校.
CPU中的专用寄存器(SFR) 一、累加器Acc 二、通用寄存器B 三、程序计数器PC 四、堆栈指针SP 五、数据指针DPTR
保留字與識別字.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
第三章 数据抽象.
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
C++程式設計入門 變數與運算子 作者:黃建庭.
第3章 数据类型、运算符与表达式.
第三章 计算机系统的组成与工作原理.
THE C PROGRAMMING LANGUAGE
第二章 类型、对象、运算符和表达式.
第二章 基本数据类型 ——数据的表示.
Review 1~3.
四、手工汇编 完成汇编的方法有两种:手工汇编和汇编程序汇编 1.手工汇编步骤 A
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
本节内容 指针类型.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
第十二章 位运算.
单片机应用技术 (C语言版) 第4章 C51程序设计入门
目录 12.1 位运算符 12.2 位域(位段) 1.
變數、資料型態、運算子.
单片机应用技术 (C语言版) 第3章 MCS-51指令系统及 汇编程序设计
第2章 Java语言基础.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
第二章 计算机中的信息表示.
Presentation transcript:

周国运 Keil C51应用 2005.4 Email:zhouguoyun@sina.com 主 页:http://freeweb.nyist.net/~zhougy/

主要内容 第一节 Keil C51变量 第二节 Keil C51函数与中断处理程序 第三节 Keil C51与汇编语言混合编程方法

第一节 Keil C51变量 主要内容 1、变量的定义方法 2、变量的绝对定位 3、指针

第一节 Keil C51变量(1) 1.1 变量的定义方法 定义格式:[存储类型] [存储空间] 数据类型 变量名; 1.1 变量的定义方法 定义格式:[存储类型] [存储空间] 数据类型 变量名; ([store_mode] [memory_space] type variable_name;) 也可写为: [存储类型] 数据类型 [存储空间] 变量名; 存储类型有:静态变量(static)和动态变量(auto 缺省) 存储空间有:data、idata、bdata;xdata、pdata;和code 例: unsigned char data time0H; unsigned int code timexx[30];

第一节 Keil C51变量(1) data 、idata、bdata类型都存放在片内RAM中,分别为直接寻址区、间接寻址区(00---7FH)和可位寻址区(20H---2FH);对于定义在可位寻址区bdata中的数据,即可以按定义的类型操作,也可以按位操作。 xdata 、pdata类型存放在片外RAM中,pdata类型访问范围为1页; code类型存放在程序存储器(作为固定数据表,如数码管显示代码)。 缺省时存储空间为存储模式对应的类型。存储模式有small(对应data型) 、compact(紧凑型,对应pdata型)和large(对应xdata型),括号中为缺省时的存储类型。

第一节 Keil C51变量(2) 数据类型有: (1)字符型:char、unsigned char; (2)整型: int、 unsigned int、 long、 unsigned long; (3)浮点与双精度型: float、 double; (4)C51中扩展的类型:bit、 sfr、 sfr16、 sbit (5)结构体、指针等 bit:比特类型, 如 bit run_flag; sfr:特殊功能寄存器类型, 如 sfr P0=0x80;(0x80为地址) sfr16:16位特殊功能寄存器类型,如 sfr16 DPT=0x82;(即DPTR) sbit:特殊功能寄存器位类型 如 sbit EINT=0xAF; (0xAF为位地址)

1.2 变量的绝对定位 第一节 Keil C51变量(3) 用关键字:_at_ 格式: [存储类型] [存储空间] 数据类型 变量名 1.2 变量的绝对定位 用关键字:_at_ 格式: [存储类型] [存储空间] 数据类型 变量名 _at_ constant; constant为定位的地址 如:data char musich _at_ 0x29, musicl _at_ 0x2a;

第一节 Keil C51变量(4) 1.3 指针 三、指针存储空间 也可以指定指针所存储的空间 定义格式: 数据类型 *存储空间 指针名; 1.3 指针 一、通用指针 定义时不用指明指针所指向数据的存储空间,指针本身占3个字节。 定义格式: [存储类型] 数据类型 *指针名; 二、专用指针 定义时要指明指针所指向数据的存储空间,指针本身占1个或2个字节。 定义格式: [存储类型] [存储空间] 数据类型 *指针名; 三、指针存储空间 也可以指定指针所存储的空间 定义格式: 数据类型 *存储空间 指针名; 如:int *xdata p1; char *data p2;

第二节 Keil C51函数与中断处理程序 主要内容 1、 Keil C51函数格式 2、 Keil C51参数的传递规则 3、 中断处理程序的格式

2.1 Keil C51函数格式 第二节 Keil C51函数与中断处理程序(1) 格式: [return_type] function_name([args]) [small|compact|large][reentrant] [using m] small|compact|large:存储模式 reentrant:重入函数(可被多个进程同时调用执行,并且函数自身可以递归调用) using m:使用的工作寄存器组。m=0---3 例:char add_func(char aa,char bb) using 1

第二节 Keil C51函数与中断处理程序(2) 2.2 Keil C51函数中参数的传递规则 参数的传递途径有:寄存器、存储器和堆栈(重入函数); 其返回参数均通过寄存器传递。 一、利用寄存器传递参数的规则 如: int func(int a, int b, char *c) 参数a、b、c分别通过R6/R7、R4/R5、R1/R2/R3传递。 参数编号 char,1字节指针 Int,2字节指针 Long, float 一般指针 1 R7 R6(高),R7(低) R4 (高) ---R7 (低) R1,R2,R3 2 R5 R4(高),R5(低) 使用固定地址 存储类型在R3,地址高位在 R2,低位在 R1 3 R3 R2(高),R3(低)

第二节 Keil C51函数与中断处理程序(3) 二、返回参数传递规则 通过寄存器传递 返回类型 使用的寄存器 说 明 Bit 说 明 Bit 进位标志:Cy 单个位通过进位标志Cy返回 char, 1字节指针 R7 单个字节类型通过R7返回 int, 2字节指针 R6, R7 高字节在R6 long R4---R7 高字节在R4 float 32位IEEE格式 一般指针 R1---R3 存储类型在R3,地址高位 在 R2,低位在 R1

2.3 Keil C51中断处理程序的格式 第二节 Keil C51函数与中断处理程序(4) 格式: void function_name( )[{small|compact|large}] interrupt n [using m] interrupt n:中断号。n=0---4,5--- using m:使用的工作寄存器组。m=0---3 注意:中断处理程序没有入口参数、没有返回值 中断号 1 2 3 4 5--- 中断源 外中断0 T0溢出 外中断1 T1溢出 串行中断 ……

主要内容 第三节 Keil C51与汇编语言混合编程方法 1、在C语言中嵌入汇编语言 2、在C51项目中加入汇编语言文件

第三节 Keil C51与汇编语言混合编程方法(1) 方法:用编译控制指令“#pragma src” 和 “#pragma asm / #pragma endasm”实现 “src”为编译控制命令,令编译器将C源文件编译成汇编文件; 格式: #pragma src (放在文件的开始) : [return_type] function_name([args]) [其它参数] { : (C语言源程序) #pragma asm : (汇编语言源程序) # pragma endasm : (C语言源程序) }

第三节 Keil C51与汇编语言混合编程方法(2) 一、KEIL C51对C语言编译成汇编语言的规则 1、 C51中函数名的转换规则 C51函数声明 转换后的函数名 说 明 void func1(void) FUNC1 无参数传递,函数名不改变 type func2(args) _FUNC2 有参数传递,前加“_”,通过寄存器传递 type func3(args) reentrant -?FUNC3 有参数传递,前加“_?”,通过堆栈传递(在调用时也用寄存器传递,在函数中再转存入堆栈中)

第三节 Keil C51与汇编语言混合编程方法(3) 段名前缀 存储区类型 说 明 ?PR? code 可执行程序段 ?CO? 程序存储器中的常数数据段 ?BI? bit 内部数据存储区的位类型数据段 ?BA? bdata 内部数据存储区的可位寻址的数据段 ?DT? data 内部数据存储区的数据段 ?FD? far 外部数据存储区的far型数据段 ?FC? const far 程序存储器中的far型常数数据段 ?ID? idata 内部数据存储区的间接寻址的数据段 ?PD? pdata 外部数据存储区的分页数据段 ?XD? xdata 外部数据存储区的一般数据段

第三节 Keil C51与汇编语言混合编程方法(4) 分成两大部分 1、声明部分 1)模块名定义格式(在文件开始) NAME 模块名 2)子程序代码段声明格式(在模块名定义之后)如: ?PR?[_|_?]函数名1(子程序名1)?模块名 SEGMENT CODE ?PR?[_|_?]函数名2(子程序名2)?模块名 SEGMENT CODE : ?PR?[_|_?]函数名n(子程序名n)?模块名 SEGMENT CODE 3)子程序被调用属性声明格式(紧接前面)如: PUBLIC [_|_?]函数名1(子程序名1) PUBLIC [_|_?]函数名2(子程序名2) PUBLIC [_|_?]函数名n(子程序名n) 示可执行程序段前缀 示通过堆栈传递 参数的重入函数 示通过寄存 器传递参数 声明为公 共子程序

第三节 Keil C51与汇编语言混合编程方法(5) 3、 汇编语言文件子程序段声明例子 NAME SHIYAN ?PR?yinyue?SHIYAN SEGMENT CODE ?PR?_youyi?SHIYAN SEGMENT CODE ?PR?Time0_ISR?SHIYAN SEGMENT CODE ?CO?gepub?SHIYAN SEGMENT CODE ?CO?timexb?SHIYAN SEGMENT CODE PUBLIC yinyue PUBLIC _youyi PUBLIC Timer0_ISR PUBLIC gepub PUBLIC timexb

第三节 Keil C51与汇编语言混合编程方法(6) 2、子程序部分格式 1)子程序开始 RSEG ?PR?[_|_?]函数名(子程序名)? 模块名 2)子程序内容 [_|_?]函数名(子程序名): :[(读取传递过来的参数,如通过寄存器)] : : (子程序源程序) :[(准备返回的参数,如通过寄存器)] RET 例: RSEG ?PR?Timer0_ISR?SHIYAN Timer0_ISR: MOV TH0,time0H MOV TL0,time0L CPL P2.7 RETI

第三节 Keil C51与汇编语言混合编程方法(7) 主要有两部分组成。 1、声明外部函数(在文件开始的声明部分) EXTRN CODE([_|_?]函数名) 2、调用方法(在子程序中) : : [(准备传递给被调函数的参数,如通过寄存器)] LCALL [_|_?]C语言函数名 : [(处理返回的参数)]

第四节 Keil C51使用简介 主要内容 1、界面简介 2、建立项目和文件 3、编译与连接 4、调试方法