1、单片机专题实训西安交通大学城市学院电信系实验中心 张桦 办公室:实验楼 510 办公室电话:029-86653004 email: (程序调试方法)单片机专题实训内容u 键盘和数码管显示 主要是相关芯片ZLG7289的内容。u 液晶显示 主要是相关液晶显示模块LCM12864的内容。u 实时时钟 主要是相关实时时钟/日历芯片PCF8563的内容。单片机专题实训报告要求u 硬件电路图 电路结构和原理简介u 软件流程图 每个模块画一个流程图和模块说明u 电路图中主要芯片说明和操作说明 芯片引脚、操作时序、芯片寄存器功能介绍一、程序调试方法1.1 单片机AT89S52 u ATMEL公司出品的兼容M
2、CS-51系列单片机的一款产品。 其最主要的特点是内置Flash存储器,并提供对其编程的 方法。u AT89S52内置了8KByte的可在线编程的Flash存储器。u 具有灵活的ISP编程模式。u 并行和串行编程方式并行编程接线图串行编程接线图1.2 使用Keil软件编程并调试程序1.2.1 使用Keil软件编程 步骤一:使用keil软件Project菜单项中的New Project 建立一个新工程。 步骤二:为新工程选择芯片,添加源程序文件(.c 或是.asm)。 步骤三:对工程做相关配置。 Option for Target1配置页面窗口中选中 Output页面中的Create HEX选项
3、。 步骤四:编写程序并使用Project菜单项中的Build All 子菜单为应用创建可执行文件(.HEX)。调试程序是发现查找程序的逻辑错误的过程。1.2.2 调试程序 步骤一:连接AT89S52单片机下载线,打开实验 箱电源。 步骤二:打开电脑桌面上的双龙电子软件SLISP。 步骤三:在SLISP软件界面中,器件选择AT89S52, FLASH存储器选择由Keil软件生成的*.Hex 文件,之后点击软件界面最下方的编程按钮, 下载程序,下载完成,单片机会自己执行程序。 步骤四:观察程序执行结果,程序运行结果与预期不 一致,则返回Keil编程界面,检查程序逻辑。二、用C51编写应用程序2.1
4、 C语言的优点 只要求对单片机的存储结构有了解,不需了解指令系统。相对于汇编语言,C语言有如下的优点: 提供专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理分配地址 。 C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性。 提供常用的标准函数库,以供用户直接使用 。 程序可有多个函数组成模块,可读性好,便于修改 。 移植性好,可以移植到不同的单片机,而汇编移植困难 。 C51程序结构和一般的C语言程序结构没有什么差别。 C51程序是函数的集合体。程序也是从main()函数开始执 行,主函数是程序的
5、入口,主函数中的语句执行结束,程 序也 就结束了。2.2 C51程序结构 C51的函数是有类型、函数名、参数表、函数体组成。 函数名是一个标识符,是大小写可以区别的,最长可为 255 个字符。 参数表是用圆括号()括起来的若干参数,每项之间用逗号隔开 函数体是用大括号括起来的若干C语句,语句之间用分号隔 开,最后一个语句是return (主函数可以省略) ,返回函数 类型。 函数类型就是返回值的类型,除整型外,都需要在函数名前加以指定。extern unsigned char LED;extern char func1(char z);/主函数void main(void)LED= 0;cha
6、r 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 switchcase enum register typedef char extern returnuni
7、on float short unsigned continue for signedvoid default goto sizeof volatile do while ifstaticC51 扩展关键字:扩展关键字:_at_ alien bdata bit code compact data idatainterrupt large pdata _priority_ reentrant sbitsfr sfr16 small _task_ using xdata C51的运算符与ANSI C的运算符无差别。主要包括以下几类:2.3.2 C51的运算符 算术运算符 逻辑运算符 关系运算符 位
8、运算符 复合运算符 其他运算符 ? :, sizeof, *, &, , -, . 2.3.3 C51的变量C51的变量和ANSI C的变量有些比较关键的区别。u 变量的数据类型1、基本类型 与ANSI C一样,C51的基本数据类型有char、int、short、long和float。除float类型外均可用signed和unsigned修饰,默认是signed型。char占1个字节,int和short占2个字节,long占4个字节,float占4个字节。2、其他类型 C51的指针类型与ANSI C的指针概念相同,指向一个特定的地址。该地址即可以变量地址也可以是函数地址。例如:int func
9、A(int a, int b); int (*pointer)(int, int)= funcA;定义了一个指向函数funcA的指针pointer; 其他的如enum、struct、union以及数组和ANSI C的都相同。u 变量的作用域C51的变量分为局部变量和全局变量。在编程是要尽量使用局在编程是要尽量使用局部变量,少用全局变量。部变量,少用全局变量。3、C51专有的数据类型 bit:变量存储在可位寻址区,保存1位二进制数。(不能用指针)。 sfr和sfr16:定义特殊寄存器变量。 sbit:可位寻址变量的一个位。可位寻址的变量是bdata变量或是部分的sfr变量。u 变量的存储种类au
10、to:变量默认的存储类型。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或是RO
11、M)例如:char data ch= c;定义变量ch存储在直接寻址的内部RAM区。2、指针与存储区域、指针与存储区域与变量相同,对于指针也可以指定存储区域,以及指针所指向变量的存储区域。指明了所指向变量的具体存储区域的指针的效率要更高,占用的存储区也少一些。例如:char data *str1; /指针指向data存储区的字符变量。char data * data str2; /指针本身也在data区域3、绝对地址的变量、绝对地址的变量C51中,可以通过使用_at_关键字来指定变量存储在存储器中的特定地址上。例如:char data ch _at_ 0 x100;对这类变量的要求: 不能初始
12、化; 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 指定使用寄存
13、器组: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、本次作业