单片机实验报告

时间:2024.5.14

单片机实验报告

学生姓名 学号

专 业

指导教师

学 院 信息与电气工程学院

20xx年11月

单片机实验报告

实验一 MCS-51指令系统实验——数据排序

1.实验目的

熟悉MCS-51指令系统,掌握程序设计方法;加深对内部存储器读写的认识;熟悉仿真开发环境,学会源程序的编写、汇编/编译、调试;熟悉单片机硬件实验系统以及良好的实验习惯培养等;学会检查结果的正确性。

2.实验内容

将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM,然后用冒泡法对其按从小到大的次序重新排列,并送到外部RAM 以8000H开始的地址单元内。

3.实验流程图

单片机实验报告

4.调试程序

ORG 0000H

LJMP START ;将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM

ORG 0030H

START: MOV R3,#10 ;设置传送次数

MOV R0,#08H ;设置数据传送的内部RAM的首地址

MOV DPTR,#TAB

LOOP0: CLR A

MOVC A,@A+DPTR

MOV @R0,A

INC DPTR

INC R0 ;将程序存储器中的代码字节传送给A ;A传送到间接寻址R0 ;数据指针加1 ;寄存器R0加1 DJNZ R3,LOOP0 ;R3减1,若为0结束循环,传送结束 ;冒泡法对其按从小到大的次序重新排列

;设置外循环次数 MOV R3,#9

LOOP1: MOV A,R3

MOV R2,A MOV R0,#08H ;设置内循环次数 ;数据首地址送R0

LOOP2: MOV A,@R0

MOV 20H,@R0

INC R0 MOV 21H,@R0 CLR C ;进位标志位清零 ;前一个地址单元的内容和后一个地址单元内容比较 ;若有借位,前者小,不必交换,程序跳转到LOOP3 SUBB A,@R0 JC LOOP3 ;若无借位,前者大,进行交换 MOV @R0,20H DEC R0 MOV @R0,21H INC R0

LOOP3: DJNZ R2,LOOP2 ;R2=0,内部循环结束

DJNZ R3,LOOP1

LOOP4: LJMP NEXT

;送到外部RAM 以8000H开始的地址单元内 ;R3=0,外部循环结束

NEXT: MOV DPTR,#8000H ;设置外部存储器数据存放的首地址

MOV R0,#08H ;数据区数据首地址传送给R0

MOV R3,#10

;A传送到外部RAM ;传送次数 LOOP5: MOV A,@R0 MOVX @DPTR,A

INC R0 INC DPTR DJNZ R3,LOOP5 ;R3=0,传送结束 SJMP $ ORG 0080H

;程序存储器的一个列表中的10个单字节无符号数据 TAB: DB 10,2,23,4,5,6,7,24,66,1

END

5.实验收获

万事开头难、要勇敢迈出第一步。开始的时候,不要老是给自己找借口,说KEIL不会建项目啦、没有实验板啦之类的。遇到困难要一件件攻克,不会建项目,就先学它,这方面网上教程很多,随便找找看一下,做几次就懂了。然后可以参考别的人程序,抄过来也无所谓,写一个最简单的,让它运行起来,先培养一下自己的感觉,知道写程序是怎么一回事,无论写大程序还是小程序个人认为,一块学习板还是必要的,写好程序在上面运行一下看结果,学习效果会好很多,仿真器就看个人需要了。单片机是注重理论和实践的,光看书不动手,是学不会的。

通过实验,熟悉MCS-51指令系统,掌握程序设计方法;加深对内部存储器读写的认识;熟悉仿真开发环境,学会源程序的编写、汇编/编译、调试;熟悉单片机硬件实验系统以及良好的实验习惯培养,学会了用汇编语言实现冒泡法排序,受益匪浅

实验二 I/O口输入输出实验

1. 实验目的

学习P1口作为输出/输入方式使用的方法;掌握延时子程序的编写和使用;

2.实验内容

(1)P1口做输出口,接8个发光二极管,编写程序,使发光二极管循环点亮。

(2)P1.0~P1.3口做输入口,接4位拨码开关;P1.4~P1.7做输出口,接4个发光二极管。编写程序读取P1口低四位的开关量输入状态,输出到P1口的高四位,由二极管指示出来。

3. 实验流程图

单片机实验报告

单片机实验报告

4. 调试程序

(1);1、循环点亮发光二极管

ORG 0000H

LJMP START

