中南大学单片机实验报告文档格式.docx

上传人:b****5 文档编号:19378480 上传时间:2023-01-05 格式:DOCX 页数:31 大小:223.80KB
下载 相关 举报
中南大学单片机实验报告文档格式.docx_第1页
第1页 / 共31页
中南大学单片机实验报告文档格式.docx_第2页
第2页 / 共31页
中南大学单片机实验报告文档格式.docx_第3页
第3页 / 共31页
中南大学单片机实验报告文档格式.docx_第4页
第4页 / 共31页
中南大学单片机实验报告文档格式.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

中南大学单片机实验报告文档格式.docx

《中南大学单片机实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《中南大学单片机实验报告文档格式.docx(31页珍藏版)》请在冰豆网上搜索。

中南大学单片机实验报告文档格式.docx

不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。

它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。

从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。

在发展MCU方面,最著名的厂家当数Philips公司。

  Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。

因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。

3.单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;

因此,专用单片机的发展自然形成了SoC化趋势。

随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。

因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。

MCS51系列微控制器应用广泛,在家电、汽车甚至航空等领域都有其活跃的身影。

然而,普通51系列微控制器内部资源有限,像我用Proteus构建微控制器虚拟实验室选用的AT89C52只有三个定时器、一个全双工的串行口和中断控制,并且其数据处理能力有限,不适合对大量数据进行复杂分析和运算。

因此,在不重新选型(可选用SoC)的前提下,为实现我们所需要的功能,就需要进行外围扩展。

针对微控制器的特点,我们首先考虑串行扩展,因为微控制器的I/O引脚有限,并行扩展一则外围芯片面积比较大,二则对抑制EMI不利。

第二章实验要求

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

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

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

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

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

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

下面主要分为软件和硬件部分来介绍

软件部分:

清零程序与拆字程序设计

拼字程序与数据传送程序设计

排序程序与散转程序设计

硬件部分:

静态存储器扩展实验

要求:

阅读、验证C语言程序功能。

使用汇编语言编程,完成实验指导书之“4.2FLASH存储器扩展实验”实验项目(P60)。

数字量输入输出实验

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

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

通过KK1实现LED灯工作方式即时控

制,完成LED开关控制显示和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/D、D/A转换实验

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

串行通讯实验

Proteus环境下完成利用单片机实验系统,实现与PC机通讯。

功能要求:

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

第三章软件设计

1.清零程序

因为清零看不出效果,故改为全部写为01,从7000-8000H空间。

程序如下:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVDPTR,#7000H;

片内RAM首地址

MOVA,#01H;

写入数据初值

MOVR6,#20H;

循环变量

LOOP2:

MOVR7,#80H

LOOP1:

MOVX@DPTR,A;

写数据到RAM

INCDPTR;

地址加1

DJNZR7,LOOP1

DJNZR6,LOOP2

SJMP$

END

结果如下:

单步运行下,第一步为:

最后一步为:

8000h为0

2.拆字程序

流程图为

ORG0000H

LJMPMAIN

ORG0100H

MOVDPTR,#7000H;

MOVA,#12H;

MOVX@DPTR,A;

RRA;

ANLA,#0FH;

高位送7001H低位

MOVDPTR,#7001H;

MOVX@DPTR,A;

MOVDPTR,#7000H;

MOVXA,@DPTR;

低位送7002H低位

MOVDPTR,#7002H;

SJMP$;

设置断点,观察实验结果中的内容

3.拼字程序

流程图如下:

MOVA,#01H;

ANLA,#0FH;

屏蔽高位

SWAPA;

MOVB,A;

MOVDPTR,#7001H;

送7001H

MOVA,#0AH;

ORLA,B;

拼送后送7002H

SJMP$;

END

4.数据传送程序设计

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

流程图如下

程序:

MOVR2,#70H;

MOVR3,#00H;

源地址

MOVR4,#71H;

