keil c51 详细中文手册

合集下载

KeilC51使用教程

KeilC51使用教程

Keil C语言程序设计示例教程(开发C8051F310)使用汇编语言或C语言要使用编译器,以便把写好的程序编译为机器码,才能把HEX可执行文件写入单片机内。

KEIL uVISION是众多单片机应用开发软件中最优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,甚至ARM,它集编辑,编译,仿真等于一体,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。

因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。

在这里以51单片机并结合C程序为例(汇编操作方法类似,唯一不同的是汇编源程序文件名后缀为“.ASM ”),图文描述工程项目的创建和使用方法。

1.首先我们要养成一个习惯:最好先建立一个空文件夹,把您的工程文件放到里面,以避免和其他文件混合,如下图, 创建了一个名为“PRJ_C8051”文件夹2.点击桌面上的Keil uVision4图标,出现启动画面:3.点击“project --- New uVision Project”新建一个工程:4.在对话框,选择放在刚才建立的“PRJ_C8051”文件夹下,给这个工程取个名为Test_C8051F310, 然后保存,工程的后缀为uvporj。

5.弹出一个框,在CPU类型下我们找到并选中“Silicon Laboratories. Inc.”下的C8051F3106.加入C8051起动码7.建立一个源程序文本8.在下面空白区别写入或复制一个完整的C程序:9.输入源程序文件名名称,示例输入“Test_C8051F310.c”,然后保存:10.把刚创建的源程序文件加入到工程项目文件中。

11.设置---目标(第1步~ 第4步)15.工程项目创建和设置全部完成!点击保持并编译16.在C8051F310中的C语言程序示例//-----------------------------------------------------------------------------// Includes// 在c8051f310.h在头文件中定义了C8051F310的寄存器、输入/输出的端口//-----------------------------------------------------------------------------#include <c8051f310.h> // SFR declarations//-----------------------------------------------------------------------------// 16-bit SFR Definitions for 'F30x//-----------------------------------------------------------------------------sfr16 TMR2RL = 0xca; // Timer2 reload valuesfr16 TMR2 = 0xcc; // Timer2 counter//-----------------------------------------------------------------------------// Global CONSTANTS//-----------------------------------------------------------------------------#define SYSCLK 24500000 / 8 // SYSCLK frequency in Hzsbit LED = P0^0; // LED='1' means ON//-----------------------------------------------------------------------------// Function PROTOTYPES//-----------------------------------------------------------------------------void SYSCLK_Init (void);void PORT_Init (void);void Timer2_Init (int counts);void Timer2_ISR (void);//-----------------------------------------------------------------------------// MAIN Routine//-----------------------------------------------------------------------------void main (void){// disable watchdog timerPCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer// enable)SYSCLK_Init (); // Initialize system clock to// 24.5MHzPORT_Init (); // Initialize crossbar and GPIOTimer2_Init (SYSCLK / 12 / 10); // Init Timer2 to generate// interrupts at a 10Hz rate.EA = 1; // enable global interruptswhile (1) // spin forever{}}//-----------------------------------------------------------------------------// SYSCLK_Init//-----------------------------------------------------------------------------//// This routine initializes the system clock to use the internal 24.5MHz / 8// oscillator as its clock source. Also enables missing clock detector reset.//void SYSCLK_Init (void){OSCICN = 0x80; // configure internal oscillator for// its lowest frequency RSTSRC = 0x04; // enable missing clock detector }//-----------------------------------------------------------------------------// PORT_Init//-----------------------------------------------------------------------------//// Configure the Crossbar and GPIO ports.// P3.3 - LED (push-pull)//void PORT_Init (void){// assignmentsXBR0 = 0x00; // no digital peripherals selectedXBR1 = 0x40; // Enable crossbar and weak pull-ups//P3MDOUT |= 0x08;P0MDOUT |= 0x03; // enable LED as a push-pull output}//-----------------------------------------------------------------------------// Timer2_Init//-----------------------------------------------------------------------------//// Configure Timer2 to 16-bit auto-reload and generate an interrupt at// interval specified by <counts> using SYSCLK/48 as its time base.//void Timer2_Init (int counts){TMR2CN = 0x00; // Stop Timer2; Clear TF2;// use SYSCLK/12 as timebase CKCON &= ~0x60; // Timer2 clocked based on T2XCLK;TMR2RL = -counts; // Init reload valuesTMR2 = 0xffff; // set to reload immediatelyET2 = 1; // enable Timer2 interruptsTR2 = 1; // start Timer2}//-----------------------------------------------------------------------------// Interrupt Service Routines//-----------------------------------------------------------------------------//-----------------------------------------------------------------------------// Timer2_ISR//-----------------------------------------------------------------------------// This routine changes the state of the LED whenever Timer2 overflows.//void Timer2_ISR (void) interrupt 5{TF2H = 0; // clear Timer2 interrupt flagLED = ~LED; // change state of LED}17.KEIL C语言与汇编语言的混合编程方法C语言中加入汇编语言模块的方法:例子:void func(){C语言代码……#pragma asmMOV R6,#23DELAY2: MOV R7,#191DELAY1: DJNZ R7,DELAY1DJNZ R6,DELAY2RET#pragma endasmC语言代码……}汇编部分需要用#pragma asm和#pragma endasm包起来18.KEIL C混合编程中的错误与解决方法1)Keil提示“asm/endasm”出错的解决方法如果只是像1中那样直接加入汇编代码的话,编译将会报错,错误如下:compiling sendata.c...sendata.c(81): error C272: 'asm/endasm' requires src-control to be active sendata.c(87): error C272: 'asm/endasm' requires src-control to be active Target not created解决方法如下:首先project workspace窗口右键单击包含有汇编部分的c语言文件名,然后在如上图所示的菜单中选择带有红色方框的选项在弹出的对话框中,将上图中红色方框选中的两项打上勾(默认的情况下,前面的勾是灰色的,要让这两项前的勾变为黑色的),点击确定。

Keil C51初始化代码 Startup.a51的中文说明

Keil C51初始化代码 Startup.a51的中文说明

;
;;
; IDATA 存储器的空间的绝对起始地址总是 0.;
IDATALEN
EQU 80H ; 需用 0 进行初始化的 IDATA 存储器空间的字节数
;
XDATASTART
EQU
0H ; XDATA 存储器空间的绝对起始地址
XDATALEN
EQU
0H ; 需用 0 进行初始化的 XDATA 存储器的空间字节数.
0FFFFH+1; 将堆栈顶设置为最高地址+1.
;
;------------------------------------------------------------------------------
;
; 使用 COMPACT 存储器模式时 64K 字节 XDATA 存储器空间的分页定义
;
XBPSTACKTOP
EQU
0FFFFH+1; 将堆栈顶设置为最高地址+1.
;
; 使用 COMPACT 存储器模式时再入函数的堆栈空间.; 使用 COMPACT 存储器模式时再入函数的堆栈
PBPSTACK
EQU
0 ; 使用 COMPACT 存储器模式再入函数时将其设置成 1.
PBPSTACKTOP
EQU
MOVX
@DPTR,A
INC
DPTR
DJNZ
R7,XDATALOOP
DJNZ
R6,XDATALOOP
ENDIF
;
; 送 PDATA 存储器页面高位地址
IF PAGEENABLE <> 0
MOV
P2,#PPAGE
ENDIF
;
; 单片机上电 PDATA 内存清零 如果不需要上电清零 XDATA

keil C51的详解

