资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
单片机专题实训西安交通大学城市学院电信系实验中心 张桦办公室:实验楼 510办公室电话:029-86653004email: yuazhang163.com(程序调试方法)单片机专题实训内容u 键盘和数码管显示(8位8段数码管)主要是相关芯片ZLG7289的功能、特性及相关应用的内 容。u 液晶显示(128X64点阵液晶显示器)主要是相关液晶显示模块LCM12864及其应用的内容。u 实时时钟(RTC)主要是相关实时时钟/日历芯片PCF8563功能及其应用 的内容。单片机专题实训报告要求u 硬件电路图要有电路组成和结构的描述以及电路工作原理简介u 软件流程图对于每个模块,要画一个流程图并配有模块功能和流程 说明文字。u 电路图中主要芯片说明和操作说明芯片引脚、操作时序、芯片寄存器等芯片工作功能介绍一、程序调试方法1.1 单片机SST89E516RDu 片内有72K的SuperFlash EEPROM,分别是Block0和 Block1,Block0有64K,Block1有8K。地址范围分别是0000H 到FFFFH,和0000H到1FFFH。u SST89E516RD是8位集成存储器的MCS-51系列兼容单 片机。和51系列单片机在软件、开发工具、管脚等方面完全 兼容。u 具有在线编程功能,包括IAP和ISP功能,其中IAP是通过 串口实现的。u 具有SoftICE功能(Software In Circuit Emulator)。SoftICE 的特点SST89E516RD2 SoftICE通过PC的一个串口与 KEIL uVision2 Debugger通讯,可以实时地调试目标程 序。尽管小而紧凑,SoftICE提供了高级仿真器的大部分 功能,与KEIL uVision2 Debugger一起可有如下的功能 :u下载INTEL HEX文件 u 源代码调试,支持汇编语言和C51语言 u 可将代码区反汇编成8051助记符 u 在线汇编 u STEP u STEP OVER u 设置/清除断点(10个固定和1个临时断点) u 运行到断点/光标处u 读/写数据存储器 u 读/写代码存储器 u 读/写SFR特殊功能寄存器 u 读/写PORT端口 u SST MCU产品特有的IAP功能 u 软件重启动需要的目标硬件资源u 串口,使用Timer2做波特率发生器 u 8 BYTE stack空间 u SoftICE程序占用的5Kbyte程序空间1.2 使用Keil软件编程并调试程序1.2.1 使用Keil软件编程 步骤一:使用keil软件Project菜单项中的New Project建立一个新工程。 步骤二:为新工程选择芯片,添加源程序文件(.c或是.asm)。 步骤三:编写程序。 步骤四:使用Project菜单项中的Build All子菜单为应用创建可执行文件(.HEX)。调试程序是发现查找程序的逻辑错误的过程。1.2.2 调试程序 步骤一:为目标板选择芯片。如下图:图1 选择相应芯片 步骤二:选择Keil Monitor-51 Driver做调试器。图2 选择相应调试器驱动 步骤三:设置调试器参数。图3 选择调试器串口通信参数 步骤四:进入调试程序界面,利用调试器的各项功能 调试程序,检查程序逻辑。图4 开始调试程序图5 调试程序界面 步骤五:退出调试程序界面,返回编辑程序界面时, 需要先按下目标板上的RESET按键,而不能直接点击 Stop快捷键来停止程序的运行,之后点击Start/Stop Debug Session快捷键,返回编辑程序界面。图5 停止程序运行二、用C51编写应用程序2.1 C语言的优点 只要求对单片机的存储结构有了解,不需了解指令系统。相对于汇编语言,C语言有如下的优点: 提供专门针对8051单片机的data、idata、pdata、xdata、 code等存储类型,自动为变量合理分配地址 。 C语言提供复杂的数据类型(数组、结构、联合、枚举、指 针等),极大地增强了程序处理能力和灵活性。 提供常用的标准函数库,以供用户直接使用 。 程序可有多个函数组成模块,可读性好,便于修改 。 移植性好,可以移植到不同的单片机,而汇编移植困难 。 C51程序结构和一般的C语言程序结构没有什么差别。C51程序是函数的集合体。程序也是从main()函数开始执行,主函数是程序的入口,主函数中的语句执行结束,程序也 就结束了。2.2 C51程序结构 C51的函数是有类型、函数名、参数表、函数体组成。 函数名是一个标识符,是大小写可以区别的,最长可为255 个字符。 参数表是用圆括号()括起来的若干参数,每项之间用逗号隔开 函数体是用大括号括起来的若干C语句,语句之间用分号隔开,最后一个语句是return (主函数可以省略) ,返回函数类型。 函数类型就是返回值的类型,除整型外,都需要在函数名前 加以指定。extern unsigned char LED; extern char func1(char z); /主函数 void main(void) LED= 0; char a= func1(c); int b= func2(d,e); while(1); Int func2(int x,int y) return x+y; 外部变量声明 外部函数声明 注释 函数类型 函数名(参数表) 函数体开始函数体结束数据说明; 执行语句;本文件内的函数定义2.3 C51与 ANSI 标准C的差别 2.3.1 关键字C51包含ANSI C关键字的同时,也针对51单片机扩展了 一些关键字。ANSI 关键字: auto double int struct break else long switch case enum register typedef char extern return union float short unsigned continue for signed void default goto sizeof volatile do while if staticC51 扩展关键字: _at_ alien bdata bit code compact data idata interrupt large pdata _priority_ reentrant sbit sfr sfr16 small _task_ using xdataC51的运算符与ANSI C的运算符无差别。 主要包括以下几类:2.3.2 C51的运算符 算术运算符 逻辑运算符 关系运算符 位运算符 复合运算符 其他运算符 ? :, sizeof, *, 定义了一个指向函数funcA的指针pointer;其他的如enum、struct、union以及数组和ANSI C的都相同。u 变量的作用域C51的变量分为局部变量和全局变量。在编程是要尽量使用局部变量,少用全局变量。3、C51专有的数据类型bit:变量存储在可位寻址区,保存1位二进制数。(不能用指针) 。sfr和sfr16:定义特殊寄存器变量。sbit:可位寻址变量的一个位。可位寻址的变量是bdata变量或是部 分的sfr变量。u 变量的存储种类auto:变量默认的存储类型。 register:使用寄存器的变量。 extern:全局变量,可以在多个文件中使用。 static:使局部变量与程序的寿命相同;使全局变量只在本文 件内有效。1、具体的存储区域类型有: idata: 片内间接寻址的RAM xdata: 片外数据存储(64K) pdata: 分页寻址的片外RAM data: 片内直接寻址的RAM code: 统一编制的ROM(64K) bdata: 片内可位寻址的RAM(128位)u 变量的存储区域这部分是C51与ANSI C区别最明显的地方。C51中可以指定变 量存储在具体的存储器区域内。片内RAM、片外RAM或是ROM ) 例如: char data ch= c; 定义变量ch存储在直接寻址的内部RAM区。2、指针与存储区域 与变量相同,对于指针也可以指定存储区域,以及指针所指向变 量的存储区域。指明了所指向变量的具体存储区域的指针的效率要 更高,占用的存储区也少一些。例如: char data *str1; /指针指向data存储区的字符变量。 char data * data str2; /指针本身也在data区域3、绝对地址的变量C51中,可以通过使用_at_关键字来指定变量存储在存储器中的特定地址上。例如: char data ch _at_ 0x100; 对这类变量的要求: 不能初始化; bit类型不能使用绝对地址; 只有全局变量才能使用绝对地址;同ANSI C一样,C51的程序语句主要是三种类型。2.3.4 程序语句2.3.5 函数C51中,函数的声明、定义和调用的方法与ANSI C一样, 不同之处主要有: 可重入函数:C51中的函数默认情况是不能由多个进程共享,而可重入函数可以不受此限制。可用reentrant关键字声明函数为可重入函数。例如:int funcTest(int x, int y) reentrant; 顺序语句:就是语句,按顺序一句一句执行。 分支语句:if else, switch 循环语句:for, while, do while 指定使用寄存器组:C51中的函数可以指定使用特定的寄存器组。若为中断函数指定寄存器组,则所有被该中断函数调用的函数都必须使用该寄存器组。使用using关键字 声明函数使用第几组寄存器组。例如:int funcTest(int x, int y) using 0;表示函数funcTest使用第0组工作寄存器组。 中断服务子程序:C51中使用interrupt关键字指定函数为中断服务子程序。例如:void funcTest(void) interrupt 0;表示函数funcTest为外部中断0的中断服务子程序。1、列出C51与ANSI C之间的主要差别。 2、学习使用联机帮助。 3、了解 reg51.h、stdio.h、stdlib.h、string.h、 intrins.h、absacc.h等头文件中定义的宏和函数 。2.4、本次作业
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号