MOVR5,#00H;

目的地址

MOVR6,#00H;

MOVR7,#07H;

传送个数

MOVR1,#10H;

MOVR0,#07H;

MOVDPH,R2;

MOVDPL,R3;

MOVA,R1;

L0:

INCDPTR;

DJNZR0,L0;

赋值

L2:

MOVR7,#0FFH;

L1:

MOVXA,@DPTR;

MOVR2,DPH;

MOVR3,DPL;

MOVDPH,R4;

MOVDPL,R5;

MOVR4,DPH;

MOVR5,DPL;

DJNZR7,L1;

DJNZR6,L2;

SJMP$

把7000h中的8个数据发给7100h中:

5.排序程序

ESELSORT:

MOV 

R7,N

DEC 

R7

ESST1 

:

A,R7

MOV 

R6,A

DPL,ADDPL

R1,DPL

DPH,ADDPH

R0,DPH

MOVX 

A,@DPTR

B,A

ESST2 

INC 

DPTR

CLR 

C

SUBB 

A,B

JC 

ESST3

R0,DPL

R1,DPH

ESST3 

DJNZ 

R6,ESST2

XCH 

@DPTR,A

DPL,R0

DPH,R1

DJNZ 

R7,ESST1

RET

6.散转程序

MOVR0,#02

MOVA,R0

RLA

ADDA,R0

MOVDPTR,#TA

JMP@A+DPTR

TA:

LJMPPM0

LJMPPM1

LJMPPM2

LJMPPM3

PM0:

MOVR1,#01H

PM1:

MOVR2,#02H

PM2:

MOVR3,#03H

PM3:

MOVR4,#04H

OVER:

SJMP$

当修改A=02h时跳转到pwm2即使R1=03

当修改A=00时即使R1=01,结果如下:

第四章硬件设计

硬件部分我主要做了三个实验,前两个是用c完成的,后一个是同学指导用汇编完成的,个人觉得用c来做程序还是比会变简单明了很多,而且原理也是一样的。

1.数字量输入输出实验

任务:

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

(要求一定要用到8255)

1)硬件构造如下:

因为要加入8255,所以在硬件与程序中还是遇到了一些小麻烦的,在protus7.0中的8255是有问题的,后来转为7.5才好,可是在实际中又运行不了,只能仿真。

2)程序如下:

#include<

reg51.h>

unsignedcharcount;

sbitA0=P2^0;

sbitA1=P2^1;

sbitWR_8255=P2^3;

sbitCS=P2^4;

sbitRESET_8255=P2^2;

voidSendData(unsignedchardat);

voiddelay(void)

{

unsignedchara,b,c;

for(c=19;

c>

0;

c--)

for(b=20;

b>

b--)

for(a=130;

a>

a--);

}

voidmain()

{

unsignedchari,value;

IT0=1;

//设置外部中断0下降沿触发

EX0=1;

//允许外部中断0

EA=1;

//开总中断

RESET_8255=1;

//上电复位8255

for(i=0;

i<

10;

i++);

RESET_8255=0;

WR_8255=0;

//设置8255A口输出工作方式

A0=1;

A1=1;

P0=0x80;

CS=0;

WR_8255=1;

CS=1;

while

(1)

{

if(count==0)

{

value=0x01;

for(i=0;

8;

i++)//左移

{

SendData(value);

delay();

SendData(0x00);

value=value<

<

1;

}

}

if(count==1)

value=0x80;

i++)//右移

value=value>

>

if(count==2)

SendData(0xFF);

//闪烁

delay();

SendData(0x00);

}

}

}

//外部中断0中断服务程序,用于选择LED的方式

voidextra()interrupt0

count=(count+1)%3;

//向8255的A口写一个数据

voidSendData(unsignedchardat)

unsignedchari;

A0=0;

A1=0;

P0=dat;

2.定时器/计数器实验

定时器控制LED灯

