单片机原理及应用实验指导书.docx

上传人:b****5 文档编号:3252892 上传时间:2022-11-21 格式:DOCX 页数:43 大小:514.99KB
下载 相关 举报
单片机原理及应用实验指导书.docx_第1页
第1页 / 共43页
单片机原理及应用实验指导书.docx_第2页
第2页 / 共43页
单片机原理及应用实验指导书.docx_第3页
第3页 / 共43页
单片机原理及应用实验指导书.docx_第4页
第4页 / 共43页
单片机原理及应用实验指导书.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

单片机原理及应用实验指导书.docx

《单片机原理及应用实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用实验指导书.docx(43页珍藏版)》请在冰豆网上搜索。

单片机原理及应用实验指导书.docx

单片机原理及应用实验指导书

《单片机原理及应用》

实验指导书

 

信息学院

2010年3月

目录

实验一熟悉单片机软件开发环境1

实验二MCS-51单片机I/O实验4

实验三七段数码管动态显示实验7

实验四键盘扫描及显示实验12

实验五MCS-51单片机中断实验15

实验六定时器计数器实验19

实验七单片机AD转换及串行异步通信23

实验八单片机软件实现IIC存储接口29

实验九单片机综合应用设计实验33

实验一熟悉单片机软件开发环境

一、实验目的

1、了解单片机软件开发环境的主要软件PROTEUS和KEIL;

2、掌握软件的安装、使用、程序的调试方法,包括跟踪、单步运行和断点设置等;

3、熟悉51单片机的指令系统,掌握汇编语言程序的设计方法。

二、实验仪器

P4电脑一台,软件PROTEUS6.7、KEILUV2以上版本。

三、实验内容

1、PROTEUS、KEIL软件的安装。

2、PROTEUS和KEIL软件联合调试的设置。

3、简单程序调试

(1)传送指令

设置内部RAM的值,(30H)=40H,(40H)=10H,单步执行下列程序,检查结果。

MOV30H,#40H

MOV40H,#10H

MOVR0,#30H

MOVA,@R0

MOVR1,A

MOVB,@R1

SJMP$

执行后:

(R0)=,(R1)=,(A)=,(B)=,(30H)=,(40H)=。

(2)运算指令

单步

执行

MOVA,#0BFH

MOV20H,#85H

SETBC

ADDA,20H

MOVA,#0BFH

MOV20H,#85H

SETBC

ADDCA,20H

MOVA,#0BFH

MOV20H,#85H

SETBC

SUBBA,20H

MOVA,#0BFH

MOVB,#85H

MULAB

SJMP$

结果

标志

(A)=

CY=AC=

OV=P=

(A)=

CY=AC=

OV=P=

(A)=

CY=AC=

OV=P=

(A)=(B)=

CY=AC=

OV=P=

4、多字节十进制数加法

被加数

加数

结果

低位

20H

67

30H

65

20H

21H

45

31H

72

21H

22H

23

32H

98

22H

23H

01

33H

89

23H

高位

图1-24字节十进制数相加

两个4字节十进制数1234567和89987265相加,将其8421-BCD码按低位到高位存放在地址为20-23H、30-33H的RAM中,运算结果存放在20-23H的地址中,如上图示。

运算程序如下,ADD_BCD为多字节十进制数加法子程序的首地址。

分别按“跟踪”、“单步”和“全速”方式调试程序。

检查运算结果,区别“跟踪”、“单步”调试方式的不同。

在“ADD_BCD子程序”的指令“DAA”处设置断点,再用“全速”方式运行,到达断点后,观察“A”的值,然后用“单步”运行,观察指令“DAA”的功能。

同时理解“断点”方式调试程序的特点。

;;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;

MOVR0,#20H;置被加数首地址

MOVR1,#30H;置加数首地址

MOVR2,#04H;置被加数和加数的长度(字节数)

ACALLADD_BCD;调用多字节十进制数加法子程序ADD_BCD

STOP:

SJMPSTOP;停止

;;;;;;;;;;多字节十进制数加法子程序;;;;;;;;;;

;入口:

R0、R1为被加数和加数的首地址,按低位到高位存放

;出口:

R0为运算结果的首地址,也按低位到高位存放

ADD_BCD:

CLRC;进位清零

LOOP:

MOVA,@R0;一字节的被加数→A

ADDCA,@R1;一字节加