ORG 4100H

START: MOV A,#01H

LOOP: RL A ;左移一位,点亮下一个发光二极管

MOV P1,A

LCALL DELAY ;延时 0.1秒

JMP LOOP

DELAY: MOV R1,#127 ;延时0.1秒

DEL1: MOV R2,#200

DEL2: DJNZ R2,DEL2

DJNZ R1,DEL1

RET

END

;2、通过发光二极管将P1口的状态显示

ORG 0000H

LJMP START

ORG 4100H

START: MOV P1,#0FFH ;复位P1口为输入状态

MOV A,P1 ;读P1口的状态值入累加器A

SWAP A

MOV P1,A

JMP START ;继续循环监测端口P1的状态

END

(2)P1.0~P1.3口做输入口,接4位拨码开关;P1.4~P1.7做输出口,接4个发光二极管。编写程序读取P1口低四位的开关量输入状态,输出到P1口的高四位,由二极管指示出来。

ORG 00H

START: JB P1.0,NEXT1 ;判断P1.0=1,跳转NEXT1

CLR P1.4

SJMP NEX1

NEXT1: SETB P1.4

NEX1: JB P1.1,NEXT2 ; 判断P1.1=1,跳转NEXT2

CLR P1.5

SJMP NEX2

NEXT2: SETB P1.5

NEX2: JB P1.2,NEXT3 ; 判断P1.2=1,跳转NEXT3

CLR P1.6

SJMP NEX3

NEXT3: SETB P1.6

NEX3: JB P1.3,NEXT4 ; 判断P1.3=1,跳转NEXT4

CLR P1.7

SJMP NEX4

NEXT4: SETB P1.7

NEX4: SJMP START

END

5. 实验收获

知识点用到才学,不用的暂时丢一边。厚厚的一本书,看着人头都晕了,学了后面的,前面的估计也快忘光了,所以,最好结合实际程序,用到的时候才去看,不必说非要把书从第一页看起,看完它才来写程序。比如你写流水灯,完全就没必要看中断的知识,专心把流水灯学好就是了,这是把整本书化整为零,一小点一小点的啃。

通过实验,学习P1口作为输出/输入方式使用的方法;掌握了延时子程序的编写和使用。并且用二极管生动形象的表现了输入输出情况。

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

1.实验目的

了解MCS-51单片机中定时器/计数器的基本结构、工作原理和工作方式,掌握工作在定时器和计数器两种方式下的编程方法。

2.实验内容

(1)定时器实验:在使用6MHz晶振的条件下,用定时器1产生10ms定时,由P1.0口输出周期为2s的方波信号,并通过发光二极管指示P1.0的输出波形。

(2)定时器实验(选作):在使用6MHz晶振的条件下,用端口输出不同频率的脉冲(不同频率的脉冲用定时器实现),控制蜂鸣器发出“Do Re Mi Fa Sol La Si Do”不同音调(这些音调的频率可以参考书中P142的表6-3)

(3)计数器实验:按计数器模式和方式2工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。

3. 实验流程图

单片机实验报告

4. 调试程序

1; 6MHz晶振的条件下,用定时器1产生10ms定时,由P1.0口输出周期为2s的方波信号,并通过发光二极管指示P1.0的输出波形。

ORG 0000H

LJMP START ;转程序入口

ORG 000BH ;T0的中断入口

LJMP Timer0Interrupt ;转T0中断处理程序IT0P

ORG 1000H

START:MOV SP,#60H ;设堆栈指针

SETB P1.0

LCALL InitTimer0

InitTimer0: ;定时器初始化

MOV B,#64H ;设循环100次

MOV TMOD,#01H ;设T0工作在方式1 MOV TL0,#78H ;给T0设初值 MOV TH0,#0ECH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断 SETB EA ; 开中断

RET

Timer0Interrupt:

PUSH DPH

PUSH DPL

PUSH ACC

MOV TH0,#0ECH

MOV TL0,#78H

CPL P1.0;输出方波 POP ACC

POP DPL

POP DPH

RETI

END

2

;SPEAKER

MAIN:

LCALL

LOOP:

LOOP1:

SETB

INITIAL:

READTONE:

