单片机实验指导书.docx

上传人:b****6 文档编号:6154431 上传时间:2023-01-04 格式:DOCX 页数:50 大小:1.55MB
下载 相关 举报
单片机实验指导书.docx_第1页
第1页 / 共50页
单片机实验指导书.docx_第2页
第2页 / 共50页
单片机实验指导书.docx_第3页
第3页 / 共50页
单片机实验指导书.docx_第4页
第4页 / 共50页
单片机实验指导书.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

单片机实验指导书.docx

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

单片机实验指导书.docx

单片机实验指导书

实验一P1口输入、输出实验

一、实验目的

1、学习P1口的使用方法

2、学习延时子程序的编写和使用

二、实验说明

P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。

三、实验内容及步骤

实验

(一):

用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。

1、使用单片机最小应用系统1模块。

关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加P1_A.ASM源程序,进行编译,直到编译无误。

4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序,观察发光二极管显示情况。

发光二极管单只从右到左轮流循环点亮。

实验

(二):

用P1.0、P1.1作输入接两个拨断开关,P1.2、P1.3作输出接两个发光二极管。

程序读取开关状态,并在发光二极管上显示出来。

1、用导线分别连接P1.0、P1.1到两个拨断开关,P1.2、P1.3到两个发光二极管。

2、添加P1_B.ASM源程序,编译无误后,运行程序,拨动拨断开关,观察发光二极管的亮灭情况。

向上拨为熄灭,向下拨为点亮。

四、流程图及源程序

1.流程图

 

(A)P1口循环点灯程序框图

(B)P1口输入输出程序框图

2.源程序:

(一)实验一

ORG0000H

LJMPSTART

ORG0030H

START:

mova,#0FEh

movr2,#8

Output:

movP1,a

rla

AcallDelay

djnzr2,Output

LjmpSTART

Delay:

movr6,#0

movr7,#0

DelayLoop:

;延时程序

djnzr6,DelayLoop

djnzr7,DelayLoop

ret

end

(二)实验二

KeyLeftBITP1.0;定义

KeyRightBITP1.1

LedleftBITP1.2

LedRightBITP1.3

ORG0000H

LJMPSTART

ORG0030H

START:

SETBKeyLeft;欲读先置一

SETBKeyRight

Loop:

Movc,keyleft

MovLEDLeft,c

MOVC,KeyRight

MovLEDRIGHt,c

LJMPLoop

END

五、思考题

(1)对于本实验延时子程序

Delay:

MOVR6,0

MOVR7,0

DelayLoop:

DJNZR6,DelayLoop

DJNZR7,DelayLoop

RET

如使用12MHz晶振,粗略计算此程序的执行时间为多少?

六、电路图

 

实验二继电器控制实验

一、实验目的

1、学习I/O端口的使用方法

2、掌握继电器的控制的基本方法

3、了解用弱电控制强电的方法

二、实验说明

现代自动控制设备中,都存在一个电子电路的互相连接问题,一方面要使电子电路的控制信号能控制电气电路的执行元件(电动机,电磁铁,电灯等),另一方面又要为电子线路和电气电路提供良好的电气隔离,以保护电子电路和人身的安全。

继电器便能完成这一任务。

继电器电路中一般都要在继电器的线圈两头加一个二极管以吸收继电器线圈断电时产生的反电势。

本电路的控制端为高电平时,继电器常开触点吸合,同时LED灯被点亮。

当控制端为低电平时,继电器不工作。

三、实验内容及步骤

用P1.0作为控制输出口,接继电器电路,使继电器重复吸合与断开。

1、使用单片机最小应用系统1模块,用导线连接P1.0端口到继电器与温度控制部件模块的控制口。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加继电器.ASM源程序,进行编译,直到编译无误。

4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序,观察发光二极管亮灭情况和听继电器开合的声音,继电器重复延时吸合与延时断开。

四、流程图及源程序

源程序清单:

OutputBITP1.0;P1.0输出

ORG0000H

LJMPSTART

ORG0030H

START:

clrOutput;断开

callDelay

setbOutput;吸合

callDelay

ljmpSTART

Delay:

movr6,#0

movr7,#0

DLoop:

djnzr7,DLoop

djnzr6,DLoop

ret

end

五、思考题

试用单片机的其他输入输出口控制继电器。

六、电路图

 

实验三计数器实验

一、实验目的

1.学习80C51内部定时/计数器使用方法

2.学习计数器各种工作方式的用法

二、实验说明

1、80C51内部有两个定时/计数器T0和T1,16位是指定时/计数器内的计数器是16位的,由2个8位计数器组成。

