单片机实验一
- 格式:doc
- 大小:2.29 MB
- 文档页数:11
多字节无符号数加法程序实验程序: 设从片内RAM30H 单元和40H 单元有两个2字节数,把它们相加,结果放于30H 单元开始的位置处(设结果不溢出)。
处理过程: 用R0作指针指向30H 单元,用R1作指针指向40H 单元,用R2为循环变量,初值为2,在循环体中用ADDC 指令把R0指针指向的单元与R1指针指向的单元相加,加得的结果放回R0指向的单元,改变R0、R1指针指向下一个单元,循环2次,在第一次循环前应先将CY 清零。
程序流程图和程序如下:1、编写程序: ORG 0000H LJMP MAIN ORG 0100HMAIN:MOV 30H,#1 MOV 31H,#2 MOV 40H,#3 MOV 41H,#4 MOV R0,#30H MOV R1,#40H MOV R2,#2 CLR CLOOP:MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1DJNZ R2,LOOP END程序调试步骤:1、新建项目开始首先给30、31、40、41H 单元赋值, 然后#30 R0 #40H R1 #2 R2@R0+@R1 @R0R0+1 R0R1+1 R1R2-1 R2R2=0?结束否是2、建文件夹3、选择单片机型号80514、新建文件5、编写自己的程序然后保存为asm格式6、添加源程序7、编译源程序检查是否有错误若有错误则点击错误提示,会自动跳到错误行,检查错误,修改程序知道无错误后再编译。
8、运行程序点击右边红色部分9、单步调试程序观察左边的寄存器变化、10、由程序可知,我把30H和40H、2分别给了R0/、R1、R2,单步调试可看到11、同时可以调用下图命令观看30H、31H、40H、41H的内容12、结合写的程序,从上图可以分别看出每个单元内容并且可以知道,第一次循环后把30H和40H内容相加最后放入R1中可以看到R1变为4 第一次循环后变化:寄存器变化:第二次循环后:13、程序结束本实验要求“备注;个人根据情况可编写5字节或6字节等等的程序,并赋予初始值计算结果后截图”,我只编写了2字节,若改成5字节时,30~34H、40~44H可以分别赋值,循环次数改为5次,即寄存器R2改为5就行。
单片机实验报告实验一:存储器块清零或赋值一、实验目的1 熟悉存储器的读写方法,熟悉51汇编语言结构。
2 熟悉循环结构程序的编写。
3 熟悉编程环境和程序的调试。
二、实验内容指定存储器中某块的起始地址和长度,要求将其内容清零或赋值。
例如将4000H开始的10个字节内容清零或全部赋值为33H。
注意:1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。
2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。
5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。
三、实验仪器微机、VW,WA VE6000编程环境软件,(单片机实验箱)Lab6000/Lab6000通用微控制器MCS51实验四、实验步骤1、新建工程文件。
(注意:文件不要用中文名称保存时不要用中文路径)2、编写程序。
3、运行和调试过程。
外部数据存储器(4000H为首地址的10个字节)中初始状态(随便赋值FFH):单步执行程序,观察SFR中外部地址指针的变化;全速执行程序,可以看到外部数据存储器已赋值33H:五、实验结果可以看到外部数据存储器已赋值33H:六、问题讨论本次实验能够清楚地了解存储器中数据的移动和赋值过程,通过单步执行,对于每一步的指令操作过程能够了解如何执行,查看每条语句涉及到的寄存器和存储器内容的变化结果。
同时,学习掌握汇编程序的编写和调试过程。
实验二:存储块移动一、实验目的1 熟悉51汇编语言程序结构。
2 熟悉循环结构程序的编写,进一步熟悉指令系统。
3 熟悉编程环境和程序的调试。
二、实验内容将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。
南昌大学实验报告学生姓名:学号:专业班级:实验类型:⃞验证⃞综合■设计⃞创新实验日期:2018.04.17 实验成绩:实验一单片机软件实验(一)实验目的1.掌握51单片机keil软件集成开发环境;2.能够使用汇编语言编写应用程序。
(二)设计要求1.熟悉51单片机的keil软件集成开发环境;2.使用汇编语言编写“1+2+3+…+100”的程序。
(三)实验原理实验原理流程图如下图所示:如流程图所示,R0作为每次累加值的寄存器,R2作为累加求和后的低八位,R3作为累加求和后的高八位。
在运行程序时,将低八位(R2)值送入累加器A中和R0进行累加,求和后将累加器A的值送回R2,然后将高八位(R3)值送入累加器中(此时进位标志位cy不会被清零)和进位标志位进行累加,求和后送回R3,以此实现R2存放和的低八位。
R3存放和的高八位。
最后将R0自加一,重复上诉步骤知道R0为100时停止,从而实现1+2+3+…+100的实验。
(四)实验设备硬件:PC机软件:兼容51单片机的Keil uvision5集成开发环境(五)实验结果实验源代码如(七)所示,对代码进行编译仿真:点击运行仿真:仿真一段时间后停止,观察寄存器数值如下图所示:(六)结果讨论与心得体会结果分析讨论:从寄存器数值结果图可看出,寄存器R0如设想相同,自加到100(十六进制的0x65)后便停止自加,寄存器R2,R3存放的数值分别是0xba和0x13,即累加求和后的值为0x13ba,转换为十进制是5050,符合实际情况,完成实验。
心得体会:本次实验为单片机第一次实验,我学会了如何使用Keil创建工程项目,并尝试用会变语言来写程序,虽然回顾代码后觉得简单,但是在刚开始编写时还是有些不知所措,希望通过今后的多加练习能让自己编写汇编程序的能力有所提高。
(七)附录:实验源代码ORG 0000HMOV R0 , #1 ;MOV A , #0 ;MOV R2 , #0 ;MOV R3 , #0 ;Judge: CJNE R0 , #65H , Loop ;SJMP Over ;Loop:MOV A , R2 ;ADD A , R0 ;INC R0 ;MOV R2 , A ;MOV A , R3 ;ADDC A , #0 ;MOV R3 , ASJMP Judge ;Over: SJMP OverEND。
课程名称 单片机技术基础 实验名称 Keil C51编译器的应用 实验目的、要求 1.了解Keil C51编译器的功能 2、Keil C51的数据类型、变量定义、以及在单片机中的存储方式 3、Keil C51编译器的使用方法
实验原理 发光二极管使用单片机的P1.0引脚来控制。当控制信号为低电平时(逻辑0)发光二极管亮,控制信号为高电平(逻辑1)时发光二极熄灭。
主要设备 计算机一台 KEIL集成开发环境 普中科技单片机实验板一个
实验步骤及原始数据记录 1)启动Keil C51软件。 2)新建一个工程文件flash.uv2,注意选择工程文件要存放的路径,然后单击【保存】按钮。
3)在弹出的对话框中选择CPU厂商及型号,如:AT89S51。 4)新建一个C51文件,单击左上角的New File,在编辑框里输入程序。 5)完成上面代码的输入后,单击SAVE按钮,注意选择保存的路径,并输入保存的文件名flash.c,然后单击【保存】按钮。 .
6)保存好后把此文件加入到工程中(用鼠标在Source Groupl上单击右键,然后再单击Add Files to Group‘Source Groupl’)。
7)选择要加入的文件,找到flash.c后,单击【Add】按钮,然后单击【close】按钮。 8)到此便完成了工程项目的建立以及文件加入工程,现在开始编译工程,若在output window的build页看到0 Error(s)表示编译通过,可以进行程序的仿真运行。 9) 将程序下载到单片机,观测运行结果。 程序运行之后,LED灯定时闪烁 程序代码: #include sbit Led = P1^0; //对应CPU管脚P1.0
/*1MS延时子程序-----*/ void Delay_xMs(unsigned int x) { unsigned int i,j; for( i =0;i < x;i++ ) { for( j =0;j<500;j++ ); } }
实验一:流水灯左移右移实验
实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。
实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。
功能要求:做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。
电路图如下:
选用的元器件:
注意事项:电路板已经焊接好,流水灯接的是P0口,同时液晶显示模块也接在P0口,液晶显示模块的使能信号接P2.7口,因此做次实验,应将P2.7清零,同时P3.7应该清0,这样LED才能正常工作。
在仿真的时候,晶振和复位电路不画出亦可,简化电路图如下:
已经完成上面实验的同学,可以在此基础上,使用定时器来进行延时,延时时间应该稍大,否则看不出来流水灯熄灭点亮的效果。
单片机原理实验 i 目录 实验一、单片机集成开发环境入门 实验二、I/O口输入输出实验――循环灯程序设计 实验三、I/O口输入输出实验――LED数码管动态显示与按键去抖程序设计 实验四、定时器应用实验――LED数码动态显示与矩阵键盘赋值程序设计 实验五、计数器应用实验――基于热敏电阻和555时基电路的简易温度计设计 单片机原理实验
1 实验一、单片机集成开发环境入门 一、 实验目地 1. 掌握单片机集成开发软件“WAVE 3.2”的开发环境配置。 2. 掌握单片机集成开发软件“WAVE 3.2”的基本功能,了解MCS-51系列单片机应用系统的软件开发过程。 掌握创建工程项目和管理工程项目的方法。 掌握MCS-51系列单片机汇编程序的编辑、编译方法。 掌握MCS-51系列单片机汇编程序的仿真调试方法和观察窗口的使用。 二、 实验设备 PC 兼容机一台,操作系统为WindowsXP,安装有单片机集成开发软件“WAVE 3.2”。 三、 实验原理 1. 单片机集成开发软件“WAVE 3.2”简介 单片机应用程序的设计步骤通常可分为以下几步:(1)根据单片机应用系统的功能进行算法构思和设计,画出程序流程图;(2)用单片机汇编语言、C语言或PLM语言(初学者一般应采用汇编语言)编写源程序;(3)将源程序翻译成单片机可执行的机器码程序,即所谓的目标程序,该过程称为汇编或编译;(4)程序调试,将目标程序下载到目标单片机(即应用系统板中的单片机),运行目标程序,对运行结果进行监控。若运行结果与预期结果相符,程序正确,调试结束;否则由结果的差异分析算法或程序的可能错误,重复步骤2至4,修改源程序、重新汇编、再调试,直至程序正确。以上步骤2至4可应用单片机集成开发软件在个人计算机上完成。 “WAVE 3.2”是一款功能强大的单片机集成开发软件,可开发多个系列的单片机应用系统。该软件主要功能有:(1)集成了文本编辑器,可对源程序进行编辑、修改;(2)集成了汇编器,可对源程序进行汇编,自动查找源程序中的语法错误,并将无语法错误的源程序翻译成目标程序;(3)集成了仿真调试器,可对目标系统进行在线仿真调试,也可在个人计算机上对目标程序进行模拟仿真调试。 在线仿真调试,必需借助硬件仿真器,PC机通过硬件仿真器与目标系统相连,可用PC机监控目标程序的运行,目标单片机内部RAM和特殊功能寄存器的值可实时反馈回PC机。程序员通过分析目标单片机内部RAM和特殊功能寄存器的值、观测目标程序与单片机应用系统的配合情况,判断系统的软硬件是否正确。 模拟仿真调试是一种纯软件模拟,它直接利用PC机的资源,在PC机上模拟目标程序的运行,并显示虚拟单片机内部RAM和特殊功能寄存器的值,程序员通过分析虚拟单片机内部RAM和特殊功能寄存器的值仅能判断与硬件无关的那部分软件的正确与否,无法判断单片机应用系统的硬件是否正确,目标程序与系统硬件是否匹配。 由于在线仿真调试需要硬件仿真器,设备成本较高,使用较复杂,不利于普及。因此,本课程的实验将采用模拟仿真调试与硬件无关的部分软件(这部分软件所占比例很大),采用将目标程序下载到目标系统中实际运行,进行软硬件综合调试。 2. 集成开发软件“WAVE 3.2”的界面 单片机原理实验 2 启动“WAVE 3.2”后,集成开发软件的界面如图1.1所示,菜单功能见附录一。
一:实验1:P23口做输出口,接发光二极管,编写程序,使其闪烁。
(P23闪烁)#include "reg52.h"sbit P23=P2^3; //定义LED指示灯的IO口void main(){int i;//计时变量while(1){for(i=0;i<30000;i++);//延时P23=!P23;//指示灯IO口反转}}实验2:P23-P26口接四只发光二极管LED1-LED4, P20口接开关K1,编写程序,用开关控制发光二极管上的亮灭。
(开关控制四个灯亮灭)#include "reg52.h"sbit P23=P2^3; //定义LED指示灯的IO口sbit P20=P2^0; //定义key的IO口void main(){int i;//计时变量while(1){for(i=0;i<30000;i++);//延时if( P20==0) P23=0; // 按键,LED亮else P23=1;// LED亮}}实验3:P23- P26口做输出口接发光二极管编写并调试程序使其闪烁。
(四个灯闪烁)#include <reg51.h>void main(){int i;//计时变量while(1){for(i=0;i<30000;i++);//延时P3=0xff;for(i=0;i<30000;i++);//延时P3=0x0f;}}实验4:P23-P26口做输出口,接发光二极管,编写并调试跑马灯程序(跑马灯) #include <reg51.h>#define uchar unsigned charuchar tab[]={0xef,0xcf,0x8f,0x0f};void delay(){uchar i,j;for(i=0;i<255;i++)for(j=0;j<255;j++);}void main(){uchar i;while (1){for(i=0;i<4;i++){P3=tab[i];delay();}}}二:实验1:单片机P2口的P20和P21各接一个开关K1、K2,P23、P24、P25.P26各接一只发光二极管。
=实验一简单程序设计实验一、实验目的掌握单片机程序设计的基本方法,熟悉程序交叉编译和调试执行的过程。
二、实验器材1、PC机(安装Keil软件) 1台2、实验开发板 1块3、U-EC5型仿真器 1只4、直流稳压电源 1台三、实验要求1、课前温习和回顾C语言程序设计方面的知识。
2、搭建集成开发环境 (参考所给实验附件中《Keil软件与仿真驱动程序安装.doc》)。
3、编写简单的C程序,熟悉Keil环境下的调试方法,包括跟踪、单步运行和断点设置等。
4、仔细观察实验板电路图,并结合《C8051F411数据手册》给出自己I/O端口配置方案。
5、编写程序,实现LED的亮灭、蜂鸣器的鸣叫以及按键状态识别等控制功能。
四、扩充实验(思考题)1、如何实现蜂鸣器的间歇鸣叫(1秒)?2、如何实现依次点亮LED的控制功能?实验代码:#include "c8051F410.h" #define OLD_BOARD#ifdef OLD_BOARDsbit LED8=P1^7;sbit LED7=P1^6;sbit LED6=P1^5;sbit LED5=P1^4;sbit LED4=P1^3;sbit LED3=P1^2;sbit LED2=P1^1;sbit LED1=P1^0;sbit KEY5=P2^2;sbit KEY4=P2^1;sbit KEY3=P2^0;sbit KEY2=P0^2;sbit KEY1=P0^1;sbit SPKOUT=P0^0;#elsesbit LED8=P2^1;sbit LED7=P2^0;sbit LED6=P0^7;sbit LED5=P0^6;sbit LED4=P0^3;sbit LED3=P0^2;sbit LED2=P0^1;sbit LED1=P0^0;sbit KEY5=P1^7;sbit KEY4=P1^6;sbit KEY3=P1^5;sbit KEY2=P1^4;sbit KEY1=P1^3;sbit SPKOUT=P2^2;#endifvoid delay(int m){int i,j;for(i=0;i<100;i++)for(j=0;j<250*m;j++);}void init(void); //初始化子程序void main(){unsigned char i;init(); //初始化子程序LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 1;LED5 = 1;LED6 = 1;LED7 = 1;LED8 = 1;SPKOUT = 0;for(i=1;i<9;i++){SPKOUT = 1;LED1 = 0;delay(50);SPKOUT = 0;LED2 = 0;delay(50);SPKOUT = 1;LED3 = 0;delay(50);SPKOUT = 0;LED4 = 0;delay(50);SPKOUT = 1;LED5 = 0;delay(50);SPKOUT = 0;LED6 = 0;delay(50);SPKOUT = 1;LED7 = 0;delay(50);SPKOUT = 0;LED8 = 0;delay(50);P1=0xff;delay(50);}}void init(void){PCA0MD=0x00;//关闭WDT控制OSCICN=0xc7;//设置内部振荡器工作(使用内部晶振24.5MHz) #ifdef OLD_BOARDP0MDIN=0xFF;P0MDOUT=0x11;P0SKIP=0xCF;P1MDIN=0xFF;P1MDOUT=0x00;P1SKIP=0xFF;P2MDIN=0xFF;P2MDOUT=0x04;P2SKIP=0xFF;#elseP0MDIN=0xFF;P0MDOUT=0x10;P0SKIP=0xCF;P1MDIN=0xFF;P1MDOUT=0x00;P1SKIP=0xFF;P2MDIN=0xFF;P2MDOUT=0x04;P2SKIP=0xFF;#endifXBR0=0x01;XBR1=0x41;}结果截图实验二单片机内部接口实验一、实验目的深入理解C8051F411单片机内部的定时器/计数器和串行接口的工作原理;熟悉单片机通过RS232与PC机进行通信的过程;了解单片机的接口调试方法。
实验一:系统认识实验一、设计目的:1. 学习 Keil C51 集成开发环境的操作;2. 熟悉 TD-51 系统板的结构及使用。
二、设计内容:编写程序,将 00H~0FH 共 16 个数写入单片机内部 RAM 的 30H~3FH 空间。
三、设计步骤:1. 创建 Keil C51 应用程序(1)运行 Keil C51 软件,进入 Keil C51 集成开发环境。
(2)选择工具栏的 Project 选项,弹出下拉菜单,选择 NewProject 命令,建立一个新的μVision2 工程。
这时会弹出文件保存对话框,选择工程目录并输入文件名 Asm1 后,单击保存。
(3)工程建立完毕后,μVision2 会马上弹出器件选择窗口。
器件选择的目的是告诉μVision2 使用的 80C51 芯片的型号是哪一个公司的哪一个型号,不同型号的 51 芯片内部资源是不同的。
此时选择 SST 公司的 SST89E554RC。
(4)到此建立好一个空白工程,现在需要人工为工程添加程序文件,如果还没有程序文件则必须建立它。
选择工具栏的 File 选项,在弹出的下拉菜单中选择 New 目录。
(5)输入程序,完毕后点击“保存”命令保存源程序,将 Text1 保存成Asm1.asm。
Keil C51 支持汇编和 C 语言,μVision2 会根据文件后缀判断文件的类型,进行自动处理,因此保存时需要输入文件名及扩展名.ASM 或.C。
保存后,文件中字体的颜色会发生一定变化,关键字会变为蓝色。
(6)程序文件建立后,并没有与 Asm1.Uv2 工程建立任何关系。
此时,需要将 Asm1.asm 源程序添加到 Asm1.Uv2 工程中,构成一个完整的工程项目。
在Project Window 窗口内,选中Source Group1 点击鼠标右键,选择 Add Files to Group‘Source Group1’命令,此时弹出添加源程序文件对话框,选择文件Asm1.asm,点击 Add 命令按钮即可将源程序文件添加到工程中。
《单片机C语言程序设计》实验报告一、实验目的和要求1、熟悉单片机硬件结构及其工作原理。
2、掌握单片机的I/O端口应用。
二、实验内容和原理实验1——P1作为输入端口(1)硬件设计P1端口的高四位P14、P15、P16和P17分别接4个独立按键S01、S02、S03、S04以及4个LED VD5、VD6、VD7、VD8;当独立按键按下时,对应发光二极管亮,比如S01按下时,VD5被点亮,同时P30输出低电平VD17被点亮。
电路原理图如图所示P1端口作为输入端口所需元器件入表所示(2)C源程序实验1:实验2:#include <REGX51.H>#include <Delay10ms.h>unsigned char tab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}; unsigned char tab2[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; unsigned char tab3[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};int i;void MOD1(void){for(i=0;i<8;i++){P1= tab1[i];Delay10ms();}P1= tab1[8];for(i=0;i<8;i++){P0= tab1[i];Delay10ms();}P0= tab1[8];for(i=0;i<8;i++){P3= tab1[i];Delay10ms();}P3= tab1[8];for(i=0;i<8;i++){P2= tab1[i];Delay10ms();}P2= tab1[8];}void MOD2(void){for(i=0;i<8;i++){P2= tab2[i];Delay10ms();}for(i=0;i<8;i++){P3= tab2[i];Delay10ms();}for(i=0;i<8;i++){P0= tab2[i];Delay10ms();}for(i=0;i<8;i++){P1= tab2[i];Delay10ms();}}void MOD3(void) {for(i=0;i<8;i++){P1= tab3[i];Delay10ms();}for(i=0;i<8;i++){P0= tab3[i];Delay10ms();}for(i=0;i<8;i++){P3= tab3[i];Delay10ms();}for(i=0;i<8;i++){P2= tab3[i];Delay10ms();}}int main (void){while(1){MOD1();MOD2();MOD3();}三、主要仪器设备Protues硬件仿真调试软件Keil编程软件四、操作方法与实验步骤1、根据实验一新建工程操作,新建工程。
. . .. . .. a. .. . . 仲恺农业工程学院实验报告纸
信科院 (院、系) 计算机科学与技术 专业 计机班 组 课 学号 实验日期 2013.11.15 实验一 端口I/O 实验
一、实验目的 掌握8051单片机输入/输出端口的使用方法。 二、实验内容 1、从8051 单片机P0、P1、P2、P3 中任选2 个端口,一个端口接逻辑电平开关(输入设 备),另a一个端口接LED 显示电路(输出设备)。无条件将逻辑电平开关输入的数据传送给LED 显 示电路。例如,使用P0 口输入、P1 口输出,实验电路如下。 80C51 P0口P1口 逻辑电平 开关 LED显示电 路 2、任选一个端口接LED 显示电路,编程使8 个LED 从左至右逐个发光(流水灯)。
三、实验原理 8051 单片机有4 个8 位的并行I/O 端口:P0、P1、P2、P3,在不扩展存储器、I/O 端口,在不 使用定时器、中断、串行口时,4 个端口,32 根口线均可用作输入或输出。作输出时,除P0 口要 加上拉电阻外,其余端口与一般的并行输出接口用法相同,但作为输入端口时,必须先向该端口写 “1”。例如, P0 口接有-个输入设备,从P0 口输入数据(注意:断开J0)至累加器A 中,程序段 为: MOV P0, #0FFH MOV A, P0 若将P0.0 位的数据传送至C 中,程序段为: SETB P0.0 MOV C, P0.0
四、实验程序 . . .. . .. a. .. . . 1、I/O 程序IO-1.ASM org 00h main: mov P0, #0ffh ;向P0 端口锁存器写0FFH,准备输入 mov a, p0 ;从P0 口输入数据 mov P1, a ;将数据传至P1 口 22 sjmp main end 结果:当逻辑开关拔到0时,LED灯灭; 当逻辑开关拔到1时,D灯亮
2、流水灯程序IO-2.ASM org 00h mov a, #1 loop: mov p1,a ;将a 的内容通过P1 口输出 call delay ;调延时子程序 rl a ;a 左移一位 sjmp loop delay: mov r0, #80h ;延时子程序 delay1: mov r1, #00h delay2: djnz r1, delay2 djnz r0, delay1 ret end
生物系统工程高源实验一实验报告思考题1单片机仿真系统的组成单片机仿真系统的组成由软件和硬件两大块共同构成,仿真模拟软件使用了VM,仿真硬件用的是仿真板。
仿真系统的硬件——仿真板包括底板(控制电路、SRAM等)和上板(CPU板)组成。
底板通过打印口连接到PC机。
上板通过排线连接到用户的目标板。
仿真系统的软件使用的VM,8位单片机仿真软件。
将编辑,汇编,仿真功能集成在同一开发环境中。
思考题2.单片机仿真实验实验步骤1、桌面上双击进入VM系统2、在跳出的欢迎界面选择我们的单片机的型号Lab8000-MCS51实验-AT89S52,勾选使用伟福软件模拟器,单击好。
3、文件-新建-保存使得系统可以读取语言的颜色。
4、输入下述代码5、调出各种窗口(观察窗口、信息窗口、跟踪窗口、项目窗口、断点窗口……)6、使用执行命令下的各种执行手段进行观测(单步、设置断点、执行到光标处……)7、项目窗口,CPU选择上双击,目标文件,生成BIN文件二进制码,单击CPU窗口,获得机器码思考题3.单片机运行的各种运行方法以及影响1、全部执行(Ctrl+F9)直接执行完全部的程序2、跟踪(F7)跟踪程序执行的每步,观察程序运行的状态3、单步(F8)单步执行程序,与跟踪不同的是,跟踪可以跟踪到函数或过程的内部,而单步执行则不跟踪到程序内部4、执行到光标处(F4)程序从当前PC位置,全速执行到光标所在的行。
如果光标所在行没有可执行的代买,则提示“这行没有代码”。
5、暂停(U)暂停正在全速执行的程序6、复位(E)终止调试过程,程序复位,在全速执行停止前不能复位7、设置PC(Ctrl+F3)将程序指针PC,设置到光标所在的行,之后从这行开始执行。
8、自动单步跟踪()模仿用户连续按单步运行。
9、编辑观察项(Ctrl+F5)观察变量或表达式的值在单步运行下各个寄存器的变化情况思考题4实验的心得体会这次实验用了一个很简单的LOOP循环使得在R7寄存器的循环下,A的地址一直在不停的增加,R0的地址也在不停的增加。
目录实验一P1口输入、输出实验 (2)实验二继电器控制实验 (8)实验三音频控制实验 (11)实验四程序调试 (14)实验五5LED静态串行显示实验 (16)实验六6LED动态扫描显示实验 (21)实验七查询式键盘实验 (28)实验八阵列式键盘实验 (36)实验九计数器实验 (47)实验十定时器实验 (49)实验十一外部中断实验 (54)实验一P1口输入、输出实验一、实验目的1、学习P1口的使用方法2、学习延时子程序的编写和使用二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。
三、实验内容及步骤实验(一):用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。
1、使用单片机最小应用系统1模块。
关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块。
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加P1_A.ASM源程序,进行编译,直到编译无误。
4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。
5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序,观察发光二极管显示情况。
发光二极管单只从右到左轮流循环点亮。
实验(二):用P1.0、P1.1作输入接两个拨断开关,P1.2、P1.3作输出接两个发光二极管。
程序读取开关状态,并在发光二极管上显示出来。
1、用导线分别连接P1.0、P1.1到两个拨断开关,P1.2、P1.3到两个发光二极管。
2、添加 P1_B.ASM源程序,编译无误后,运行程序,拨动拨断开关,观察发光二极管的亮灭情况。
向上拨为熄灭,向下拨为点亮。
四、流程图及源程序1.流程图2.源程序:(一)实验一ORG 0000HLJMP STARTORG 0030HSTART: MOV A, #0FEHMOV R2,#8OUTPUT: MOV P1,ARL AACALL DELAYDJNZ R2,OUTPUTLJMP STARTDELAY: MOV R6,#0MOV R7,#0DELAYLOOP:;延时程序DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPRETEND(二)实验二KEYLEFT BIT P1.0 ;定义KEYRIGHT BIT P1.1LEDLEFT BIT P1.2LEDRIGHT BIT P1.3ORG 0000HLJMP STARTORG 0030HSTART: SETB KEYLEFT ;欲读先置一SETB KEYRIGHTLOOP: MOV C,KEYLEFTMOV LEDLEFT,CMOV C,KEYRIGHTMOV LEDRIGHT,CLJMP LOOPEND五、思考题(1)对于本实验延时子程序Delay: MOV R6,0MOV R7, 0DelayLoop:DJNZ R6,DelayLoopDJNZ R7,DelayLoopRET如使用12MHz晶振,粗略计算此程序的执行时间为多少?六、电路图实验二继电器控制实验一、实验目的1、学习I/O端口的使用方法2、掌握继电器的控制的基本方法3、了解用弱电控制强电的方法二、实验说明现代自动控制设备中,都存在一个电子电路的互相连接问题,一方面要使电子电路的控制信号能控制电气电路的执行元件(电动机,电磁铁,电灯等),另一方面又要为电子线路和电气电路提供良好的电气隔离,以保护电子电路和人身的安全。
单片机原理与应用实验报告学院(部):专业:学生姓名:班级:学号:最终评定成绩:实验一存储器读写一、实验目的:1、掌握寄存器、存储器读写等汇编指令;2、掌握编程软件编辑、编译、调试等基本操作。
二、实验仪器设备1.PC机,1台2.WAVE软件开发系统三、实验内容及步骤:1、将下面的汇编程序输入到W A VE集成开发软件中ORG 0000HSJMP STARTORG 0030HSTART:MOV R0,#07HMOV 70H,#08HMOV R1,#70HMOV DPTR,#2000HLOOP:MOVX A,@R1MOVX A,@DPTRINC R1INC ADJNZ R7,LOOPSJMP $END2、选择菜单“仿真器”→“仿真器设置”,按下图所示完成软件初始设置。
3、选择菜单“项目”下“编译”,编译通过后,选择“单步运行”,观察记录寄存器(R0、R1)、累加器(A)、程序状态字(PSW)、外部存储器(2000H单元)、I/O端口(P1)的数据变化。
四、源程序源程序:ORG 0000H ;定义起始地址SJMP STARTORG 0030HSTART:MOV R0,#07HMOV 70H,#08H ;给内部RAM的70H单元赋初值MOV R1,#70H ;使R1指向内部70H单元MOV DPTR,#2000H ;定义外部存储器开始单元LOOP:MOVX A,@R1 ;将R1所指向的70H的内容赋给AMOVX @DPTR,A;将A的内容赋给外部存储器单元INC R1 ;内部RAM地址加1INC DPTR ;外部存储器地址加1DJNZ R7,LOOP ;循环,直到RAM中70H~7FH;单元的内容全部相应赋给;外部2000H~2007H单元SJMP $END3、记录下程序单步运行时,寄存器(R0、R1)、累加器(A)、程序状态字(PSW)、外部存储器(2000H单元)、I/O端口(P1)的数据变化。
五、仿真效果图实验二I/O端口操作一、实验目的:1、掌握I/O端口读写等基本汇编指令;2、掌握单片机最小系统硬件电路设计及仿真软件PROTEUS仿真、调试等基本操作方法。
目录实验一系统认识实验 (2)实验二端口I/O输入输出实验 (14)实验三外部中断实验 (17)实验四定时器实验 (21)实验五串行口通信实验 (25)实验六串行通信的调试实验 (29)实验七数码管静态显示实验 (33)实验八数码管动态显示实验 (38)实验一系统认识实验一、实验目的1.学习Keil C51编译环境的使用;2.学习STC单片机的下载软件STC-ISP的使用;3.掌握51单片机输出端口的使用方法。
二、实验内容任选单片机的一组I/O端口,连接LED发光二极管,编写程序实现8个LED按二进制加1点亮。
三、接线方案单片机P10~P17/C51单片机接L0~L7/LED显示,如下图:图1-1实验线路四、实验原理51单片机有4个8位的并行I/O端口:P0、P1、P2、P3,在不扩展存储器、I/O端口,在不使用定时器、中断、串行口时,4个并行端口,32根口线均可用作输入或输出。
作为输出时,除P0口要加上拉电阻外,其余端口与一般的并行输出接口用法相同,但作为输入端口时,必须先向该端口写“1”。
例如P0接有一个输入设备,从P0口输入数据至累加器A中,程序为:MOV P0, #0FFHMOV A, P0若将P0.0位的数据传送至C中,程序为:SETB P0.0MOV C, P0.0五、实验步骤1、连接串行通信电缆和电源线;2、根据图1-1实验线路进行电路连接;3、将C51单片机核心板上的三个开关分别拨到“独立”、“运行”“单片机”;4、打开实验箱上的电源开关。
5、利用Keil C51创建实验程序,并进行编译生成后缀为.HEX的文件;6、利用STC-ISP软件将后缀为.HEX的文件下载到单片机ROM中;7、观察实验现象,并记录。
若实验现象有误请重复第5、6步。
六、参考程序ORG 0000H ;程序的开始LJMP MAIN ;转入主程序ORG 0200H ;主程序的开始MAIN: MOV P1,#00H ;P1口做准备M1: INC P1 ;P1口连接输出计数,LCALL DELAY ;转入延时子程序LJMP M1 ;循环DELAY: MOV R5,#255 ;延时子程序D1: MOV R6,#255DJNZ R6,$DJNZ R5,D1RETEND ;程序体结束七、思考题1、利用其他I/O口实现LED加1点亮功能;2、利用P1端口实现流水灯(左移或右移)功能;3、实现LED其他点亮功能。
单片机实验报告(一)引言概述:本文档是关于单片机实验报告的第一部分。
在本实验中,我们使用了单片机进行各种电子电路的设计和实现。
本报告将详细介绍本次实验的目的、实验过程、实验结果以及相关的数据分析和总结。
正文内容:1. 实验目的:- 熟悉单片机的基本原理和操作方法;- 学习如何使用单片机进行数字信号处理;- 掌握通过单片机控制外围设备的方法;- 了解单片机在电子电路设计中的应用;- 培养动手能力和解决问题的能力。
实验过程:- 准备实验所需的器件和材料;- 搭建实验电路并连接单片机;- 编写程序并下载到单片机中;- 运行程序并观察实验现象;- 对实验结果进行测量和记录。
实验结果:- 在本实验中,我们成功完成了以下实验任务:实现一个LED灯的闪烁效果、实现一个温度传感器并显示温度值、通过单片机控制一个小型电机的转动。
- 实验过程中,我们观察到LED灯按照设定的时间间隔闪烁,温度传感器准确地显示了环境温度,并且成功地控制了电机的转动。
- 实验结果与理论预期相符合,证明了单片机在电子电路设计和控制方面的可行性和实用性。
数据分析:- 针对每个实验任务,我们对实验结果进行了数据分析和统计。
- 对LED灯的闪烁效果进行了频率和亮度的分析,验证了程序中设定的时间间隔和LED的亮度参数。
- 对温度传感器进行了精度和灵敏度的测试,发现与其输入温度之间存在一定的误差。
- 对电机控制实验进行了转速和转向的测量,得出了电机在不同控制模式下的转动情况。
总结:通过本次实验,我们熟悉了单片机的基本原理和操作方法,学习了如何使用单片机进行数字信号处理,并且掌握了通过单片机控制外围设备的方法。
本实验验证了单片机在电子电路设计和控制方面的可行性和实用性。
我们通过数据分析,对实验结果进行了详细的解读和讨论,并总结了实验中遇到的问题和经验教训。
在今后的实验中,我们将进一步深入学习和应用单片机技术,不断提高自己的动手能力和解决问题的能力。
实验一 单片机仿真开发系统的使用 1.1 Keil C51 集成开发环境介绍 ①、运行keil C51编辑软件,软件界面如图1-1所示 ②、 建立一个新的工程项目 单击Project菜单,在弹出的下拉菜单中选中New Project选项
③、保存工程项目 a、选择要保存的文件路径,输入工程项目文件的名称,如保存的路径为C51文件夹,工程项目的名称为C51,如图所示,单击保存
b、为工程项目选择单片机型号 在弹出的对话框中选择需要的单片机型号,如图所示,这里选择51核单片机中使用较多的89S51,选定型号后,单击确定,出现如图所示的开发平台界面 ④、 新建源程序文件 在下图中单击“File”菜单,选择下拉菜单中的New选项,新建文件后得到如图的界面: ⑤、 保存源程序文件 单击“File”菜单,选择下拉菜单中的Save选项,在弹出的对话框中选择保存的路径及源程序的名称,如图所示。此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时必须键入正确的.扩展名。注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。然后,单击“保存”按钮
程序录入区域
注意扩展名 ⑥、为工程项目添加源程序文件 在编辑界面中,单击“Target”前面的“+”,再在“Source Group”上单击右键,得到如图所示的对话框,选择“Add File to Group’ Source Group 1’”,弹出如图所示的对话框,选中要添加的源程序文件,单击“Add”,得到如图所示的界面,同时,在“Source Group 1”文件夹中多了一个添加的“Text1.c”文件。 ⑦、 输入源程序源程序输入完成后保存,得到如图所示的界面。程序中的关键字以不同的颜色提示用户加以注意,这就是事先保存待编辑的文件的好处,即Keil c51会自动识别关键字
⑧、 编译调试源程序 在上图中,单击Project菜单,在弹出的下拉菜单中选中Built Target选项,再单击Debug菜单,在弹出的下拉菜单中选中Start/Stop Debug Session选项, 编译成功后,再单击Debug菜单,在弹出的下拉菜单中选中Go选项,进行源程序调试。如图所示。
⑨、查看分析结果 单击Debug菜单,在弹出的下拉菜单中选中Stop Running选项, 单击View菜单,在弹出的下拉菜单中选中Serial Windows #1 选项,可以看到程序运行的结果,如图所示: ⑩、生成Hex代码文件 将编译调试成功的源程序生成可供单片机加载的Hex代码文件,单击Project菜单,在弹出的下拉菜单中选中Options for Target’ Target 1’选项,在弹出的对话框中单击Output选项,选中其中的“Create HEX File”项。其他选项可以不考虑,如图所示:
到此,一个完整的工程项目就在Keil C51软件上就编译完成
把生成的.HEX代码烧写到8051芯片中,完成软件程序到代码的转换。 1.2 用Proteus仿真软件
必须选中 XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78
P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1
X1CRYSTALC122pC222p
R110kC310u
D8D7D6D5
R2100RR3100RR4100RR5100RR6100RR7100RR8100RR9100R
AT89S51D4D3D2D1
电路原理图如图所示 单片机中常用的元件在下表中查找 系 列 元 件 Miscellaneous 晶振、电池、保险等 Microprocessor ICs 各类单片机及其他芯片 Optoelectronics 各类光电显示元件 Analog ICs 各类模拟电子元件 Capacitors 各类电容元件 Resistors 各类电阻元件 Switches&Relays 各类开关及按钮
五、实验注意事项 1、Keil C51软件在使用调试中会出现由于录入出现的各种错误和程序本身语法错误,要学会自己排除错误。 2、在进行Keil C51软件编译时,要注意软件参数设置。 3、在进行Proteus软件仿真时,要注意与Keil C51软件之间互调设置。
1.3 实现单片机最小系统的简单应用。
要求:P1口控制8个发光二极管LED循环点亮,至少有三种造型,造型写在实验内容中,并在程序中加以注释说明。 一、实验目的 1.熟悉PROTEUS单片机仿真软件的使用。 2. 熟悉Keil C51软件的使用 3.掌握单片机I/O口输出的控制方法。 二、实验设备(仪器) PC 机一台、硬件模拟综合平台 三、预习要求,实验参考内容 1.按照Keil C51 集成开发环境的要求,建立一段P0~P3口作为输出端口的程序,然后进行编译并进行软件仿真。 2.运用PROTEUS绘制原理图,控制P0~P3输出端口,以控制32位LED流水灯的造型,参考电路如图1-1所示。 3.预习32位LED点亮实验例程,理解其程序,掌握LED的工作原理,其工作特性如图1-2所示。 #include void delay_ms(int x) { int i,j; for (i=0;ifor (j=0;j<600;j++); } void port_init(void) { P0=0XFF; P1=0XFF; P2=0XFF; P3=0XFF; } void main (void) { unsigned char i; port_init(); while(1) { for(i=0;i<8;i++) // 轮流点亮P0口LED { P0=~(1< delay_ms(20); } P0=0X00; delay_ms(20); P0=0XFF; for(i=0;i<8;i++) // 轮流点亮P1口LED { P1=~(1< delay_ms(20); } P1=0X00; delay_ms(20); P1=0XFF; for(i=0;i<8;i++) // 轮流点亮P2口LED { P2=~(1< delay_ms(20); } P2=0X00; delay_ms(20); P2=0XFF; for(i=0;i<8;i++) // 轮流点亮P3口LED { P3=~(1< delay_ms(20); } P3=0X00; delay_ms(20); P3=0XFF; P10P11P12P13P14P15P16P17P30P31P32P33P34P35P36P37P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P27P10P11P12P13P14P15P16P17P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P27
P30P31P32P33P34P35P36P37
XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435
P0.5/AD534
P0.6/AD633
P0.7/AD732
P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51D1LED-REDD2LED-REDD3LED-REDD4D5LED-REDD6LED-REDD7LED-REDD8LED-REDD9LED-GREEND10LED-GREEND11LED-GREEND12LED-GREEND13LED-GREEND14LED-GREEND15LED-GREEND16LED-GREEND17LED-YELLOWD18LED-YELLOWD19LED-YELLOWD20LED-YELLOWD21LED-YELLOWD22LED-YELLOWD23LED-YELLOWD24LED-YELLOWD25LED-BLUED26LED-BLUED27LED-BLUED28LED-BLUED29LED-BLUED30LED-BLUED31LED-BLUED32LED-BLUE23456789
1RP1
RESPACK-8
23456789
1RP2100
23456789
1RP3
RESPACK-8234567891RP4RESPACK-8
D33LED-RED
} }
图1-1 32灯控制参考电路 2.Keil C 软件的调试方法及相关硬件设置。