附加题 EQU P2.0 ;P2.0当做蜂鸣器的输出口ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P ORG 001BH LJMP IT1P ORG 0100H MOV SP,#60H INITIAL MOV TH1,3CH MOV TL1,0B0H MOV DPTR,#TONE MOV R5,#10 CLR PT0 SETB PT1 F0 ACALL READTONE SETB TR0 SETB TR1 SETB EA LJMP SPEAK MOV TMOD,#11H SETB ET1 SETB ET0 RET CLR A MOVC A,@A+DPTR JZ LOOP MOV 20H,A MOV TH0,A INC DPTR

SPEAK:

IT0P:

IT1P:

RE:

TONE:

CLR MOVC MOV MOV INC RET CLR SETB JB CLR LJMP CPL CLR MOV MOV MOV MOV SETB RETI CLR CLR MOV MOV SETB SETB DJNZ CLR CLR CLR RETI A A,@A+DPTR 21H,A TL0,A DPTR PT0 PT1 F0,SPEAK TR0 LOOP1 SPEAKER TR0 A,20H TH0,A A,21H TL0,A TR0 TR1 EA TH1,3CH TL1,0B0H TR1 EA R5,RE EA TR1 F0 DB 0F0H,0BDH,0F2H,70H,0F3H,0CBH DB 0F4H,8BH,0F5H,0D3H,0F6H,0D4H DB 0F7H,0DDH,0F8H,5EH END,

3

;(3)计数器实验:按计数器模式和方式2工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN: MOV TMOD,#06H ;设定T0工作在方式计数器方式2

MOV TL0,#00H ;给T0设定初值

MOV TH0,#00H

SETB TR0 ;启动T0

MOV P1,TL0

HERE: AJMP HERE ;无条件跳转至HERE

END

5. 实验收获

程序不要光看不写,一定要自己写一次。最开始的时候,啥都不懂,可以抄人家的程序过来,看看每一句是干什么用的,达到什么目的,运行后有什么后果,看明白了之后,就要自己写一次,你会发现,原来看明白别人的程序很容易,但到自己写的时候却一句也写不出来,这就是差距。。。当你自己能写出来的时候,说明你就真的懂了。

通过实验,了解了MCS-51单片机中定时器/计数器的基本结构、工作原理和工作方式,掌握工作在定时器和计数器两种方式下的编程方法。由于定时器和计数器在不同的工作方式下有不同的性质,因此学会选取恰当的工作方式十分重要。

实验四 外部中断实验

1.实验目的

学习外部中断技术的基本使用方法;学习中断处理程序的编程方法。

2.实验内容

通过按键产生单脉冲作为中断源,触发外部中断,在中断处理程序中对输出信号进行反转,由P1.0口输出信号,使发光二极管点亮或熄灭。

3. 实验流程图

单片机实验报告

4. 调试程序

ORG

LJMP

ORG

LJMP

ORG

MAIN: MOV

SETB

SETB

SETB

clr

HERE: SJMP

IN0: CLR

CPL

SETB

RETI

END

0000H MAIN 0003H ;外部中断0 IN0 0030H SP,#60H ;设堆栈指针 IT0 ;跳变出发方式 EX0 EA ;开中断 p1.0 HERE EA ;关闭中断允许位 P1.0 EA

5. 实验收获

必须学会掌握调试程序的方法。不少人写程序,把代码写好了,然后一运行,不是自己想要的结果,就晕了,然后跑到论坛上发个帖子,把程序一贴,问:为什么我的程序不能正常运行?然后就等别人来给自己分析。这是一种很不好的行为,应该自己学会发现问题和学会如何解决问题。这就需要学习调试程序的方法,比如KEIL里,可以下断点啦,查看寄存器内容等等,这些都是调试程序的手段,当你发现你写的程序运行结果和你想象中不一样的时候,你可以单步,也可以下断点,然后跟踪,查看各相关寄存器内容,看看程序运行过中

是不是有什么偏差,找出影响结果的地方,改正过来。这一个过程非常重要,通过程序的排错,你可以学到的知识是书上得不到的。

通过实验,学习了外部中断技术的基本使用方法;学习中断处理程序的编程方法。并由二极管发光生动显示。

实验五 串行通信实验

1.实验目的

(1)了解MCS-51单片机串行口(UART)的结构、PC机串行通信的基本要求、串行通信的原理和数据交换过程,掌握单片机与单片机间以及单片机与PC机间进行串行通信的编程方法。

(2)掌握存储器扩展接口电路的设计方法;掌握单片机内部RAM和外部RAM之间数据传送的特点。

2.实验内容