unsignedcharvalue,i;

TMOD=0x01;

TH0=0x4C;

TL0=0x00;

ET0=1;

PT0=1;

TR0=1;

{if(count==20)

P1=05H;

if(count==40)

P1=0AH;

if(count==60)

P1=50H;

if(count==80)

P1=0A0H;

if(count==100)

P1=55H;

if(count==120)

P1=0AAH;

if(count==140)

P1=0FFH;

if(count==160)

P1=00H;

count=0;

}

voidTimer0()interrupt1

TR0=0;

count++;

3.A/D、D/A转换实验

PRO_DAEQU7FFFH

PRO_ADEQU0BFFFH

ORG0000H

SJMPMAIN

ORG001BH

LJMPKEYSCAN

ORG0030H

SETBEA

SETBEX1

SETBIT1

MOVP1,#0FH

MOVR5,#0FFH

TEST:

MOVR5,#03H

CJNER5,#01H,L1

LCALLSQUARE

AJMPTEST

CJNER5,#02H,L2

LCALLTRIANGLE

CJNER5,#03H,L3

LCALLSAWTOOTH

L3:

;

键盘扫描中断

KEYSCAN:

ACALLT12MS

;

MOVR6,A

ACALLSCAN

JNZKEY1

SJMPEXIT

KEY1:

MOVR2,A

MOVR3,#07FH

MOVR4,#03H

MOVP1,R3

MOVA,P1

CPLA

ANLA,#0FH

JNZKEY2

MOVA,R3

RRA

MOVR3,A

DJNZR4,LOOP1

SJMPEXIT

KEY2:

DECR4

CJNER2,#01H,LOOP3

MOVA,#01H

SJMPLOOP6

LOOP3:

CJNER2,#02H,LOOP4

MOVA,#04H

SJMPLOOP6

LOOP4:

CJNER2,#04H,LOOP5

MOVA,#07H

SJMPLOOP6

LOOP5:

CJNER2,#08H,LOOP6

MOVA,#0AH

LOOP6:

ADDA,R4

MOVR5,A

MOVP1,#0FH

;

MOVA,R6

EXIT:

RETI

;

延时后再次扫描有无按键按下

SCAN:

MOVP1,#0FH

MOVA,P1

CPLA

ANLA,#0FH

T12MS:

MOVR7,#15H;

12MS

TM:

MOVR6,#0FFH

DJNZR6,$

DJNZR7,TM

D/A产生方波

SQUARE:

MOVDPTR,#PRO_DA

MOVA,#0FFH

MOVX@DPTR,A

MOVDPTR,#0BFFFH

MOVX@DPTR,A

ACALLDELAY

MOVA,#00H

DELAY:

MOVR0,#27H

DEL1:

MOVR1,#0FFH

DJNZR1,$

DJNZR0,DEL1

D/A产生三角波时钟500KHz幅值1mv扫描周期20ms

TRIANGLE:

MOVA,#00H

TLOOP:

MOVDPTR,#PRO_DA

MOVDPTR,#PRO_AD

CJNEA,#0FFH,TLOOP2

COUNT1:

DECA

CJNEA,#00H,COUNT1

SJMPEXIT1

TLOOP2:

INCA

AJMPTLOOP

EXIT1:

RET

D/A产生锯齿波

SAWTOOTH:

SLOOP:

INCA

CJNEA,#00H,SLOOP

4.静态存储器扩展实验

1)程序如下:

ORG0030H

MOV8EH,02H

MOVP1,#0FFH

CLRA

MOVP1,A

MOVR7,#10H

MOVR0,#30H

MOVA,#00H

LOOP0:

MOV@R0,A

INCR0

INCA

DJNZR7,LOOP0

MOVR7,#10H

MOVR1,#40H

MOVDPTR,#0000H

MOVA,@R0

MOVX

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

当前位置:首页 > 工程科技 > 信息与通信

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

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