单片机的实验报告.docx

上传人:b****5 文档编号:12054289 上传时间:2023-04-16 格式:DOCX 页数:35 大小:618.14KB
下载 相关 举报
单片机的实验报告.docx_第1页
第1页 / 共35页
单片机的实验报告.docx_第2页
第2页 / 共35页
单片机的实验报告.docx_第3页
第3页 / 共35页
单片机的实验报告.docx_第4页
第4页 / 共35页
单片机的实验报告.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

单片机的实验报告.docx

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

单片机的实验报告.docx

单片机的实验报告

一、实验目的及要求:

(1)学习KeilC51集成开发工具的操作及调试程序的方法,包括:

仿真调试与脱机运行间的切换方法;

(2)熟悉TD-51单片机系统板及实验系统的结构及使用;

(3)进行MCS51单片机指令系统软件编程设计与硬件接口功能设计;

(4)学习并掌握KeilC51与Proteus仿真软件联机进行单片机接口电路的设计与编程调试;

(5)完成指定MCS51单片机综合设计题

二、实验运行环境

软件环境:

KEILuv2,PROTEUS7.4

硬件环境:

PC机,TD-51系统板

三、软件部分

实验一 清零程序与拆字程序设计

(1)清零程序:

把7000H-7FFFH的内容清零。

(2)拆字程序:

把7000H的内容拆开,高位送7001H低位,低位送7002H低位。

7001H,7002H高位清零,一般本程序用于把数据送显示缓冲区时用。

a)程序流程图

图1清零程序图2拆字程序

b)实验参考程序

清零程序:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVA,#00H

MOVDPTR,#7000H;赋给首地址

MOVR1,#100H;循环次数,完成对7000H-70FFH的置一

MOVR2,#10H

LOOP1:

MOVX@DPTR,A

INCDPTR

DJNZR1,LOOP1

DJNZR2,LOOP1;因为都是先减一之后再做比较,所以0FFH、0FH个数要100H、10H次

SJMP$

END

拆字程序:

ORG0000H

LJMPMAIN

ORG1000H

MAIN:

MOVDPTR,#7000H

MOVXA,@DPTR;赋值

MOVR0,A

ANLA,#0F0H;得到高四位

SWAPA

INCDPTR

MOVX@DPTR,A;高位给7001H

MOVA,R0

ANLA,#0FH;得到低四位

INCDPTR

MOVX@DPTR,A;低位给7002H

SJMP$

END

实验二 拼字程序与数据传送程序设计

(1)拼字程序:

把7000H,7001H的低位相拼后送人7002H,一般本程序用于把显示缓冲区的数据取出拼装成个字节。

(2)数据传输子程序:

把(R2,R3)源RAM区首址内的(R6,R7)个字节数据,传送到(R4,R5)目的RAM区。

a)程序流程图

图3拼字程序图4数据传输子程序

b)实验参考程序

拼字程序

ORG0000H

LJMPMAIN3

ORG1000H

MAIN3:

MOVDPTR,#7000H

MOVXA,@DPTR;原值给A

ANLA,#0FH;取低四位

SWAPA;将原低四位移到高四位

MOVB,A

INCDPTR

MOVXA,@DPTR;再取7001H的值

ANLA,#0FH;取低四位

ADDA,B

INCDPTR

MOVX@DPTR,A;获得结果

SJMP$

END

数据传输程序

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVR2,#10H;源RAM区的第一个地址

MOVR3,#19H;源RAM区的第二个地址

MOVR4,#22H;目的RAM区的第一个地址

MOVR5,#2BH;目的RAM区的第二个地址

MOVR6,#02H;第一次传输的字节数据个数

MOVR7,#03H;第二次传输的字节数据个数

L1:

MOVB,R2

MOVR0,B

MOVA,@R0

MOVB,R4

MOVR1,B

MOV@R1,A

INCR2

INCR4

DJNZR6,L1;完成第一路的数据传输