DAA;十进制数调整

MOV@R0,A;存一字节的运算结果

INCR0;被加数指向下一字节

INCR1;加数指向下一字节

DJNZR2,LOOP;循环控制

RET;子程序返回

END

四、预习要求

1、读懂各程序;

2、预先给出运算结果,以便和实验结果比较;

3、回忆“跟踪”、“单步”和“断点”调试方式的特点。

五、思考题

1、为什么程序结束用“STOP:

SJMPSTOP”指令?

用没有其他的停止方式?

51单片机启动后,是否一直不断地在执行指令?

2、比较“跟踪”、“单步”和“断点”调试方式的特点。

 

实验二MCS-51单片机I/O实验

一、实验目的

1、掌握单片机基本I/O口的使用特点,了解扩展I/O口的方法;

2、了解LED动态显示电路结构,掌握LED动态显示方法;

3、掌握程序延时的计算及应用;

二、实验仪器

P4电脑一台,软件PROTEUS6.7、KEILUV2以上版本。

三、实验内容

1、P1口输出

在PROTEUS中绘制仿真原理图,P1口做输出口,P1口连接8只发光二极管,如图2-1所示,编写程序,使发光二极管指示灯循环点亮,并进行仿真。

图2-1P1口输出

CPUAT89C51的振荡频率为12MHz,发光二极管循环点亮需要一个延时子程序DELAY1S。

延时时间为((14+2)×250+2)×250=1.0005(秒)。

参考程序

ORG0000H

LJMPSTART

ORG0100H

START:

MOVA,#1;循环点亮LED初值,假定P1.0灯先亮

LOOP:

MOVP1,A;向P1端口输出亮灯信号

MOVR0,#250;延时程序初始化

MOVR1,#250

ACALLDELAY1S;延时程序调用

RLA;前一盏灯亮完后,让亮灯信号向下一盏灯移动

;同学们可以将此指令换成RLC,观察仿真结果有无变化

AJMPLOOP

DELAY1S:

DEL1:

NOP;对于12M晶振,14个NOP有14us,1个DJNZ2us16us*250=4ms

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

DJNZR0,DEL1;实际延时4002*250=1.0005s

DJNZR1,DEL1

RET

END

2、P1口输入

P1做输入口,连接至DIP开关,P2口输出连接至8只发光二极管,如图2-2所示。

编写程序,使DIP开关的电平通过发光二极管指示灯显示出来。

图2-2P1口输出

由于51单片机的I/O口特点,输入口读入数据前要求先置1,使口上的下拉管截止,为外部数据的输入做准备。

参考程序

ORG0000H

LJMPSTART

ORG0040H

START:

MOVP1,#0FFH;P1口置1

MOVA,P1;读入P1口的DIP电平

MOVP2,A;P2口输出至指示灯

SJMPSTART

四、预习要求

1、读懂教材相应章节内容,掌握51单片机的并行I/O口逻辑结构和使用特点;

2、掌握LED动态显示原理;

3、编写出各个实验内容的相应程序。

五、思考题

1、修改2-1程序,使指示灯两两右循环;

2、修改2-1程序,使指示灯右循环间隔为0.1秒;

3、对2-2实验,仿真时将拨码开关换成按键,再调整其开关时间属性,看看有什么效果。

实验三七段数码管动态显示实验

一、实验目的

1、进一步掌握单片机I/O口的使用;

2、了解7段数码管动态显示电路原理及结构特点,掌握LED动态显示方法;

3、进一步掌握程序延时的计算及应用。

二、实验仪器

P4电脑一台,软件PROTEUS6.7、KEILUV2以上版本。

三、实验内容

1、七段LED动态显示输出

AT89C51控制多只LED七段数码管显示常采用动态方式显示,本实验的4只LED显示器采用动态方式显示,参见图3-1。

图3-1动态LED显示器电路

4只LED七段显示器的4个共阴极1234分别连接8位寄存器(U3)74LS374的Q0-Q3上,8位寄存器(U2)74LS374的Q0-Q7分别连接到上七段显示器的ABCDEFG和DP上。

因此U2寄存器输出LED显示的字形,U3寄存器输出控制显示的灯位,如:

(U2)=00111111,(U3)=11111110,1号灯显示“0”,其余灯不亮;(U2)=00000110,(U3)=11110011,3号灯和4号灯显示“1”,其余灯不亮。