keil C51的详解

Keil C51使用详解1作者:未知文章来源:21ic 点击数:3489 更新时间:2005-3-15 第一章 Keil C51开发系统基本知识 (6)第一节系统概述 (6)第二节 Keil C51单片机软件开发系统的整体结构 (6)第三节 Keil C51工具包的安装 (7)1. C51 for Dos 72. C51 for Windows的安装及注意事项: (7)第四节 Keil C51工具包各部分功能及使用简介 (7)1. C51与A51. 72. L51和BL51. 83. DScope51,Tscope51及Monitor51. 84. Ishell及uVision. 9第二章 Keil C51软件使用详解 (10)第一节 Keil C51编译器的控制指令 (10)1. 源文件控制类 (10)2. 目标文件(Object)控制类: (10)3. 列表文件(listing)控制类: (10)第二节 dScope51的使用 (11)1. dScope51 for Dos 112. dScope for Windows 12第三节 Monitor51及其使用 (13)1. Monitor51对硬件的要求 (13)2. Mon51的使用 (13)3. MON51的配置 (13)4. 串口连接图: (13)5. MON51命令及使用 (14)第四节集成开发环境(IDE)的使用 (14)1. Ishell for Dos的使用 (14)2. uVision for windows的使用 (15)第三章 Keil C51 vs 标准C.. 15第一节 Keil C51扩展关键字 (15)第二节内存区域(Memory Areas): (16)1. Pragram Area: (16)2. Internal Data Memory: 163. External Data Memory. 164. Speciac Function Register Memory. 16第三节存储模式 (16)1. Small模式 (16)2. Compact模式 (17)3. large模式 (17)第四节存储类型声明 (17)第五节变量或数据类型 (17)第六节位变量与声明 (17)1. bit型变量 (17)2. 可位寻址区说明20H-2FH.. 18第七节 Keil C51指针 (18)1. 一般指针 (18)2. 存储器指针 (18)3. 指针转换 (18)第八节 Keil C51函数 (19)1. 中断函数声明: (19)2. 通用存储工作区 (19)3. 选通用存储工作区由using x声明,见上例。

Keil c51的使用及界面翻译

Keil c51的使用及界面翻译

Keil C51的使用方法Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。

下面介绍Keil C51软件的使用方法进入Keil C51 后,屏幕如下图所示。

几秒钟后出现编辑界进入Keil C51后的编辑界面简单程序的调试学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。

下面通过简单的编程、调试,引导大家学习Keil C51软件的基本使用方法和基本的调试技巧。

1)建立一个新工程单击Project菜单,在弹出的下拉菜单中选中New Project选项2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51如下图所示,然后点击保存.3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel 的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.4)完成上一步骤后,屏幕如下图所示到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。

5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项新建文件后屏幕如下图所示此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。

注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。

然后,单击“保存”按钮。

6)回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,弹出如下菜单然后单击“Add File to Group …Source Group 1‟” 屏幕如下图所示选中Test.c,然后单击“Add ”屏幕好下图所示注意到“Source Group 1”文件夹中多了一个子项“Text1.c”了吗?子项的多少与所增加的源程序的多少相同在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了吧,即Keil c51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。

Keil c51的使用及界面翻译

Keil c51的使用及界面翻译

Keil C51的使用方法Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。

下面介绍Keil C51软件的使用方法进入Keil C51 后,屏幕如下图所示。

几秒钟后出现编辑界进入Keil C51后的编辑界面简单程序的调试学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。

下面通过简单的编程、调试,引导大家学习Keil C51软件的基本使用方法和基本的调试技巧。

1)建立一个新工程单击Project菜单,在弹出的下拉菜单中选中New Project选项2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51如下图所示,然后点击保存.3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel 的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.4)完成上一步骤后,屏幕如下图所示到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。

5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项新建文件后屏幕如下图所示此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。

注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。

然后,单击“保存”按钮。

6)回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,弹出如下菜单然后单击“Add File to Group …Source Group 1‟” 屏幕如下图所示选中Test.c,然后单击“Add ”屏幕好下图所示注意到“Source Group 1”文件夹中多了一个子项“Text1.c”了吗?子项的多少与所增加的源程序的多少相同在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了吧,即Keil c51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。

(参考资料)Keil C51 uVision4使用指南

(参考资料)Keil C51 uVision4使用指南

圖 1-6 選取晶片型號
圖 1-7 詢問是否需要加入 8051 啟動碼 STARTUP.a51 的主要工作是把包含 idata、xdata、及 pdata 在內的記憶體區塊清除為 0,並且初始化遞迴指標。STARTUP.a51 的內容在附錄 1 中,用戶可自行參考。注意, 若是編寫組合語言程式,則不需加入此啟動程式。在完成上述的初始化程序之後,8051 的控制權才會交給 main()主程式開始執行用戶的程式。 (3) 首先在專案中建立新的程式檔案或加入舊程式檔案。如果您沒有現成的程式或 是第一次使用,那麼就要新建一個 C 程式檔案。在 C51 中有一些程式的範例,但是在 這裡我們還是以一個 C 程式為例介紹如何新建一個 C 程式,和如何加到您的第一個專 案中吧。點擊圖 1-8 中 1 的新建文件的圖示按鈕,在 2 中出現一個新的文字編輯視窗, 或是也能透過選單 File/New 或是按下快速鍵 Ctrl+n 來實現。接著現在就能編寫程式了。
圖 1-5 選擇舊版或新版的專案檔副檔名 (2) 選擇所要的單晶片型號,這裡選擇常用的 Ateml 公司的 AT89S51。目前 Atmel 已經停產 AT89C51/AT89C52,改由 AT89S51/AT89S52 來取代之。AT89S 系列較 AT89C 系列更為便宜,工作頻率可高達 33 MHz,且重複燒錄次數至少可達一千次以上,非常 適合學校學習或工程師開發產品之用。所以本講義裡的大部分程式都是基於此 AT89S51 晶片的,此時螢幕如圖 1-6 所示。在右邊圖中的“Description”方塊內,會簡單的介紹 AT89S51 有什麼功能及特點。點選 OK 按鈕後,會出現圖 1-7,詢問你是否需要拷貝標 準的 8051 啟動碼程式(STARTUP.a51)到你的專案資料夾,並且將此檔案加入專案“Copy Standard 8051 Startup Code to Project Folder and Add File to Project”,點選“是”後,就可以 進行程式的編寫了。

Keil C51在线仿真功能详解