本实验用的是T0,它的2个8位计数器TH0和TL0,TH0是高8位,TL0是低八位。

所谓加法计数器,指其计数的方法是对计数脉冲每次加1。

在其它单片机和可编程计数器芯片中,有的计数器是减法计数器,如8155的14位计数器,8253的16计数器,即先设置计数器的初值,然后对计数器脉冲每次减1,减到0,计数器溢出。

而80C51内部的计数器是加法计数器,需先设置计数器的初值,本实验设置计数器初值为0,然后对计数脉冲每次加1,加到计数器满后溢出。

2、本实验中内部计数器起计数器的作用。

外部事件计数脉冲由P3.4引入定时器T0。

单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。

这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。

这就决定了输入波形的频率不能超过机器周期频率。

三、实验内容及步骤

1、使用单片机最小应用系统模块,用扁平数据线连接P0口与八位逻辑电平显示模块,T0端口接单次脉冲电路的输出端。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加计数器.ASM源程序,进行编译,直到编译无误。

4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。

连续按动单次脉冲的按键,8位发光二极管显示按键次数。

四、流程图及源程序

ORG0000H

LJMPSTART

ORG0030H

START:

MOVTMOD,﹟00000101b;置T0计数器方式1

MOVTH0,﹟0;置T0初值

MOVTL0,﹟0

MOVTR0;T0运行

LOOP:

MOVP1,TL0;记录P1口脉冲个数

LJMPLOOP;返回

END

五、思考题

1、80C51单片机的最高计数频率为多少?

六、实验电路

 

实验四定时器实验

一、实验目的

1、学习80C51内部计数器的使用和编程方法

2、进一步掌握中断处理程序的编写方法

二、实验说明

关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。

内部计数器在单片机中主要有定时器和计数器两个功能。

本实验使用的是定时器,定时为一秒钟。

CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。

定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。

TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。

TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。

内部计数器用作定时器时,是对机器周期计数。

每个机器周期的长度是12个振荡器周期。

因为实验系统的晶振是12MHZ,本程序工作于方式2,即8位自动重装方式定时器,定时器100uS中断一次,所以定时常数的设置可按以下方法计算:

机器周期=12÷6MHz=1Us(256-定时常数)×1uS=100uS

定时常数=156。

然后对100uS中断次数计数10000次,就是1秒钟。

在本实验的中断处理程序中,中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。

三、实验内容及步骤

1、用导线连接单片机最小应用系统1的P1.0到单只发光二极管上。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加定时器.ASM源程序,进行编译,直到编译无误。

4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。

发光二极管隔一秒点亮一次,点亮时间为一秒。

四、实验框图以及源程序

1、流程图

 

2、源程序

TICKEQU10000;10000×100uS=1S

T100uSEQU256-100;100uS时间常数(12M)

C100uSEQU30H;100uS记数单元

LEDBUFEQU40H

LEDBITP1.0

ORG0000H

LJMPSTART;跳至主程序

ORG000BH

LJMPTOINT;跳至子程序

ORG0030H

T0INT:

PUSHPSW;状态保护

MOVA,C100uS+1

JNZGOON

DECC100uS;秒计数值减1

GOON:

DECC100uS+1

MOVA,C100uS

ORLA,C100uS+1

JNZEXIT;100uS记数器不为0,返回

MOVC100uS,#HIGH(TICK);100uS记数器为0,重置记数器

MOVC100uS+1,#LOW(TICK)

CPLLEDBUF;取反LED

EXIT:

POPPSW

RETI

START:

MOVTMOD,#02H;方式2,定时器

MOVTH0,#T100uS;置定时器初始值

MOVTL0,#T100uS

MOVIE,#10000010B;EA=1,IT0=1

SETBTR0;开始定时

CLRLEDBUF

CLRLED

MOVC100uS,#HIGH(TICK);设置10000次计数值

MOVC100uS+1,#LOW(TICK)

LOOP:

MOVC,LEDBUF

MOVLED,C

LJMPLOOP

END

五、思考题

1、如何将LED的状态间隔改为2秒,程序如何改写?

2、如果更换不同频率的晶振,会出现什么现象?

如何调整程序?

六、电路图

 

实验五外部中断实验

一、实验目的

1、掌握外部中断技术的基本使用方法

2、掌握中断处理程序的编写方法

二、实验说明

1、外部中断的初始化设置共有三项内容:

中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。

中断方式设置一般有两种方式:

电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。

因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.1)引入,本实验由INT0(P3.2)引入。

2、中断服务的关键:

a、保护进入中断时的状态。

堆栈有保护断点和保护现场的功能使用PUSH,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。