其中“00111111”和“00000110”为和字形“0”和“1”的段码,表2-1为字段码和字形对应表。

(U3)的低4位控制显示的4个灯位,低电平显示,高电平不显示,显示的字形由(U2)输出值决定,可参见表2-1字段码和字形对应表。

所谓的动态显示,就是4只LED显示器不能同时显示,一次只能点亮一只LED显示器,4只LED显示器轮流点亮,利用人眼的视觉暂留和LED显示器余辉,就可看到4只LED显示器同时点亮,但亮度有所下降。

可见,动态显示也需要合适延时,才会有较好的显示效果。

实验要求1:

编写程序,从左到右显示“1”、“2”、“3”、“4”,调整延时时间,观察显示效果。

实验要求2:

编写程序,让显示的数值按秒递增或递减。

表3-1字段码和字形对应表

字段码

字形

字段码

字形

DpGFEDCBA

十六进制码

DpGFEDCBA

十六进制码

00111111

3FH

01111111

7FH

00000110

06H

01101111

6FH

01011011

5BH

01110111

77H

01001111

4FH

01111100

7CH

01100110

66H

00111001

39H

01101101

6DH

01011110

5EH

01111101

7DH

01111001

79H

00000111

07H

01110001

71H

参考程序

;从左到右显示“1”、“2”、“3”、“4”

ORG0000H

LJMPSTART

ORG0040H

START:

MOVR7,#04H;灯数

MOVR6,#0FEH;起始灯位,1号灯

MOVDPTR,#TAB;

LOOP:

MOVA,R7;

MOVCA,@A+DPTR;读字段码

MOVP0,A;输出字段码

MOVP2,#40H;字段码地址

MOVA,R6

MOVP0,A;输出灯位控制

MOVP2,#80H;灯位控制地址

RLA;灯位右移

MOVR6,A

LCALLDELAY;延时

DJNZR7,LOOP;灯数计数

SJMPSTART

DELAY:

MOVR0,#3;延时程序初始化(R0,R1调整到250约延时一秒)

MOVR1,#3

DEL1:

NOP;对于12M晶振,14个NOP有14us,1个DJNZ2us16us*250=4ms

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

DJNZR0,DEL1;实际延时4002*250=1.0005s

DJNZR1,DEL1

RET

TAB:

DB00H,66H,4FH,5BH,06H;“空”,“4”,“3”,“2”,“1”的字段码

END

2、以外部RAM扩展方式连接时要增加一定的硬件电路,但可以帮助我们了解外部RAM的扩展,电路如图3-2:

图3-2以外部RAM扩展方式连接的电路图

程序如下:

;从左到右显示“1”、“2”、“3”、“4”

ORG0000H

LJMPSTART

ORG0040H

START:

MOVR7,#04H;灯数

MOVR6,#0FEH;起始灯位,1号灯

MOVDPTR,#TAB;

LOOP:

MOVA,R7;

MOVCA,@A+DPTR;读字段码

;MOVP0,A;此指令将被下面的movx@r0,a替代;;输出字段码

MOVP2,#40H;字段码地址

MOVX@R0,A;输出字段码,替代了上面的MOVP0,A指令

MOVA,R6

;MOVP0,A;此指令将被下面的movx@r0,a替代;;输出灯位控制

MOVP2,#80H;灯位控制地址

MOVX@R0,A;输出灯位控制

RLA;灯位右移

MOVR6,A

LCALLDELAY;延时

DJNZR7,LOOP;灯数计数

SJMPSTART

DELAY:

MOVR0,#250;延时程序初始化

MOVR1,#250

DEL1:

NOP;对于12M晶振,14个NOP有14us,1个DJNZ2us16us*250=4ms

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

DJNZR0,DEL1;实际延时4002*250=1.0005s

DJNZR1,DEL1

RET

TAB:

DB00H,66H,4FH,5BH,06H;“空”,“4”,“3”,“2”,“1”的字段码

END

四、预习要求

1、读懂教材相应章节内容,掌握51单片机的I/O口逻辑结构和使用特点;

2、查阅参考文献,掌握七段LED动态显示原理;

3、编写出各个实验内容的相应程序。

五、思考题

1、如设置30H-33H为显示缓冲区,要显示的字段码送入显示缓冲区,反复调用显示子程序即可,试编写该显示子程序;(电路与3-2相同,程序自编,参考3-3.asm)

