AT89C51实验报告.doc

上传人:大张伟 文档编号:6356282 上传时间:2020-11-01 格式:DOC 页数:20 大小:416.51KB
返回 下载 相关 举报
AT89C51实验报告.doc_第1页
第1页 / 共20页
AT89C51实验报告.doc_第2页
第2页 / 共20页
AT89C51实验报告.doc_第3页
第3页 / 共20页
AT89C51实验报告.doc_第4页
第4页 / 共20页
AT89C51实验报告.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《AT89C51实验报告.doc》由会员分享,可在线阅读,更多相关《AT89C51实验报告.doc(20页珍藏版)》请在三一文库上搜索。

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

2、一轮比较,找出第二大数据,直到全部数据有序。四、程序流程图开始交换A,B数位置设置数据区地址设置数据区长度清除交换标志当前地址取数A地址加1当前地址取数B结束AB?设置交换标志数据比较完全部有序?是否否是是否开始设置块的源地址设置块的目标地址设置移动长度从源地址取数保存到目标地址中源地址加1目标地址加1是否移动完结束是否五、调试程序;第一步:将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM 40H49H单元中。 ORG 0000H LJMP START1 ORG 0030HSTART1: MOV R0,#40H ;设置R0为内部RAM首地址 MOV R1,#10 ;设Rl为计数

3、器 MOV DPTR,#TAB1 LOOP1: CLR A ; 累加器清零MOVC A,A+DPTR ;外部数据送累加器A中MOV R0,A ;送内部RAM INC R0 ;调整内部RAM指针,指向下一个数据 INC DPTR ;调整外部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

4、,A ;保存前数 SUBB A,R0 ;前数减后数 MOV A,R2 ;恢复前数 JC L1 ;顺序则继续比较 SETB F0 ;逆序则建立标志位 XCH A,R0 ;前数与后数交换 DEC R0 ;指向前数单元 XCH A,R0 INC R0 ;仍指向后数单元L1: MOV A,R0 ;取下一个数 DJNZ R3,L2 ;依次重复比较 JB F0,START2 ;交换后重新比较;第三步:将内部数据RAM中40H49H单元的内容传送到外部数据存储器以8000H开始的连续单元中去。;40H49H共计10个单元,需传送10次数据。将Rl作为循环计数器。具体程序如下。START3: MOV R0,#

5、40H ;设置R0为内部RAM首地址 MOV DPTR,#8000H ;设置外部RAM首地址 MOV R1,#10 ;设Rl为计数器LOOP: MOV A,R0 ;取内部RAM数 MOVX DPTR,A ;送外部RAM INC R0 ;调整内部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调试界面非常丰

6、富,有片内RAMDATE;片外RAMXDATE;代码寄存器CODE;特殊功能寄存器SFR;并且可以单步调试,自己所编的程序一目了然;伟福6000果然是好东西;冒泡法存在的不足及改进方法: 第一,在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志单元flag,将其设置为OFF,表示被排序的表示是一个无序的表。在每一排序开始时,检查此标志,若此标志为0,则结束排序;否则进行排序; 第二,当排序的数据比较多时排序的时间会明显延长。改进方法:快速排序:具体做法:任意选取某一记录(通常取第一个记录),比较其关键字与所有记录的关键字,并将

7、关键字比它小的记录全部放在它的前面,将比它大的记录均存放在它的后面,这样,经过一次排序之后,可将所有记录以该记录所在的分界点分为两部分,然后分别对这两部分进行快速排序,直至排序完。实验二 I/O口输入输出实验一、实验目的学习P1口作为输出/输入方式使用的方法;掌握延时子程序的编写和使用;二、实验内容(1)P1口做输出口,接8个发光二极管,编写程序,使发光二极管循环点亮。(2)P1.0P1.3口做输入口,接4位拨码开关;P1.4P1.7做输出口,接4个发光二极管。编写程序读取P1口低四位的开关量输入状态,输出到P1口的高四位,由二极管指示出来。三、 实验流程图(1) P1口循环点灯程序框图(2)