b、必须在中断服务程序中设定是否允许中断重入,即设置EX0位。

c、用POP指令恢复中断时的现场。

3、中断控制原理:

中断控制是提供给用户使用的中断控制手段。

实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:

TCON、IE、SCON及IP。

4、中断响应的过程:

首先中断采样然后中断查询最后中断响应。

采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;否则继续为“0”。

所谓查询就是由CPU测试TCON和SCON中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。

中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就进行响应一次中断。

INT0端接单次脉冲发生器。

P1.0接LED灯,以查看信号反转。

三、实验内容及步骤

1、使用单片机最小应用系统1模块,P1.0接发光二极管,INTO接单次脉冲输出端。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加中断.ASM源程序,进行编译,直到编译无误。

4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。

连续按动单次脉冲产生电路的按键,发光二极管每按一次状态取反,即隔一次点亮。

四、流程图及源程序

1、流程图

 

2、源程序

LEDBITP1.0

LEDBUFBIT0

ORG0000H

LJMPSTART;跳至主程序

ORG000BH

LJMPINTERRUPT;跳子程序

ORG0030H

INTERRUPT:

PUSHPSW;保护现场

CPLLEDBUF;取反LED

MOVC,LEDBUF

MOVLED,C

POPPSW;恢复现场

RETI

START:

CLRLEDBUF

CLRLED

MOVTCON,#01H;外部中断0下降沿触发

MOVIE,#81H;打开外部中断允许位(EX0)

;及总中断允许位(EA)

LJMP$

END

五、思考题

1.简述中断处理的一般过程。

2.脉冲方式如何防止重复响应外中断。

 

实验六ADC0809模数转换实验

一、实验目的

1、掌握ADC0809模/数转换芯片与单片机的连接方法及ADC0809的典型应用。

2、掌握用查询方式、中断方式完成模/数转换程序的编写方法。

二、实验说明

本实验使用ADC0809模数转换器,ADC0809是8通道8位CMOS逐次逼近式A/D转换芯片,片内有模拟量通道选择开关及相应的通道锁存、译码电路,A/D转换后的数据由三态锁存器输出,由于片内没有时钟需外接时钟信号。

下图为该芯片的引脚图。

各引脚功能如下:

IN0~IN7:

八路模拟信号输入端。

ADD-A、ADD-B、ADD-C:

三位地址码输入端。

八路模拟信号转换选择由这三个端口控制。

CLOCK:

外部时钟输入端(小于1MHz)。

D0~D7:

数字量输出端。

OE:

A/D转换结果输出允许控制端。

当OE为高电平时,允许A/D转换结果从D0~D7端输出。

ALE:

地址锁存允许信号输入端。

八路模拟通道地址由A、B、C输入,在ALE信号有效时将该八路地址锁存。

START:

启动A/D转换信号输入端。

当START端输入一个正脉冲时,将进行A/D转换。

EOC:

A/D转换结束信号输出端。

当A/D转换结束后,EOC输出高电平。

Vref(+)、Vref(-):

正负基准电压输入端。

基准正电压的典型值为+5V。

VCC和GND:

芯片的电源端和地端。

三、实验步骤

1、单片机最小应用系统1的P0口接A/D转换的D0~D7口,单片机最小应用系统1的Q0~Q7口接0809的A0~A7口,单片机最小应用系统1的WR、RD、P2.0、ALE、INT1分别接A/D转换的WR、RD、P2.0、CLOCK、INT1,A/D转换的IN接入+5V,单片机最小应用系统1的P1.0、P1.1连接到串行静态显示实验模块的DIN、CLK。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加AD转换.ASM源程序,进行编译,直到编译无误。

4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。

5LED静态显示“ADXX”,“XX”为AD转换后的值,8位发光二极管显示“XX”的二进制值,调节模拟信号输入端的电位器旋钮,显示值随着变化,顺时针旋转值增大,AD转换值的范围是0~FFH。

四、流程图及源程序

1.源程序

DBUFEQU30H

TEMPEQU40H

DINBITP1.0

CLKBITP1.1

ORG0000H

LJMPSTART

ORG30H

START:

MOVR0,#DBUF;显示缓冲器存放0AH,0DH,-,0XH,0XH

MOV@R0,#0AH;串行静态显示“ADXX”XX表示0~F

INCR0

MOV@R0,#0DH

INCR0

MOV@R0,#10H

INCR0

MOVDPTR,#0FEF3H;A/D地址

MOVA,#0;清零

MOVX@DPTR,A;启动A/D

JNBP3.3,$;等待转换结束

MOVXA,@DPTR;读入结果

