keil软件用法.docx

上传人:b****7 文档编号:9576044 上传时间:2023-02-05 格式:DOCX 页数:49 大小:642.56KB
下载 相关 举报
keil软件用法.docx_第1页
第1页 / 共49页
keil软件用法.docx_第2页
第2页 / 共49页
keil软件用法.docx_第3页
第3页 / 共49页
keil软件用法.docx_第4页
第4页 / 共49页
keil软件用法.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

keil软件用法.docx

《keil软件用法.docx》由会员分享,可在线阅读,更多相关《keil软件用法.docx(49页珍藏版)》请在冰豆网上搜索。

keil软件用法.docx

keil软件用法

实验一指令调试练习

【实验目的】

1.熟悉仿真软件的使用,掌握调试程序的几种方法;

2.理解常用指令的作用;

3.熟悉几种典型的子程序编程

【实验内容】

1.数据块传送程序的调试

2.延时子程序的调试

3.二进制数转换十进制数子程序的调试

4.双字节无符号数加法程序调试(选作)

【实验程序及操作步骤】

1.数据块传送程序的调试

实验程序

one:

将十六进制数0-F存到RAM的30H-3FH地址单元中;

two:

将RAM的30H-3FH地址单元中的数据传送到40H-4FH地址单元中。

源程序如下:

Addr1equ30h;定义源数据起始地址

Addr2equ40h;定义目的起始地址

Lenequ10h;定义数据块长度

ORG0000h;指明程序的起始地址

one:

;将十六进制数0-F存到RAM的30H-3FH地址单元中;

CLRA;要传送的数据放A里,初始值为0

MOVR0,#addr1;R0为地址指针,初始指向30H

MOVR2,#Len;R2是数据块的长度

Loop1:

MOV@R0,A;把A里的数据送R0指向的地址(调试时观察数据存储区30H-3FH里数

;据在执行指令前后的变化)

INCR0;修改地址指针

INCA;修改A中的数据

DJNZR2,Loop1;控制循环次数(调试时观察R1里数据的变化,体会DJNZ指令的作用)

two:

;将RAM的30H-3FH地址单元中的数据传送到40H-4FH地址单元中。

MOVR0,#addr1;R0作为源数据地址指针,起始地址是30H

MOVR1,#addr2;R1作为目地地址指针,起始地址是40H

MOVR2,#len;R2是数据块的长度

Loop2:

MOVA,@R0;取源数据(调试时观察R0的间接寻址的作用)

MOV@R1,A;源数据送目的地址单元(调试时观察R1的间接寻址的作用)

INCR0;修改源数据地址指针

INCR1;修改目的地址指针

DJNZR2,Loop2;控制循环次数,调试时观察R2里数据的变化,体会DJNZ指令的作用

SJMP$;程序原地踏步

END;程序结束

实验操作:

(1)新建工程

单击桌面

图标,打开uVision3程序,如图1-1所示。

图1-1程序界面

单击“工程”菜单下“新建uVision3工程”新建工程,弹出“产生新工程”对话框,如图1-2所示。

图1-2新建工程

输入文件名,单击图1-2中“保存”按钮,选择单片机型号,Atmel/AT89S52。

单击“确定”按钮,完成新建工程,程序界面如图1-3所示。

单击滚动条选择AT89S52

图1-3选择单片机型号

(2)新建源文件

单击“文件”菜单下“新建”,新建源程序文件,在空白区输入源程序,单击工具栏中

保存文件,保存文件时要手动添加文件扩展名为asm,如图1-4所示。

手动添加

扩展名asm

图1-4建立源程序文件

鼠标右键单击“工程窗口”中“源代码组1”,在弹出的下拉菜单中选择“添加文件到组源代码组1”中,把刚保存的asm源程序文件添加到工程组中,如图1-5所示。

注意路径及文件类型的修改。

图1-5添加源代码程序

(3)编译、连接和调试

单击“工程”菜单下“编译”源程序文件(或单击工具栏中快捷按钮

,其位置在第二行工具栏第一个),在输出窗口(OutputWindow)显示编译结果,如图1-6所示。

