单片机.docx

上传人:b****2 文档编号:24538278 上传时间:2023-05-28 格式:DOCX 页数:51 大小:517.38KB
下载 相关 举报
单片机.docx_第1页
第1页 / 共51页
单片机.docx_第2页
第2页 / 共51页
单片机.docx_第3页
第3页 / 共51页
单片机.docx_第4页
第4页 / 共51页
单片机.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

单片机.docx

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

单片机.docx

单片机

实验报告

 

实验课程:

单片机原理及其应用 

学生姓名:

学号:

专业班级:

电力系统及其自动化班

 

2015年12月日

目录

实验一、I/O口输入、输出实验.

实验二、外部中断实验

实验三、定时/计数器实验

实验四、交通灯控制实验

实验五、串转并与并转串实验

实验六、8255输入、输出实验

实验七、并行A/D转换实验

实验八、LCD显示实验

实验一I/O口输入、输出实验

一、实验目的

掌握单片机P1口、P3口的使用方法。

二、实验内容

以P1口为输出口,接八位逻辑电平显示,LED显示跑马灯效果。

以P3口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。

三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明和电路原理图

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

由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。

因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响。

若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。

本实验需要用到CPU模块(F3区)和八位逻辑电平输出模块(E4区)和八位逻辑电平显示模块(B5区),八位逻辑电平输出电路原理图参见图1-1。

八位逻辑电平显示电路原理图参见图1-2。

五、实验步骤

1)系统各跳线器处在初始设置状态。

用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);

用8位数据线连接八位逻辑电平显示模块的JD4B到CPU模块的JD8(P1口)。

2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。

编译无误后,下载程序

运行。

3)观察发光二极管显示跑马灯效果,拨动K0可改变跑马灯的方向。

六、实验结果

当八位逻辑电平的K0拨到上方,即输入高电平,实验箱的八个LED从左至右循环点亮,当K0拨到下方,即输入低电平时,八个LED灯从右至左循环点亮。

七、结果分析

程序通过查询方式不断检测P3.0口的输入状态,当P3.0的输入为0时,由P1口通过左移指令RL轮流输入低电平驱动LED发光,在左移时通过软件延时控制LED亮的时间;当P3.0输入为1时,由P1口通过右移指令RR轮流输出低电平驱动LED发光,在右移时同样通过软件延时控制LED亮的时间,如此循环时候扫描查询,便可实现流水灯的效果

八、实验程序

;//******************************************************************

;文件名:

PortforMCU51

;功能:

I/O口输入、输出实验

;接线:

用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);

;用8位数据线连接八位逻辑电平显示模块的JD2B到CPU模块的JD8(P1口)。

;//******************************************************************

DIRBIT//P3.0将P3.0的位地址给DIR,A遇DIR,将其当P3.0使用

ORG0000H

LJMPSTART

ORG0100H

START:

Output1:

//P3.0=0时,跑马灯左跑程序

mova,#0fEH//设置跑马灯左跑初值

movr5,#8//一个时间周期LED灯跑动次数

loop1:

CLRC

movC,DIR

JCOutput2//P3.0为1时,跳Output2

movP1,a

rla//累加器A的8位向左循环移位,即LED移位

AcallDelay//跳转延时程序

djnzr5,loop1//R5内容减1不为0,跳转LOOP1

SjmpOutput1//R5=0时,跳Output1

Output2:

//P3.0=1时,跳马灯右跳程序

mova,#07fH//设置跑马灯右跑初值

movr5,#8//一个周期右跑初值

loop2:

CLRC

movC,DIR

JNCOutput1//P3.0=0时,跳Output1

movP1,a

rra//累加器A的8位右循环移位,即LED移位

AcallDelay

djnzr5,loop2

SjmpOutput2

Delay:

//延时程序,设置一次跑动时间间隔

movr6,#0

DelayLoop1:

movr7,#0

DelayLoop2:

NOP

NOP

djnzr7,DelayLoop2