2、能否显示“H”、“L”、“P”、“U”的字形,试写出它们的字段码。

实验四键盘扫描及显示实验

一、实验目的

1、了解键盘和扫描电路结构,了解键盘的分类及各种键盘的特点和适用场合;

2、掌握键盘接口的工作原理、键盘扫描方法,了解按键的软件去抖动方法;

3、学习并掌握常用的几种键盘接口编程方法。

二、实验仪器

P4电脑一台,软件PROTEUS6.7、KEILUV2以上版本。

三、实验内容

1、键盘输入概述

对于单片机,我们希望对其运行进行控制,而键盘是最重要和有效的控制输入方式之一。

键盘接口的应用非常灵活,主要分独立式按键接口和行列式键盘接口。

独立式按键接口各键相互独立,每个按键各接一根输入线,通过检测输入线的电平状态可很容易判断哪个键被按下,适于键数较少或操作速度较高的场合。

行列式键盘接口用于按键数目较多的场合,由行线和列线组成,按键位于行、列的交叉点上。

对于按键数目较多的场合,行列式键盘与独立式键盘相比,要节省很多的I/O口线。

单片机在忙于各项工作任务时,如何兼顾键盘的输入,取决于键盘的工作方式。

原则是既要保证能及时响应按键操作,又不要过多占用CPU的工作时间。

通常,键盘工作方式有3种,即编程扫描、定时扫描和中断扫描。

键盘工作层次如图4-1所示。

图4-1键盘工作层次

2、独立式按键

对于图4-2所示独立式键盘,试以编程扫描或定时扫描的方式编写键盘处理程序。

要求KEY1打开流水灯显示,KEY2关闭显示,KEY3控制灯向上流水显示,KEY4控制灯向下流水显示。

图4-2独立式键盘系统电路图

编程扫描参考程序见exp4-1.asm。

自己编写定时扫描程序,并对两种方式进行比较。

启动初始化

列线送低电平,行线送高电平

N

检查各列电平状态,有高电平出现?

Y

调用键识别程序并显示

延时一秒

图4-3键盘扫描程序算法

3、阵列式键盘

对于图4-4所示3*3的键盘阵列,试编写键盘扫描程序实现按键的识别,即按下任一按键,在数码管上显示所按下的键号。

识别键盘有无键被按下的方法,分两步进行,第1步识别键盘有无键按下:

把所有列线置0,检查各行线电平是否有变化,如有变化,说明有键按下,如无变化,则无键按下。

第2步如有键被按下,识别出具体的按键:

先把某一列置低电平,其余各列为高电平,检查各行线电平的变化,如果某行线电平为低,可确定此行列交叉点处的按键被按下。

本例算法如图4-3(先自主编写程序,如果实在无法写出正确的程序再参考exp4-2.asm程序,并找出自已程序的问题所在)。

参考程序见exp4-2.asm。

图4-43*3键盘电路

4(选做):

编写一个时钟程序(包含显示及按键输入)。

四、预习要求

1、读懂教材第十章第二节,掌握键盘电路结构、键盘扫描原理及软件去抖动方法;

2、复习并掌握七段LED动态显示原理及显示程序;

3、自主编写出各个实验内容的相应程序。

五、思考题

1、独立式按键和阵列式键盘有什么区别?

编程上有什么不同?

2、利用编程扫描和定时扫描方式扫描键盘有什么区别?

3、试使用线反转法编写图4-3所示电路的程序。

实验五MCS-51单片机中断实验

一、实验目的

1、掌握单片机中断的工作原理,体会中断的使用特点;

2、掌握中断的技术编程方法和特点;进一步掌握汇编语言程序设计;

3、将定时器中断和键盘定时扫描结合,复习键盘输入编程;

4、将外中断和键盘中断扫描结合,复习键盘输入编程;

二、实验仪器

P4电脑一台,软件PROTEUS6.7、KEILUV2以上版本。

三、实验内容

1、键盘定时扫描程序(定时中断)

利用单片机内的定时器,产生10ms的定时中断,对键盘进行扫描。

