中南大学单片机实验报告.docx

上传人:b****6 文档编号:8305918 上传时间:2023-01-30 格式: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

中南大学单片机实验报告

 

单片机原理及应用系统

设计实验报告

 

学院:

信息科学与工程学院

班级:

学号:

姓名:

指导老师:

目录

第一章综述2

第二章实验要求1

第三章软件设计2

1清零程序2

2拆字程序3

3拼字程序4

4数据传送程序设计5

5排序程序7

6散转程序8

第四章硬件设计9

1数字量输入输出实验9

1)硬件构造:

9

2)程序代码:

10

2定时器/计数器实验12

1)硬件构造:

12

2)程序代码:

13

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

1)硬件构造:

15

2)程序代码:

15

4串行通信软件设计19

1)硬件构造:

20

2)程序代码:

20

第五章调试过程及体会23

1调试过程23

2收获体会24

 

第一章综述

单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。

单片机由芯片内仅有CPU的专用处理器发展而来。

最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。

INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。

单片机是靠程序运行的,并且可以修改。

通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。

一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!

但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!

只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!

单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。

  1.SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。

“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。

在开创嵌入式系统独立发展道路上,Intel公司功不可没。

  2.MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:

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

它所涉及的领域都与对象系统相关,因此,发展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

MAIN:

MOVDPTR,#7000H;

MOVA,#12H;

MOVX@DPTR,A;

RRA;

RRA;

RRA;

RRA;

ANLA,#0FH;高位送7001H低位

MOVDPTR,#7001H;

MOVX@DPTR,A;

MOVDPTR,#7000H;

MOVXA,@DPTR;

ANLA,#0FH;低位送7002H低位

MOVDPTR,#7002H;

MOVX@DPTR,A;

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

END

结果如下:

3.拼字程序

流程图如下:

程序如下:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVDPTR,#7000H;

MOVA,#01H;

MOVX@DPTR,A;

ANLA,#0FH;屏蔽高位

SWAPA;

MOVB,A;

MOVDPTR,#7001H;送7001H

MOVA,#0AH;

MOVX@DPTR,A;

ANLA,#0FH;

ORLA,B;拼送后送7002H

MOVDPTR,#7002H;

MOVX@DPTR,A;

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

END

结果如下:

 

4.数据传送程序设计

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

流程图如下

程序:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVR2,#70H;

MOVR3,#00H;源地址

MOVR4,#71H;

MOVR5,#00H;目的地址

MOVR6,#00H;

MOVR7,#07H;传送个数

MOVR1,#10H;

MOVR0,#07H;

MOVDPH,R2;

MOVDPL,R3;

MOVA,R1;

L0:

MOVX@DPTR,A;

INCDPTR;

DJNZR0,L0;赋值

L2:

MOVR7,#0FFH;

L1:

MOVDPH,R2;

MOVDPL,R3;

MOVXA,@DPTR;

INCDPTR;

MOVR2,DPH;

MOVR3,DPL;

MOVDPH,R4;

MOVDPL,R5;

MOVX@DPTR,A;

INCDPTR;

MOVR4,DPH;

MOVR5,DPL;

DJNZR7,L1;

DJNZR6,L2;

SJMP$

END

结果如下:

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

5.排序程序

程序如下:

ESELSORT:

MOV   R7,N

         DEC   R7

ESST1   :

MOV   A,R7

         MOV   R6,A

         MOV   DPL,ADDPL

         MOV   R1,DPL

         MOV   DPH,ADDPH

         MOV   R0,DPH

         MOVX  A,@DPTR

         MOV   B,A

ESST2   :

INC   DPTR

         MOVX  A,@DPTR

         CLR   C

         SUBB  A,B

         JC    ESST3

         MOV   R0,DPL

         MOV   R1,DPH

         MOVX  A,@DPTR

         MOV   B,A

ESST3   :

DJNZ  R6,ESST2

         MOVX  A,@DPTR

         XCH   A,B

         MOVX  @DPTR,A

         MOV   DPL,R0

         MOV   DPH,R1

         MOV   A,B

         MOVX  @DPTR,A

         DJNZ  R7,ESST1

         RET

6.散转程序

流程图如下:

程序如下:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVR0,#02

MOVA,R0

RLA

ADDA,R0

MOVDPTR,#TA

JMP@A+DPTR

TA:

LJMPPM0

LJMPPM1

LJMPPM2

LJMPPM3

PM0:

MOVR1,#01H

LJMPMAIN

PM1:

MOVR2,#02H

LJMPMAIN

PM2:

MOVR3,#03H