图1-6输出窗口

单击

进行连接,

为单个源程序文件连接,

为工程内所有源程序文件连接。

连接的结果显示在输出窗口中。

单击“调试”菜单下选择“启动/停止调试”开始程序调试(或单击工具栏中快捷按钮

,其位置在第一行工具栏倒数第七个),程序主界面如图1-7所示。

图1-7调试界面

调试工具栏如图1-8所示。

图1-8调试工具栏

(4)打开各窗口查看机器码、各种存储器地址及内容

单击“视图”菜单打开“反汇编窗口”,如图1-9所示,查看各条指令对应的机器码和存储地址。

存储器地址

机器代码

图1-9反汇编窗口

单击“视图”菜单打开“存储器窗口”,如图1-10所示,查看各存储器内的数值。

字母:

数字

(字母c、d、i、x分别代表代码存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部RAM空间;数字代表起始位置)

图1-10存储器窗口

程序主界面左边“工程窗口”显示特殊寄存器数值,如图1-11所示。

图1-11特殊寄存器窗口

实验记录1

根据反汇编窗口记录从标号two到end之间的指令对应的机器码和存储地址于表1-1中。

表1-1

指令

机器代码

存储器地址

MOVR0,#addr1

7830

000A000B

MOVR1,#addr2

MOVR2,#len

Loop2:

MOVA,@R0

MOV@R1,A

INCR0

INCR1

DJNZR2,Loop2

SJMP$

实验记录2

根据图1-10存储器窗口把各地址单元里存储的机器代码记录于表1-2中。

表1-2

代码存储器地址

0000H

0001H

0002H

0003H

0004H

0005H

0006H

0007H

机器代码

代码存储器地址

0008H

0009H

000AH

000BH

000CH

000DH

000EH

000FH

机器代码

实验记录3

执行“跟踪”

操作命令,逐条执行指令,在图1-11特殊寄存器窗口观察R0、R1、R2、A等寄存器里数据的变化,在图1-10存储器窗口中打开“数据存储空间”(d:

0),如图1-12所示,观察30H-32H,40H-42H里的数据。

并记录于表1-3中。

图1-12数据存储器

表1-3

MOVR0,#addr1

R0=

MOVR1,#addr2

R1=

MOVR2,#len

R2=

Loop2:

MOVA,@R0

R0=(30H)=

A=

(31H)=

A=

(32H)=

A=

MOV@R1,A

R1=(40H)=

R1=(41H)=

R1=(42H)=

INCR0

R0=

R0=

R0=

INCR1

R1=

R1=

R1=

DJNZR2,loop

R2=

R2=

R2=

SJMP$

R2=R1=R0=

通过表中的数据,说明数据块传送单片机是如何工作的?

实验记录4

执行“运行”操作命令

,然后再执行“停止”命令

,在图1-12中观察30H-3FH和40H-4FH里的数据记录于表1-4中;

表1-4

数据存储器地址

0030H

0031H

0032H

0033H

0034H

0035H

0036H

0037H

数值

数据存储器地址

0038H

0039H

003AH

003BH

003CH

003DH

003EH

003FH

数值

数据存储器地址

0040H

0041H

0042H

0043H

0044H

0045H

0046H

0047H

数值

数据存储器地址

0048H

0049H

004AH

004BH

004CH

004DH

004EH

004FH

数值

通过表中的数据,概述程序的执行结果:

2.延时子程序的调试

每条指令执行的时间=机器周期数×一个机器周期时间×执行次数

一个机器周期时间=12个时钟周期

一个时钟周期=晶振频率的倒数(本实验晶振频率为12M)

实验程序

ORG0000H

MOVSP,#60H

MOVA,#00H

Loop:

MOVP1,A

ACALLDELAY100ms

CPLA

SJMPLoop

DELAY100ms:

MOVR6,#199;1×1=1us

Dly1:

MOVR7,#250;1×1×199=199us