MOVP1,A;转换结果送入发光二极管显示

MOVB,A;累加器内容存入B中

SWAPA;A的内容高四位与低四位交换

ANLA,#0FH;A的内容高四位清零

XCHDA,@R0;A/D转换结果高位送入DBUF3中

INCR0

MOVA,B;取出A/D转换后的结果

ANLA,#0FH;A的内容高四位清零

XCHDA,@R0;结果低位送入DBF4中

ACALLDISP1;串行静态显示“ADXX”

ACALLDELAY;延时

AJMPSTART

DISP1:

;静态显示子程序

MOVR0,#DBUF

MOVR1,#TEMP

MOVR2,#5

DP10:

MOVDPTR,#SEGTAB;表头地址

MOVA,@R0

MOVCA,@A+DPTR;取段码

MOV@R1,A;到TEMP中

INCR0

INCR1

DJNZR2,DP10

MOVR0,#TEMP;段码地址指针

MOVR1,#5;段码字节数

DP12:

MOVR2,#8;移位次数

MOVA,@R0;取段码

DP13:

RLCA;段码左移

MOVDIN,C;输出一位段码

CLRCLK;发送一个位移脉冲

SETBCLK

DJNZR2,DP13

INCR0

DJNZR1,DP12

RET

SEGTAB:

DB3FH,6,5BH,4FH,66H,6DH;0,1,2,3,4,5

DB7DH,7,7FH,6FH,77H,7CH;6,7,8,9,A,b

DB58H,5EH,79H,71H,0,40H;C,d,E,F,(空格),-

DELAY:

;延时

MOVR4,#08H

AA1:

MOVR5,#0FFH

AA:

NOP

NOP

NOP

DJNZR5,AA

DJNZR4,AA1

RET

END

2.流程图

 

五、思考题

1、A/D转换程序有三种编制方式:

中断方式、查询方式、延时方式,实验中使用了查询方式,请用另两种方式编制程序。

2、P0口是数据/地址复用的端口,请说明实验中ADC0809的模拟通道选择开关在利用P0口的数据口或地址地位口时,程序指令和硬件连线的关系。

六、电路图

 

实验七DAC0832数模转换实验

一、实验目的

1、掌握DAC0832直通方式,单缓冲器方式、双缓冲器方式的编程方法

2、掌握D/A转换程序的编程方法和调试方法

二、实验说明

DAC0832是8位D/A转换器,它采用CMOS工艺制作,具有双缓冲器输入结构,其引脚排列如图所示,DAC0832各引脚功能说明:

DI0~DI7:

转换数据输入端。

CS:

片选信号输入端,低电平有效。

ILE:

数据锁存允许信号输入端,高电平有效。

WR1:

第一写信号输入端,低电平有效,

Xfer:

数据传送控制信号输入端,低电平有效。

WR2:

第二写信号输入端,低电平有效。

Iout1:

电流输出1端,当数据全为1时,输出电流最大;当数据全为0时,输出电流最小。

Iout2:

电流输出2端。

DAC0832具有:

Iout1+Iout2=常数的特性。

Rfb:

反馈电阻端。

Vref:

基准电压端,是外加的高精度电压源,它与芯片内的电阻网络相连接,该电压范围为:

-10V~+10V。

VCC和GND:

芯片的电源端和地端。

DAC0832内部有两个寄存器,而这两个寄存器的控制信号有五个,输入寄存器由ILE、CS、WR1控制,DAC寄存器由WR2、Xref控制,用软件指令控制这五个控制端可实现三种工作方式:

直通方式、单缓冲方式、双缓冲方式。

直通方式是将两个寄存器的五个控制端预先置为有效,两个寄存器都开通只要有数字信号输入就立即进入D/A转换。

单缓冲方式使DAC0832的两个输入寄存器中有一个处于直通方式,另一个处于受控方式,可以将WR2和Xfer相连在接到地上,并把WR1接到80C51的WR上,ILE接高电平,CS接高位地址或地址译码的输出端上。

双缓冲方式把DAC0832的输入寄存器和DAC寄存器都接成受控方式,这种方式可用于多路模拟量要求同时输出的情况下。

三种工作方式区别是:

直通方式不需要选通,直接D/A转换;单缓冲方式一次选通;双缓冲方式二次选通。

三、实验步骤

1、单片机最小应用系统1的P0口接0832的DI0~DI7口,单片机最小应用系统1的P2.0、WR分别接D/A转换的P2.0、WR,Vref接-5V,D/A转换的OUT接示波器探头。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加DA转换.ASM源程序,进行编译,直到编译无误。

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

当前位置:首页 > 自然科学

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

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