L2:

MOVB,R3

MOVR0,B

MOVA,@R0

MOVB,R5

MOVR1,B

MOV@R1,A

INCR3

INCR5

DJNZR7,L2;完成整个的数据传输

SJMP$

END

 

实验三 排序程序与散转程序设计

(1)散转程序:

根据8032片内20H中的内容(00或01或02或03)进行散转。

(2)排序子程序:

其功能为用冒泡法将内部RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。

a)程序流程图

图5散转程序

 

图6排序子程序

b)实验参考程序

散转程序:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVA,#01H

MOVR2,A

RLA

ADDA,R2

MOVDPTR,#PTAB

JMP@A+DPTR

PTAB:

LJMPPM0

LJMPPM1

LJMPPM2

LJMPPM3

PM0:

[程序体0]

PM1:

[程序体1]

PM2:

[程序体2]

PM3:

[程序体3]

SJMP$

END

冒泡排序子程序:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVR0,#10H;初始地址

MOVR7,#04H;外循环次数(参与比较的数的个数-1)

ACALLMAOP

SJMP$

MAOP:

L1:

MOVA,R0;赋给初始地址

MOVR1,A

INCR1;取第二个数的地址

MOVA,R7

MOVR6,A

L2:

MOVA,@R0

CLRC

SUBBA,@R1;两数进行比较

JCL3;前数小于后数则保持位置不变

MOVA,@R0;否则,交换位置

XCHA,@R1

MOV@R0,A

L3:

INCR1

DJNZR6,L2;内循环是否完成

INCR0

DJNZR7,L1;外循环是否完成

RET;返回主程序

END

四、软件部分设计总结

本次软件部分的设计主要运用到了编程软件KEILuv2,可以方便的对程序进行模拟调试和观察片内或片外存储区的变量变化情况。

另外熟悉运用KEILuv2可以适当简化程序的编写。

例如:

对于片内或片外存储区域的任何地址赋值。

在本次的软件实验中,有很多都需要我们对某部分的地址进行赋值,假如在程序中实现这些赋值的话,会一定程度地导致程序的冗长。

而在KEILuv2中,只要在编辑框左下方的命令行中输入如“ECHARD:

30H=11H,22H,33H,44H,55H”等,则可以改变片内存储区中从30H开始的五个地址的值。

同样,在对程序进行调试时候,也可以打开存储器观察窗口,在该窗口的“Address:

”栏中输入“D:

30H”或“X:

7000H”,则可以显示片内RAM30H后或片外7000H后的内容。

其中,D表示显示片内存储器的内容,X表示显示片外部数据存储器的内容,C表示显示代码存储器的内容,I表示显示内部间接寻址RAM的内容。

另外,对于KEILuv2在调试运行过程中,还可以很方便的通过设置断点或是单步运行等方式来查看程序的正确性。

五、硬件部分

实验四静态存储器扩展实验

1、基础部分:

编写实验程序,在单片机内部一段连续的RAM空间30H-3FH中写入初值00H-0FH,然后将这16个数据传送到RAM的0000H-000FH中最后将外部RAM的0000H-000FH空间的内容传送到片内RAM的40H-4FH单元中。

若发生传输错误,则LED灯闪烁。

a)实验原理图

图7扩展存储器实验接线路图

注:

连接线路图时,若使用PIT+实验箱,需将BE3-BE0接GND

b)实验步骤

1.按原理图7连接线路

2.按实验内容编写实验程序,经编译、链接无误后启动调试

3.打开存储器观察窗口,在存储器#1的Address中输入D:

0x30,在存储器#2的Address中输入X:

0x0000来监视存储器空间。

4.可单步运行程序,观察存储器内容的变化或设置断点再运行程序。

c)实验参考程序

ORG0000H

AJMPMAIN

MAIN:

MOVR0,#30H;将00H-0FH写入RAM内30H-3FH

MOVA,#00H

MOVR1,#10H