仿真机复位按键1.首先将附配的232 DB9Ping连接线接入学习板的232端口,将另一端接入PC机的232端口,再将附配的USB连接线接入学习板的USB端口,将另一端插入PC机的USB端口,完成学习板向PC机取电的工作,是仿真机工作,先不要按下学习 板上的电源开关.3.点击上图画了红色圆圈的图标按钮,会弹出下面的窗口:4.出现如上图的窗口,再点击"调试"按钮,出现如下图的选择框:21如果你要在目标板上看到程序全速运行的结果,那么此项目必须选择,否则程序只是调试,程序将不能加载到仿真器中,就在目标板上看不到运行效果!35.按照上图红色的表识的进行设置,然后点击"确定"按钮,此时按下学习板的电源开关,使仿真机供电,再将坊真机的 复位按钮按一下,是仿真机先复位(注意每次启动仿真机都要复位)复位按键在第一个图片画红色圆圈的那个按键哦6.再点击上图画红色圆圈"调试"7.出现上图画红色方框的字样,则表示Keil软件已经识别到仿真机型号和版本,现在你可以在线调试你的设计程序了 而不需要每次都下载到单片机上,才知道程序是否能正常运行.能即时发现程序哪里出错,并能立即修改和运行. 现在你可以开始你的程序在线仿真了!8.如果你在连接仿真机进行仿真的时候,出现下图的提示,你要检查学习板上的电源开关有没有按下,板上的电源指示灯有没有亮,40Ping专用仿真线有没有插反.上图红色圆圈的三角形位置,不可接反,否则会损坏仿真机!特别注意例:现在以教程中“APW-C51学习板实验程序带源码语句”文件夹中的“流水灯实验(C语言,汇编)” 子文件夹中“LED流水灯(汇编)”的文件为例,介绍仿真器的使用方法:1.首先启动"Keil uVision2"软件,如下图点击 建立一个设计工程,选择"N新建工程",如下图:文件名:就写"流水灯实验"吧!然后选择CPU(就是单片机型号),我们以AT89C51为例,点击"确定".在点击 新建一个程序文件,本例就直接将文件复制过来,"LED流水灯(汇编)"文件中的将源码语句如上图所示复制到新建文档中,再点击 将文件保存起来,保存名字假如为:写好文件名,就点击"保存"按钮,再点击 此图的加号,如下图所示:将鼠标移动到 此文件上,点击右键,选择"增中文件到组Source Group1"出现下图:选择之前保存过的文件 选择文件后如下图所示:点击"Add"选择文件,如下图所示,表示添加成功.然后编译文件点击 会出现如下图所示:然后就按照最初的仿真器与KEIL软件的设置,点击 选择"开始调试"开始调试仿真程序,如下图所示:点击 你会看见,程序在学习板上运行,你可以开始调试仿真了,不但可以在本学习板上实现仿真,也其他的目标板上运行,只需要将仿真线的另一头接到你的目标板上就可以了,可以选择不同的频率晶体,进行仿真超频.注意每次使用前和使用后都要将仿真器复位(按一下复位开关)。

Keil C51软件的安装与使用

Keil C51软件的安装与使用一、系统要求安装Keil C51集成开发软件,必须满足一定的硬件和软件要求,才能确保编译器以及其他程序功能正常,必须具有:Pentium、Pentium-II或兼容处理器的PC;Windows95、Windows98、WindowsNT4.0、 Windows2000、Windowsxp;至少16MRAM;至少20MB硬盘。

二、软件的安装下面以Keil C51 V7.10版为例,介绍如何安装Keil uVision3集成开发环境。

2.1拿出随机赠送的系统光盘放入光驱中(假设E盘),进入E:\单片机开发工具\Keil_setup\目录,这时你会看到Setup.EXE文件,双击该文件即可安装。

2.2 这时会出现如图2.1所示的安装初始画面,稍后弹出一个安装向导对话框如图2.2所示,询问用户是安装评估版(Eval Version)还是完全版(Full Version),可以选Full Version。

图2.1图2.2在此后弹出的几个对话框中选择Next,这时会出现一个如图2.4 所示的安装路径设置对话框,默认路径是C:\KEIL,图2.3 当然用户点击Browse 选择适合自己的安装目录,如D:\Keil C51。

2.5在接下来的询问确认对话框如图2.4中选择Next命令按钮加以确认即可继续安装。

图2.42.6 接下来就是等待安装,安装完毕后单击Finish 加以确认,此时您可以在桌面上看到Keil uVision3软件的快捷图标,双击它就可以进入Keil C51集成开发环境。

3) Keil C51软件的使用Keil C51集成开发环境是以工程的方法来管理文件的,而不是单一文件的模式。

所有的文件包括源程序(包括C程序、汇编程序)、头文件、甚至说明性的技术文档都可以放在工程项目文件里统一管理。

在使用Keil C51前,您应该习惯这种工程管理方式,对于刚刚使用Keil C51的用户来说,一般按照以下步骤来创建一个自己的Keil C51应用程序。

C51使用详解

