单片机实验书 - 图文

更新时间:2023-12-05 01:57:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 单片机I/O接口实验

【实验目的】

利用单片机的P1口作IO口,学会利用P1口作为输入和输出口。

【实验设备及器材】

笔记本电脑 一台 HL-1单片机开发板 一个

【实验内容】

编写一段程序,用P1口作为控制端口,使开发板上的LED轮流亮。

【实验要求】

学会使用单片机的P1口作IO口,如果有时间也可以利用P3口作IO口来做该实验。

【实验步骤】

1、 实验原理如图1-1所示。

图1-1

2、 用汇编语言编写好源程序。(在电脑上的编辑器软件中)

3、 将源程序(也叫源代码、源文件)编译成目标程序(也叫目标代码、机器码、目标文件、

HEX文件)。

4、 用下载软件将目标程序写入到单片机中。 5、 写入后会自动运行目标程序。

如果程序运行不正常、可以用人工检查、软件仿真器等技术排除所编程序中存在的各种错误。错误排除后,再重复上面的3、4步骤。

【实验预习要求】

理解该实验单片机开发板的硬件结构,可以预先把程序编好,然后在Keil C51环境下进行软件仿真。

【实验参考程序】

;放置数据在0100地址以后 ORG 0100

TMP1: DB 01H,02H,04H,08H,10H,20H,40H,80H,81H,82H DB 84H,88H,90H,0A0H,0C0H,0C1H,0C2H,0C4H,0C8H,0D0H DB 0E0H,0E1H,0E2H,0E4H,0E8H,0F0H,0F1H,0F2H,0F4H,0F8H DB 0F9H,0FAH,0FCH,0FDH,0FEH,0FFH,0FFH,00H,0FFH,00H

ORG 0000H ;程序的开始 LJMP MAIN ;转入主程序

ORG 0200H ;主程序的开始

MAIN: MOV DPTR,#TMP1 ;得到数据存放的地址 MOV R7,#50 ;设置循环40次 M1: CLR A

MOVC A,@A+DPTR ;读取相应地址的数据

CPL A ;因发光二极管采用共阳极,所以将数据取反再输出 MOV P1,A

INC DPTR ;进入下一个数据准备 LCALL DELAY ;转入延时子程序 DJNZ R7,M1 ;40次未完成继续

LJMP MAIN ;40次完成回到主程序循环

DELAY: MOV R5,#255 ;延时子程序 D1: MOV R6,#255 DJNZ R6,$ DJNZ R5,D1 RET

END ;程序体结束

【实验思考题】

想出几个实现以上功能的编程方法。

实验二 定时/计数器实验

【实验目的】

1、掌握定时器/计数器的使用方法。 2、熟悉定时器/计数器的工作过程及编程。 3、掌握定时时间常数的确定方法。

【实验设备及器件】

笔记本电脑 一台 HL-1单片机开发板 一个

【实验原理及内容】

8051单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。

T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。

定时/计数器的结构:定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

计数器初值的计算:

设计数器的最大计数值为M(根据不同工作方式,M可以是213、216或28),则计算初值X的公式如下:

X=M-要求的计数值(十六进制数) 定时器初值的计算:

在定时器模式下,计数器由单片机主脉冲fosc经12分频后计数。因此,定时器定时初值计算公式:

X=M-(要求的定时值)/(12/fosc)

80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。

工作方式寄存器TMOD:工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:

GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了或引脚为高电平这一条件。

M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。

实验内容:

1、通过定时器延时实现P1口LED的闪亮。

2、对按键S2按下的次数进行计数,当计数记到3时,第一个发光二极管被点亮。

【实验步骤】

1.用汇编语言编写好源程序。(在电脑上的编辑器软件中)

2.将源程序(也叫源代码、源文件)编译成目标程序(也叫目标代码、机器码、目标文件、HEX文件)。

3.用下载软件将目标程序写入到单片机中。 4.写入后会自动运行目标程序。

如果程序运行不正常、可以用人工检查、软件仿真器等技术排除所编程序中存在的各种错误。错误排除后,再重复上面的2、3步骤。

【实验预习要求】

1、参阅MCS-51有关定时器/计数器部分章节。

2、弄清有关定时器/计数器控制寄存器的格式及设定方法。 3、弄清实验中定时时间常数是如何确定的。

【实验参考程序】

定时器延时实现LED点亮: ORG 0000H AJMP START ORG 30H

START: MOV P1,#0FFH ;关闭所有的灯

MOV TMOD,#00000001B ;定时/计数器0工作于方式1 MOV TH0,#0fH

MOV TL0,#0A0H ;以上两行预置计数

SETB TR0 ;定时/计数器0开始运行

LOOP: JBC TF0,NEXT ;如果TF0等于1,则将TF0清0并转next处 AJMP LOOP ;否则跳转到LOOP处运行 NEXT: CPL P1.0 ;点亮P1.0灯 MOV TH0,#0fH ;

MOV TL0,#0A0H ;重置定时/计数器的初值 AJMP LOOP END

计数器计数实现LED点亮程序: #include

#define uint unsigned int //uint pp;

sbit led=P1^0; sbit s2=P3^4;

void main() {

TMOD=0x05; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。

TR0=1; //打开计数器 ET0=1; //开计数器0中断 EA=1; //开总中断 while(1) {

if(TL0==3) //当计数为3时,led被点亮。当然,由于有按键抖动,故有时未按三下S2,灯已经亮了。 led=0; } } /*

void time0() interrupt 1 {

pp++; } */

【实验思考题】

想出几个实现以上功能的编程方法。

本文来源:https://www.bwwdw.com/article/b9at.html

Top