单片机的实验报告.doc_第1页
单片机的实验报告.doc_第2页
单片机的实验报告.doc_第3页
单片机的实验报告.doc_第4页
单片机的实验报告.doc_第5页
免费预览已结束,剩余21页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机实验报告一、 实验目的及要求:(1) 学习Keil C51集成开发工具的操作及调试程序的方法,包括:仿真调试与脱机运行间的切换方法;(2) 熟悉TD-51单片机系统板及实验系统的结构及使用;(3) 进行MCS51单片机指令系统软件编程设计与硬件接口功能设计;(4) 学习并掌握Keil C51与Proteus仿真软件联机进行单片机接口电路的设计与编程调试;(5) 完成指定MCS51单片机综合设计题二、 实验运行环境软件环境:KEIL uv2, PROTEUS7.4硬件环境:PC机, TD-51系统板三、 软件部分实验一清零程序与拆字程序设计(1) 清零程序:把7000H-7FFFH的内容清零。(2) 拆字程序:把7000H的内容拆开,高位送7001H低位,低位送7002H低位。7001H,7002H高位清零,一般本程序用于把数据送显示缓冲区时用。a) 程序流程图 图1 清零程序 图2 拆字程序b) 实验参考程序清零程序:ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV A, #00H MOV DPTR,#7000H ;赋给首地址 MOV R1,#100H ;循环次数,完成对7000H-70FFH的置一 MOV R2, #10HLOOP1: MOVX DPTR,A INC DPTR DJNZ R1,LOOP1 DJNZ R2,LOOP1 ; 因为都是先减一之后再做比较,所以0FFH、0FH个数要100H、10H次 SJMP $ END 拆字程序: ORG 0000H LJMP MAIN ORG 1000HMAIN: MOV DPTR,#7000H MOVX A,DPTR ;赋值 MOV R0,A ANL A,#0F0H ;得到高四位 SWAP A INC DPTR MOVX DPTR,A ;高位给7001H MOV A,R0 ANL A,#0FH ;得到低四位 INC DPTR MOVX DPTR,A ;低位给7002H SJMP $ END实验二拼字程序与数据传送程序设计(1) 拼字程序:把 7000H,7001H 的低位相拼后送人 7002H,一般本程序 用于把显示缓冲区的 数据取出拼装成个字节。(2) 数据传输子程序:把(R2,R3)源 RAM 区首址内的(R6,R7)个字节 数据,传送到(R4,R5) 目的 RAM 区。 a) 程序流程图图3 拼字程序 图4数据传输子程序b) 实验参考程序拼字程序ORG 0000H LJMP MAIN3ORG 1000HMAIN3: MOV DPTR,#7000HMOVX A,DPTR ;原值给A ANL A,#0FH ;取低四位 SWAP A ;将原低四位移到高四位 MOV B,AINC DPTRMOVX A,DPTR ;再取7001H的值 ANL A,#0FH ;取低四位 ADD A,B INC DPTR MOVX DPTR,A ;获得结果 SJMP $END 数据传输程序 ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV R2,#10H ;源RAM区的第一个地址 MOV R3,#19H ;源RAM区的第二个地址 MOV R4,#22H ;目的RAM区的第一个地址 MOV R5,#2BH ;目的RAM区的第二个地址 MOV R6,#02H ;第一次传输的字节数据个数 MOV R7,#03H ;第二次传输的字节数据个数 L1: MOV B,R2 MOV R0,B MOV A,R0 MOV B,R4 MOV R1,B MOV R1,A INC R2 INC R4 DJNZ R6,L1 ;完成第一路的数据传输L2: MOV B,R3 MOV R0,B MOV A,R0 MOV B,R5 MOV R1,B MOV R1,A INC R3 INC R5 DJNZ R7,L2 ;完成整个的数据传输 SJMP $ END实验三排序程序与散转程序设计(1) 散转程序:根据 8032 片内 20H 中的内容(00 或 01 或 02 或 03)进行散转。(2) 排序子程序:其功能为用冒泡法将内部 RAM 中几个单元字节无符号的正整数,按从小到大的次序重新排列。a) 程序流程图返回主程序R1=R1+1,内循环对于n个数完成n-1次外循环即结束排序直到后面的数全与R0比较完成,即完成一次外循环R0=R0+1初始化,赋给起始地址指针R0,R1=R0+1取R0和R1进行对比若R0R1,则交换位置,否则,保持不变入口 图5 散转程序 图6 排序子程序b) 实验参考程序散转程序: ORG 0000H LJMP MAIN ORG 0100HMAIN : MOV A,#01H MOV R2,A RL AADD A,R2MOV DPTR,#PTAB JMP A+DPTRPTAB: LJMP PM0 LJMP PM1 LJMP PM2 LJMP PM3 PM0: 程序体0 PM1: 程序体1PM2: 程序体2PM3: 程序体3 SJMP $ END冒泡排序子程序: ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0,#10H ;初始地址 MOV R7,#04H ;外循环次数(参与比较的数的个数-1) ACALL MAOP SJMP $ MAOP: L1: MOV A,R0 ;赋给初始地址 MOV R1,A INC R1 ;取第二个数的地址 MOV A,R7MOV R6,A L2: MOV A,R0 CLR C SUBB A,R1 ;两数进行比较 JC L3 ;前数小于后数则保持位置不变 MOV A,R0 ;否则,交换位置 XCH A,R1 MOV R0,A L3: INC R1 DJNZ R6,L2 ;内循环是否完成 INC R0 DJNZ R7,L1 ;外循环是否完成 RET ;返回主程序 END四、 软件部分设计总结本次软件部分的设计主要运用到了编程软件KEIL uv2,可以方便的对程序进行模拟调试和观察片内或片外存储区的变量变化情况。另外熟悉运用KEIL uv2可以适当简化程序的编写。例如:对于片内或片外存储区域的任何地址赋值。在本次的软件实验中,有很多都需要我们对某部分的地址进行赋值,假如在程序中实现这些赋值的话,会一定程度地导致程序的冗长。而在KEIL uv2中,只要在编辑框左下方的命令行中输入如“E CHAR D:30H= 11H,22H,33H,44H,55H”等,则可以改变片内存储区中从30H开始的五个地址的值。同样,在对程序进行调试时候,也可以打开存储器观察窗口,在该窗口的“Address:”栏中输入“D:30H”或“X:7000H”,则可以显示片内RAM30H后或片外7000H后的内容。其中,D表示显示片内存储器的内容,X表示显示片外部数据存储器的内容,C表示显示代码存储器的内容,I表示显示内部间接寻址RAM的内容。另外,对于KEIL uv2在调试运行过程中,还可以很方便的通过设置断点或是单步运行等方式来查看程序的正确性。五、 硬件部分实验四 静态存储器扩展实验1、 基础部分:编写实验程序,在单片机内部一段连续的RAM空间30H-3FH中写入初值00H-0FH,然后将这16个数据传送到RAM的0000H-000FH中最后将外部RAM的0000H-000FH空间的内容传送到片内RAM的40H-4FH单元中。若发生传输错误,则LED灯闪烁。a) 实验原理图 图7 扩展存储器实验接线路图注:连接线路图时,若使用PIT+实验箱,需将BE3-BE0接GNDb) 实验步骤1. 按原理图7连接线路2. 按实验内容编写实验程序,经编译、链接无误后启动调试3. 打开存储器观察窗口,在存储器#1的Address中输入D:0x30,在存储器#2的Address中输入X:0x0000来监视存储器空间。4. 可单步运行程序,观察存储器内容的变化或设置断点再运行程序。c) 实验参考程序 ORG 0000HAJMPMAINMAIN:MOV R0,#30H;将00H-0FH写入RAM内30H-3FH MOVA,#00HMOVR1,#10HL1:MOVR0,AINCR0 INCADJNZR1,L1MOVR1,#10H;写入外部RAM0000H-000FH中 MOVDPTR,#0000HMOVR0,#30HL2:MOVA,R0MOVXDPTR,A CJNE DPTR,A,SS ;判断传送正确,若错,则转入闪烁程序INCDPTR ;传送准确,则继续下一组数据的传送INCR0DJNZR1,L2MOVR1,#10H;写入内部RAM 40H-4FH中 MOVDPTR,#0000HMOVR0,#40HL3:MOVXA,DPTRMOVR0,A CJNE R0,A,SS ;判断传送正确,若错,则转入闪烁程序INCDPTR ;传送准确,则继续下一组数据的传送INCR0DJNZR1,L3SS: ;闪烁程序SETB P1.0 ;置位P1.0(P1.0与LED灯相连) ACALL DELAY ;调用延迟程序 CLR P1.0 ;复位P1.0(使灯灭) ACALL DELAY LJMP SS ;形成灯的闪烁SJMP$DELAY: MOV R5,#08H ;延迟程序(调节R5,R6的值可以改变闪烁快慢) L7: MOV R6,#0FAHL8: DJNZ R6,L8 DJNZ R5,L7 RETEND2、 提高部分:FLASH存储器扩展实验编写实验程序对FLASH ROM进行操作,要求对FLASH的读/写、数据保护功能、芯片擦除等特性进行验证。带保护写入0-127共128个数,不带保护写入0x55共128个数。a) 实验原理图 图8 FLASH ROM 参考接线图b) 实验步骤1. 按原理图8连接线路图2. 编写实验程序,编译、链接无误后启动调试3. 打开存储器观察窗口,在存储器#1的Address中输入X:0x0000,查看存储器的内容4. 带保护写Flash,写入内容0-7F,观察存储器窗口5. 不带保护写Flash,观察存储器窗口,正确情况下数据不会改变6. 除去保护,然后不带保护写入Flash,观察存储器窗口,此时应显示128个557. 将整个Flash擦除,观察存储器窗口,内容全变为FF,表示已被擦除8. 通过一步一步实验,了解Flash特性,实验结束,按复位键退出c) 实验参考流程图: 图9 软件数据保护命令序列 图10 芯片擦除命令序列实验五 数字量输入输出实验1、 基础部分:数字量的输入输出P1口是8位准双向口,每一位均可独立定义为输入输出。编写实验程序,将P1口的低4 位定义为输出,高4位定义为输入,数字量从P1口的高4位输入,从P1口的低4位输出控制发光二极管的亮灭。a) 实验原理图 图11 实验接线图b) 实验步骤1. 按图11接好试验线路图,图中圆圈表示不要通过排线连接2. 编写实验程序,编译链接无误后进入调试状态3. 运行实验程序,观察实验现象,验证程序正确性4. 按复位键,结束程序运行,退出调试状态c) 实验参考程序 ORG 0000H LJMP MAIN ORG 0100H MAIN : MOV P1,#0FFH ;初始化 MOV A,P1 ;将输入写进累加器A SWAP A ANL A,#0FH MOV P1,A ;输出显示 LJMP MAIN ;循环不断检测P1口输入端的新状态 SJMP $ ENDd) PROTEUS 仿真结果 图12 数字量输入输出2、 提高部分:LED灯控制(使用8255接口芯片)使用汇编语言编程,功能为:通过开关实现LED灯工作方式即时控制,完成LED开关控制显示和LED灯左循环、右循环、间隔闪烁功能。a) 实验参考程序ORG 0000HLJMP MAINORG 0100HMAIN: MOV TMOD, #60H ;设置T1为模式2,外部计数方式 MOV TH1,#0FFH ;T1计数器赋初值 MOV TL1,#0FFH MOV DPTR,#7300H MOV A,#80H MOVX DPTR,A MOV DPTR,#7100H SETB TR1 ;开启计数器LEFT: MOV R0,#08H ;左循环 MOV A,#01H A1: MOVX DPTR,A LCALL DELAY RL A DJNZ R0,A1 JBC TF1,RIGHT ;查询T1溢出标志,TF1=1时转移 JMP LEFTRIGHT: MOV R0,#08H ;右循环 MOV A,#80H A2: MOVX DPTR,A LCALL DELAY RR A DJNZ R0,A2 JBC TF1,SHANSHUO ;查询T1溢出标志,TF1=1时转移 JMP RIGHTSHANSHUO: MOV R0,#08H ;闪烁 LP1: MOV A,#55H MOVX DPTR,A LCALL DELAY MOV A,#0AAH MOVX DPTR,A LCALL DELAY DJNZ R0,LP1 JBC TF1, LEFT ;查询T1溢出标志,TF1=1时转移 JMP SHANSHUO DELAY: MOV R1,#0FFH DEL1: MOV R2,0FFH DEL2: DJNZ R2, DEL2 DJNZ R1,DEL1 RET SJMP $ END 设计思路:利用计数器T1外部技术方式,当外部输入脉冲引脚上出现电平负跳变时,T1计数器加一,溢出标志TF1置一,然后改变LED灯亮的方式,同时,将标志位TF1复位,进入下一轮的计数溢出等待。因此,而形成三种亮灯方式的自动循环。若是用开关实现三种方式的亮灯,则需要在最开始和每种亮灯之后通过8255对开关状态进行采集并进行判断。因此事先还要先设置好哪个开关的闭合表示哪种亮灯方式。b) 实验电路原理图以及仿真结果 图13 LED循环显示实验六 定时器/计数器实验1、 基础部分: 使用定时器0与定时器1进行定时,在P1.0引脚上输出方波信号,通过示波器观察波形输出,测量并记录方波周期a) 实验参考程序 ORG 0000HLJMP MAIN ORG 000BH LJMP ZD ORG 0030H ;主程序入口MAIN:MOV TMOD,#01H ;写入T0控制字, 16位定时方式 MOV TL0, #0B0H ;写入T0定时100毫秒初值 MOV TH0, #3CH MOV IE, #82H SETB TR0 ;启动T0DD: SJMP DD ;循环等待ZD: CPL P1.0 ;T0中断服务程序,取反P1.0 MOV TL0, #18H ;重装T0定时初值 MOV TH0, #0FCH RETI ENDb) 实验原理图示波器单 P10片机 图14 原理接线图c) 程序流程图T0的中断入口开始 现场保护定时器T0初始化取反P1,产生方波 踏步循环等待 现场恢复 图15 主程序中断返回 图 16 中断子程序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亮一直循环下去。a) 实验参考程序ORG 0000HLJMP MAINORG 001BH ;中断地址入口LJMP SERVEORG 0100HMAIN: MOV SP,#50H ;设置堆栈指针 MOV TMOD, #10H ;定时器T1初始化 MOV TL1,#00H MOV TH1,#4CH SETB TR1 ;启动定时器 SETB ET1 ;允许T1中断 SETB EA MOV DPTR,#TABLE MOV R0,#00H MOV R1,#00HL1: MOV A,R1 MOVC A,A+DPTR ;选择某秒钟对应的亮灯的方式 MOV P1,A AJMP L1SERVE: PUSH ACC ;中断服务程序 INC R0 MOV A,R0 CJNE A,#20,NEXT MOV R0,#00H INC R1 MOV A,R1 ANL A,#07H MOV R1,ANEXT: POP ACC RETITABLE: DB 0FAH,0F5H,0AFH,05FH,0AAH,55H,00H,0FFHENDb) 实验原理图 P10单 P11片 P12机 P13 P14 P15 P16 P17L1L2L3L4 LED灯L5L6L7L8 图17 原理接线图c) 仿真接线图 图18 仿真接线图实验七 /、/转换实验1、 基础部分:编写实验程序,将ADC 单元中提供的0V5V 信号源作为ADC0809 的模拟输入量,进行A/D 转换,转换结果通过变量进行显示。a) 实验原理图 图19 AD转换实验接线图 图20 转换单元b) 实验步骤 1. 按图19 连接实验线路,AD 的时钟线需要与实验平台中的系统总线单元的CLK 相连;2. 编写实验程序,经编译、链接无误后装入系统,启动调试;3. 将变量ADV 添加到变量监视窗口中;4. 在Delay()处行设置断点,使用万用表测量ADJ 端的电压值,计算对应的采样值,然后运行程序;5. 程序运行到断点处停止运行,查看变量窗口中ADV 的值,与计算的理论值进行比较,看是否一致(可能稍有误差,相差不大);6. 调节电位器,改变输入电压,比较ADV 与计算值,反复验证程序功能;制表并记录结果。c) 实验参考程序#include SST89x5x4.h#include Absacc.h #define STARTAD XBYTE0x7F00#define ADRESULT XBYTE0x7F08sbit ADBUSY = P33;void Delay()unsigned char i ;for(i=0; i100; i+); unsigned char AD0809(void) unsigned char result; STARTAD = 0; /启动AD while(ADBUSY = 1);/等待转换结束Delay(); result = ADRESULT;return result; /返回转换结果void main(void)unsigned char ADV;/变量while(1)ADV = AD0809();Delay();/设置断点2、 提高部分:小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。a) 实验参考程序 ORG 0000HLJMP MAIN ORG 0100HMAIN: A0: MOV P1,#0FH MOV C,90H JNC FANG MOV C,91H MOV DPTR,#7FFFH MOV A,#00H MOVX DPTR,A JNC JU MOV C,92H JNC SAN JMP A0 FANG: MOV P1,#1FH ;方波LCALL FANGBO JMP A0 JU: MOV P1,#2FH ;锯齿波 LCALL JUCHI JMP A0 SAN: MOV P1,#3FH ;三角波 LCALL SANJIAO JMP A0FANGBO: MOV DPTR,#7FFFH MOV A,#0FFH MOVX DPTR,A LCALL DELAY MOV A,#00H MOVX DPTR,A LCALL DELAY RETJUCHI: MOV DPTR,#7FFFH MOV A,#00H A1:MOVX DPTR,A LCALL DELAY INC A CJNE A,#00H,A1 RETSANJIAO: MOV DPTR,#7FFFH MOV A,#00H A2:MOVX DPTR,A LCALL DELAY INC A CJNE A,#0FFH,A2 A3:DEC A LCALL DELAY MOVX DPTR,A CJNE A,#00H,A3RETDELAY: MOV R6,#0FH DEL1:MOV R7,#0FFH DJNZ R7,$ DJNZ R6,DEL1 RET SJMP $ ENDb) 实验线路以及仿真接线 图21 AD、DA综合应用仿真接线实验八 串行通讯实验利用单片机实验系统,实现与PC机通讯。功能要求:将从实验系统键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到单片机实验系统的数码管上。a) 实验参考程序ORG 0000HAJMP MAINORG 0023HAJMP URTORG 0030HMAIN: MOV P1,#00HLCALL URTINITSTART: MOV P0,#0FHMOV A,P0CPL AANL A,#0FHJZ STARTLCALL DELAYMOV P0,#0FHMOV A,P0ANL A,#0FHMOV R7,AMOV P0,#0F0HMOV A,P0ANL A,#0F0HORL A,R7CJNE A,#0EEH,K1MOV A,#30HMOV SBUF,AJNB TI,$CLR TIK1: CJNE A,#0DEH,K2MOV A,#31HMOV SBUF,AJNB TI,$CLR TIK2: CJNE A,#0BEH,K3MOV A,#39HMOV SBUF,AJNB TI,$CLR TIKA: CJNE A,#0BBH,KB MOV A,#32HMOV SBUF,AJNB TI,$CLR TIK3: CJNE A,#7EH,K4MOV A,#33HMOV SBUF,AJNB TI,$CLR TIK4: CJNE A,#0EDH,K5MOV A,#34HMOV SBUF,AJNB TI,$CLR TIK5: CJNE A,#0DDH,K6MOV A,#35HMOV SBUF,AJNB TI,$CLR TIK6: CJNE A,#0BDH,K7MOV A,#36HMOV SBUF,AJNB TI,$CLR TIK7: CJNE A,#7DH,K8MOV A,#37HMOV SBUF,AJNB TI,$CLR TIK8: CJNE A,#0EBH,K9MOV A,#38HMOV SBUF,AJNB TI,$CLR TIK9: CJNE A,#0DBH,KAMOV A,#41HMOV SBUF,AJNB TI,$CLR TIKB: CJNE A,#7BH,KCMOV A,#42HMOV SBUF,AJNB TI,$CLR TIKC: CJNE A,#0E7H,KDMOV A,#43HMOV SBUF,AJNB TI,$CLR TIKD: CJNE A,#0D7H,KEMOV A,#44HMOV SBUF,AJNB TI,$CLR TIKE: CJNE A,#0B7H,KFMOV A,#45HMOV SBUF,AJNB T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论