djnzr6,DelayLoop1

ret

实验二外部中断实验

一、实验目的

学习外部中断技术的基本使用方法。

二、实验内容

INT0端接单次脉冲发生器。

按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转。

三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明和电路原理图

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

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

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

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

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

2)中断服务的关键:

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

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

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

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

3)中断控制原理:

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

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

TCON、IE、SCON及IP。

4)中断响应的过程:

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

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

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

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

本实验需要用到CPU模块(F3区)和八位逻辑电平显示模块(B5区)、单次脉冲模块(E3

区)。

五、实验步骤

1)系统各跳线器处在初始设置状态,用导线连接单次脉冲模块的输出端到CPU模块的P32;CPU模块的P10接八位逻辑电平显示模块的灯。

2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。

编译无误后,下载程序运行。

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

六、实验现象

每按下单次脉冲触发按钮时,发光二极管状态取反一次,即原来是亮按下时灭,原来是灭按下则亮

七、结果分析

程序由外部中断0实现,外部中断0由下降沿触发,外部输入由单次脉冲触发器输入,每次按下按钮时会触发单次脉冲,产生一个下降沿,从而使程序产生中断,在中断服务函数的程序里面对P1.0取反,由P1.0驱动LED,就可实现本实验的功能。

八、实验程序

;//*************************************************

;文件名:

EXintforMCU51

;功能:

外部中断实验

;接线:

导线连接单次脉冲模块的输出端到CPU模块的P32,

;CPU模块的P10接八位逻辑电平显示模块的L0灯。

;//*************************************************

LEDBITP1.0

LEDBufBIT20H

org0

ljmpStart

org3

Interrupt0:

pushPSW;保护现场

cplLEDBuf;取反LED

movc,LEDBuf

movLED,c

popPSW;恢复现场

reti

Start:

clrLEDBuf

clrLED

movTCON,#01h;外部中断0下降沿触发

movIE,#81h;打开外部中断允许位(EX0)及总中断允许位(EA)

OK:

ljmpOK

End

实验三定时/计数器实验

一、实验目的

学习MCS-51内部计数器的使用和编程方法。

二、实验内容

使用MCS-51内部定时/计数器,定时一秒钟,CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。

三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明

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

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

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

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

TMOD用于设置定时器/

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

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

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

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

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

机器周期=12÷12MHz=1uS

(256-定时常数)×1uS=100uS

定时常数=156。

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

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

本实验需要用到CPU模块(F3区)和八位逻辑电平显示模块(B5区)。

五、实验步骤

1)系统各跳线器处在初始设置状态,用导线连接CPU模块P10到八位逻辑电平显示模块的L0。

2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。

编译无误后,下载程序运行。

3)运行程序观察发光二极管隔一秒点亮一次,点亮时间为一秒。

六、实验现象

运行程序时,发光二极管L0隔一秒点亮一次,每次点亮时间为一秒。

七、实验分析

本实验通过定时器0的方式2实现精确定时,但定时器的最长定时时间达不到一秒,所以通过一个时间变量实现,总的定时时间等于定时器定时时间乘以时间变量初值,这样就可以实现一秒的定时,程序通过扫描不断检测时间变量的值,当定时时间一秒到时,对P1.0的状态取反,实现L0每隔一秒亮一次。

八、实验程序

;//*************************************************

;文件名:

TimerforMCU51

;功能:

定时/计数器实验

;接线:

导线连接CPU模块P10到八位逻辑电平显示模块的L0.

;//*************************************************

Tickequ10000;10000x100us=1s

T100usequ156;100us时间常数(6M)

C100usequ30h;100us记数单元

LEDBufbit20h

org0

ljmpStart

org000bh

T0Int:

pushPSW

mova,C100us+1

jnzGoon

decC100us

Goon:

decC100us+1

mova,C100us

orla,C100us+1

jnzExit;100us记数器不为0,返回

movC100us,#27H;#high(Tick)

movC100us+1,#10H;#low(Tick)