DJNZR7,$;2×1×250×199=99.5ms

DJNZR6,Dly1;2×1×199=398us

RET;2×1=2us

END

注:

延时时间等于延时子程序执行时间。

实验操作:

(1)新建工程和源程序文件,步骤同上。

(2)时钟设置。

在“工程”菜单下选择“为目标1设置选项”,弹出设置选项卡,将“时钟”改为12M,如图1-13所示。

图1-13时钟设置

(3)编译、连接和连接,步骤同上。

执行“跟踪”

操作命令,观察调用子程序的工作过程,在图1-11所示的特殊寄存器窗口观察SP、PC指针的变化,在数据存储器窗口观察堆栈里的数据,并将它们记录于表1-5中。

表1-5堆栈数据和PC数据的记录

PC指针指向指令

PC

SP

61H

62H

ACALLdelay100ms

DELAY100ms:

MOVR6,#199

RET

CPLA

根据表中的数据说明单片机调用子程序的工作过程。

(4)用“单步”命令

执行程序,在执行ACALLdelay100ms命令前后,观察图1-11寄存器窗口中sec的数据,说明延时时间是多少?

(5)单击“外围设备”菜单选择P1口,如图1-14所示。

用“单步”命令

执行程序,观察和说明P1口是如何变化的?

图1-14I/O窗口

(6)单击逻辑分析仪快捷图标

(工具栏第二行倒数第三个),弹出窗口如图1-15所示。

单击图中“设置”按钮,在弹出的设置窗口中输入“P1”。

图1-15逻辑分析仪

在图1-13中选择“调试”选项卡,选中“根据真实时间控制速度”,如图1-16所示。

图1-16调试选项卡

运行程序在图1-15逻辑分析仪窗口中,运用“放大”、“缩小”按钮调整横坐标观察程序运行波形图,如图1-17所示。

图1-17P1口波形图

(7)如果要求P1口周期变化一次的时间为0.5S,程序如何修改?

并运行程序测试延时时间是否达到要求。

3.二进制数转换十进制数子程序的调试

将NUM(二进制数值)转换成3位十进制数,百位、十位、个位分别放在以DBUF1地址开始的RAM中。

实验程序:

DBUF1EQU40H;定义数据存储区起始地址

NUMEQU5AH;给定转换的数据

ORG0000H

LCALLHEXDIV

SJMP$

HEXDIV:

MOVR1,#DBUF1;R1指向数据存储区的起始地址

MOVA,#NUM

MOVB,#100

DIVAB;除以100,求得百位值

MOV@R1,A;百位值存放在存储区的起始地址单元中

MOVA,#10;

XCHA,B;把余数放A,除数放B

DIVAB;除以10,求得十位值

INCR1;

MOV@R1,A;十位值放在存储区起始地址+1单元中

INCR1;

MOVA,B

MOV@R1,A;个位放在存储区起始地址+2单元中

RET

END

实验操作:

(1)输入源程序,进行编译连接,加载调试;

(2)单步运行程序,观察A、B、R1里数据的变化,并记录转换结果于表1-6中。

(3)任给NUM的数值,并记录转换结果于表1-6中。

(4)令NUM=FFH并改换数据存储单元起始地址为50H,连续运行程序,观察和记录转换结果于表1-6中。

(5)如果程序中的百位除数和十位除数都用十六进制数表示应该为何值,修改后再运行程序,观察运行结果与修改前是否一样。

表1-6二——十进制数转换结果记录

二进制数(NUM)

存储器数值

十进制数

5AH

(40H)=

(41H)=

(42H)=

(40H)=

(41H)=

(42H)=

FFH

(50H)=

(51H)=

(52H)=

4.双字节无符号数加法程序调试(选作)

实验程序:

Addr1equ20H;被加数低位字节存储地址

Addr2equ25H;加数低位字节存储地址

Lenequ02H;字节数

Num1equ03H

Num2equ0EFH

Num3equ0ABH

Num4equ14H

ORG0000H

MOV20H,#Num1

MOV21H,#Num2