Keil C51使用详解V1.0©电子设计世界版权所有欢迎转贴请勿修改并注明出处保留一切权利第一章 Keil C51开发系统基本知识 (6)第一节系统概述 (6)第二节Keil C51单片机软件开发系统的整体结构 (6)第三节Keil C51工具包的安装 (7)1. C51 for Dos 72. C51 for Windows的安装及注意事项 (7)第四节Keil C51工具包各部分功能及使用简介 (7)1. C51与A51. 72. L51和BL51. 83. DScope51Tscope51及Monitor51. 84. Ishell及uVision. 9第二章 Keil C51软件使用详解 (10)第一节Keil C51编译器的控制指令 (10)1. 源文件控制类 (10)2. 目标文件(Object)控制类 (10)3. 列表文件(listing)控制类 (10)第二节dScope51的使用 (11)1. dScope51 for Dos 112. dScope for Windows 12第三节Monitor51及其使用 (13)1. Monitor51对硬件的要求 (13)2. Mon51的使用 (13)3. MON51的配置 (13)4. 串口连接图 (13)5. MON51命令及使用 (14)第四节集成开发环境(IDE)的使用 (14)1. Ishell for Dos的使用 (14)2. uVision for windows的使用 (15)第三章 Keil C51 vs 标准C.. 15第一节Keil C51扩展关键字 (15)第二节内存区域(Memory Areas) (16)1. Pragram Area (16)2. Internal Data Memory: 163. External Data Memory. 164. Speciac Function Register Memory. 16第三节存储模式 (16)1. Small模式 (16)2. Compact模式 (17)3. large模式 (17)第四节存储类型声明 (17)第五节变量或数据类型 (17)第六节位变量与声明 (17)1. bit型变量 (17)2. 可位寻址区说明20H2FH.. 18第七节Keil C51指针 (18)1. 一般指针 (18)2. 存储器指针 (18)3. 指针转换 (18)第八节Keil C51函数 (19)1. 中断函数声明 (19)2. 通用存储工作区 (19)3. 选通用存储工作区由using x声明见上例 (19)4. 指定存储模式 (19)5. #pragma disable. 196. 递归或可重入函数指定 (19)7. 指定PL/M51函数 (20)第四章 Keil C51高级编程 (20)第一节绝对地址访问 (20)1. 绝对宏 (20)2. _at_关键字 (21)3. 连接定位控制 (21)第二节Keil C51与汇编的接口 (21)1. 模块内接口 (21)2. 模块间接口 (21)第三节Keil C51软件包中的通用文件 (22)1. 动态内存分配 (22)2. C51启动文件STARTUP.A51. 223. 标准输入输出文件 (25)4. 其它文件 (25)第四节段名协定与程序优化 (25)1. 段名协定(Segment Naming Conventions) 252. 程序优化 (25)第五章 Keil C51库函数参考 (26)第一节本征库函数(intrinsic routines)和非本征证库函数 (26)第二节几类重要库函数 (26)1. 专用寄存器include文件 (26)2. 绝对地址include文件absacc.h. 263. 动态内存分配函数位于stdlib.h中 (27)4. 缓冲区处理函数位于string.h”中 (27)5. 输入输出流函数位于stdio.h”中 (27)第三节Keil C51库函数原型列表 (27)1. CTYPE.H.. 272. INTRINS.H.. 273. STDIO.H.. 284. STDLIB.H.. 285. STRING.H.. 28第六章 Keil C51例子Hello.c.. 29第一节uVision for Windows的使用步骤 (29)第二节Ishell for Dos使用步骤 (30)第七章 Keil C51的代码效率 (30)第一节存储模式的影响 (30)第二节程序结构的影响 (31)第八章 dScope for Windows使用详解 (32)第一节概述 (32)1. 主窗口Mainframe Window (32)2. 调试窗口DEBUG Window (32)3. 命令窗口Command Window (32)4. 观察窗口Watch Window (32)5. 寄存器窗口Registe Window (32)6. 串口窗口Serical Windows (32)7. 性能分析窗口 (32)8. 内存窗口Memory Window (32)9. 符号浏览窗口Symbol Browser Window (33)10. 调用线窗口Call Stack Window (33)11. 代码覆盖窗口 (33)12. 外围设备窗口(peripherals) 33第二节dScope for Windows基本操作 (33)1. 指定初始化文件 (33)2. 观察变量 (33)3. 显示RAM的值 (34)4. 观察堆栈 (34)5. 中断处理程序调试 (34)6. 性能分析Performance Analyzer PA (34)第三节dScope for Windows命令文件的编制 (34)1. 地址空间及地址空间类型 (34)2. 常量 (35)3. 变量 (36)4. 运算符 (38)5. 表达式 (38)6. 数组 (38)7. 结构和联合 (38)8. 指针 (38)9. dScope命令语句 (38)10. 函数 (43)第一章 Keil C51开发系统基本知识第一节系统概述Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统与汇编相比C语言在功能上结构性可读性可维护性上有明显的优势因而易学易用用过汇编语言后再使用C来开发体会更加深刻Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具全Windows 界面另外重要的一点只要看一下编译后生成的汇编代码就能体会到Keil C51生成的目标代码效率非常之高多数语句生成的汇编代码很紧凑容易理解在开发大型软件时更能体现高级语言的优势下面详细介绍Keil C51开发系统各部分功能和使用第二节Keil C51单片机软件开发系统的整体结构C51工具包的整体结构如图(1)所示其中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE)可以完成编辑编译连接调试仿真等整个开发流程开发人员可用IDE本身或其它编辑器编辑C或汇编源文件然后分别由C51及A51编译器编译生成目标文件(.OBJ)目标文件可由LIB51创建生成库文件也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)ABS文件由OH51转换成标准的Hex文件以供调试器dScope51或tScope51使用进行源代码级调试也可由仿真器使用直接对目标板进行调试也可以直接写入程序存贮器如EPROM中图(1) C51工具包整体结构图第三节Keil C51工具包的安装1. C51 for Dos在Windows下直接运行软件包中DOS\C51DOS.exe然后选择安装目录即可完毕后欲使系统正常工作须进行以下操作(设C:\C51为安装目录)修改Autoexec.bat加入path=C:\C51\BinSet C51LIB=C:\C51\LIBSet C51INC=C:\C51\INC然后运行Autoexec.bat2. C51 for Windows的安装及注意事项在Windows下运行软件包中WIN\Setup.exe最好选择安装目录与C51 for Dos 相同这样设置最简单(设安装于C:\C51目录下)然后将软件包中crack目录中的文件拷入C:\C51\Bin目录下第四节Keil C51工具包各部分功能及使用简介1. C51与A51(1) C51C51是C语言编译器其使用方法为C51 sourcefile[编译控制指令]或者C51 @ commandfile其中sourcefile为C源文件(.C)大量的编译控制指令完成C51编译器的全部功能包控C51输出文件C.LST.OBJ.I和.SRC文件的控制源文件(.C)的控制等详见第五部分的具体介绍而Commandfile为一个连接控制文件其内容包括.C源文件及各编译控制指令它没有固定的名字开发人员可根据自己的习惯指定它适于用控制指令较多的场合(2) A51A51是汇编语言编译器使用方法为A51 sourcefile[编译控制指令]或A51 @ commandfile其中sourcefile为汇编源文件(.asm或.a51)而编译控制指令的使用与其它汇编如ASM 语言类似可参考其他汇编语言材料Commandfile同C51中的Commandfile类似它使A51使用和修改方便2. L51和BL51(1) L51L51是Keil C51软件包提供的连接/定位器其功能是将编译生成的OBJ文件与库文件连接定位生成绝对目标文件(.ABS)其使用方法为L51 目标文件列表[库文件列表] [to outputfile] [连接控制指令]或L51 @Commandfile源程序的多个模块分别经C51与A51编译后生成多个OBJ文件连接时这些文件全列于目标文件列表中作为输入文件如果还需与库文件(.LiB)相连接则库文件也必须列在其后outputfile为输文件名缺少时为第一模块名后缀为.ABS 连接控制指令提供了连接定位时的所有控制功能Commandfile为连接控制文件其具体内容是包括了目标文件列表库文件列表及输出文件连接控制命令以取代第一种繁琐的格式由于目标模块库文件大多不止1个因而第2种方法较多见这个文件名字也可由使用者随意指定(2) Bl51BL51也是C51软件包的连接/定位器其具有L51的所有功能此外它还具有以下3点特别之处a. 可以连接定位大于64kBytes的程序b. 具有代码域及域切换功能(CodeBanking & Bank Switching)c. 可用于RTX51操作系统RTX51是一个实时多任务操作系统它改变了传统的编程模式甚至不必用main( )函数单片机系统软件向RTOS发展是一种趋势这种趋势对于186和386及68K系列CPU更为明显和必须对8051因CPU较为简单程序结构等都不太复杂RTX51作用显得不太突出其专业版软件PK51软件包甚至不包括RTX51Full 而只有一个RTX51TINY版本的RTOS RTX51 TINY适用于无外部RAM的单片机系统因而可用面很窄在本文中不作介绍Bank switching技术因使用很少也不作介绍3. DScope51Tscope51及Monitor51(1) dScope51dScope51是一个源级调试器和模拟器它可以调试由C51编译器A51汇编器PL/M-51编译器及ASM51汇编器产生的程序它不需目标板for windows也可通过mon51接目标板只能进行软件模拟但其功能强大可模拟CPU及其外围器件如内部串口外部I/O及定时器等能对嵌入式软件功能进行有效测试其使用方法为DS51[debugfile][INIT(initfile)]其中debugfile是一个Hex格式的8051文件即待调试的文件其为可选的可在进入dScope51后用load命令装入Initfile为一个初使化文件它在启动dScope51后在debugfile装入前装入装有一些dScope的初使化参数及常用调试函数等下面是一个dScope.ini文件(for dos)的内容Load ..\..\ds51\8051.iofMap 0,0xffffdScope51 for Windows则直接用鼠标进入然后用load装入待调文件(2) tScope51与dScope51不同的是Scope51必须带目标板目前它可以通过两种方式访问目标板(1) 通过EMul51在线仿真器tScope51为该仿真器准备了一个动态连接文件EMUL51.IOT但该方法必须配合该仿真器(2) 通过Monitov51监控程序这种方法是可行的tScope51为访问Monitor51专门带有MON51.IOT连接程序使用时可通过串口及监控程序来调试目标板其使用方法为TS51[INIT(file_name.ini)]其中file_name.ini为一个初使化文件进入TS51后必须装入IOT文件可用的有MON51.IOT及EMUL51.IOT两种如装入MON51.IOTLoad.C:\C51\TS51\MON51.IOT CPUTYPE(80517)可惜的是tScope51只有for Dos的版本(3) Monitor 51Monitor51是一个监控程序通过PC机的串口与目标板进行通信Monitor操作需要MON51或dScope51 for Windows,后面部分将对Monitor51做较为详细的介绍4. Ishell及uVision(1) Ishell for Dos这是一个for Dos的IDE直接在命令行键入Ishell则进入该环境它使用简单方便其命令行与DOS命令行具有同样的功能对单模块的Project直接由菜单进行编译连接对多模块的project则通过批处理BAT文件进行编译连接然后通过菜单控制由dScope51或tScope51对程序进行调试因为是for dos的不做太详细介绍(2) uVision for WindowsuVision for Windows是一个标准的Windows应用程序它是C51的一个集成软件开发平台具有源代码编辑project管理集成的make等功能它的人机界面友好操作方便是开发者的首选具体配置及使用见第五部分第二章 Keil C51软件使用详解第一节Keil C51编译器的控制指令C51编译器的控制指令分为三类源文件控制类目标文件控制类及列表控制类1. 源文件控制类NOEXTEND C51源文件不允许使用ANSI C扩展功能DEFINE(DF)定义预处理(在C51命令行)2. 目标文件(Object)控制类COMPACT LARGE SMALL 选编译模式DEBUG(DB) 包含调试信息以供仿真器或dSCope51使用NOAMAKE(NOAM) 禁止AutoMake信息记录NOREGPARMS 禁止用寄存器传递参数OBJECTEXTEND(OE) Object文件包含附加变量类型信息OPTIMIZE(OT) 指定优化级别REGFILE(RF) 指定一个寄存器使用的文件以供整体优化用REGISTERBANK(RB) 指定一个供绝对寄存器访问的寄存器区名SRC 不生成目标文件只生成汇编源文件其它控件不常用3. 列表文件(listing)控制类CODE(CD)向列表文件加入汇编列表LISTINCLUDE(LC)显示indude文件SYMBOLS(SB)列表文件包括模块内所有符号的列表WARNINGLEVEL(WL)选择警告级别第二节dScope51的使用1. dScope51 for Dos总的来说dScope51具有以下特性高级语言显示模式集成硬件环境模拟单步或GO”执行模式存储器寄存器及变量访问Watch表达式之值函数与信号功能下面具体说明在进入dScope51 for Dos之后如何实现上述功能dScope51采用下拉菜单格式和窗口显示控制共有language serial exe register四个窗口其中exe为命令行窗口language为程序窗口serial为串口窗register为寄存器窗(1) 高级语言显示模式单击主菜单中的View”第一栏中的三条命令Highlevel”Mixed”Assembly”分别对所装入的程序按照高级混合级及汇编级三种方式显示以方便调试使用(2) 集成硬件环境模拟显示主菜单中Peripheral”各条能显示模拟硬件环境的状态其中i/o Port显示各I/O口之值对8031而言SFR中的P1P2P3P0与引脚之值分别列出Interrupt显示5个中断源的入口模式是否允许优先级等中断状态Timer显示各定时/计数器的模式初始值状态等int Message中断信息允许如为允许(“>>”出现)则当中断申请时显示中断源信息比如当中断发生时会显示“interrupt Timer 0 occured”等A/D converter显示A/D转换器状态无时则提示无Serial串口信息显示包括串口模式波特产等Other其它器件如为8031则显示无(3) 单步或Go”执行F8”单步执行F5”全速执行到断点或选主菜单中Trace单步执行CPU中的Go全速执行(4) 存储器寄存器及变量访问外部存储器管理MAP菜单设置(set)取消(reset)显示(Display)处理可用存储修改Code代码ASM命令存储器显示命令 D 类别为(X D I B C)修改存储器命令 E 有以下几种命令EB EC EI EL EF EP复杂数据类型显示Object命令用以显示结构或数组的内容欲使此命令有效C51编译器必须有DB及OBJECTEXTEND两条反汇编命令U(5) “Watch”表达式之值在View菜单的Watch”一栏中有四项其中包括定义Watch Point(Define)删除Watch Point(remove,kill all)及自动更新选项也可用WS WK等命令代替下面具体看表达式类型dScope51一次最多可设16个WtchPoint表达式显示于Watch Window之中表达式可以是简单变量也可是复杂数据类型如结构数组和指向结构的指针等例如>WS *ptime>WS ptime hour>WS some_record[o]analog等等(6) 关于.IOF文件启动DS51后必须装入.IOF文件才能使CPU及Peripheral各项起作用这个函数的使用是依据8051系列CPU的不同特点装入8051各CPU硬件设备模拟驱动文件比如8031CPU就必须load DS51目录下的8051.IOF2. dScope for WindowsdScope for windows具有dScope for dos的全部功能此外它还具有以下明显的优点(1) 标准的Windows界面操作更容易更简单(2) 常用操作多用对话框而非Dos的行命令方式(3) 窗口资源更加丰富存储器窗口覆盖率分析运行状态分析窗口加强了调因为dScope for Windows功能强大具体操作在第八章详细介绍第三节Monitor51及其使用1. Monitor51对硬件的要求(1) 硬件系统为51系列CPU(2) 带5K外部程序存储器(从O地址开始)存放Monitor51程序(3) 256Bytes的外部数据存储器以及5K的跟踪缓冲区此外外部数据存储器必须足够容纳所有应用程序代码及数据且所有外部数据存储器必须为冯诺伊曼存储器即能一致访问XDATA与Code空间(4) 一个定时器作为波特率发生器供串口使用(5) 6 Bytes的空余堆栈2. Mon51的使用Mon51的使用途径有三种方式(1) Dos行命令方式即先用install对MON51进行配置然后用MON51进入Monitor状态启用各种命令对Monitor51进行调试(2) tScope51方式启动tScope51装入TS51目录下的MON51.IOT驱动文件与目标板通信(3) dScope51 for Windows方式在选CPU驱动文件时选MON51.dll”则检查目标板并进入MON51状态3. MON51的配置(1) MON51 for Dos的配置运行install文件(在MON51目录下)不同的参数可以配置不同的硬件环境INSTALL Serialtype [xdstastart[codestart[bank][PROMCHECK]]]具体说明见MON51帮助文件或使用手册(2) MON51 for Windows的配置在启用MON51.dll时会使得系统自动检查目标板连接如配置不对则弹出Configuration”对话框设置PC串口波特率等完毕单击apply”有效4. 串口连接图收发交叉互连RTS CTS直连DSR DTR直连具体引脚排列参考串口资料5. MON51命令及使用详细的MON51命令可参阅帮助第四节集成开发环境(IDE)的使用1. Ishell for Dos的使用进入Ishell之后看到两个窗口一个是文件窗口一个是Dos命令行窗口窗口上方是下拉式的命令菜单其中的Files控制文件窗口的显隐使用Ishell第一步就是配置系统即要学习两个文件的修改与创建(1) Ishell.CFG文件每一个project都有一个Ishell.CFG其中存放有Option菜单和Setup菜单下的部分信息Bell enabled Monochrome enabled Editor Selected CRT Lines target enviroment name of user edit Automatic load for configuration enabled file window enabled file specification for file window translate command line controls project name 等对每个project都必须设置以上信息然后存盘setup”的的save”这样才可正式开始下面工作(2) IShell.col文件对IDE颜色设置如不改动可以缺省为主(3) CDF文件该文件位于BIN目录下每一文件定义一组外部函数工具包即定义外部环境如8051.CDF USER.CDF等开发者可修改CDF文件供自己使用至于CDF文件内容可查看一下8051.CDF即可知道注意.CDF文件是Ishell系统的核心所在不同的CDF文件可使本IDE适用于不同的编译连接系统即本IDE并不仅适于C51下面谈一谈Automake工具C51的Automake是一个project管理器在8051工具包中以OBJECT文件形式保留了一个project的信息AutoMake用这些信息来进行project管理一旦手工建立一个project Automake可生成一个新的OBJECT AutoMake利用此文件来编译那些修改过的文件Automake支持C51A51L51/BL51C166A166L166等编译连接器点中主菜单中的Automake即运行本工具Ishell for Dos使用比较繁琐推荐使用uVision for windows2. uVision for windows的使用uVision是一个标准的windows应用程序其编译功能文件处理功能project 处理功能窗口功能以及工具引用功能(如A51C51PL/M41BL51 dScope等)等都较Ishell for Dos要强得多uVision采用BL51作连接器因为BL51兼容L51所以一切能在Dos下工作的project都可以到uVision中进行连接调试uVision采用dScope for windows作调试器该调试器支持MON51及系统模拟两种方式功能较for DOS要强大好用调试功能强大注意(1) Option菜单下的各项要会使用其中A51C51PL/M51BL51定义各文件所使用的编译连接控制指令dScope定义一个dScope初始化文件Make则是定义一个make文件(2) 进入调试是在RUN菜单下运行dScope(3) project中包括新建打开修改更新编译连接等poject处理具体使用可参考后面的例子第三章 Keil C51 vs 标准C深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一因为大多数扩展功能都是直接针对8051系列CPU硬件的大致有以下8类8051存储类型及存储区域存储模式存储器类型声明变量类型声明位变量与位寻址特殊功能寄存器(SFR)C51指针函数属性具体说明如下(8031为缺省CPU)第一节Keil C51扩展关键字C51 V4.0版本有以下扩展关键字(共19个)_at_ idata sfr16 alien interrupt smallbdata large _task_ Code bit pdatausing reentrant xdata compact sbit data sfr第二节内存区域(Memory Areas)1. Pragram Area由Code说明可有多达64kBytes的程序存储器2. Internal Data Memory:内部数据存储器可用以下关键字说明data直接寻址区为内部RAM的低128字节00H7FHidata间接寻址区包括整个内部RAM区00H FFHbdata可位寻址区20H2FH3. External Data Memory外部RAM视使用情况可由以下关键字标识xdata可指定多达64KB的外部直接寻址区地址范围0000H0FFFFHpdata能访问1页(25bBytes)的外部RAM主要用于紧凑模式(Compact Model) 4. Speciac Function Register Memory8051提供128Bytes的SFR寻址区这区域可位寻址字节寻址或字寻址用以控制定时器计数器串口I/O及其它部件可由以下几种关键字说明sfr字节寻址比如sfr P0=0x80;为PO口地址为80H后H FFH之间的常数sfr16字寻址如sfr16 T2=0xcc;指定Timer2口地址T2L=0xcc T2H=0xCD sbit位寻址如sbit EA=0xAF;指定第0xAF位为EA即中断允许还可以有如下定义方法sbit 0V=PSW^2(定义0V为PSW的第2位)sbit 0V0XDO^2(同上)或bit 0V-0xD2(同上)第三节存储模式存储模式决定了没有明确指定存储类型的变量函数参数等的缺省存储区域共三种1. Small模式所有缺省变量参数均装入内部RAM优点是访问速度快缺点是空间有限只适用于小程序2. Compact模式所有缺省变量均位于外部RAM区的一页(256Bytes)具体哪一页可由P2口指定在STARTUP.A51文件中说明也可用pdata指定优点是空间较Small为宽裕速度较Small慢较large要快是一种中间状态3. large模式所有缺省变量可放在多达64KB的外部RAM区优点是空间大可存变量多缺点是速度较慢提示存储模式在C51编译器选项中选择第四节存储类型声明变量或参数的存储类型可由存储模式指定缺省类型也可由关键字直接声明指定各类型分别用code,data,idata,xdata,pdata说明例data uar1char code array[ ]hello!”;unsigned char xdata arr[10][4][4]第五节变量或数据类型C51提供以下几种扩展数据类型bit 位变量值为0或1sbit 从字节中定义的位变量0或1sfr sfr字节地址0255sfr16 sfr字地址065535其余数据类型如char,enum,short,int,long,float等与ANSI C相同第六节位变量与声明1. bit型变量bit型变量可用变量类型函数声明函数返回值等存贮于内部RAM20H2FH 注意(1) 用pragma disable说明函数和用usign”指定的函数不能返回bit值(2) 一个bit变量不能声明为指针如bit *ptr是错误的(3) 不能有bit数组如bit arr[5]错误2. 可位寻址区说明20H2FH可作如下定义int bdata ichar bdata arr[3]然后sbit bito in0sbit bit15=I^15sbit arr07=arr[0]^7sbit arr15=arr[i]^7第七节Keil C51指针C51支持一般指针(Generic Pointer)和存储器指针(Memory_Specific Pointer).1. 一般指针一般指针的声明和使用均与标准C相同不过同时还可以说明指针的存储类型例如long * state;为一个指向long型整数的指针而state本身则依存储模式存放char * xdata ptr ptr为一个指向char数据的指针而ptr本身放于外部RAM区以上的long,char等指针指向的数据可存放于任何存储器中一般指针本身用3个字节存放分别为存储器类型高位偏移低位偏移量2. 存储器指针基于存储器的指针说明时即指定了存贮类型例如char data * str;str指向data区中char型数据int xdata * pow; pow指向外部RAM的int型整数这种指针存放时只需一个字节或2个字节就够了因为只需存放偏移量3. 指针转换即指针在上两种类型之间转化当基于存储器的指针作为一个实参传递给需要一般指针的函数时指针自动转化如果不说明外部函数原形基于存储器的指针自动转化为一般指针导致错误因而请用include”说明所有函数原形可以强行改变指针类型第八节Keil C51函数C51函数声明对ANSI C作了扩展具体包括1. 中断函数声明中断声明方法如下void serial_ISR () interrupt 4 [using 1]{/* ISR */}为提高代码的容错能力在没用到的中断入口处生成iret语句定义没用到的中断/* define not used interrupt, so generate "IRET" in their entrance */void extern0_ISR() interrupt 0{} /* not used */void timer0_ISR () interrupt 1{} /* not used */void extern1_ISR() interrupt 2{} /* not used */void timer1_ISR () interrupt 3{} /* not used */void serial_ISR () interrupt 4{} /* not used */2. 通用存储工作区3. 选通用存储工作区由using x声明见上例4. 指定存储模式由small compact 及large说明例如void fun1(void) small { }提示small说明的函数内部变量全部使用内部RAM关键的经常性的耗时的地方可以这样声明以提高运行速度5. #pragma disable在函数前声明只对一个函数有效该函数调用过程中将不可被中断6. 递归或可重入函数指定在主程序和中断中都可调用的函数容易产生问题因为51和PC不同PC使用堆栈传递参数且静态变量以外的内部变量都在堆栈中而51一般使用寄存器传递参数内部变量一般在RAM中函数重入时会破坏上次调用的数据可以用以下两种方法解决函数重入a在相应的函数前使用前述#pragma disable”声明即只允许主程序或中断之一调用该函数b将该函数说明为可重入的如下void func(param...) reentrant;KeilC51编译后将生成一个可重入变量堆栈然后就可以模拟通过堆栈传递变量的方法由于一般可重入函数由主程序和中断调用所以通常中断使用与主程序不同的R 寄存器组另外对可重入函数在相应的函数前面加上开关#pragma noaregs”以禁止编译器使用绝对寄存器寻址可生成不依赖于寄存器组的代码7. 指定PL/M51函数由alien指定第四章 Keil C51高级编程本章讨论以下内容绝对地址访问C与汇编的接口C51软件包中的通用文件段名转换与程序优化第一节绝对地址访问C51提供了三种访问绝对地址的方法1. 绝对宏在程序中用include<absacc.h>”即可使用其中定义的宏来访问绝对地址包括CBYTE XBYTE PWORD DBYTE CWORD XWORD PBYTE DWORD具体使用可看一看absacc.h便知例如rval=CBYTE[0x0002];指向程序存贮器的0002h地址rval=XWORD [0x0002];指向外RAM的0004h地址2. _at_关键字直接在数据定义后加上_at_ const即可但是注意(1)绝对变量不能被初使化(2)bit型函数及变量不能用_at_指定例如idata struct link list _at_ 0x40;指定list结构从40h开始xdata char text[25b] _at_0xE000指定text数组从0E000H开始提示如果外部绝对变量是I/O端口等可自行变化数据需要使用volatile关键字进行描述请参考absacc.h3. 连接定位控制此法是利用连接控制指令code xdata pdata \data bdata对段地址进行如要指定某具体变量地址则很有局限性不作详细讨论第二节Keil C51与汇编的接口1. 模块内接口方法是用pragma语句具体结构是#pragma asm汇编行#pragma endasm这种方法实质是通过asm与ndasm告诉C51编译器中间行不用编译为汇编行因而在编译控制指令中有SRC以控制将这些不用编译的行存入其中2. 模块间接口C模块与汇编模块的接口较简单分别用C51与A51对源文件进行编译然后用L51将obj文件连接即可关键问题在于C函数与汇编函数之间的参数传递问题C51中有两种参数传递方法(1) 通过寄存器传递函数参数最多只能有3个参数通过寄存器传递规律如下表参数数目Char Int long,float 一般指针1 R7 R6 & R7 R4R7 R1R32 R5 R4 & R5 R4R7 R1R33 R3 R2 & R3 R1R3(2) 通过固定存储区传递(fixed memory)这种方法将bit型参数传给一个存储段中function_name?BIT将其它类型参数均传给下面的段function_name?BYTE,且按照预选顺序存放至于这个固定存储区本身在何处则由存储模式默认(3) 函数的返回值函数返回值一律放于寄存器中有如下规律Return type Registev 说明Bit 标志位由具体标志位返回char/unsigned charR7 单字节由R7返回1_byte指针R6 & R7 双字节由R6和R7返回,MSB在R6 int/unsigned int2_byte指针long&unsigned long R4R7 MSB在R4, LSB在R7Float R4R7 32Bit IEEE格式一般指针R1R3 存储类型在R3 高位R2 低R1 (4) SRC控制该控制指令将C文件编译生成汇编文件(.SRC)该汇编文件可改名后生成汇编.ASM 文件再用A51进行编译第三节Keil C51软件包中的通用文件在C51\LiB目录下有几个C源文件这几个C源文件有非常重要的作用对它们稍事修改就可以用在自己的专用系统中1. 动态内存分配init_mem.C此文件是初始化动态内存区的程序源代码它可以指定动态内存的位置及大小只有使用了init_mem( )才可以调回其它函数诸如malloc calloc,realloc 等calloc.c此文件是给数组分配内存的源代码它可以指定单位数据类型及该单元数目malloc.c此文件是malloc的源代码分配一段固定大小的内存realloc.c此文件是realloc.c源代码其功能是调整当前分配动态内存的大小2. C51启动文件STARTUP.A51。