单片机之间串行通信实验:甲机将存储在片外RAM的一组立即数(00H~0FH)通过串口发送到乙机,乙机接收到后保存到片外RAM中,串口采用工作方式1,波特率为4800。晶阵为6MH

3. 实验流程图

单片机实验报告

4. 调试程序

1 ORG 0000H ;甲机发送程序

LJMP MAINA

ORG 0023H

AJMP SA ;串口中断

ORG 0100H

MAINA: MOV SP,#60H ;设置堆栈指针

MOV SCON,#40H ;设置串行方式1

MOV TMOD,#20H ; 使用定时器T1的方式2 MOV TL1,#0FDH ;设置波特率为4800 MOV TH1,0FDH

MOV PCON,#00H ;电源控制

SETB

SETB

SETB

MOV

MOV

MOVX

MOV

SJMP

SA: CLR

CJNE

CLR

AJMP

LOOPA: INC

INC

MOVX

MOV

ENDA: RETI

END

2 ORG

LJMP

ORG

AJMP

ORG

MAINB: MOV

MOV

MOV

MOV

MOV

MOV

SETB

SETB

SETB

MOV

MOV

SJMP TR1 ;TCON控制 EA ;IE控制 ES DPTR,#0030H ;取片外RAM的一组立即数首地址 R0,#00H ;设计数初值为0 A,@DPTR ;取发送数据 SBUF,A ;启动串行口 $ ;等待中断 TI ;清发送中断标志 R0,#0FH,LOOPA ES ; 接收完关串行口中断 ENDA R0 ; 计数指针加1 DPTR ;地址指针加1 A,@DPTR ;取发送数据 SBUF,A ;启动串行口 ;中断返回 0000H ;乙机接受程序 MAINB 0023H SB ;串口中断 0100H SP,#60H ;设置堆栈指针 SCON,#50H ;设置串行方式1,允许串行接收位 TMOD,#20H ; 使用定时器T1的方式2 TL1,#0FDH ;设置波特率为4800 TH1,0FDH PCON,#00H ;电源控制 TR1 ;TCON控制 EA ;IE控制 ES DPTR,#0030H ;数据缓冲区首地址 R0,#00H ;设计数初值为0 $ ;等待中断

SB: CLR RI ;清接收中断标志

MOV A,SBUF ;取接收的数据 MOVX @DPTR,A ;接收的数据送缓存区 CJNE R0,#0FH,LOOPB ; 判别是否接收完 CLR ES ; 接收完关串行口中断

AJMP ENDB

LOOPB: INC R0 ; 计数指针加1

INC DPTR ;地址指针加1

ENDB: RETI ;中断返回

END

5. 实验收获

找到解决问题思路比找到代码更重要。我们用单片机来控制周边器件,达到我们想到的目的,这是一个题目,而如何写出一个程序,来控制器件按你想要的结果去运作,这个就是解题的思路。要写程序,就得先找到解决问题的思路,你学会找出这个解题思路,比你找到代码更为重要。不少人很喜欢找人家的代码,有的人甚至有了代码就直接复制到自己的程序中,可以说,这不是一种学习的态度,无助于你编程水平的提高。

通过实验,了解了MCS-51单片机串行口(UART)的结构、PC机串行通信的基本要求、串行通信的原理和数据交换过程,掌握单片机与单片机间以及单片机与PC机间进行串行通信的编程方法。掌握了存储器扩展接口电路的设计方法;掌握单片机内部RAM和外部RAM之间数据传送的特点。

实验六 数码管显示实验

1.实验目的

了解数码管动态显示的原理;了解用总线方式控制数码管显示。

1. 实验内容

编写程序,使数码管显示当前日期(年-月-日)。

说明:本实验仪提供了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8位段码、6位位码是由两片74LS374输出。码经MC1413或ULN2003倒相驱动后,选择相应显示位。本实验仪中 8位段码输出地址为0X004H,位码输出地址为 0X002H。此处X是由KEY/LED CS 决定,参见地址译码。做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。以便用相应的地址来访问。例如,将KEY/LED CS接到CS0上,则段码地址为08004H,位码地址为08002H。

3. 实验流程图

单片机实验报告

4. 调试程序

ORG 0000H

LJMP START

ORG 0100H

START: MOV DPTR,#TABLE1

MOV R0,#00H

MOV R1,#01H

NEXT: MOV A,R0

MOVC A,@A+DPTR

