单片机模块化编程方法
目前我们在学习和开发单片机时广泛采用 c 语言进行编程, 当我们开发的单片机项目较 小时, 或者我们所写的练习程序很小时, 我们总是习惯于将所有代码编写在同一个 c 文件下, 由于程序代码量较少,通常为几十行或者上百行,此时这种操作是可行方便的,也没有什么 问题。但如果要开发的项目较大,代码量上千行或者上万行甚至更大,如果你还继续将所有 代码全部编写在仅有的一个 c 文件下,这种方式的弊病会凸显出来,它会给代码调试、更改 及后期维护都会带来极大的不便。 试想一下, 当你尝试着从几千几万行代码中定位到某一位 置或者去寻找某一错误点,上下拉动巨长的滚动条慢慢地、一点点地浏览整个 c 文件,是件 多么令人眼花缭乱,头昏脑胀的事。模块化编程可解决这个问题,我们只要根据实际需要使 用模块化编程的思维将具有不同功能的程序封装在不同模块中, 将各个不同模块存放在不同 的 c 文件中。模块化编程后的程序不但使整体的程序功能结构清晰明了,同时也提高程序代 码的利用率, 有些模块代码我们可以直接进行移植或者经简单修改就可另作他用, 好比封装 好的函数。 那么什么是模块化呢?首先我们来简单来聊聊模块概念, 我们可能听说过电源模块, 通 信模块,这些是硬件模块,它们都提供一些接口,譬如电源模块会有输出额定电压电流的接 口,通信模块可能提供了 RS232、USB 等接口。那么对软件来说模块是怎样的呢?软件里 的模块跟硬件模块类似,抽象地说就像一个黑盒子,盒子内部细节我们可以不予理会,我们 只关心盒子给我们提供什么东西,即提供了什么接口,利用这些接口我们能实现什么功能。 我们把相对独立, 具有独立功能用代码编写在一个 c 文件下, 把需要对外的函数或变量进行 声明供外部使用,把不需要的细节尽可能对外部屏蔽起来,这就是软件模块化编程的思维。 这样不同的模块占用不同 c 文件,一个个 c 文件将整个项目串接起来实现所有的功能。
1. 模块化编程的原则:
模块化编程通常要遵循以下几个原则: 每一个 c 文件对应一个同名的 h 头文件 一个 h 文件伴随相应 c 文件存在,头文件是为了声明对外公开的接口。如果一个 c 文件 不需要对外公布任何接口,则其就不应当存在,除非它是程序的入口,如 main 函数所在 的文件,同时 main 函数所在文件可以没有对应的头文件。如有一个 led.c,那应该同时 制作一个 led.h 头文件。 头文件中适合放置接口的声明,不适合放置实现 头文件是模块的对外的接口,供外部程序调用。头文件中应放置对外部的声明,如对外 提供的函数声明、宏定义、变量类型声明等。 函数的实现、变量的赋值、语句的操作 等决不能放在头文件中。因为头文件的功能是向外提供接口,譬如函数,变量,具体如 何实现是在 c 文件中进行,头文件仅是进行了描述声明。 任意一个 c 文件只要使用了其他 c 文件提供的接口, 都要同时包含其对应的头文件, 每 个 c 文件应该头文件自包含 任意一个 c 文件只要使用了其他 c 文件提供的接口,都要将其对应的头文件包含到该 c 文件中,没有使用到其他 c 文件的接口就不应该将其匹配的头文件包含,并且每个 c 文 件都应该包含自己的头文件。 防止头文件被重复包含
避免一个头文件被重复包含,通常使用条件编译命令#ifndef--#endif,如下示例: 示例 1: #ifndef TIME_H #define TIME_H …… #endif 示例 2: #ifndef LED_H #define LED_H …… #endif 其中#define FILENAME_H 为基本格式,FILENAME_H 为头文件名称,但要全部使用 大写形式,使用单下划线后紧跟一个 H 表明是头文件。不要在宏名最前面加上“_"或“__” , 即使用 FILENAME_H 代替_FILENAME_H_,因为一般以"_"和”__"开头的标识符为系统保 留或者标准库使用。
2. 模块化编程实例
我们使用 AT89C52 单片机,在编程软件 keil 环境下实施一个工程,来说明模块化编程 具体操作的方法和步骤。例子要实现的功能:和 P1 相连的 8 个 LED 灯每 500ms 亮灭交替 闪烁, 通过串口将数字 0-9 发送给单片机并显示在一个数码管上。 LED 闪烁的时间使用定时 器 0 中断方式来控制,T0 每 50ms 溢出产生中断,定义一个计数器,每次 T0 中断就计数一 次,累计计数 10 次,那么时长为 500ms ,作为 LED 闪烁时间间隔。单片机的时钟为 11.0592MHz。那么使用模块化编程的方法,整个项目将会有如下表中的文件。 表 1 工程文件清单 C 文件 main.c timer0.c led.c uart.c digitron.c 2.1 创建工程步骤 2.1.1 新建工程文件目录 新建工程文件目录(如 test) ,在工程目录下创建 Project、Source、Output、Listing 和 Readme 这 5 个文件夹,并在文件夹 Readme 下创建 Readme.txt 文件。这样做的目的是为 了增强工程文件的可读性及结构化,便于维护和管理。 Project 存放工程文件 Source 存放用户编写的 c 文件及 h 头文件 Output 存放各种输出文件,如 hex 文件 Listing 存放编译过程中产生的各种中间文件 Readme 存放工程项目的说明文件 2.1.2 创建 keil 工程 (1)启动软件 Keil μVision,点击工具栏上的 Project,选择 NewμVision Project,新建 test H 头文件 无 timer0.h led.h uart.h digitron.h 描述 Main 文件可以没有对应的头文件 定时器 0 定时 50ms 中断 Led 闪烁实现 串口通信配置实现 数码管显示
工程到目录 Project 下。
(2)选择目标器件,点击“OK”确认。
(3)出现是否添加启动文件到工程中对话框,选择否。
(4)目标选项设置,点击 target option 工具进入选项配置界面。
(5)选中 Target 项,根据实际情况设置晶振频率。本例子频率为 11.0592MHz。
(6)选中 output 选项,点击“Select Folder for Objects…”选择工程目录下的 Output 文件 夹,将“Create HEX File”勾选中。
3. 程序代码编写
3.1 LED 闪烁文件 首先编写 led.c 文件代码,主要内容就是 LED 闪烁实现的函数,由于使用到 timer0.c 中 TimeCounter 变量,故需要包含 timer0.h 头文件。其程序代码如下: #include <reg52.h> #include "led.h" #include "timer0.h" void Light_LED(void) { static unsigned char TickFlag = 0; if (TimeCounter == 0) //判断 500ms 定时是否到 { TickFlag = 1; TimeCounter = 10; } if (TickFlag == 1) { P1 = ~P1; TickFlag = 0; } } 这个文件中,仅有 Light_LED()函数提供给外部使用,故在 led.h 仅声明该函数即可,声 明时要使用关键字 extern 表明该函数可供外部模块使用,led.h 头文件内容如下: #ifndef LED_H #define LED_H extern void Light_LED(void); #endif 3.2 定时器 0 中断文件 定时器 0 文件 timer0.c 代码如下: #include <reg52.h> #include "timer0.h" unsigned char TimeCounter = 10; void Timer0Config(void) // 每间隔 500ms P1 口取反
led.c、uart.c、timer0.c 和 digitron.c。右击“Source Group1”选择“Add Existing Flies to Group ‘Source Group1’”,将以上新建的 5 个文件添加到工程中。
(10)至此,就完成整个 keil 工程的创建。
(11) 工程 test 目录文件结构
ES = 1; TR1 = 1; }
//使能串口中断 //开启定时器 1
void InterruptUart(void) interrupt 4 //串口中断服务函数 { if (RI == 1) { RI = 0; tem = SBUF; } } uart.h 头文件向 mian.c 提供变量 tem 和函数 UartConfig(),故要进行声明,内容如下: #ifndef UART_H #define UART_H extern void UartConfig(void); extern unsigned char tem; #endif 3.4 数码管显示文件 数码管显示模块文件 digitron.c 代码如下: #include <reg52.h> #include "digitron.h" unsigned char code table[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void DigiShow(unsigned char num) { P2 = 0xFE; //打开第一个数码管的位码 P0 = table[num]; //将串口发送过来的数字送到数码上显示 } 文件 main.c 调用该文件的 DigiShow()函数,因此 digitron.h 头文件要声明这个函数, 其头文件内容如下: #ifndef DIGITRON_H #define DIGITRON_H extern void DigiShow(unsigned char num);
单片机实现PS_2键盘的接口设计及模块化编程
本栏目责任编辑:谢媛媛开发研究与设计技术1PS/2通讯简述PS/2接口有4个有效管脚:电源地、5V、数据和时钟,见图1。
主机提供5V,并且外设的地连接到主机的电源地上。
数据和时钟都是集电极开路的。
PS/2外设履行一种双向同步串行协议。
换句话说,每次数据线上发送一位数据并且每在时钟线上发一个脉冲就被读入。
外设可以发送数据到主机而主机也可以发送数据到外设,但主机总是在总线上有优先权,它可以在任何时候抑制来自于外设的通讯,只要把时钟拉低即可。
2键盘构成及其硬件设计键盘由按键阵列和识键、通讯电路构成。
键盘按键构成的电路原理如图2。
按键设置在行列线交叉点上,行列线分别连接到按键开关的两端。
行线通过上拉电阻接到+5V上。
平时无按键动作时,行线处于高电平状态,当有按键按下时,行线电平状态将由与此行线相连的列线电平决定。
如果列线为低电平,则行线为低电平;如果列线为高电平,则行线也为高电平。
这是识别矩阵键盘按键是否被按下的关键。
图2键盘按键构成的电路原理本设计以AT89C52为例,对键盘按键阵列的扫描以及与PC机的通讯电路进行设计,见图3。
其中KEY_CLK和KEY_DAT对应PS/2接口的时钟线和数据线,负责键盘与PC机之间的通讯对话。
3模块化编程设计键盘程序需要按PS/2协议要求跟主机PS/2接口进行正常的通讯,同时对键盘按键进行扫描及去抖,并向主机发送按键相应的扫描码(包括通码和断码)。
其模块流程如图4。
3.1PS/2协议接口通讯模块主机和外设通过PS/2接口进行双向通讯。
从外设发送到主机的数据在时钟信号的下降沿(当时钟从高变到低的时候)被读取;从主机发送到外设的数据在上升沿(当时钟从低变到高的时候)被读取。
不管通讯的方向怎样,外设总是产生时钟信号。
图3键盘控制电路图3.1.1设备到主机的通讯过程当键盘想要发送数据时它首先检查时钟以确认它是否是高电平;如果不是,那么是主机抑制了通讯,设备必须缓冲任何要发送的数据,直到重新获得总线的控制权(键盘有16字节的缓冲区)。
C语言模块化编程
当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干。
你需要和你的小组成员分工合作,一起完成项目,这就要求小组成员各自负责一部分工程。
比如你可能只是负责通讯或者显示这一块。
这个时候,你就应该将自己的这一块程序写成一个模块,单独调试,留出接口供其它模块调用。
最后,小组成员都将自己负责的模块写完并调试无误后,由项目组长进行组合调试。
像这些场合就要求程序必须模块化。
模块化的好处是很多的,不仅仅是便于分工,它还有助于程序的调试,有利于程序结构的划分,还能增加程序的可读性和可移植性。
初学者往往搞不懂如何模块化编程,其实它是简单易学,而且又是组织良好程序结构行之有效的方法之一.本文将先大概讲一下模块化的方法和注意事项,最后将以初学者使用最广的keil c 编译器为例,给出模块化编程的详细步骤。
模块化程序设计应该理解以下概述:(1)模块即是一个.c 文件和一个.h 文件的结合,头文件(.h)中是对于该模块接口的声明;这一条概括了模块化的实现方法和实质:将一个功能模块的代码单独编写成一个.c 文件,然后把该模块的接口函数放在.h文件中.举例:假如你用到液晶显示,那么你可能会写一个液晶驱动模块,以实现字符、汉字和图像的现实,命名为: led_device. c,该模块的.c文件大体可以写成:/************************************************* ************************* 液晶驱动模块** 文件: lcd_device.c* 编写人: 小瓶盖* 描述:液晶串行显示驱动模块,提供字符、汉字、和图像的实现接口* 编写时间: 2009.07.03* 版本:1.2************************************************** ***********************/#include ……//定义变量unsigned char flag;//局部变量static unsigned char value;//全局变量…//定义函数//这是本模块第一个函数,起到延时作用,只供本模块的函数调用,所以用到static 关键字修饰/********************延时子程序********************** **/static void delay (uint us) //delay time{}//这是本模块的第二个函数,要在其他模块中调用/*********************写字符程序********************* ******* 功能:向LCD写入字符** 参数:dat_comm 为1写入的是数据,为0写入的是指令content 为写入的数字或指令************************************************** ****/void wr_lcd (uchar dat_comm,uchar content){}…………/***************************** END Files************ ***********************/注:此处只写出这两个函数,第一个延时函数的作用范围是模块内,第二个,它是其它模块需要的。
第4章 单片机的C51语言
4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程
第4章单片机的C51语言
51汇编语言能直接操作单片机的系统硬件,指令执行速度 快。但其程序可读性差,且编写、移植困难。
第4章单片机的C51语言
数据类型
【存储类型】
变量名
51单片机的 三个逻辑存储空间:
片内数据存储器,片外数据存储器和程序存储器。
建立C51存储类型与存储空间的对应关系
code区
xdata区
idata区
data区
bdata区
pdata 区
第4章单片机的C51语言
C51的存储类型与存储空间对应关系表
编译模式
SMALL系统
COMPACT系统 LARGE系统
注意:SFR字节地址变量的物理地址是由MCU资源决定的
第4章单片机的C51语言
sbit型
部分SFR具有位地址,如何定义与这些位地址相关的变量?
D0^7
PSW D7H
D0^6
AC
D0^5
D0^4
RS1
D0^3
RS0
D0^2
D0^1
D1H
D0^0
P
相对位地址
D0H 字节地址 绝对位地址
CY
CY
D6H
AC
32
对于“/”和“%”往往会有疑问。这两个符号都涉
及除法运算,但“/”运算是取商,而“%” 运算为取余 数。例如“5/3”的结果(商)为1,而“5%3”的结果 为2(余数)。 表3-3中的自增和自减运算符是使变量自动加1或减1, 自增和自减运算符放在变量前和变量之后是不同的。 ++i,--i:在使用i之前,先使i值加(减)1。
keil模块化编程方法
Keil 模块化编程方法介绍 Keil 模块化编程的方法和步骤,以及如何使用该方法编写单片机程序。
下面是本店铺为大家精心编写的3篇《Keil 模块化编程方法》,供大家借鉴与参考,希望对大家有所帮助。
《Keil 模块化编程方法》篇1Keil 模块化编程方法是一种将单片机程序拆分为多个模块,每个模块实现一个特定功能的编程方法。
这种方法可以提高程序的可读性、可维护性和可扩展性,同时也方便了多人协作开发。
下面将介绍Keil 模块化编程的具体方法和步骤。
1. 建立单片机程序编辑窗口,选择适当的单片机型号并设置好频率和勾选 hex 文件。
2. 创建一个新的头文件,用于声明本模块的功能和接口。
在头文件中,可以使用条件编译语句 #ifndef #endif 来声明本头文件,要大写。
对于在 main 函数中没有出现的变量和函数,要在头文件中用 extern 声明。
3. 在 main 函数中包含所有的头文件,并在其中调用各个模块的功能。
4. 为每个模块创建一个单独的源文件,用于实现该模块的功能。
在源文件中,可以使用 #include 语句包含头文件,以便使用其他模块提供的功能。
5. 在每个源文件中,首先声明本模块需要的变量和函数,并使用 #pragma module 语句将模块定义为 Keil 模块。
6. 在 Keil 编译器中,将所有源文件添加到项目中,并设置好编译选项。
7. 编译和下载程序到单片机中,运行程序并测试模块的功能。
通过使用 Keil 模块化编程方法,可以方便地编写单片机程序,提高程序的可读性和可维护性。
《Keil 模块化编程方法》篇2Keil 模块化编程是一种使用 Keil 集成开发环境 (IDE) 进行软件开发的方法,它强调模块化、组件化的设计和编程思想,以提高代码的可重用性、可维护性和可扩展性。
以下是 Keil 模块化编程的一些基本原则和方法:1. 使用头文件进行模块化设计:在 Keil 模块化编程中,每个模块都有自己的头文件,头文件中包含了该模块的所有函数、变量、常量等的声明。
金愚善单片机例程
金愚善单片机例程全文共四篇示例,供读者参考第一篇示例:金愚善单片机例程是一种用于学习和实践单片机编程的教学资源。
它提供了丰富的例程和案例,在实际的工程项目中可以起到很大的作用。
本文将介绍金愚善单片机例程的特点、应用和学习方法,希望对单片机编程感兴趣的读者有所帮助。
一、特点1.丰富的例程:金愚善单片机例程涵盖了常见的单片机应用场景,如LED灯控制、蜂鸣器控制、按键输入等。
这些例程都是基于实际项目开发的,经过了严格的测试和优化,确保了稳定性和可靠性。
2.易于理解:金愚善单片机例程采用了简洁明了的代码风格,注释清晰,函数模块化,方便读者快速理解和修改。
即使是初学者也可以轻松上手,快速掌握单片机编程的基本知识和技能。
3.开源共享:金愚善单片机例程是开源的,任何人都可以免费获取和使用。
读者也可以根据自己的需求和创意,对例程进行改进和扩展,贡献自己的力量,促进单片机编程技术的发展。
二、应用1.教学实验:金愚善单片机例程可以作为单片机编程实验的教学资源,帮助学生理解相关知识和提升实践能力。
通过实际操作和调试,学生可以更好地掌握单片机的原理和应用。
2.工程项目:金愚善单片机例程也适用于工程项目的开发和实施。
开发人员可以基于例程快速搭建原型系统,进行功能验证和性能测试,节省开发时间和成本,提高项目的成功率和效益。
3.科研探索:金愚善单片机例程还可以用于科研领域的探索和创新。
科研人员可以基于例程进行二次开发,探究新的应用场景和解决方案,为学科发展和社会进步做出贡献。
三、学习方法1.理论学习:在使用金愚善单片机例程之前,建议先对单片机的基本原理和编程语言进行系统学习。
掌握相应的知识和技能,有利于更好地理解和应用例程。
2.实践操作:学习单片机编程需要大量的实践操作,只有亲自动手才能更好地掌握和应用知识。
建议读者结合例程,按照步骤一步步地进行实验和调试,加深对单片机编程的认识和理解。
3.团队协作:在学习单片机编程时,可以参与团队项目或者线上社区,与他人分享经验和交流技巧。
No.5C51程序设计
– 指定存储区的指针
• 指定存储区的指针在指针的声明中经常包含一个 存储类型标识符指向一个确定的存储区。 • 例如: char data *str; int xdata *ptr; long code *tab;
• 指定存储区指针存放时不再像通用指针那样需 要保存存储类型,指向idata、data 、bdata 和pdata存储区的指针只需要一个字节存放, 而code和xdata指针也才需要两字节。从而减 少了指针长度,节省了存储空间。
– 如:sfr16 TL0=0x8A;
– 特殊功能寄存器中特定位的定义
• 在C51中可以利用关键字sbit定义可独立寻址访问 的位变量
• 对一般位变量的定义
– 当位变量位于内部RAM的可位寻址区(20H~2FH 单元)时,可以利用C51编译器提供的bdata存储器 类型进行访问 – 带有bdata类型的变量可以进行字节或位寻址,用 sbit指定bdata变量的相应位后就可以进行位寻址。
– 考虑存储器结构 – 正确使用片内外RAM、特殊功能寄存器 – 正确处理接口芯片收发数据 – 不需要具体组织和分配存储器资源 – 结构模块化,思路与思维相同 – 但要与单片机结构相关联,否则不能正确映射
• C程序:
• C51:
– – – –
自动完成存储单元分配(内定义) 可编制常见接口芯片通用驱动函数 可采用模块化设计应用程序 加快开发速度
var=XBYTE[0x8000]; 头文件内定义的函数 XBYTE[0x8000]=0x21;
P71
– 例如:unchared xdta xram[0x8000]_at_0x1000; //在外部RAM1000H开始定义了一个一维数组
51单片机C语言编程规范
C51程序结构
原码工作室
(3)C51变量的存储模式与标准C中变量的存储模 式不一样,C51中变量的存储模式是与89C51单片机 的存储器紧密相关;
(4)C51与标准C的输入输出处理不一样,C51中 的输入输出是通过89C51串行口来完成的,输入输出 指令执行前必须要对串行口进行初始化;
Int a ;
部变量。在一个函数体 内,要使用一个已在该函数体外或别的程序中定义过的 外部变量时,该变量在该函数体内要用extern说明。外部 变量被定义后分配固定的内存空间,在程序整个执行时 间内都有效,直到程序结束才释放。
3.static:
本章主要以KEIL编译器介绍89C51单片机C语言 程序设计。
C51程序结构
原码工作室
C51的语法规定、程序结构及程序设计方法都与 标准的C语言程序设计相同,但C51程序与标准的C 程序在以下几个方面不一样:
(1)C51中定义的库函数和标准C语言定义的库 函数不同。标准的C语言定义的库函数是按通用微型 计算机来定义的,而C51中的库函数是按89C51单片 机相应情况来定义的;
源码工作室
原码工作室
学习单片机C语言的必要性
随着单片机性能的不断提高,C语言编译调 试工具的不断完善,以及现在对单片机产品辅助 功能的要求、对开发周期不断缩短的要求,使得 越来越多的单片机编程人员转向使用C语言,因 此有必要在单片机课程中讲授“单片机C语言”。
C语言编程的优势
原码工作室
1.语言简洁、紧凑,使用方便、灵活。
signed int数据用补码表示。
原码工作室
keil模块化编程方法
keil模块化编程方法Keil是一种嵌入式开发工具,可以用来编写和调试单片机程序。
在Keil中,模块化编程是一种重要的编程技术,可以将大型程序分解为多个小型模块,每个模块负责完成特定的任务。
模块化编程有助于提高代码的可读性和可维护性,并提高开发效率。
下面将详细介绍Keil模块化编程的方法。
1.良好的函数划分:在Keil中进行模块化编程的首要步骤是将程序分成多个函数。
每个函数负责完成特定的任务,并有明确的输入和输出。
良好的函数划分可以提高代码的可读性和可维护性。
在函数的设计中,应该遵循单一职责原则,即每个函数应该只负责完成一个具体的任务。
2.模块间的参数传递:在Keil中,可以通过函数参数来传递数据和参数。
模块间的参数传递可以通过值传递和指针传递来实现。
在进行参数传递时,要注意参数的数据类型和范围,以避免数据溢出和类型不匹配的问题。
同时,还要考虑传递参数的效率,尽量减少不必要的参数传递。
3.模块间的数据共享:在Keil中,模块间的数据共享可以通过全局变量来实现。
全局变量可以在程序的任意位置被访问和修改,从而实现模块间的数据共享。
但是需要注意的是,全局变量的使用应该谨慎,尽量减少全局变量的数量,以避免出现数据混乱和冲突的问题。
4.模块间的接口设计:在Keil中,模块间的接口设计是模块化编程中的一个重要环节。
接口设计需要明确模块之间的关系和交互方式,包括输入和输出参数、返回值、状态标志等。
模块间的接口设计应该简单明了,尽量减少对外暴露的接口数量。
同时,还要考虑接口的可扩展性和兼容性,以方便后续的开发和维护工作。
5.错误处理和异常处理:在Keil中,模块化编程还需要考虑错误处理和异常处理的问题。
当模块发生错误或异常时,应该及时进行处理,并返回错误码或异常信息。
错误处理和异常处理可以通过返回值或全局变量来实现,具体的处理方式取决于具体的情况。
6.模块的测试和调试:在Keil中,模块化编程还需要进行测试和调试工作。
单片机C语言编程实例
单片机C语言编程实例前言INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的多种芯片,从而扩充和扩展了其品种和应用领域.C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。
将C语言向单片机上的移植,始于20世纪80年代的中后期。
经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。
用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。
因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的..C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广。
最多的计算语言之一。
C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言。
与汇编语言相比,C51在功能上.结构上以及可读性。
可移植性。
可维护性等方面都有非常明显的优势.目前最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51.第一章单片机C语言入门1。
1建立您的第一个C项目使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。
KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能.因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。
以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。
KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。
南邮单片机实验指导书
单片机实验指导书
4)完成上一步骤后,屏幕如下图所示
到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。 -4-
单片机实验指导书
5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项
新建文件后屏幕如下图所示
此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但这里建议首先保存 该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕 如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正 确的扩展名。
单片机实验指导书
单片微型计算机原理
实验指导书
南京邮电大学自动化学院
电气工程系
张腾飞
2011 年 10 月
若发现有错误请联系:zhangtf@ -1-
单片机实验指导书
Keil C 软件的使用
Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体, 支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。
图 3.6 在这里可以进行通信端口的设置,共设置的 4 个串行通信端口,COM1、COM2、COM3、 COM4,根据计算机的硬件特点来决定,默认情况下为 COM1,即串行通信口 1。 另“不加密”对芯片的程序不进行加密保护 “锁定位 1”对芯片的程序进行一级加密保护 “锁定位 2”对芯片的程序进行二级加密保护 “锁定位 1,2”对芯片的程序进行三级加密保护 3) 保存:是把从单片机的芯片 ROM 中的程序读取出来到代码显示区域 1 中,点击“保 存”按钮,即可保存为 HEX 格式的文件。 4) 退出:退出该软件系统。 在进行程序调试的时候,我们一般通过 KEIL C 软件把编译好的程序转化成 HEX 格 式文件,通过上面的方法,装载程序之后,点击“自动”按钮,程序就下载到单片机内部 ROM 芯片中,最后点击“运行”,即可以看到程序的结果。注意,每次重新更新程序的时 候,要点击“初始化”按钮,才可以相应的操作。