8、P1口输入输出程序框图四、调试程序(1)、P1口循环点灯程序ORG 0000HLJMP STARTORG 0030HSTART:MOV A,#01H;位初值LOOP: MOV P1,A;输出 LCALL DELAY;延时 RL A;左移下一位 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

9、用作输入口时,必须置1,否则读入的数可能出错;可用半字节交换指令SWAP A再赋值给P1RR A ;P1.0P1.3口做输入口,接4位拨码开关RR A ;P1.4P1.7做输出口,接4个发光二极管RR ARR AORL A,#0FH ;P1用作输入口时,必须置1,否则读入的数可能出错MOV P1,ASJMP STARTEND五、收获与体会这次试验做的是I/O口的输入输出,这个实验以以小见大的手法,将单片机的功能表现的淋漓尽致;只要我可以使它一个灯亮,我就可以控制全部外围设备;这样的感觉太爽了;果真是其乐无穷,“给我一个支点,我可以撬动整个地球”;P1口是准双向口。它作为输出口时与一般的双向口使

10、用方法相同。由准双向口结构可知当P1口用为输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。实验三 定时器/计数器实验一、实验目的了解MCS-51单片机中定时器/计数器的基本结构、工作原理和工作方式,掌握工作在定时器和计数器两种方式下的编程方法。二、实验内容(1)定时器实验:在使用6MHz晶振的条件下,用定时器1产生10ms定时,由P1.0口输出周期为2s的方波信号,并通过发光二极管指示P1.0的输出波形。(2)定时器实验(选作):在使用6MHz晶振的条件下,用端口输出不同频率的脉冲(不同频率的脉冲用定时器实现),控制蜂鸣器发出“Do Re Mi Fa Sol La Si

11、 Do”不同音调(这些音调的频率可以参考书中P142的表6-3)(3)计数器实验:按计数器模式和方式2工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。三、实验说明1、关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。内部计数器在单片机中主要有定时器和计数器两个功能。本实验使用的是定时器。2、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。3、内部计数器用作定时器时,是对机器周期

12、计数。每个机器周期的长度是12个振荡器周期。因为实验系统的晶振是6MHZ,本程序工作于方式2,即8位自动重装方式定时器, 定时器100us中断一次, 所以定时常数的设置可按以下方法计算:机器周期=126MHZ=2uS(256-定时常数)2uS=100us定时常数=206. 然后对100us中断次数计数10000次,就是1秒钟.4、在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。四、实验流程图 主程序框图定时中断子程序框图五、调试程序(1)、定时器实验中断方式 ORG 0000HRESET: LJMP MAIN

13、 ORG 001BH LJMP IT1P ORG 0100HMAIN: MOV SP,#60H;定义堆栈区 MOV B,#100 MOV TMOD,#10H;定时方式1 MOV TL1,#78H ;用定时器1产生10ms定时(初值) 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口输出周期

14、为2s的方波信号LOOP: RETIEND(2)查询方式ORG 0000HLJMP MAIN ORG 0100HMAIN: MOV B,#64H MOV TMOD,#10H MOV TL1,#78H ;用定时器1产生10ms定时 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)定时器实验

15、(选作);蜂鸣器发出Do Re Mi Fa Sol La Si Do不同音调 ORG 0000H LJMP MAIN ORG 001BH LJMP INT1 ORG 0030HMAIN: MOV SP,#30H MOV TMOD,#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

16、A,#0FH JNZ SING ;唱名码不是00H,转移 CLR TR1 ;唱名码是00H,则不发音 SJMP WY ;SING: DEC A ;唱名码减1 MOV 50H,A RL A MOV DPTR,#TABLE2 ;取唱名码高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