LJMPMAIN

PM3:

MOVR4,#04H

LJMPMAIN

OVER:

SJMP$

END

结果如下:

当修改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

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>0;b--)

for(a=130;a>0;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;

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

WR_8255=1;

CS=1;

while

(1)

{

if(count==0)

{

value=0x01;

for(i=0;i<8;i++)//左移

{

SendData(value);

delay();

SendData(0x00);

value=value<<1;

}

}

if(count==1)

{

value=0x80;

for(i=0;i<8;i++)//右移

{

SendData(value);

delay();

SendData(0x00);

value=value>>1;

}

}

if(count==2)

{

SendData(0xFF);//闪烁

delay();

SendData(0x00);

delay();

}

}

}

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

voidextra()interrupt0

{

count=(count+1)%3;

}

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

voidSendData(unsignedchardat)

{

unsignedchari;

WR_8255=0;

A0=0;

A1=0;

P0=dat;

CS=0;

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

WR_8255=1;

CS=1;

}

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亮……一直循环下去。

 

1)硬件构造如下:

 

 

2)程序如下:

#include

unsignedcharcount;

 

voidmain()

{

unsignedcharvalue,i;

TMOD=0x01;

TH0=0x4C;

TL0=0x00;

ET0=1;

PT0=1;

EA=1;

TR0=1;

while

(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;

TH0=0x4C;

TL0=0x00;

TR0=1;

count++;

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

要求:

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

1)硬件构造如下:

2)程序如下:

PRO_DAEQU7FFFH

PRO_ADEQU0BFFFH

ORG0000H

SJMPMAIN

ORG001BH

LJMPKEYSCAN

ORG0030H

MAIN:

SETBEA

SETBEX1

SETBIT1

MOVP1,#0FH

MOVR5,#0FFH

TEST:

MOVR5,#03H

CJNER5,#01H,L1

LCALLSQUARE

AJMPTEST

L1:

CJNER5,#02H,L2

LCALLTRIANGLE

AJMPTEST

L2:

CJNER5,#03H,L3

LCALLSAWTOOTH

L3:

AJMPTEST

;键盘扫描中断

KEYSCAN:

ACALLT12MS

;MOVR6,A

ACALLSCAN

JNZKEY1

SJMPEXIT

KEY1:

MOVR2,A

MOVR3,#07FH

MOVR4,#03H

LOOP1:

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

RET

T12MS:

MOVR7,#15H;12MS

TM:

MOVR6,#0FFH

DJNZR6,$

DJNZR7,TM

RET

;D/A产生方波

SQUARE:

MOVDPTR,#PRO_DA

MOVA,#0FFH

MOVX@DPTR,A

MOVDPTR,#0BFFFH

MOVX@DPTR,A

ACALLDELAY

MOVA,#00H

MOVDPTR,#PRO_DA

MOVX@DPTR,A

MOVDPTR,#0BFFFH

MOVX@DPTR,A

ACALLDELAY

RET

DELAY:

MOVR0,#27H

DEL1:

MOVR1,#0FFH

DJNZR1,$

DJNZR0,DEL1

RET

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

TRIANGLE:

MOVA,#00H

TLOOP:

MOVDPTR,#PRO_DA

MOVX@DPTR,A

MOVDPTR,#PRO_AD

MOVX@DPTR,A

CJNEA,#0FFH,TLOOP2

COUNT1:

DECA

MOVDPTR,#PRO_DA

MOVX@DPTR,A

MOVDPTR,#PRO_AD

MOVX@DPTR,A

CJNEA,#00H,COUNT1

SJMPEXIT1

TLOOP2:

INCA

AJMPTLOOP

EXIT1:

RET

;D/A产生锯齿波

SAWTOOTH:

MOVA,#00H

SLOOP:

MOVDPTR,#PRO_DA

MOVX@DPTR,A

MOVDPTR,#PRO_AD

MOVX@DPTR,A

INCA

CJNEA,#00H,SLOOP

RET

END

4.静态存储器扩展实验

1)程序如下:

ORG0000H

LJMPMAIN

ORG0030H

MAIN:

MOV8EH,02H

MOVP1,#0FFH

CLRA

MOVP1,A

MOVR7,#10H

MOVR0,#30H

MOVA,#00H

LOOP0:

MOV@R0,A

INCR0

INCA

DJNZR7,LOOP0

MOVR7,#10H

MOVR0,#30H

MOVR1,#40H

MOVDPTR,#0000H

LOOP1:

MOVA,@R0

MOVX

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

当前位置:首页 > 表格模板 > 合同协议

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

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