cplLEDBuf;100us记数器为0,重置记数器

;取反LED

Exit:

popPSW

reti

Start:

movTMOD,#02h;方式2,定时器

movTH0,#t100us

movTL0,#t100us

movIE,#10000010b;EA=1,IT0=1

setbTR0;开始定时

clrLEDBuf

clrP1.0

movC100us,#27H;#high(Tick)

movC100us+1,#10H;#low(Tick)

Loop:

movc,LEDBuf

movP1.0,c

ljmpLoop

end

实验四交通灯控制实验

一、实验目的

掌握十字路口交通灯控制方法。

二、实验内容

利用系统提供的双色LED显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。

4位LED数码管显示时间,LED显示红绿灯状态。

三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明和电路原理图

交通信号灯控制逻辑如下:

假设一个十字路口为东西南北走向。

开始为四个路口的红灯全部亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后(20秒),东西路口的绿灯,闪烁若干次后(3秒),东西路口的绿灯熄灭,同时东西路口的黄灯亮,延时一段时间后(2秒),东西路口的红灯亮,南北路口的绿灯亮,南北路口方向通车,延时一段时间后(20秒),南北路口的绿灯闪烁若干次后(3秒),南北路口的绿灯熄灭,同时南北路口的黄灯亮,延时一段时间后(2秒),再切换到东西路口的绿灯亮,南北路口的红灯亮,之后重复以上过程。

双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,共用负极,当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。

本实验需要用到CPU模块(F3区)、静态数码管/双色LED显示模块(B4区)。

双色LED显示电路原理参见图4-1。

 

图4-1双色LED显示电路

五、实验程序参考框图

实验示例程序参考框图如图4-2。

图4-2程序流程图

六、实验步骤

1)系统各跳线器处在初始设置状态。

P10同时接G1、G3;P11同时接R1、R3;P1.2同时接G2、G4;P1.3同时接R2、R4;

P1.6、P1.7分别接静态数码显示的DIN、CLK。

2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。

编译无误后,下载程序运行。

3)观察十字路口交通灯效果。

七、实验现象

开始为四个路口的红灯全部亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后(20秒),东西路口的绿灯,闪烁若干次后(3秒),东西路口的绿灯熄灭,同时东西路口的黄灯亮,延时一段时间后(2秒),东西路口的红灯亮,南北路口的绿灯亮,南北路口方向通车,延时一段时间后(20秒),南北路口的绿灯闪烁若干次后(3秒),南北路口的绿灯熄灭,同时南北路口的黄灯亮,延时一段时间后(2秒),再切换到东西路口的绿灯亮,南北路口的红灯亮,之后重复以上过程。

八、实验总结

通过本次实验,我了解到交通灯其实是通过编程一步步实现的,共有六种状态。

本实验的程序比较长,看起来也很费劲,但是功能很强大,所以在阅读程序的过程中我也回顾了比如定时器的设置,查询中断,查表的方法,以及大量的调用和循环语句,另外我对数码管的显示原理也有了进一步的深入。

实验成功后,发现了交通灯的变化,从交通灯变成了有各种闪光形式的霓虹灯。

九、实验程序

;//*******************************************************************

;文件名:

交通灯程序FORMCU51

;功能:

双色LED模拟交通灯信号,并通过调用静态数码显示状态时间。

;接线:

P1.0同时接G1、G3,P1.1接R1、R3,P1.2接G2、G4,P1.3同时接R2、R4,

;P1.6、P1.7接静态数码显示的DIN、CLK。

;//*******************************************************************

SECOND1EQU30H;东西秒寄存器

SECOND2EQU31H;南北秒寄存器

DBUFEQU40H;显示缓冲1

TEMPEQU44H;显示缓冲2

LED_G1BITP1.0;东西绿灯

LED_R1BITP1.1;东西红灯

LED_G2BITP1.2;南北绿灯

LED_R2BITP1.3;南北红灯

DinBITP1.6;串行显示数据