Keil C51使用详解3

Keil C51使用详解34. 串口縞帠~徑有三種方式:(1) Dos行命令方式即先用install對MON51進行配置,然後用MON51進入Monitor狀態,啟用各種命令對Monitor51進行調試。

(2) tScope51方式啟動tScope51裝入TS51目錄下的MON51.IOT驅動檔,與目標板通信。

(3) dScope51 for Windows方式在選CPU驅動文件時,選“MON51.dll”,則檢查目標板並進入MON51狀態。

3. MON51的配置(1) MON51 for Dos的配置運行install檔(在MON51目錄下),不同的參數可以配置不同的硬體環境。

INSTALL Serialtype [xdstastart][codestart][bank][PROMCHECK]],具體說明見MON51幫助文件或使用手冊。

(2) MON51 for Windows的配置在啟用MON51.dll時,會使得系統自動檢查目標板連接,如配置不對,則彈出“Configuration”對話方塊,設置PC串口,串列傳輸速率等,完畢單擊“apply”有效。

4. 串口連接圖:收發交叉互連,RTS、CTS直連,DSR、DTR直連,具體引腳排列參考串口資料。

5. MON51命令及使用詳細的MON51命令可參閱幫助。

第四節集成開發環境(IDE)的使用1. Ishell for Dos的使用進入Ishell之後看到兩個視窗:一個是檔視窗,一個是Dos命令行視窗,視窗上方是下拉式的命令功能表,其中的Files控制檔視窗的顯隱。