17、 SJMP LOOP1 ;重复播放 ORG 0100H ;基本单位时间子程序DELAY: MOV R4,#200LP1: MOV R5,#232 DJNZ R5,$ DJNZ R4,LP1 DJNZ R2,DELAY ;节拍数未到,转移 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 00

18、H ORG 0250HTABLE2: DW 0FD82H,0FDC8H,0FE06H ;唱名码表 DW 0FE22H,0FE56H,0FE85H DW 0FE9AH,0FEB2H,0FEE4H DW 0FE03H,0FE11H,0FE2BH DW 0FF42H,0FF4DH,0FF61H END(3)计数器实验 ORG 0000HLJMP MAINORG 0040HMAIN: MOV TMOD,#06HMOV TL0,#00HMOV TH0,#00HSETB TR0LOOP:MOV A,TL0MOV P1,AAJMP LOOPEND六、收获与体会外部事件计数脉冲由P3.4引入定时器T0。单片机

19、在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。定时器:在所规定的时间点完成某种操作,多采用系统时钟。计数器:在某种操作完成到指定程度时去执行另一种操作。应用十分广泛,电磁继电器、计数器等。实验四 外部中断实验一、实验目的学习外部中断技术的基本使用方法;学习中断处理程序的编程方法。二、实验内容通过按键产生单脉冲作为中断源,触发外部中断,在中断处理程序中对输出信号进行反转,由P1.0口输出信号,使发光二极管点亮或熄灭。三、实验电路及连线连

20、线连接孔1连接孔21P1.0L02单脉冲输出INT0 四、实验说明中断服务程序的关键是: 1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。2.必须在中断程序中设定是否允许中断重入,即设置EXO位。本例中使用了INTO中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本例的中断程序保护了PSW,ACC等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。INTO(P32)端接单次脉冲发生器。P1.0接LED灯,以查看信号反转.五、实验流程图 主程序框图外部中断子程序框图六、调

21、试程序 ORG 0000HLJMP MAINORG 0003HLJMP INTPORG 0050HMAIN: SETB EASETB EX0SETB IT0SJMP $ORG 0080HINTP: CLR EA CPL P1.0SETB EARETIEND七、收获与体会中断服务程序的关键是:1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。2.必须在中断程序中设定是否允许中断重入,即设置EXO位。定时器/计数器控制寄存器TCON、串行口控制寄存器SCON、中断允许寄存器IE、中断优先级寄存器IP工作方式控制寄存器TMOD、电源控制寄存器PCON实验五 串行通信实验一、实验目的(1)了

22、解MCS-51单片机串行口(UART)的结构、PC机串行通信的基本要求、串行通信的原理和数据交换过程,掌握单片机与单片机间以及单片机与PC机间进行串行通信的编程方法。(2)掌握存储器扩展接口电路的设计方法;掌握单片机内部RAM和外部RAM之间数据传送的特点。二、实验内容单片机之间串行通信实验:甲机将存储在片外RAM的一组立即数(00H0FH)通过串口发送到乙机,乙机接收到后保存到片外RAM中,串口采用工作方式1,波特率为4800。晶阵为6MH三、实验电路 甲方 乙方连线连接孔1连接孔21甲方TXD乙方RXD2甲方RXD乙方TXD3甲方GND乙方GND4KEY/LED_CSCS0四、实验说明1、

23、8051的RXD、TXD接线柱在POD51仿真板上。2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。五、实验框图YNY结束Y1号机请求发送?等待1号机联络开始设置波特率启动定时器1设置串口工作方式NN指针初始化校验和清0接收1个数据字节求和校验比较校验和2号机接收正确?数据块接收完毕?发送应答信号发送错误标志六、调试程序;甲机发送ORG 0000H ;甲机发送程序 LJMP MAINA ORG 0023H AJMP SA ;串口中断 ORG 0100HMAINA: MOV SP,#60H ;设置堆栈指

