广工 单片机实验报告全部Word格式文档下载.docx

上传人:b****6 文档编号:16980290 上传时间:2022-11-27 格式:DOCX 页数:14 大小:78.88KB
下载 相关 举报
广工 单片机实验报告全部Word格式文档下载.docx_第1页
第1页 / 共14页
广工 单片机实验报告全部Word格式文档下载.docx_第2页
第2页 / 共14页
广工 单片机实验报告全部Word格式文档下载.docx_第3页
第3页 / 共14页
广工 单片机实验报告全部Word格式文档下载.docx_第4页
第4页 / 共14页
广工 单片机实验报告全部Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

广工 单片机实验报告全部Word格式文档下载.docx

《广工 单片机实验报告全部Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《广工 单片机实验报告全部Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

广工 单片机实验报告全部Word格式文档下载.docx

DJNZR6,D22

RET

END

四.实验心得:

通过本次试验,熟悉了keil软件的使用。

初步掌握单片机的编程及调试

实验二定时器和中断应用程序设计与调试

掌握单片机的定时器,中断功能系统的应用

编写程序,用AT89C51的内部定时器/计数器T0的方式1产生周期为0.2秒的TTL脉冲(TCH和TCL溢出的时候,产生一个中断),从P05输出。

计算如下:

振荡器的频率f=6M=6000000,方式1计数器的长度为L=16.2的16次方即65536

定时时间(溢出时间)t=0.1s

定时常数TC=65536-6000000x0.1/12=65536-50000=15536,将15536转换成16进制为3CB0,

TCH=3CH(高八位),TCL=B0H(低八位)。

三.实验主要仪器设备和材料:

1AMC51单片机综合开发系统一台2.微机一台

四.实验方法,步骤及结果测试

1.开启ANC51实验装置,检查跳线,一般无需改动。

2.运行Keil调试程序,具体操作步骤参考实验一。

3.参考以下电路图和流程图编写程序。

4.编译程序,把生成的.HEX目标文件下载到AT89S51运行。

5.观察AMC51实验装置的LED在运行程序时闪烁的情况。

参考程序代码:

ORG0000H;

下一条指令的地址为0000H

START:

AJMPMAIN;

跳入主程序

ORG000BH;

下一条指令的地址为000BH

AJMPINT_T0;

定时器0中断程序

ORG0030H;

下一条指令的地址为0030H

MOVTMOD,#01H;

设定时器T0为16位定时器

MOVTH0,#3CH;

设定T0的定时值(0.1s)

MOVTL0,#0B0H;

SETBTR0;

启动定时器T0

SETBET0;

开定时/计数器0允许

SETBEA;

CPU开放中断

MAIN_1:

SJMPMAIN_1

INT_T0:

PUSHACC;

保护现场

PUSHPSW

MOVTH0,#3CH;

MOVTL0,#0B0H;

CPLP0.5;

取反,流水灯闪烁

POPPSW;

恢复现场

POPACC

RET1;

中断返回

END

五.实验报告要求

1.实验原理分析,实验现象。

通过启动T0中断,设定定时值为0.1S,当定时器溢出后,重新置位,并将P05取反,其中P05口对应的发光二极管将造成闪烁的结果。

2.按思考题修改程序,修改程序后的调试结果;

程序流程图;

源程序及注释。

思考题

1.如果要输出一个周期为1秒的方波,应怎么样修改程序?

答:

周期为1S,就是每次延时0.5S,源程序0.1S延时5次循环后,再开中断。

ORG0000H

AJMPMAIN

ORG000BH

AJMPINT_T0

ORG0030H

MOVTMOD,#01H

MOVTH0,#3CH

MOVTL0,#0B0H

MOVR2,#05H

SETBTR0

SETBET0

SETBEA

DJNZR2,INT;

当R2=5每次减1到为0才继续执行,开启中断,也

MOVR2,#05H就是延时5次,一共0.5S,周期就是1S,频率1HZ

CPLP0.5

INT:

PUSHACC

PUSHPSW

MOVTH0,#3CH

POPPSW

POPACC

RETI

程序流程图

主程序:

开始中断程序:

↓P0.5取反

初始化↓

分别延时循环5次,2次

等待中断←

↓_____↑

2.如果要同时输出多个频率不同的方波(f1=1HZf2=2HZ),应怎么样修改程序?

(改为2.5HZ)

频率1HZ,周期为1S,就是每次延时0.5S,源程序0.1S延时5次循环后,再开中断。

频率为2HZ,周期为0.5S,就是每次延时0.25S,源程序0.1S大概延时2次循环后,再开中断。

程序如下

MOVR3,#02H

