单片机专题实训(1)_程序调试方法(sst89e516rd2)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

单片机专题实训西安交通大学城市学院电信系实验中心张桦办公室:实验楼510办公室电话:029-86653004email:yuazhang@163.com(程序调试方法)单片机专题实训内容键盘和数码管显示(8位8段数码管)主要是相关芯片ZLG7289的功能、特性及相关应用的内容。液晶显示(128X64点阵液晶显示器)主要是相关液晶显示模块LCM12864及其应用的内容。实时时钟(RTC)主要是相关实时时钟/日历芯片PCF8563功能及其应用的内容。单片机专题实训报告要求硬件电路图要有电路组成和结构的描述以及电路工作原理简介软件流程图对于每个模块,要画一个流程图并配有模块功能和流程说明文字。电路图中主要芯片说明和操作说明芯片引脚、操作时序、芯片寄存器等芯片工作功能介绍一、程序调试方法1.1单片机SST89E516RD片内有72K的SuperFlashEEPROM,分别是Block0和Block1,Block0有64K,Block1有8K。地址范围分别是0000H到FFFFH,和0000H到1FFFH。SST89E516RD是8位集成存储器的MCS-51系列兼容单片机。和51系列单片机在软件、开发工具、管脚等方面完全兼容。具有在线编程功能,包括IAP和ISP功能,其中IAP是通过串口实现的。具有SoftICE功能(SoftwareInCircuitEmulator)。SoftICE的特点SST89E516RD2SoftICE通过PC的一个串口与KEILuVision2Debugger通讯,可以实时地调试目标程序。尽管小而紧凑,SoftICE提供了高级仿真器的大部分功能,与KEILuVision2Debugger一起可有如下的功能:下载INTELHEX文件源代码调试,支持汇编语言和C51语言可将代码区反汇编成8051助记符在线汇编STEPSTEPOVER设置/清除断点(10个固定和1个临时断点)运行到断点/光标处读/写数据存储器读/写代码存储器读/写SFR特殊功能寄存器读/写PORT端口SSTMCU产品特有的IAP功能软件重启动需要的目标硬件资源串口,使用Timer2做波特率发生器8BYTEstack空间SoftICE程序占用的5Kbyte程序空间1.2使用Keil软件编程并调试程序1.2.1使用Keil软件编程步骤一:使用keil软件Project菜单项中的NewProject建立一个新工程。步骤二:为新工程选择芯片,添加源程序文件(.c或是.asm)。步骤三:编写程序。步骤四:使用Project菜单项中的BuildAll子菜单为应用创建可执行文件(.HEX)。调试程序是发现查找程序的逻辑错误的过程。1.2.2调试程序步骤一:为目标板选择芯片。如下图:图1选择相应芯片步骤二:选择KeilMonitor-51Driver做调试器。图2选择相应调试器驱动步骤三:设置调试器参数。图3选择调试器串口通信参数步骤四:进入调试程序界面,利用调试器的各项功能调试程序,检查程序逻辑。图4开始调试程序图5调试程序界面步骤五:退出调试程序界面,返回编辑程序界面时,需要先按下目标板上的RESET按键,而不能直接点击Stop快捷键来停止程序的运行,之后点击Start/StopDebugSession快捷键,返回编辑程序界面。图5停止程序运行二、用C51编写应用程序2.1C语言的优点只要求对单片机的存储结构有了解,不需了解指令系统。相对于汇编语言,C语言有如下的优点:提供专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理分配地址。C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性。提供常用的标准函数库,以供用户直接使用。程序可有多个函数组成模块,可读性好,便于修改。移植性好,可以移植到不同的单片机,而汇编移植困难。C51程序结构和一般的C语言程序结构没有什么差别。C51程序是函数的集合体。程序也是从main()函数开始执行,主函数是程序的入口,主函数中的语句执行结束,程序也就结束了。2.2C51程序结构C51的函数是有类型、函数名、参数表、函数体组成。函数名是一个标识符,是大小写可以区别的,最长可为255个字符。参数表是用圆括号()括起来的若干参数,每项之间用逗号隔开函数体是用大括号括起来的若干C语句,语句之间用分号隔开,最后一个语句是return(主函数可以省略),返回函数类型。函数类型就是返回值的类型,除整型外,都需要在函数名前加以指定。externunsignedcharLED;externcharfunc1(charz);//主函数voidmain(void){LED=0;chara=func1(c);intb=func2(d,e);while(1);}Intfunc2(intx,inty){returnx+y;}外部变量声明外部函数声明注释函数类型函数名(参数表){函数体开始}函数体结束数据说明;执行语句;本文件内的函数定义2.3C51与ANSI标准C的差别2.3.1关键字C51包含ANSIC关键字的同时,也针对51单片机扩展了一些关键字。ANSI关键字:autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledowhileifstaticC51扩展关键字:_at_alienbdatabitcodecompactdataidatainterruptlargepdata_priority_reentrantsbitsfrsfr16small_task_usingxdataC51的运算符与ANSIC的运算符无差别。主要包括以下几类:2.3.2C51的运算符算术运算符逻辑运算符关系运算符位运算符复合运算符其他运算符?:,sizeof,*,&,[],-,.2.3.3C51的变量C51的变量和ANSIC的变量有些比较关键的区别。变量的数据类型1、基本类型与ANSIC一样,C51的基本数据类型有char、int、short、long和float。除float类型外均可用signed和unsigned修饰,默认是signed型。char占1个字节,int和short占2个字节,long占4个字节,float占4个字节。2、其他类型C51的指针类型与ANSIC的指针概念相同,指向一个特定的地址。该地址即可以变量地址也可以是函数地址。例如:intfuncA(inta,intb);int(*pointer)(int,int)=funcA;定义了一个指向函数funcA的指针pointer;其他的如enum、struct、union以及数组和ANSIC的都相同。变量的作用域C51的变量分为局部变量和全局变量。在编程是要尽量使用局部变量,少用全局变量。3、C51专有的数据类型bit:变量存储在可位寻址区,保存1位二进制数。(不能用指针)。sfr和sfr16:定义特殊寄存器变量。sbit:可位寻址变量的一个位。可位寻址的变量是bdata变量或是部分的sfr变量。变量的存储种类auto:变量默认的存储类型。register:使用寄存器的变量。extern:全局变量,可以在多个文件中使用。static:使局部变量与程序的寿命相同;使全局变量只在本文件内有效。1、具体的存储区域类型有:idata:片内间接寻址的RAMxdata:片外数据存储(64K)pdata:分页寻址的片外RAMdata:片内直接寻址的RAMcode:统一编制的ROM(64K)bdata:片内可位寻址的RAM(128位)变量的存储区域这部分是C51与ANSIC区别最明显的地方。C51中可以指定变量存储在具体的存储器区域内。片内RAM、片外RAM或是ROM)例如:chardatach=‘c’;定义变量ch存储在直接寻址的内部RAM区。2、指针与存储区域与变量相同,对于指针也可以指定存储区域,以及指针所指向变量的存储区域。指明了所指向变量的具体存储区域的指针的效率要更高,占用的存储区也少一些。例如:chardata*str1;//指针指向data存储区的字符变量。chardata*datastr2;//指针本身也在data区域3、绝对地址的变量C51中,可以通过使用_at_关键字来指定变量存储在存储器中的特定地址上。例如:chardatach_at_0x100;对这类变量的要求:⑴不能初始化;⑵bit类型不能使用绝对地址;⑶只有全局变量才能使用绝对地址;同ANSIC一样,C51的程序语句主要是三种类型。2.3.4程序语句2.3.5函数C51中,函数的声明、定义和调用的方法与ANSIC一样,不同之处主要有:可重入函数:C51中的函数默认情况是不能由多个进程共享,而可重入函数可以不受此限制。可用reentrant关键字声明函数为可重入函数。例如:intfuncTest(intx,inty)reentrant;顺序语句:就是语句,按顺序一句一句执行。分支语句:ifelse,switch循环语句:for,while,dowhile指定使用寄存器组:C51中的函数可以指定使用特定的寄存器组。若为中断函数指定寄存器组,则所有被该中断函数调用的函数都必须使用该寄存器组。使用using关键字声明函数使用第几组寄存器组。例如:intfuncTest(intx,inty)using0;表示函数funcTest使用第0组工作寄存器组。中断服务子程序:C51中使用interrupt关键字指定函数为中断服务子程序。例如:voidfuncTest(void)interrupt0;表示函数funcTest为外部中断0的中断服务子程序。1、列出C51与ANSIC之间的主要差别。2、学习使用联机帮助。3、了解reg51.h、stdio.h、stdlib.h、string.h、intrins.h、absacc.h等头文件中定义的宏和函数。2.4、本次作业

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功