24、针 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,#00H ;设计数初值为0 MOVX A,DPTR ;取发送数据 MOV SBUF,A ;启动串行口 SJMP $ ;等待中断SA: CLR TI ;清发送中断标志 CJNE R0,#0FH,LOOPA CLR ES

25、; 接收完关串行口中断 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: MOV SP,#60H ;设置堆栈指针 MOV SCON,#50H ;设置串行方式1,允许串行接收位 MOV TMOD,#20H ; 使用定时器T1的方式2 MOV TL1,#0FDH ;设置波特率为4800 MOV

26、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 ;接收的数据送缓存区 CJNE R0,#0FH,LOOPB ; 判别是否接收完 CLR ES ; 接收完关串行口中断 AJMP ENDBLOOPB: INC R0 ; 计数指针加1 INC DPTR ;地址指针加1ENDB: RETI ;中断返

27、回 END七、收获与体会串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。可以用实验仪上的逻辑分析仪采样串口通信的波形可以说它是物联网中不可或缺的一部分;实验六 数码管显示实验一、实验目的了

28、解数码管动态显示的原理;了解用总线方式控制数码管显示。二、实验内容编写程序,使数码管显示当前日期(年-月-日)。说明:本实验仪提供了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8位段码、6位位码是由两片74LS374输出。码经MC1413或ULN2003倒相驱动后,选择相应显示位。本实验仪中 8位段码输出地址为0X004H,位码输出地址为 0X002H。此处X是由KEY/LED CS 决定,参见地址译码。做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。以便用相应的地址来访问。例如,将KEY/LED CS接

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

30、将KEY/LED CS 接到CS0上,则段码地址为08004H,位码地址为08002H。 七段数码管的字型代码表如下表: a f b g e c d 。dp显示字形gfedcba段码001111113fh1000011006h210110115bh310011114fh4110011066h511011016dh611111017dh7000011107h811111117fh911011116fhA111011177hb11111007chC011100139hd10111105ehE111100179hF111000171h五、程序框图六、调试程序 ORG 0000H LJMP MAIN

31、ORG 0040HMAIN: MOV DPTR,#TIME MOV R4,#06H MOV R5,#00100000BNEXT: MOV A,#00H MOVC A,A+DPTR LCALL TORAM1;存入ROM中,并显示 INC DPTR DJNZ R4,NEXT;显示下一个 LJMP MAINTORAM1:PUSH DPH;压栈定义的符号 PUSH DPL MOV DPTR,#8004H MOVX DPTR,A ;段码 LCALL TORAM2;调用位码显示 LCALL DELAY POP DPL POP DPH RETTORAM2: PUSH DPH;压栈段码 PUSH DPL MO

32、V DPTR,#8002H MOV A,R5;位码 MOVX DPTR,A RR A MOV R5,A POP DPL POP DPH RET;延迟DELAY: MOV R7,#02HDELAY1:MOV R6,#0FFH DJNZ R6,$ DJNZ R7,DELAY1 RETTIME: DB 06H,06H,06H,06H,06H,07H END七、收获与体会动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示8位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显示的时间大约在1ms到4ms之间,所以为了保证正确显示,我必须每隔1ms,就得刷新一个数

33、码管。而这刷新时间我们采用单片机的定时/计数器T0来控制,每定时1ms对数码管刷新一次,T0采用方式2。在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。以下是一些经验:(1) 学习单片机没有捷径,别指望两三天就学会,要坚持不懈,重在积累。 (2) 别崇拜高手,别相信天才,大部分人都不是天才(相信你也不是)! (3) 单片机是一门应用性和实践性很强的学科,要多动手,多做实验。 (4) 要学会参考别人的程序,减少自己琢磨的时间,迅速提高自己的编程能力。 (5) 碰到问题可以借助网络来搜寻答案和对自己有帮助的问题,可以大大减少你的开发时间。 (6) 要多交一些朋友,多交流。技术是靠不断的积累和交流才会进步的,封闭自守只会更加落后。

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1