与编程扫描相比,更能快速响应键盘事件,不会错过任何一次按键(请试着在图4-2所示实验中,快速按下和松开按键,看看能不能响应键盘事件,想想为什么?

本实验仍以图4-2所示电路为硬件电路,首先请大家自主编程以定时扫描的方式改进实验4-2的缺点。

参考程序见exp5-1.asm。

2、键盘中断处理

图5-1单片机键盘中断处理工作方式原理图

充分利用中断来接受用户键盘事件可以大大提高单片机的效率。

在没有键盘事件时,单片机可以专注于运算和控制,不需要随时扫描键盘,而当有键盘事件发生时,利用中断可以最快地响应用户键盘事件,键盘处理完成后又可以回到其它主的工作。

键盘的中断处理方式适合于单片机有大量运算、控制等其它重要事务,而用户按键次数不多的场合。

请同学们根据实验四中阵列式键盘的原理,参考exp4-2.asm,并结合中断编写键盘识别程序。

单片机键盘中断处理工作方式对应的硬件原理图如图5-1。

除参考exp4-2.asm外,大家还可以参考图5-2所示的扫描方式,键码值见表5-1。

将键盘4根行线和4根列线(1-8)连接至P1口的P1.0-P1.7,试编写键盘扫描程序,将键盘码显示在LED数码管。

图5-2键盘分布图

表5-1键码表

返回码

扫描码

7H

0111

BH

1011

DH

1101

EH

1110

7H

0111

(77H)

7

(B7H)

8

(D7H)

9

(E7H)

D

BH

1011

(7BH)

4

(BBH)

5

(DBH)

6

(EBH)

C

DH

1101

(7DH)

1

(BDH)

2

(DDH)

3

(EDH)

B

EH

1110

(7EH)

F

(BEH)

0

(DEH)

E

(EEH)

A

汇编参考程序

MOVA,0FFH;清显示器

MOVP2,80H

MOVX@R0,A

REP:

MOVA,#0FEH;扫描

MOVR7,#4

LOOP:

MOVP1,A

MOVB,P1;返回码

CJNEA,B,DITH;有键

RLA;有键

DJNZR7,LOOP

SJMPREP

DITH:

LCALLDELAY;延时5ms,去抖动

MOVA,P1;返回码

CJNEA,B,REP;无效键

LCALLSCAN_TO_KEY;返回扫描码->键码

MOVDPTR,#TAB;显示

MOVCA,@A+DPTR

MOVP2,#60H

MOVX@R0,A

MOVA,#0FEH

MOVP2,#80H

MOVX@R0,A

SJMPREP

TAB:

DB3fH,06H,5bH,4fH,66H,6dH,7dH,07H

DB7fH,6fH,77H,7cH,39H,5eH,79H,71H,00H

SCAN_TO_KEY:

;返回扫描码->键码

MOVB,A

CLRA

MOVR6,A

MOVDPTR,#SCAN_KEY

NEXT1:

MOVA,R6

MOVCA,@A+DPTR

CJNEA,B,NEXT

MOVA,R6

ADDA,#16

MOVCA,@A+DPTR

RET

NEXT:

INCR6

CJNER6,#16,NEXT1

MOVA,#010H;无效键

RET

SCAN_KEY:

DB77H,0B7H,0D7H,0E7H,7BH,0BBH,0DBH,0EBH

DB7DH,0BDH,0DDH,0EDH,7EH,0BEH,0DEH,0EEH

DB7H,8H,9H,0DH,4H,5H,6H,0CH

DB1H,2H,3H,0BH,0FH,00H,0EH,0AH

DELAY:

MOVA,R6;延时5ms

PUSHACC

MOVA,R7

PUSHACC

MOVR6,#014H

DELAY1:

MOVR7,#0E5H

DJNZR7,$

DJNZR6,DELAY1

POPACC

MOVR7,A

POPACC

MOVR6,A

RET

END

四、预习要求

1、复习中断及响应的过程;

2、读懂教材相应章节的内容,复习掌握键盘电路结构、键盘扫描原理;

3、复习并掌握七段LED动态显示原理及显示程序;

4、编写出各个实验内容的相应程序。

五、思考题

1、利用中断方式扫描键盘,是否有提高CPU的效率,LED显示是否增亮?

2、除处理键盘外,中断还有什么用途?

请列举几个例子。

 

实验六定时器计数器实验

一、实验目的

1、掌握单片机定时器/计数器的工作原理,体会定时器/计数器的使用特点;

2、进一步掌握中断的技术编程方法

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

当前位置:首页 > 小学教育 > 英语

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

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