CLKBITP1.7;串行显示时钟

ORG0000H

LJMPSTART

ORG0100H

START:

LCALLSTATE0;调用状态0

LCALLDELAY;调用延时

MOVTMOD,#01H;置T0工作方式1

MOVTH0,#3CH;置T0定时初值50mS

MOVTL0,#0B0H

SETBTR0;启动T0CLREA

 

LOOP:

MOVR2,#20;置1S计数初值50mS*20=1S

MOVR3,#20;红灯20S

MOVSECOND1,#25;东西秒显示初值25S

MOVSECOND2,#25;南北秒显示初值25S

LCALLDISPLAY

LCALLSTATE1;调用状态1

WAIT1:

JNBTF0,WAIT1;查询50mS到否

CLRTF0

MOVTH0,#3CH;恢复T0定时初值50mS

MOVTL0,#0B0H

SETBTR0;启动T0

DJNZR2,WAIT1;判1S到否?

未到继续状态1

MOVR2,#20;置50mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT1;状态1维持20S

;***************************************************

MOVR2,#5;置50mS计数初值5*4=20

MOVR3,#3;绿灯闪3S

MOVR4,#4;闪烁间隔200mS

MOVSECOND1,#5;东西秒显示初值5S

MOVSECOND2,#5;南北秒显示初值5S

LCALLDISPLAY

WAIT2:

LCALLSTATE2;调用状态2

JNBTF0,WAIT2;查询50mS到否

CLRTF0

MOVTH0,#3CH;恢复T0定时初值50mS

MOVTL0,#0B0H

DJNZR4,WAIT2;判200mS到否?

未到继续状态2

CPLLED_G1;东西绿灯闪

MOVR4,#4;闪烁间隔200mS

DJNZR2,WAIT2;判1S到否?

未到继续状态2

MOVR2,#5;置50mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT2;状态2维持3S

;***************************************************

MOVR2,#20;置50mS计数初值

MOVR3,#2;黄灯2S

MOVSECOND1,#2;东西秒显示初值2S

MOVSECOND2,#2;南北秒显示初值2S

LCALLDISPLAY

WAIT3:

LCALLSTATE3;调用状态3

JNBTF0,WAIT3;查询30mS到否

CLRTF0

MOVTH0,#3CH;恢复T0定时初值50mS

MOVTL0,#0B0H

DJNZR2,WAIT3;判1S到否?

未到继续状态3

MOVR2,#20;置50mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT3;状态3维持2S

;***************************************************

MOVR2,#20;置50mS计数初值

MOVR3,#20;红灯20S

MOVSECOND1,#25;东西秒显示初值25S

MOVSECOND2,#25;南北秒显示初值25S

LCALLDISPLAY

WAIT4:

LCALLSTATE4;调用状态4

JNBTF0,WAIT4;查询50mS到否

CLRTF0

MOVTH0,#3CH;恢复T0定时初值50mS

MOVTL0,#0B0H

DJNZR2,WAIT4;判1S到否?

未到继续状态4

MOVR2,#20;置50mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT4;状态4维持20S

;***************************************************

MOVR2,#5;置50mS计数初值5*4=20

MOVR4,#4;闪烁间隔200mS

MOVR3,#3;绿灯闪3S

MOVSECOND1,#5;东西秒显示初值5S

MOVSECOND2,#5;南北秒显示初值5S

LCALLDISPLAY

WAIT5:

LCALLSTATE5;调用状态5

JNBTF0,WAIT5;查询50mS到否

CLRTF0

MOVTH0,#3CH;恢复T0定时初值100mS

MOVTL0,#0B0H

DJNZR4,WAIT5;判200mS到否?

未到继续状态5

CPLLED_G2;南北绿灯闪

MOVR4,#4;闪烁200mS

DJNZR2,WAIT5;判1S到否?

未到继续状态5

MOVR2,#5;置100mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT5;状态5

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

当前位置:首页 > PPT模板 > 可爱清新

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

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