ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:189KB ,
资源ID:18001796      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18001796.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(AT89C51实验报告.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

AT89C51实验报告.docx

1、AT89C51实验报告实验一 MCS-51指令系统实验数据排序一、实验目的熟悉MCS-51指令系统,掌握程序设计方法;加深对内部存储器读写的认识;熟悉仿真开发环境,学会源程序的编写、汇编/编译、调试;熟悉单片机硬件实验系统以及良好的实验习惯培养等;学会检查结果的正确性。二、实验内容将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM,然后用冒泡法对其按从小到大的次序重新排列,并送到外部RAM 以8000H开始的地址单元内。三、实验说明有序的数列更有利于查找。本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在

2、数列的最后面。再进行下一轮比较,找出第二大数据,直到全部数据有序。四、程序流程图五、调试程序;第一步:将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM 40H49H单元中。 ORG 0000H LJMP START1 ORG 0030HSTART1: MOV R0,#40H ;设置R0为内部RAM首地址 MOV R1,#10 ;设Rl为计数器 MOV DPTR,#TAB1 LOOP1: CLR A ; 累加器清零 MOVC A,A+DPTR ;外部数据送累加器A中 MOV R0,A ;送内部RAM INC R0 ;调整内部RAM指针,指向下一个数据 INC DPTR ;调整外部

3、RAM指针 DJNZ R1,LOOP1 ;未完继续 ;第二步:排序。把片内RAM 40H49H单元中的10个无符号数逐一比较,并按从小到大的顺序依次排列在这片单元中。START2: CLR F0 ;清除交换标志位F0 MOV R3,#9 ;10个数据循环次数 MOV R0,#40H ;数据存放区首址 MOV A,R0 ;取前数L2: INC R0 MOV R2,A ;保存前数 SUBB A,R0 ;前数减后数 MOV A,R2 ;恢复前数 JC L1 ;顺序则继续比较 SETB F0 ;逆序则建立标志位 XCH A,R0 ;前数与后数交换 DEC R0 ;指向前数单元 XCH A,R0 INC

4、 R0 ;仍指向后数单元L1: MOV A,R0 ;取下一个数 DJNZ R3,L2 ;依次重复比较 JB F0,START2 ;交换后重新比较;第三步:将内部数据RAM中40H49H单元的内容传送到外部数据存储器以8000H开始的连续单元中去。;40H49H共计10个单元,需传送10次数据。将Rl作为循环计数器。具体程序如下。START3: MOV R0,#40H ;设置R0为内部RAM首地址 MOV DPTR,#8000H ;设置外部RAM首地址 MOV R1,#10 ;设Rl为计数器LOOP: MOV A,R0 ;取内部RAM数 MOVX DPTR,A ;送外部RAM INC R0 ;调

5、整内部RAM指针,指向下一个数据 INC DPTR ;调整外部RAM指针 DJNZ R1,LOOP ;未完继续 SJMP $ ;暂停TAB1: DB 09H,04H,02H,08H,00H ;数0-9表 DB 00H,06H,07H,07H,0FH END六、收获与体会 第一次用汇编语言在伟福6000环境下运行,感觉和VC6.0稍有不同,伟福6000调试界面非常丰富,有片内RAMDATE;片外RAMXDATE;代码寄存器CODE;特殊功能寄存器SFR;并且可以单步调试,自己所编的程序一目了然;伟福6000果然是好东西;冒泡法存在的不足及改进方法: 第一,在排序过程中,执行完最后的排序后,虽然数

6、据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志单元flag,将其设置为OFF,表示被排序的表示是一个无序的表。在每一排序开始时,检查此标志,若此标志为0,则结束排序;否则进行排序; 第二,当排序的数据比较多时排序的时间会明显延长。改进方法:快速排序:具体做法:任意选取某一记录(通常取第一个记录),比较其关键字与所有记录的关键字,并将关键字比它小的记录全部放在它的前面,将比它大的记录均存放在它的后面,这样,经过一次排序之后,可将所有记录以该记录所在的分界点分为两部分,然后分别对这两部分进行快速排序,直至排序完。实验二 I/O口输入输出实验一、实验目的学习P1口作为

7、输出/输入方式使用的方法;掌握延时子程序的编写和使用;二、实验内容(1)P1口做输出口,接8个发光二极管,编写程序,使发光二极管循环点亮。(2)P1.0P1.3口做输入口,接4位拨码开关;P1.4P1.7做输出口,接4个发光二极管。编写程序读取P1口低四位的开关量输入状态,输出到P1口的高四位,由二极管指示出来。三、 实验流程图(1) P1口循环点灯程序框图 (2)P1口输入输出程序框图四、调试程序(1)、P1口循环点灯程序ORG 0000HLJMP STARTORG 0030HSTART:MOV A,#01H;位初值LOOP: MOV P1,A;输出 LCALL DELAY;延时 RL A;

8、左移下一位 LJMP LOOPDELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RETEND(2)、P1口输入输出程序ORG 0000HLJMP STARTORG 0030HSTART: MOV A,P1ANL A,#0FH ;P1用作输入口时,必须置1,否则读入的数可能出错;可用半字节交换指令SWAP A再赋值给P1RR A ;P1.0P1.3口做输入口,接4位拨码开关RR A ;P1.4P1.7做输出口,接4个发光二极管RR ARR AORL A,#0FH

9、 ;P1用作输入口时,必须置1,否则读入的数可能出错MOV P1,ASJMP STARTEND五、收获与体会 这次试验做的是I/O口的输入输出,这个实验以以小见大的手法,将单片机的功能表现的淋漓尽致;只要我可以使它一个灯亮,我就可以控制全部外围设备;这样的感觉太爽了;果真是其乐无穷,“给我一个支点,我可以撬动整个地球”;P1口是准双向口。它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用为输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。实验三 定时器/计数器实验一、实验目的了解MCS-51单片机中定时器/计数器的基本结构、工作原理和工作方式,掌握工作

10、在定时器和计数器两种方式下的编程方法。二、实验内容(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灯上显示出来。三、实验说明1、关于内部计数器的编程主要

11、是定时常数的设置和有关控制寄存器的设置。内部计数器在单片机中主要有定时器和计数器两个功能。本实验使用的是定时器。2、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。3、内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是12个振荡器周期。因为实验系统的晶振是6MHZ,本程序工作于方式2,即8位自动重装方式定时器, 定时器100us中断一次, 所以定时常数的设置可按以下方法计算:机器周期=126MHZ=2uS(256-定时

12、常数)2uS=100us定时常数=206. 然后对100us中断次数计数10000次,就是1秒钟.4、在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。四、实验流程图 主程序框图 定时中断子程序框图五、调试程序(1)、定时器实验中断方式 ORG 0000HRESET: LJMP MAIN ORG 001BH LJMP IT1P ORG 0100HMAIN: MOV SP,#60H;定义堆栈区 MOV B,#100 MOV TMOD,#10H;定时方式1 MOV TL1,#78H ;用定时器1产生10ms定时(初

13、值) MOV TH1,#0ECH ;用定时器1产生10ms定时(初值) SETB TR1;运行控制 SETB ET1;允许中断 SETB EAHERE: SJMP HEREIT1P: MOV TL1,#78H;重新负初值 MOV TH1,#0ECH DJNZ B,LOOP CPL P1.0 ;P1.0口输出周期为2s的方波信号 MOV B,#64H ;P1.0口输出周期为2s的方波信号LOOP: RETIEND(2)查询方式ORG 0000HLJMP MAIN ORG 0100HMAIN: MOV B,#64H MOV TMOD,#10H MOV TL1,#78H ;用定时器1产生10ms定时

14、 MOV TH1,#0ECH ;用定时器1产生10ms定 SETB TR1LOOP0: JBC TF1,LOOP1 AJMP LOOP0 LOOP1: MOV TL1,#78H ;用定时器1产生10ms定时 MOV TH1,#0ECH DJNZ B,LOOP0 CPL P1.0 ;P1.0口输出周期为2s的方波信号 LJMP MAIN SJMP $END(2)定时器实验(选作);蜂鸣器发出Do Re Mi Fa Sol La Si Do不同音调 ORG 0000H LJMP MAIN ORG 001BH LJMP INT1 ORG 0030HMAIN: MOV SP,#30H MOV TMOD

15、,#10H ;设T1工作方式1 MOV IE,#88H ;允许中断LOOP1: MOV 40H,#00H ;简谱码指针清0LOOP2: MOV A,40H MOV DPTR,#TABLE1 MOVC A,A+DPTR ;取简谱码 MOV R1,A JZ FINISH ;简谱码是00H,转移 ANL A,#0FH MOV R2,A MOV A,R1 SWAP A ANL A,#0FH JNZ SING ;唱名码不是00H,转移 CLR TR1 ;唱名码是00H,则不发音 SJMP WY ;SING: DEC A ;唱名码减1 MOV 50H,A RL A MOV DPTR,#TABLE2 ;取唱

16、名码高8位 MOVC A,A+DPTR MOV TH1,A MOV 51H,A MOV A,50H RL A INC A MOVC A,A+DPTR ;取唱名法低8位 MOV TL1,A MOV 52H,A SETB TR1WY: LCALL DELAY ;调用基本单位时间(1/4拍) INC 40H SJMP LOOP2 ;取下一个简谱码FINISH: CLR TR1 SJMP LOOP1 ;重复播放 ORG 0100H ;基本单位时间子程序DELAY: MOV R4,#200LP1: MOV R5,#232 DJNZ R5,$ DJNZ R4,LP1 DJNZ R2,DELAY ;节拍数未

17、到,转移 RET ORG 0150HINT1: PUSH ACC PUSH PSW MOV TL1,52H ;重置定时器初值 MOV TH1,51H CPL P1.0 POP PSW POP ACC RETI ORG 0200HTABLE1: DB 42H,53H,62H,73H,84H ;简谱码表;高4位唱名码;低4位节拍码 DB 93H,0A4H,43H DB 00H ORG 0250HTABLE2: DW 0FD82H,0FDC8H,0FE06H ;唱名码表 DW 0FE22H,0FE56H,0FE85H DW 0FE9AH,0FEB2H,0FEE4H DW 0FE03H,0FE11H,

18、0FE2BH DW 0FF42H,0FF4DH,0FF61H END(3)计数器实验 ORG 0000H LJMP MAIN ORG 0040HMAIN: MOV TMOD,#06H MOV TL0,#00H MOV TH0,#00H SETB TR0LOOP: MOV A,TL0 MOV P1,A AJMP LOOP END六、收获与体会外部事件计数脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。定

19、时器:在所规定的时间点完成某种操作,多采用系统时钟。计数器:在某种操作完成到指定程度时去执行另一种操作。应用十分广泛,电磁继电器、计数器等。实验四 外部中断实验一、实验目的学习外部中断技术的基本使用方法;学习中断处理程序的编程方法。二、实验内容通过按键产生单脉冲作为中断源,触发外部中断,在中断处理程序中对输出信号进行反转,由P1.0口输出信号,使发光二极管点亮或熄灭。三、实验电路及连线连线连接孔1连接孔21P1.0L02单脉冲输出INT0 四、实验说明中断服务程序的关键是: 1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。2.必须在中断程序中设定是否允许中断重入,即设置EXO位。本

20、例中使用了INTO中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本例的中断程序保护了PSW,ACC等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。INTO(P32)端接单次脉冲发生器。P1.0接LED灯,以查看信号反转.五、实验流程图 主程序框图 外部中断子程序框图六、调试程序 ORG 0000H LJMP MAIN ORG 0003H LJMP INTP ORG 0050HMAIN: SETB EA SETB EX0 SETB IT0 SJMP $ ORG 0080HINT

21、P: CLR EA CPL P1.0 SETB EA RETI END七、收获与体会中断服务程序的关键是:1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。2.必须在中断程序中设定是否允许中断重入,即设置EXO位。 定时器/计数器控制寄存器TCON、串行口控制寄存器SCON、中断允许寄存器IE、中断优先级寄存器IP工作方式控制寄存器TMOD、电源控制寄存器PCON实验五 串行通信实验一、实验目的(1)了解MCS-51单片机串行口(UART)的结构、PC机串行通信的基本要求、串行通信的原理和数据交换过程,掌握单片机与单片机间以及单片机与PC机间进行串行通信的编程方法。(2)掌握存储器扩

22、展接口电路的设计方法;掌握单片机内部RAM和外部RAM之间数据传送的特点。二、实验内容单片机之间串行通信实验:甲机将存储在片外RAM的一组立即数(00H0FH)通过串口发送到乙机,乙机接收到后保存到片外RAM中,串口采用工作方式1,波特率为4800。晶阵为6MH三、实验电路 甲方 乙方连线连接孔1连接孔21甲方TXD乙方RXD2甲方RXD乙方TXD3甲方GND乙方GND4KEY/LED_CSCS0四、实验说明1、8051的RXD、TXD接线柱在POD51仿真板上。2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接

23、交叉连接。五、实验框图六、调试程序;甲机发送ORG 0000H ;甲机发送程序 LJMP MAINA ORG 0023H AJMP SA ;串口中断 ORG 0100HMAINA: MOV SP,#60H ;设置堆栈指针 MOV SCON,#40H ;设置串行方式1 MOV TMOD,#20H ; 使用定时器T1的方式2 MOV TL1,#0FDH ;设置波特率为4800 MOV TH1,0FDH MOV PCON,#00H ;电源控制 SETB TR1 ;TCON控制 SETB EA ;IE控制 SETB ES MOV DPTR,#0030H ;取片外RAM的一组立即数首地址 MOV R0,

24、#00H ;设计数初值为0 MOVX A,DPTR ;取发送数据 MOV SBUF,A ;启动串行口 SJMP $ ;等待中断SA: CLR TI ;清发送中断标志 CJNE R0,#0FH,LOOPA CLR ES ; 接收完关串行口中断 AJMP ENDALOOPA: INC R0 ; 计数指针加1 INC DPTR ;地址指针加1 MOVX A,DPTR ;取发送数据 MOV SBUF,A ;启动串行口ENDA: RETI ;中断返回 END;乙机接受ORG 0000H ;乙机接受程序 LJMP MAINB ORG 0023H AJMP SB ;串口中断 ORG 0100HMAINB:

25、MOV SP,#60H ;设置堆栈指针 MOV SCON,#50H ;设置串行方式1,允许串行接收位 MOV TMOD,#20H ; 使用定时器T1的方式2 MOV TL1,#0FDH ;设置波特率为4800 MOV TH1,0FDH MOV PCON,#00H ;电源控制 SETB TR1 ;TCON控制 SETB EA ;IE控制 SETB ES MOV DPTR,#0030H ;数据缓冲区首地址 MOV R0,#00H ;设计数初值为0 SJMP $ ;等待中断SB: CLR RI ;清接收中断标志 MOV A,SBUF ;取接收的数据 MOVX DPTR,A ;接收的数据送缓存区 CJ

26、NE R0,#0FH,LOOPB ; 判别是否接收完 CLR ES ; 接收完关串行口中断 AJMP ENDBLOOPB: INC R0 ; 计数指针加1 INC DPTR ;地址指针加1ENDB: RETI ;中断返回 END七、收获与体会串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。可以将仿真板上的RXD、TXD信号接到实验

27、板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。可以用实验仪上的逻辑分析仪采样串口通信的波形可以说它是物联网中不可或缺的一部分;实验六 数码管显示实验一、实验目的了解数码管动态显示的原理;了解用总线方式控制数码管显示。二、实验内容编写程序,使数码管显示当前日期(年-月-日)。说明:本实验仪提供了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8位段码、6位位码是由两片74LS374输出。码经MC1413或ULN2003倒相驱动后,选择相应显示位。本实验仪中 8位段码输出地址为0

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

29、中 8位段码输出地址为0X004H,位码输出地址为 0X002H。此处X是由KEY/LED CS 决定,参见地址译码。做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。以便用相应的地址来访问。例如,将KEY/LED CS 接到CS0上,则段码地址为08004H,位码地址为08002H。 七段数码管的字型代码表如下表: a f b g e c d 。dp显示字形gfedcba段码001111113fh1000011006h210110115bh310011114fh4110011066h511011016dh611111017dh7000011107h811111117fh911011116fhA111011177hb11111007chC0

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

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