使用Ishell,第一步就是配置系統,即要學習兩個檔的修改與創建:(1) Ishell.CFG文件每一個project都有一個Ishell.CFG,其中存放有“Option功能表和Setup功能表下的部分資訊;Bell enabled、Monochrome enabled、Editor Selected、CRT Lines、target enviroment、name of user edit、Automatic load for configuration enabled、file window enabled、file specification for file window、translate command line controls、project name等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

KeilC51使用详解V1.0第一章KeilC51开发系统基本知识 (6)第一节系统概述 (6)第二节KeilC51单片机软件开发系统的整体结构 (6)第三节第四节1.C512.L51第一节1.2.3.第二节1.dScope51forDos112.dScopeforWindows12第三节Monitor51及其使用 (13)1.Monitor51对硬件的要求 (13)2.Mon51的使用 (13)3.MON51的配置 (13)5.MON51命令及使用 (14)第四节集成开发环境(IDE)的使用 (14)1.IshellforDos的使用 (14)2.uVisionforwindows的使用 (15)第三章KeilC51vs标准C..15第一节KeilC51扩展关键字 (15)1.bit2.可位寻址区说明20H-2FH..18第七节KeilC51指针 (18)1.一般指针 (18)2.存储器指针 (18)3.指针转换 (18)第八节KeilC51函数 (19)2.通用存储工作区 (19)3.选通用存储工作区由usingx声明,见上例。