L1:

MOV@R0,A

INCR0

INCA

DJNZR1,L1

MOVR1,#10H;写入外部RAM0000H-000FH中

MOVDPTR,#0000H

MOVR0,#30H

L2:

MOVA,@R0

MOVX@DPTR,A

CJNE@DPTR,A,SS;判断传送正确,若错,则转入闪烁程序

INCDPTR;传送准确,则继续下一组数据的传送

INCR0

DJNZR1,L2

MOVR1,#10H;写入内部RAM40H-4FH中

MOVDPTR,#0000H

MOVR0,#40H

L3:

MOVXA,@DPTR

MOV@R0,A

CJNE@R0,A,SS;判断传送正确,若错,则转入闪烁程序

INCDPTR;传送准确,则继续下一组数据的传送

INCR0

DJNZR1,L3

SS:

;闪烁程序

SETBP1.0;置位P1.0(P1.0与LED灯相连)

ACALLDELAY;调用延迟程序

CLRP1.0;复位P1.0(使灯灭)

ACALLDELAY

LJMPSS;形成灯的闪烁

SJMP$

DELAY:

MOVR5,#08H;延迟程序(调节R5,R6的值可以改变闪烁快慢)

L7:

MOVR6,#0FAH

L8:

DJNZR6,L8

DJNZR5,L7

RET

END

2、提高部分:

FLASH存储器扩展实验

编写实验程序对FLASHROM进行操作,要求对FLASH的读/写、数据保护功能、芯片擦除等特性进行验证。

带保护写入0-127共128个数,不带保护写入0x55共128个数。

a)实验原理图

图8FLASHROM参考接线图

b)实验步骤

1.按原理图8连接线路图

2.编写实验程序,编译、链接无误后启动调试

3.打开存储器观察窗口,在存储器#1的Address中输入X:

0x0000,查看存储器的内容

4.带保护写Flash,写入内容0-7F,观察存储器窗口

5.不带保护写Flash,观察存储器窗口,正确情况下数据不会改变

6.除去保护,然后不带保护写入Flash,观察存储器窗口,此时应显示128个55

7.将整个Flash擦除,观察存储器窗口,内容全变为FF,表示已被擦除

8.通过一步一步实验,了解Flash特性,实验结束,按复位键退出

c)实验参考流程图:

图9软件数据保护命令序列

图10芯片擦除命令序列

实验五数字量输入输出实验

1、基础部分:

数字量的输入输出

P1口是8位准双向口,每一位均可独立定义为输入输出。

编写实验程序,将P1口的低4位定义为输出,高4位定义为输入,数字量从P1口的高4位输入,从P1口的低4位输出控制发光二极管的亮灭。

a)实验原理图

图11实验接线图

b)实验步骤

1.按图11接好试验线路图,图中圆圈表示不要通过排线连接

2.编写实验程序,编译链接无误后进入调试状态

3.运行实验程序,观察实验现象,验证程序正确性

4.按复位键,结束程序运行,退出调试状态

c)实验参考程序

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVP1,#0FFH;初始化

MOVA,P1;将输入写进累加器A

SWAPA

ANLA,#0FH

MOVP1,A;输出显示

LJMPMAIN;循环不断检测P1口输入端的新状态

SJMP$

END

d)PROTEUS仿真结果

图12数字量输入输出

2、提高部分:

LED灯控制(使用8255接口芯片)

使用汇编语言编程,功能为:

通过开关实现LED灯工作方式即时控制,完成LED开关控制显示和LED灯左循环、右循环、间隔闪烁功能。

a)实验参考程序

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVTMOD,#60H;设置T1为模式2,外部计数方式

MOVTH1,#0FFH;T1计数器赋初值

MOVTL1,#0FFH

MOVDPTR,#7300H

MOVA,#80H

MOVX@DPTR,A

MOVDPTR,#7100H

SETBTR1;开启计数器

LEFT:

MOVR0,#08H;左循环