MOV25H,#Num3

MOV26H,#Num4

MOVR0,#20H;R0为被加数地址指针

MOVR1,#25H;R1为加数地址指针

MOVR2,#Len;字节数

MOVR3,#00H;R3为和的字节数

CLRCY

PLUS:

MOVA,@R0;取被加数

ADDCA,@R1;取加数与被加数相加

MOV@R0,A;存和

INCR0;被加数地址指针加1

INCR1;加数地址指针加1

INCR3;和的字节数加1

DJNZR2,PLUS;未加完继续

JCPLUS1;加法结果有进位

DECR0;无进位,R0指向和的高位字节

SJMP$

PLUS1:

MOV@R0,#01h;处理进位

INCR3

SJMP$

END

实验操作:

(1)输入源程序,编译、连接、加载调试;

(2)用单步命令执行程序,观察并记录R0、R1、R2、R3数据于表1-7中:

(3)改变加数与被加数,用连续运行命令执行程序,观察并记录加法结果于表1-7中;

(4)修改程序为双字节BCD码加法程序,在ADDCA,@R1指令后,增加DAA指令,任给两个双字节BCD码的数,验证程序的正确性,并记录加法结果于表1-7中。

表1-7

MOVR0,#a20H

R0=

MOVR1,#25H

R1=

MOVR2,#len

R2=

MOVR3;#00H

R3=

plus:

第一次

第二次

MOVA,@R0

R0=A=

R0=A=

ADDCA,@R1

R1=A=

R1=A=

INCR0

R0=

R0=

INCR1

R1=

R1=

INCR3

R3=

R3=

DJNZR2,PLUS

R2=

R2=

……

SJMP$

CY=0

CY=1

R0=

R3=

R0=

R3=

加法结果

双字节无符号数加法

双字节BCD码加法

Num2Num1

Num4Num3

Sum

【实验总结】

(1)通过实验熟悉了哪些指令的应用?

这些指令的作用?

(2)实验程序中使用了哪些程序结构?

循环结构中是由哪条指令实现程序跳转的?

分支结构中是由哪条指令实现跳转的?

(3)根据实验记录说明调用子程序时堆栈的工作过程。

(4)延时子程序延时时间如何计算?

试编写一个能延时1秒的延时子程序。

(5)使用仿真软件KEIL调试程序的基本操作步骤?

在实验程序调试中,使用了哪些执行程序的方法?

如何操作?

(6)在实验程序调试中,使用了软件中哪些窗口来观察数据变化和结果?

各窗口的作用是什么?

(7)表1-2和表1-4中的“地址”有什么不同?

其中的“数据”有什么本质的区别?

(8)其他。

【实验报告要求】

(1)实验题目、实验人姓名、班级、学号、实验时间、实验地点;

(2)实验所使用的仪器设备和软件调试工具;

(3)实验内容、实验操作、实验记录与分析;

(4)实验总结。

实训课题单片机最小系统电路设计

一、实训目的

1、熟悉ProtelDXP的操作

2、掌握用ProtelDXP绘制原理图的方法

3、掌握用ProtelDXP制作PCB板的方法

二、实训要求

利用protelDXP软件完成单片机最小系统的PCB板的设计。

三、实训内容

1、元件符号及封装编辑。

2、原理图绘制。

3、PCB板。

4、DRC报告。

四、报告内容、设计数据及附图

1、电路原理基本分析

2、电路模块功能的介绍。

(电源模块、单片机最小系统:

复位电路、晶振电路(离X1,X2引脚近些,否则不易起振)、P1口LED电路)