[当R2=5每次减1到为0才继续执行,开启中断,也

MOVR2,#05H就是延时5次,一共0.5S,周期就是1S,频率1HZ]

DJNZR3,INT;

[当R3=2每次减1到为0才继续执行,开启中断,

MOVR3,#02H就是延时2次,一共0.2S,周期就是0.4S,频率2.5HZ]

CPLP0.2

INT:

程序流程图:

延时循环5次

实验三串行I/O扩展和LED数码管显示实验

一、实验目的

掌握单片机的ISP串行I/O扩展和LED数码管显示的原理和应用。

二、实验内容和要求

AT89S51的UART由P30(EXD)和P31(TXD)组成,当UART以方式0工作的时候就是以SPI的方式工作。

用SPI的方式0工作的时候就是以SPI的方式工作。

用SPI的方式来扩展低速的I/O,就可以节省P口。

三、实验主要仪器设备和材料

1.AMC51单片机综合开发系统一台

2.IBM-PC微机一台

四、实验方法、步骤及结果测试

1.开启AMC51实验装置,检查跳线,J5,J4:

2-3相连。

2.运行KEIL,具体操作步骤参照实验一

3.参考电路图和流程图,编写程序,送数值到数码管以16进制形式显示。

4.编译程序,把生成的HEX目标文件下载到AT89S51运行。

5.设置断点观察程序在AMC51实验装置的运行情况

6.代码

DS0EQU3FH

DS00EQU3EH

DS000EQU3DH

DS0000EQU3CH

ORG0000H

AJMPMAIN

ORG0030H

MOVDS0000,#01H

MOVDS000,#02H

MOVDS00,#03H

MOVDS0,#04H

ACALLDISP

DISP:

MOVR7,#4

MOVR0,#DS0000

DL0:

MOVA,@R0

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVSBUF,A

DL1:

JNBTI,DL1

CLRTI

INCR0

DJNZR7,DL0

TAB:

DB0FCH,60H,0DAH,0F2H,66H,0B6H

DB0BEH,0E0H,0FEH,0E6H,0EEH,03EH,9CH

DB7AH,9EH,8EH

原理:

AT89S51单片机的UART在工作方式0下通过P30口将数据送到74LS164中锁存,并通过LED数码管显示出传输的数字。

现象:

数码管显示数字。

五、思考题

1.修改程序使数码管显示16进制数?

修改DS0000,DS000,DS00,DS0中的数值,将其改为相应的数字即可。

例:

MOVDS0000,#0AH

MOVDS00,#0CH

2.为什么显示之后要加上延时?

因为单片机一条指令执行的时间只有几微秒,如果不加上延时,数码管上的数字就会不断的闪烁,不稳定。

不利于观察结果。

六、心得:

了解了数码管个管脚与单片机的连接关系,以及如何使用单片机SPI的方式来扩展端口。

实验四A/D转换-亮度测量实验

一.实验目的

熟悉0809的工作原因,掌握A/D转换程序的设计方法以及以51连接的接口电路设计方法。

学习传感器件的应用。

二.实验内容和要求

按照硬件连接图和程序流程图,编写A/D转换程序,通过调节ADC0809的REF与转换值之间的关系,了解光敏电阻的电气特性。

光敏电阻特性:

光敏电阻的阻值与亮度成反比,电气特性等效于一个可变电阻,如实验电路所示R13光敏电阻和电阻R16(4K7)串联,光敏电阻的阻值随环境亮度而变化,加在光敏电阻的电压也随之变化。

变化的电压加分到0809的IN-0端和监视电路。

单片机通过74LS373和与非门,访问0809,对IN-0端电压进行AD转换,并将数据处理后通过数码管显示出来。

数码管的显示数值满足以下公式:

显示数值=IN-0/REF+X256.

1.AMC51单片机综合开发系统一台2.微机一台

1.开启AMC51实验装置,检查跳线,一般无需改动。

2.运行KEIL,具体操作步骤参照实验一。

4.编译程序,把把生成的.HEX目标文件下载到AT89S51运行。

5.观察程序在AMC51实验装置的实际运行情况。

(1)同手挡住“亮度传感器”,改变亮度,观察数码管的数值变化。

(2)调节ADC0809的REF+观察REF和采样电压的关系。

先按一下液晶屏下方的“RESET”再按一下“MODESSWITCH”按钮,液晶屏切换到MODE1.。

用一字小螺丝刀分别顺时针和逆时针扭动“亮度传感器”下方蓝色长方体的变阻器上面的螺丝。

从液晶屏观察到REF的变化。

1.实验原理分析,实验现象及结果。

实验原理:

ADC0809的工作过程

首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。

此地址经译码选通8路模拟输入之一到比较器。

START上升沿将逐次逼近寄存器复位。

下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。

直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。

当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

转换数据的传送A/D转换后得到的数据应及时传送给单片机进行处理。

数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。

为此可采用下述三种方式。

  

(1)定时传送方式  

对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。

例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。

可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。

(2)查询方式 

A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。

因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。

(3)中断方式  

把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。

不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。

首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。

实验现象:

(1)通过手挡住“亮度传感器”,降低亮度,数码管的逐渐数值变大,大到255就不再增加,因为显示数值=IN-0/REF+X256.,随着亮度的变小,光敏电阻的阻值随环境亮度变小而变大,加在光敏电阻的电压也随之变化,变化的电压加分到0809的IN-0端也变大(具体数值已经通过A/D转换输出,可以从液晶屏直接读出),从而数码管的数值在参考电压REF+没有变的情况下,显示数值也增加,输入电压IN-0最大等于基准电压REF+,因而显示值大约是256,实验显示最大是255.

(2)调节REF+的,同理,因为显示数值=IN-0/REF+X256.,调节REF+,可以改变数码管的显示值,最大依然是256,调节REF+的具体数字也可以直接从液晶屏读出,REF+越大,数码管的显示值越小,基准电压REF+越小,数码管的显示值越大,最大为256,实验显示最大是255.,存在一定误差。

结果:

通过调节ADC0809的参考电压REF(以及亮度传感器)与转换值之间的关系,了解光敏电阻的电气特性,光敏电阻的阻值与亮度成反比,电气特性等效于一个可变电阻。

2.完成思考题,修改后的程序代码清单(详细注释)

程序代码如下

CHENLEQU5CH;

A/D转换通道地址

DISPLAY_BUFFEREQU5DH;

显示缓存

DS0EQU3FH;

数码管个位

DS00EQU3EH;

数码管十位

DS000EQU3DH;

数码管百位

DS0000EQU3CH;

数码管千位

ORG0000H;

下一条指令的地址为0000H

AJMPMAIN;

跳转到MAIN函数

ORG0013H;

外部中断INTI

AJMPINT_1;

跳转到INT_1函数

ORG0030H;

初始化程序

SETBIT1;

INTI边沿触发

SETBEX1;

开INTI中断

SETBEA;

CPU开放中断

MOVCHENL,#0F8H;

通道0口地址

MOVDPH,#7FH;

ADC0809高位地址#7FH

MOVDPL,CHENL;

ADC0809低位地址放AD转换数据

MOVA,#0;

A清除数据

MOVX@DPTR,A;

启动A/D

LOOP_MAIN:

等待子程序

AJMPLOOP_MAIN;

等待INTI中断

INT_1:

PUSHPSW;

外部中断1程序

保护现场

PUSHDPH

PUSHDPL

MOVDPH,#7FH;

重新设置ADC0809高位地址#7FH

继续放AD转换数据

MOVXA,@DPTR;

读取A/D转换值

MOVDISPLAY_BUFFER,A;

保存A/D的数值

ACALLTRAN_BCD;

将A/D的数值转换成BCD码

ACALLDISP;

调用串行显示子程序

ACALLDELAY;

调用延时程序

再次设置ADC0809高位地址#7FH

再次放AD转换数据

再次A/D启动程序

POPDPL;

POPDPH

POPACC

弹出标志位

RETI;

DELAY:

MOVR6,#64H;

R5,R6为临时延时变量

MOVR5,#0F9H;

6M晶振延时0.1S

DJNZR5,D21;

R5减为0继续

DJNZR6,D22;

R6减为0继续

RET;

子程序返回

TRAN_BCD:

MOVA,DISPLAY_BUFFER;

读入缓冲

MOVR7,#0AH;

R7为10

MOVB,R7;

送10到B

DIVAB;

求数码管个位

MOVDS0,B;

将个位数字送到显示发送缓冲

DIVAB;

求数码管十位

MOVDS00,B;

将十位数字送到显示发送缓冲

MOVB,R7

求数码管百位

MOVDS000,B;

将百位数字送到显示发送缓冲

求数码管千位

MOVDS0000,B;

将千位数字送到显示发送缓冲

MOVR7,#4;

串行显示程序(4位数码管)

MOVR0,#DS0000;

千位数据先放在R0

MOVA,@R0;

取待显示的数据

MOVDPTR,#TAB;

查表

MOVCA,@A+DPTR;

查得相应的七段代码

MOVSBUF,A;

启动串行口发送数据

JNBT1,DL1;

等待一帧发送结束

CLRTI;

清串行口中断标志

INCR0;

指向下一个数据

DJNZR7,DL0;

R7为零继续

RET;

共阴七段数码管代码表

DB0FCH,60H,0DAH,0F2H,66H,0B6H;

(0-6段码)

DB0BEH,0E0H,0FEH,0E6H,0EEH,03EH,9CH;

(7-9ABC段码)

DB7AH,9EH,8EH;

(D-F段码)

END

1.在0809的IN-1段已接入热敏电阻,要测量温度的变化应将原程序如何修改?

答:

将MOVDPH,#7FH;

通道0口地址改为通道1口地址,使其通道一接受数据并进行AD转化。

通道1口地址暂时不会求。

2.为何从数码管观察到,在亮度没有变化的情况下,随着ADC0809的REF+的变化,AD转化结果发生变化。

因为D转化结果显示数值=IN-0/REF+X256.,随着ADC0809的REF+的变化,调节REF+,可以改变数码管的显示值,最大依然是256,调节REF+的具体数字也可以直接从液晶屏读出,REF+越大,数码管的显示值越小,基准电压REF+越小,数码管的显示值越大,最大是当输入电压IN-0等于基准电压REF+时为256,实验显示最大是255.,存在一定误差。

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

当前位置:首页 > 高等教育 > 工学

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

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