MOVA,#01H

A1:

MOVX@DPTR,A

LCALLDELAY

RLA

DJNZR0,A1

JBCTF1,RIGHT;查询T1溢出标志,TF1=1时转移

JMPLEFT

RIGHT:

MOVR0,#08H;右循环

MOVA,#80H

A2:

MOVX@DPTR,A

LCALLDELAY

RRA

DJNZR0,A2

JBCTF1,SHANSHUO;查询T1溢出标志,TF1=1时转移

JMPRIGHT

SHANSHUO:

MOVR0,#08H;闪烁

LP1:

MOVA,#55H

MOVX@DPTR,A

LCALLDELAY

MOVA,#0AAH

MOVX@DPTR,A

LCALLDELAY

DJNZR0,LP1

JBCTF1,LEFT;查询T1溢出标志,TF1=1时转移

JMPSHANSHUO

DELAY:

MOVR1,#0FFH

DEL1:

MOVR2,0FFH

DEL2:

DJNZR2,DEL2

DJNZR1,DEL1

RET

SJMP$

END

设计思路:

利用计数器T1外部技术方式,当外部输入脉冲引脚上出现电平负跳变时,T1计数器加一,溢出标志TF1置一,然后改变LED灯亮的方式,同时,将标志位TF1复位,进入下一轮的计数溢出等待。

因此,而形成三种亮灯方式的自动循环。

若是用开关实现三种方式的亮灯,则需要在最开始和每种亮灯之后通过8255对开关状态进行采集并进行判断。

因此事先还要先设置好哪个开关的闭合表示哪种亮灯方式。

b)实验电路原理图以及仿真结果

图13LED循环显示

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

1、基础部分:

使用定时器0与定时器1进行定时,在P1.0引脚上输出方波信号,通过示波器观察波形输出,测量并记录方波周期

a)实验参考程序

ORG0000H

LJMPMAIN

ORG000BH

LJMPZD

ORG0030H;主程序入口

MAIN:

MOVTMOD,#01H;写入T0控制字,16位定时方式

MOVTL0,#0B0H;写入T0定时100毫秒初值

MOVTH0,#3CH

MOVIE,#82H

SETBTR0;启动T0

DD:

SJMPDD;循环等待

ZD:

CPLP1.0;T0中断服务程序,取反P1.0

MOVTL0,#18H;重装T0定时初值

MOVTH0,#0FCH

RETI

END

b)实验原理图

 

图14原理接线图

c)程序流程图

 

图15主程序

 

图16中断子程序

2、提高部分:

定时器控制LED灯

由单片机内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。

P1口的P1.0-P1.7分别接八个发光二极管。

编写程序模拟时序控制装置。

开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个LED灯全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮……一直循环下去。

a)实验参考程序

ORG0000H

LJMPMAIN

ORG001BH;中断地址入口

LJMPSERVE

ORG0100H

MAIN:

MOVSP,#50H;设置堆栈指针

MOVTMOD,#10H;定时器T1初始化

MOVTL1,#00H

MOVTH1,#4CH

SETBTR1;启动定时器

SETBET1;允许T1中断

SETBEA

MOVDPTR,#TABLE

MOVR0,#00H

MOVR1,#00H

L1:

MOVA,R1

MOVCA,@A+DPTR;选择某秒钟对应的亮灯的方式

MOVP1,A

AJMPL1

SERVE:

PUSHACC;中断服务程序

INCR0

MOVA,R0

CJNEA,#20,NEXT

MOVR0,#00H

INCR1

MOVA,R1

ANLA,#07H

MOVR1,A

NEXT:

POPACC

RETI

TABLE:

DB0FAH,0F5H,0AFH,05FH,0AAH,55H,00H,0FFH

END

b)实验原理图

 

图17原理接线图

c)仿真接线图

图18仿真接线图

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

1、基础部分:

编写实验程序,将ADC单元中提供的0V~5V信号源作为ADC0809的模拟输入量,进行A/D转换,转换结果通过变量进行显示。

a)实验原理图

图19AD转换实验接线图

图20A/D转换单元

b)实验步骤

1.按图19连接实验线路,AD的时钟线需要与实验平台中的系统总线单元的CLK相连;

2.编写实验程序,经编译、链接无误后装入系统,启动调试;

3.将变量ADV添加到变量监视窗口中;

4.在Delay()处行设置断点,使用万用表测量ADJ端的电压值,计算对应的采样值,然后运行程序;

5.程序运行到断点处停止运行,查看变量窗口中ADV的值,与计算的理论值进行比较,看是否一致(可能稍有误差,相差不大);

6.调节电位器,改变输入电压,比较ADV与计算值,反复验证程序功能;制表并记录结果。

c)实验参考程序

 #include"SST89x5x4.h"              

#include"Absacc.h"

#defineSTARTADXBYTE[0x7F00]

#defineADRESULTXBYTE[0x7F08]

sbitADBUSY=P3^3;

voidDelay()

{

unsignedchari;

for(i=0;i<100;i++);

}   

unsignedcharAD0809(void)

{

unsignedcharresult;

STARTAD=0;//启动AD

while(ADBUSY==1);/等待转换结束

Delay();

result=ADRESULT;

returnresult;//返回转换结果

}

voidmain(void)

{

unsignedcharADV;//变量

while

(1)

{

ADV=AD0809();

Delay();//设置断点

}

}

2、提高部分:

小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。

a)实验参考程序

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

A0:

MOVP1,#0FH

MOVC,90H

JNCFANG

MOVC,91H

MOVDPTR,#7FFFH

MOVA,#00H

MOVX@DPTR,A

JNCJU

MOVC,92H

JNCSAN

JMPA0

FANG:

MOVP1,#1FH;方波

LCALLFANGBO

JMPA0

JU:

MOVP1,#2FH;锯齿波

LCALLJUCHI

JMPA0

SAN:

MOVP1,#3FH;三角波

LCALLSANJIAO

JMPA0

FANGBO:

MOVDPTR,#7FFFH

MOVA,#0FFH

MOVX@DPTR,A

LCALLDELAY

MOVA,#00H

MOVX@DPTR,A

LCALLDELAY

RET

JUCHI:

MOVDPTR,#7FFFH

MOVA,#00H

A1:

MOVX@DPTR,A

LCALLDELAY

INCA

CJNEA,#00H,A1

RET

SANJIAO:

MOVDPTR,#7FFFH

MOVA,#00H

A2:

MOVX@DPTR,A

LCALLDELAY

INCA

CJNEA,#0FFH,A2

A3:

DECA

LCALLDELAY

MOVX@DPTR,A

CJNEA,#00H,A3

RET

DELAY:

MOVR6,#0FH

DEL1:

MOVR7,#0FFH

DJNZR7,$

DJNZR6,DEL1

RET

SJMP$

END

b)实验线路以及仿真接线

图21AD、DA综合应用仿真接线

实验八串行通讯实验

利用单片机实验系统,实现与PC机通讯。

功能要求:

将从实验系统键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到单片机实验系统的数码管上。

a)实验参考程序

ORG0000H

AJMPMAIN

ORG0023H

AJMPURT

ORG0030H

MAIN:

MOVP1,#00H

LCALLURTINIT

START:

MOVP0,#0FH

MOVA,P0

CPLA

ANLA,#0FH

JZSTART

LCALLDELAY

MOVP0,#0FH

MOVA,P0

ANLA,#0FH

MOVR7,A

MOVP0,#0F0H

MOVA,P0

ANLA,#0F0H

ORLA,R7

CJNEA,#0EEH,K1

MOVA,#30H

MOVSBUF,A

JNBTI,$

CLRTI

K1:

CJNEA,

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

当前位置:首页 > 工程科技 > 能源化工

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

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