51单片机复位电路工作原理(网址:

1、复位电路的用途

单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。

单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。

2、复位电路的工作原理

在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。

所以可以通过按键的断开和闭合在运行的系统中控制其复位。

开机的时候为什么为复位

在电路图中,电容的的大小是10uF,电阻的大小是10k。

所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。

也就是说在电脑启动的0.1S内,电容两端的电压时在0~3.5V增加。

这个时候10K电阻两端的电压为从5~1.5V减少(串联电路各处电压之和为总电压)。

所以在0.1S内,RST引脚所接收到的电压是5V~1.5V。

在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。

所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。

按键按下的时候为什么会复位

在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。

当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。

随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。

根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。

单片机系统自动复位。

总结:

1、复位电路的原理是单片机RST引脚接收到2US以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位,所以电路中的电容值是可以改变的。

2、按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。

晶振电路的作用(网址:

电容大小没有固定值。

一般二三十p。

晶振是给单片机提供工作信号脉冲的。

这个脉冲就是单片机的工作速度。

比如12M晶振。

单片机工作速度就是每秒12M。

和电脑的CPU概念一样。

当然。

单片机的工作频率是有范围的。

不能太大。

一般24M就不上去了。

不然不稳定。

接地的话数字电路弄的来乱一点也无所谓。

看板子上有没有模拟电路。

接地方式也是不固定的。

一般串联式接地。

从小信号到大信号依次接。

然后小信号连到接地来削减偕波对电路的稳定性的影响,所以晶振所配的电容在10pf-50pf之间都可以的,没有什么计算公式。

但是主流是接入两个33pf的瓷片电容,所以还是随主流。

晶振电路的原理

晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。

由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。

这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率范围很窄,所以即使其他元件的参数变化很大,这个振荡器的频率也不会有很大的变化。

晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。

一般的晶振振荡电路都是在一个反相放大器(注意是放大器不是反相器)的两端接入晶振,再有两个电容分别接到晶振的两端,每个电容的另一端再接到地,这两个电容串联的容量值就应该等于负载电容,请注意一般IC的引脚都有等效输入电容,这个不能忽略。

一般的晶振的负载电容为15p或12.5p,如果再考虑元件引脚的等效输入电容,则两个22p的电容构成晶振的振荡电路就是比较好的选择。

P1口LED电路

LED循环轮流点亮设计电路如图2所示。

将单片机第40脚Vcc接电源+5V,第20脚Vss接地,为单片机工作提供能源。

将第19脚XTAL1与18脚XTAL2分别接外部晶体两个引脚,由石英晶体组成振荡器,保证单片机内部各部分有序地工作。

对外部C1、C2的取值虽然没有严格的要求,但电容的大小会影响到振荡器频率的高低、振荡器的稳定性、起振的快速性。

C1、C2通常取值C1=C2=30PF左右。

8051的晶振最高振荡频率为12M,AT89C51的外部晶振最高频率可到24M。

P1口定义为带有上拉电阻8位准双向I/O口,功能单一,每一位可独立定义为输入输出,CPU对P1口操作可以是字节操作,也可以是位操作。

P1作为输出口使用时,它的内部电路已经提供了一个推拉电流负载,外接了一个上拉电阻,外电路无需再接上拉电阻,与一般的双向口使用方法相同;作为输入口使用时,应先向其锁存器写入“1”,使输出驱动电路的FET截止。

若不先对它置“1”,读入的数据是不准确的。

P1口输出控制程序的设计主要包括控制输出程序设计与延时程序设计。

(1)输出控制:

当P1.5端口输出低电平,即P1.5=0,这时LED亮,反之,LED灭,可以使用P1.5=0指令使P1.5端口输出低电平,同样利用指令使P1.5端口输出高电平。

(2)延时程序:

单片机指令的执行时间是很短的,数量大多是微秒级,因此,我们要求的闪烁时间间隔为0.2s,相对于微秒来说,相差太大,因此在执行某一指令时,插入延时程,来解决这一问题。

开关状态检测过程:

单片机对开关状态的检测相对于单片机来说,是从单片机的端口输入信号,而输入的信号只有高电平和低电平两种,要能正确输入信号,先使P1端口P1.0-P1.3置1。

可轮流检测每个开关状态,根据每个开关的状态让相应的二极管指示,也可以一次性检测四路开关状态,然后让其指示。

3、PCB布板中元件布局的分析

PCB布板中元件布局的原理(http:

//wenku.bai

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1