MOV P0,A ;p0决定要显示的数 MOV A,R1

MOV P3,A ;p3决定哪个数码管亮 LCALL DAY

INC R0

RL A

MOV R1,A

CJNE R1,#40H,NEXT

SJMP START

DAY: MOV R6,#4 ;延时2ms

D1: MOV R7,#248

DJNZ R7,$

DJNZ R6,D1

RET

TABLE1: DB 5BH,3FH,06H,06H,06H,06H ;段码

END

5. 实验收获

开动脑筋,运用多种方法,不断优化自己的程序。想想用各种不同方法来实现同一功能。这是一个练习和提高的过程,一个问题,你解决了,那么你再想想,能不能换种写法,也可以实现同一功能,或者说,你写出来的代码,能不能再精简一点,让程序执行效率更高,这个过程,就是一个进步的过程。很多知识和经验的获得,并不是直接写在书让你看就可以得到的,需要自己去实践,开动脑筋,经验才能得到积累,编程水平才能有所提高。

通过实验,了解数码管动态显示的原理;了解用总线方式控制数码管显示。

实验总结

单片机实验报告

更多相关推荐:
单片机实验报告

通信与信息工程学院20xx20xx学年第二学期实验报告课程名称单片机原理及应用专业班级学号学生姓名指导教师日期20xx年4月15日1实验一单片机汇编语言程序设计一实验目的1学习MedWin或Keilc51仿真软...

单片机实验报告

题目单片机组成原理实验报告学院计算机科学与工程学院专业信息安全姓名学号20xx年12月8日实验一输入输出接口编程一实验目的1掌握Keil软件的基本使用12掌握单片机汇编语言基本编程二实验内容1学习用Keil软件...

51单片机课程设计实验报告

51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机学习板2.要求:(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会…

单片机实验报告

海南大学届单片机实验报告4份论文题目学生姓名学号所在院系专业班级授课教师完成时间蜂鸣器实验实验目的1熟悉实验板中蜂鸣器工作原理掌握汇编编程控制蜂鸣器播放音乐2掌握单片机编程控制蜂鸣器发出不同频率声音的方法3了解...

单片机实验报告

单片机课程设计报告实验五系别物理与电子工程学院年级专业班级学号学生姓名指导教师设计时间常熟理工学院课程设计报告目录1题目22实验要求221实验目的222实验内容23总体设计231硬件设计232软件设计44运行结...

51单片机实验报告

08424020xx单片微型计算机原理学院班级学号姓名指导教师成绩120xx年6月08424020xx硬件实验实验一定时器中断实验实验内容fosc110592MHzT0方式2产生定时中断实现秒表功能数码管后两位...

单片机交通灯实验报告

交通灯控制系统设计院系:电子电气工程学院专业:电气自动化班级:P10电气四班成员:*************交通灯控制系统设计实验一.设计目的1.通过本次课程设计进一步熟悉和掌握单片机的结构及工作原理,巩固和加…

单片机实验报告

实验一LED流水灯一实验目的1学习单片机并口的使用方法2学习延时子程序的编写和使用3学习集成开发环境MedWin的安装与使用4学习STC单片机在线下载软件STCISP的使用二实验内容所谓流水灯就是8个发光二极管...

单片机实验报告

目录一实验一1二实验二7三实验三11四实验四15实验一定时计数器验证实验一实验目的熟悉定时计数器T0的特点学会合理选择定时方式并能根据具体情况结合软件的方式定时二实验设备及器件IBMPC机一台PROTEUS硬件...

单片机实验报告

单片机原理及应用实姓名班级指导教师验报告王?学号63120xx40204通信工程专业20xx级2班许强单片机原理及应用实验报告实验项目名称键盘数码管显示综合实验实验日期1221实验成绩实验评定标准一实验目的通过...

单片机实验报告

班级姓名学号指导教师单片机实验报告窦杰26赵英亮11050643X实验一多字节十进制加法程序设计2学时1实验目的1熟悉仿真器的软件使用环境及单片机汇编语言编程2掌握多字节十进制加法的程序设计及实现方法3练习汇编...

单片机AD转换实验报告

单片机实验报告五实验名称姓名学号班级时间AD转换张昊110404247通信2班20xx12南京理工大学紫金学院电光系一实验目的1理解AD转换的工作原理2理解掌握ADC0809的AD转换原理和并行AD转换器接口的...

单片机实验报告(42篇)