《单片机系统软件开发.ppt》由会员分享,可在线阅读,更多相关《单片机系统软件开发.ppt(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机系统软件开发单片机系统软件开发单片机系统软件开发单片机系统软件开发n n软件开发步骤n n软件开发环境介绍n n51汇编基础n n51C基础n n应用举例软件开发过程软件开发过程n n系统定义n n软件结构设计n n编写程序n n生成扩展名为HEX的目标文件n n固化到EPROM中去,完成软件设计系统定义系统定义 在编写软件之前,首先要确定一些常数、地址,事实上这些常数、地址在设计阶段已被直接或间接地确定下来了。如当某器件的连线设计好后,其地址也就被确定了,当器件的功能被确定下来后,其控制字也就被确定了。系统定义是指在软件设计前,首先要进一步明确软件所要完成的任务,然后结合硬件结构,而确
2、定软件承担的任务细节。其软件定义内容有;n(1)定义各输入输出的功能,信号的类别、电平范围、与系统接口方式、占用口地址、读取的输入方式等。n(2)定义分配存储器空间,包括系统主程序、常数表格、功能子程序块的划分、人口地址表等。n(3)若有断电保护措施,应定义数据暂存区标志单元等。n(4)面板开关,按键等控制输入量的定义与软件编制密切有关,系统运行过程的显示、运算结果的显示、正常运行和出错显示等也是由软件完成的。所以事先要给予以定义。软件结构设计软件结构设计n n依据系统的定义,可把整个工作分解为若干相对独立的操作,再考虑各操作依据系统的定义,可把整个工作分解为若干相对独立的操作,再考虑各操作之
3、间的相互联系及时间关系而设计出一个合理的软件结构。之间的相互联系及时间关系而设计出一个合理的软件结构。n n对于简单的单片机应用系统,可采用顺序结构设计方法,其系统软件由主程对于简单的单片机应用系统,可采用顺序结构设计方法,其系统软件由主程对于简单的单片机应用系统,可采用顺序结构设计方法,其系统软件由主程对于简单的单片机应用系统,可采用顺序结构设计方法,其系统软件由主程序、子程序和若干个中断服务程序构成。明确主程序、子程序和中断服务程序、子程序和若干个中断服务程序构成。明确主程序、子程序和中断服务程序、子程序和若干个中断服务程序构成。明确主程序、子程序和中断服务程序、子程序和若干个中断服务程序
4、构成。明确主程序、子程序和中断服务程序完成的操作及指定各中断的优先级序完成的操作及指定各中断的优先级序完成的操作及指定各中断的优先级序完成的操作及指定各中断的优先级。n n模块程序设计是单片机应用中最常用的程序设计方法。它便于设计和调试、模块程序设计是单片机应用中最常用的程序设计方法。它便于设计和调试、容易完成并可供多个程序共享,但各模块之间的连接有一定的难度。根据需容易完成并可供多个程序共享,但各模块之间的连接有一定的难度。根据需要也可采用自上而下的程序设计方法,此方法是先从主程序开始设计,然后要也可采用自上而下的程序设计方法,此方法是先从主程序开始设计,然后再编制各从属的程序和子程序。这种
5、方法比较符合人们的日常思维。缺点是再编制各从属的程序和子程序。这种方法比较符合人们的日常思维。缺点是上一级的程序错误会对整个程序产生影响。软件结构设计和程序设计方法确上一级的程序错误会对整个程序产生影响。软件结构设计和程序设计方法确定后,根据系统功能定义,可先画出程序粗框图,再对粗框图进行扩充和具定后,根据系统功能定义,可先画出程序粗框图,再对粗框图进行扩充和具体化,即对存储器、寄存器、标志位等工作单元作具体的分配和说明,再绘体化,即对存储器、寄存器、标志位等工作单元作具体的分配和说明,再绘制出详细的程序流程图制出详细的程序流程图(细框图细框图)。编写程序编写程序n n51的编程语言常用的有两
6、种,一种是汇编语言,一种是C语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。固化程序到固化程序到EPROM中去中去n n编程器是用来烧单片机芯片的,是把HEX或者BIN文件烧到单片机ROM里的,供单片机运行的KEILC软件介绍软件介绍n nKeilC51软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM语言
7、和C语言的程序设计,界面友好,易学易用。n n下面介绍KeilC51软件的使用方法51汇编汇编n n汇编伪指令n n汇编语言程序设计51C语言编程语言编程n n基础知识:基础知识:5151单片机编程基础单片机编程基础例一、例一、流流水灯、蜂鸣器发声、继电器控制水灯、蜂鸣器发声、继电器控制例二、例二、数码管驱动数码管驱动例三、例三、键盘驱动键盘驱动例例四、四、AD/DAAD/DA原理及实现原理及实现例五、串行口应用例五、串行口应用C51单片机编程基础知识单片机编程基础知识n nC语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。目前,使用C语言进行程序设计已经成为软
8、件开发的一个主流。用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进、扩充和移植。而针对8051的C语言日趋成熟,成为了专业化的实用高级语言。C C语言作为一种非常方便的语言而得到广泛语言作为一种非常方便的语言而得到广泛的支持,很多硬件开发都用的支持,很多硬件开发都用C C语言编程,如:语言编程,如:各种单片机、各种单片机、DSPDSP、ARMARM等等.C C语言程序本身不依赖于机器硬件系统,基语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中本上不作修改就可将程序从不同的单片机中移植过来。移植过来。C C提供了很多数学函数并支持浮点运算,开提供了很
9、多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可发效率高,故可缩短开发时间,增加程序可读性和可维护性。读性和可维护性。C-51C-51的特点的特点C-51C-51与与ASM-51ASM-51相比,有如下优点:相比,有如下优点:1.1.对单片机的指令系统不要求了解,对单片机的指令系统不要求了解,仅要求对仅要求对8051 8051 的存贮器结构有初步了解;的存贮器结构有初步了解;2.2.寄存器分配、不同存贮器的寻址及寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;数据类型等细节可由编译器管理;3.3.程序有规范的结构,可分成不同的程序有规范的结构,可分成不同的函数,这
10、种方式可使程序结构化;函数,这种方式可使程序结构化;4.4.提供的库包含许多标准子程序,具提供的库包含许多标准子程序,具有较强的数据处理能力;有较强的数据处理能力;5.5.由于具有方便的模块化编程技术,由于具有方便的模块化编程技术,使已编好程序可容易地移植;使已编好程序可容易地移植;C C5151的数据类型的数据类型基本数据类型基本数据类型类型类型符号符号关键字关键字数的表示范围数的表示范围所占位数所占位数整整型型字字符符型型实实型型有有无无(signed)int16-3276832767(signed)short16-3276832767(signed)long32-214748364821
11、4748364716unsignedint0655353204294967295unsignedlongintunsignedshortint16065535有有float323.4e-383.4e38有有double641.7e-3081.7e308有有char8-128127无无unsignedchar80255C语言中的基本数据类型类型类型符号符号关键字关键字数的表示范围数的表示范围所占位数所占位数整整型型字字符符型型实实型型有有无无(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214
12、748364716unsignedint0655353204294967295unsignedlongintunsignedshortint16065535有有float323.4e-383.4e38有有double641.7e-3081.7e308有有char8-128127无无unsignedchar80255C C5151的数据类型扩充定义的数据类型扩充定义sfrsfr:特殊功能寄存器特殊功能寄存器声明声明sfr16:sfrsfr16:sfr的的1616位数据声明位数据声明sbitsbit:特殊功能位声明特殊功能位声明bitbit:位变量声明位变量声明例:例:sfrsfr SCON=0X
13、98;SCON=0X98;sfr16 T2=0 xCC;sfr16 T2=0 xCC;sbitsbit OV=PSW2;OV=PSW2;例:例:数据类型数据类型 变量名变量名char var1;char var1;bit flags;bit flags;unsigned char vextor10;unsigned char vextor10;intint wwwwwwww;注意:变量名不能用注意:变量名不能用C C语言中的关语言中的关键字表示。键字表示。C-51C-51数据的存储类型数据的存储类型C-51C-51的的包含的头文件包含的头文件通常有通常有:reg51.h reg52.h mat
14、h.h reg51.h reg52.h math.h ctype.hctype.h stdio.hstdio.h stdlib.hstdlib.h absacc.habsacc.h常用有常用有:reg51.h reg52.hreg51.h reg52.h (定义特殊功能寄存器和位寄存器);定义特殊功能寄存器和位寄存器);math.hmath.h (定义常用数学运算);(定义常用数学运算);C-51C-51的运算符的运算符与与C C语言基本相同:语言基本相同:+-*/+-*/(加(加 减减 乘乘 除)除)=(位右移(位右移 位左移)位左移)&|&|(按位与按位与 按位或按位或)(按位异或按位异或
15、 按位取反按位取反)C-51C-51的基本语句的基本语句 与标准与标准C C语言基本相同:语言基本相同:if if 选择语言选择语言 while while 循环语言循环语言 for for 循环语言循环语言 switch/case switch/case 多分支选择语言多分支选择语言 do-while do-while 循环语言循环语言 中断服务程序中断服务程序函数名()函数名()interrupt interrupt n n using using m m 函数内部实现函数内部实现 .I/OI/O口定义口定义sbitsbit beep=P23;beep=P23;单片机主要掌握以下几点单片机
16、主要掌握以下几点n n最小系统能够运行起来的必要条件。1.电源2.晶振3.复位电路n n对单片机任意IO口的随意操作1.输出控制电平高低2.输出检测电平高低。n n定时器:重点掌握最常用的方式2n n中断:外部中断、定时器中断、串口中断n n串口通信:单片机之间、单片机与计算机间KEIL的使用的使用n n掌握KEIL工程的建立和软件的开发;n n掌握KEIL中软件仿真的基本应用;Main函数函数格式:格式:voidmain()特点:无返回值,无参。特点:无返回值,无参。任何一个任何一个C程序有且仅有一个程序有且仅有一个main函函数,它是整个程序开始执行的入口。数,它是整个程序开始执行的入口。
17、例:例:voidmain()总程序从这里开始执行总程序从这里开始执行;其他语句;其他语句;n n开关双键的输入:输入先输出高一个按键KEY_ON接在P1.6与GND之间,另一个按键KEY_OFF接P1.7与GND之间,按KEY_ON后LED亮,按KEY_OFF后LED灭。同时按下LED半亮,LED保持后松开键的状态,即ON亮OFF灭。n n#include#include n n#defineLEDP11/#defineLEDP11/用符号用符号用符号用符号LEDLED代替代替代替代替P1_1P1_1 n n#defineKEY_ONP16/#defineKEY_ONP16/用符号用符号用符号
18、用符号KEY_ONKEY_ON代替代替代替代替P1_6P1_6 n n#defineKEY_OFFP17/#defineKEY_OFFP17/用符号用符号用符号用符号KEY_OFFKEY_OFF代替代替代替代替P1_7P1_7 n nvoidvoidmain(main(voidvoid)/)/单片机复位后的执行入口,单片机复位后的执行入口,voidvoid表示空,无输入表示空,无输入参数,无返回值参数,无返回值n nn nKEY_ON=1;/KEY_ON=1;/作为输入,首先输出高,接下作为输入,首先输出高,接下KEY_ONKEY_ON,P1.6P1.6则接地则接地为为0 0,否则输入为,否则
19、输入为11n nKEY_OFF=1;/KEY_OFF=1;/作为输入,首先输出高,接下作为输入,首先输出高,接下KEY_OFFKEY_OFF,P1.7P1.7则接则接地为地为0 0,否则输入为,否则输入为11n nWhile(1)/While(1)/永远为真,所以永远循环执行如下括号内所有语句永远为真,所以永远循环执行如下括号内所有语句n n n n if if(KEY_ON=0)LED=1;/(KEY_ON=0)LED=1;/是是KEY_ONKEY_ON接下,所示接下,所示P1.1P1.1输出高,输出高,LEDLED亮亮n n if if(KEY_OFF=0)LED=0;/(KEY_OFF=0)LED=0;/是是KEY_OFFKEY_OFF接下,所示接下,所示P1.1P1.1输出低,输出低,LEDLED灭灭n n/松开键后,都不给松开键后,都不给LEDLED赋值,所以赋值,所以LEDLED保持最后按键状态。保持最后按键状态。n n n n
限制150内