(19)4.指定存储模式 (19)5.#pragmadisable.196.递归或可重入函数指定 (19)7.指定PL/M-51函数 (20)1.2._at_3.第二节1.2.第三节1.2.C513.4.第四节段名协定与程序优化 (25)1.段名协定(SegmentNamingConventions)252.程序优化 (25)第五章KeilC51库函数参考 (26)第一节本征库函数(intrinsicroutines)和非本征证库函数 (26)第二节几类重要库函数 (26)1.专用寄存器include文件 (26)2.绝对地址include文件absacc.h.263.动态内存分配函数,位于stdlib.h中 (27)4.缓冲区处理函数位于“string.h”中 (27)5.输入输出流函数,位于“stdio.h”中 (27)第三节KeilC51库函数原型列表 (27)1.CTYPE.H..27第一节第二节2.调试窗口(DEBUGWindow) (32)3.命令窗口(CommandWindow) (32)4.观察窗口(WatchWindow) (32)5.寄存器窗口(RegisteWindow) (32)6.串口窗口(SericalWindows) (32)7.性能分析窗口 (32)8.内存窗口(MemoryWindow) (32)9.符号浏览窗口(SymbolBrowserWindow) (33)10.调用线窗口(Call-StackWindow) (33)11.代码覆盖窗口 (33)12.外围设备窗口(peripherals)33第二节dScopeforWindows基本操作 (33)1.指定初始化文件 (33)第三节8.指针: (38)9.dScope命令语句 (38)10.函数 (43)第一章KeilC51开发系统基本知识第一节系统概述KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

用过汇编语言后再使用C来开发,体会更加深刻。

KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

第二节C51和C51及转中。

图第三节KeilC51工具包的安装1.C51forDos在Windows下直接运行软件包中DOS\C51DOS.exe然后选择安装目录即可。

完毕后欲使系统正常工作须进行以下操作(设C:\C51为安装目录):修改Autoexec.bat,加入path=C:\C51\BinSetC51LIB=C:\C51\LIBSetC51INC=C:\C51\INC然后运行Autoexec.bat在相同,入第四节1.C51C51是或者其中包控而Commandfile为一个连接控制文件其内容包括:.C源文件及各编译控制指令,它没有固定的名字,开发人员可根据自己的习惯指定,它适于用控制指令较多的场合。

(2)A51A51是汇编语言编译器,使用方法为:A51sourcefile[编译控制指令]或A51@commandfile其中sourcefile为汇编源文件(.asm或.a51),而编译控制指令的使用与其它汇编如ASM语言类似,可参考其他汇编语言材料。

Commandfile同C51中的Commandfile类似,它使A51使用和修改方便。

2.L51和BL51(1)L51L51是KeilC51软件包提供的连接/定位器,其功能是将编译生成的OBJ文件与库文件连接定位生成绝对目标文件(.ABS),其使用方法为:L51或.ABS。

其BL513a.b.具有代码域及域切换功能(CodeBanking&BankSwitching)c.可用于RTX51操作系统RTX51是一个实时多任务操作系统,它改变了传统的编程模式,甚至不必用main()函数,单片机系统软件向RTOS发展是一种趋势,这种趋势对于186和386及68K系列CPU更为明显和必须,对8051因CPU较为简单,程序结构等都不太复杂,RTX51作用显得不太突出,其专业版软件PK51软件包甚至不包括RTX51Full,而只有一个RTX51TINY版本的RTOS。

RTX51TINY适用于无外部RAM的单片机系统,因而可用面很窄,在本文中不作介绍。

Bankswitching技术因使用很少也不作介绍。

3.DScope51,Tscope51及Monitor51(1)dScope51dScope51是一个源级调试器和模拟器,它可以调试由C51编译器、A51汇编器、PL/M-51编译器及ASM-51汇编器产生的程序。

它不需目标板(forwindows也可通过mon51接目标板),只能进行软件模拟,但其功能强大,可模拟CPU及其外围器其中入有一些与(1)通过EMul51在线仿真器,tScope51为该仿真器准备了一个动态连接文件EMUL51.IOT,但该方法必须配合该仿真器。

(2)通过Monitov51监控程序,这种方法是可行的,tScope51为访问Monitor51专门带有MON51.IOT连接程序,使用时可通过串口及监控程序来调试目标板。

其使用方法为:TS51[INIT(file_name.ini)]其中file_name.ini为一个初使化文件。

进入TS51后,必须装入IOT文件,可用的有MON51.IOT及EMUL51.IOT两种,如装入MON51.IOT:Load.C:\C51\TS51\MON51.IOTCPUTYPE(80517)可惜的是tScope51只有forDos的版本。

(3)Monitor51Monitor51是一个监控程序通过PC机的串口与目标板进行通信,Monitor操作需要MON51介绍。

第一节KeilC51编译器的控制指令C51编译器的控制指令分为三类:源文件控制类,目标文件控制类及列表控制类。

1.源文件控制类NOEXTEND:C51源文件不允许使用ANSIC扩展功能。

DEFINE(DF):定义预处理(在C51命令行)。

2.目标文件(Object)控制类:COMPACTLARGESMALL选编译模式DEBUG(DB)包含调试信息,以供仿真器或dSCope51使用。

NOAMAKE(NOAM)禁止AutoMake信息记录NOREGPARMS禁止用寄存器传递参数OBJECTEXTEND(OE)Object文件包含附加变量类型信息OPTIMIZE(OT)指定优化级别REGFILE(RF)指定一个寄存器使用的文件以供整体优化用SRC3.第二节●单步或“GO”执行模式●存储器、寄存器及变量访问●Watch表达式之值●函数与信号功能下面,具体说明在进入dScope51forDos之后,如何实现上述功能,dScope51采用下拉菜单格式和窗口显示控制,共有language、serial、exe、register四个窗口,其中exe为命令行窗口,language为程序窗口,serial为串口窗,register为寄存器窗。

(1)高级语言显示模式单击主菜单中的“View”,第一栏中的三条命令“Highlevel”、“Mixed”、“Assembly”分别对所装入的程序按照“高级”、“混合级”及“汇编级”三种方式显示,以方便调试使用。

(2)集成硬件环境模拟显示Timer显示SerialOther(3)“F8”单步执行,“F5”全速执行到断点。

或选主菜单中Trace单步执行CPU中的Go全速执行。

(4)存储器寄存器及变量访问外部存储器管理MAP菜单:设置(set)、取消(reset)、显示(Display)处理可用存储空间。

修改Code代码:ASM命令存储器显示命令:D类别为(X、D、I、B、C)修改存储器命令:E有以下几种命令EB、EC、EI、EL、EF、EP复杂数据类型显示:Object命令;用以显示结构或数组的内容。

欲使此命令有效,C51编译器必须有DB及OBJECTEXTEND两条。

反汇编命令:U(5)“Watch”表达式之值在View菜单的“Watch”一栏中有四项:其中包括定义WatchPoint(Define)、删除也可用表达式(6)启动比如(1)标准的Windows界面,操作更容易更简单;(2)常用操作多用对话框,而非Dos的行命令方式;(3)窗口资源更加丰富:存储器窗口、覆盖率分析、运行状态分析窗口,加强了调试功能;因为dScopeforWindows功能强大,具体操作在第八章详细介绍。

第三节Monitor51及其使用1.Monitor51对硬件的要求(1)硬件系统为51系列CPU;(2)带5K外部程序存储器(从O地址开始),存放Monitor51程序;(3)256Bytes的外部数据存储器以及5K的跟踪缓冲区,此外,外部数据存储器必须足够容纳所有应用程序代码及数据,且所有外部数据存储器必须为冯·诺伊曼存储器,即能一致访问XDATA与Code空间。

(4)一个定时器作为波特率发生器供串口使用;Mon51(1)Dos即先用令对启动在选运行INSTALLSerialtype[xdstastart[codestart[bank][PROMCHECK]]],具体说明见MON51帮助文件或使用手册。

(2)MON51forWindows的配置在启用MON51.dll时,会使得系统自动检查目标板连接,如配置不对,则弹出“Configuration”对话框,设置PC串口,波特率等,完毕单击“apply”有效。

相关文档
最新文档