单片机实验内容

2025-03-10 版权声明 我要投稿

单片机实验内容(精选8篇)

单片机实验内容 篇1

(一)1、系统功能要求:

做单一灯的左移右移,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环3次。然后左移2次,右移2次,在左移和右移的过程中8个灯依次闪烁2次(延时的时间0.2秒)。

2、编写实训报告,实训报告中应包括如下几个部分:

(1)实训目的(2)实训要求

(3)整体方案

(4)硬件电路原理图设计

(5)软件设计及流程图

(6)调试步骤及问题(包括硬件调试、软件调试和系统联调)

(7)实训体会及意见建议

单片机实训

(一)1、系统功能要求:

做单一灯的左移右移,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环3次。然后左移2次,右移2次,在左移和右移的过程中8个灯依次闪烁2次(延时的时间0.2秒)。

2、编写实训报告,实训报告中应包括如下几个部分:

(1)实训目的(2)实训要求

(3)整体方案

(4)硬件电路原理图设计

(5)软件设计及流程图

(6)调试步骤及问题(包括硬件调试、软件调试和系统联调)

单片机实验内容 篇2

在传统的单片机教学中, 教师在课堂上只是按照教材顺序讲述基本概念、结构、端口、指令、终端、系统扩展以及程序设计等。但是, 很多学生在学习完整个单片机课程之后, 连用单片机构造一个最简单的系统都不会, 有些甚至对一些单片机的基础知识都不了解。造成这一现象的原因来自多个方面, 主要是理论与实践没有有机结合起来, 很多院校单片机课程的理论教师和实习老师分属不同的管理系统, 各自为政, 互相之间没有良好的互动和协调, 从而导致理论和实践的脱节。理论和实践脱节, 就会让教学目标、教学内容和教学方法上很难得到良好的结合, 从而无法协调和统筹好理论教学和实践教学。

《单片机应用技术》课程作为一门工科电子类或相关专业重要的专业必修课, 是一门结合电子、计算机、通讯等技术应用性很强的课程, 通过学习单片机的硬件结构、指令系统、编程方法能够考查和帮助学生对前期专业专业基础课程的理解和掌握, 初步具备解决实际工程问题的能力, 培养较强的动手能力和创新意识。在单片机教学过程中, 采用模块化的教学方法, 让学生在每一个模块的中, 一边学习, 一边实验和实训, 这样学生在掌握知识点的同时, 提高了他们的动手能力和学习积极性。

2 模块化教学

2.1 模块化教学的含义

模块化教学强调的是素质和能力, 在教法方面, 推行的是知能一体, 在学法方面, 强调的是知行一致。在模块化教学中, 理论知识与实践操作会有机结合起来, 从而让学生掌握了理论知识, 具备了动手能力, 提升了综合素质。在模块化教学中, 核心内容是模块的建立。模块, 就其实质来说, 就是一种小型的课程, 它有独立的知能体系, 有一个明确的教学目标, 与传统的以知识为中心的教学模式不同, 它更注重学生能力和素质的培养。模块一般是由一个或者多个小的学习单元构成, 学习单元就由具体的教学目标和教学内容划分而来。总的来说, 模块的核心是素质和能力, 强调的是在学习过程中认识问题、分析问题和解决问题的能力。

2.2 模块化教学的主要特点

模块化教学把学生当做主体, 教师只是学生学生学习的指导者, 学生的需求是最重要的。在模块化教学课堂中, 教师应该要帮助学生明确自己想学什么, 需要学习什么, 然后帮助学生安排相关活动情境, 指导学生完成学习任务。教师要更新教学观念, 培养学生的个性品质和创新精神, 让学生在学习中充分展现自己, 让每个学生都能够体验成功带来的快乐。

模块化教学另一个主要特点就是灵活性。一个模块可以是由一个或者几个学习单元组成, 而小的模块可以组合成大的模块, 大的模块可以组合成更大的模块。这样的教学模式能够让教师更详细更具体的了解学生反馈的问题, 从而让教师更有效的指导学生。

模块化教学的第三个重要特点就是具有很强的实践性。在传统的单片机教学中, 教师只是注重知识的传授和灌输, 不重视学生实践能力的培养。模块化教学中, 教师会科学合理的安排教学内容, 利用各种教学方法和教学手段, 培养学生的素质和能力, 让学生成为应用型人才。

3 设计模块, 确立宏观教学模式

教师应该要根据单片机课程标准的要求, 从整体和大局出发, 科学合理的设计模块, 从而确定宏观教学模式。《单片机应用技术》这门课程是一门理论性和应用性都很强的课程, 对理论和实践要并重, 因此, 科学合理的设计模块是非常重要的。在设计模块的时候, 要特别注意模块化教学的含义和特点, 同时要对单片机课程的教学内容进行详细分析、概括和总结, 不要被传统的教学思维和教学方式所束缚, 教师应该要明白, 教学目的是要培养学生的素质核能力, 因此, 在教学中要注重理论联系实际。笔者根据多年的单片机课程教学经验, 设计了单片机教学课程中的模块, 如图1所示。

在实际的教学过程中, 教师要将模块中的每一个部分逐步的展开。在进行一个知识模块教学时, 教师要根据这个模块中的教学要求和教学内容, 设计相关的实训项目或者学习单元。对学生进行实训项目的练习, 可以增强学生的动手能力和实践能力, 让学生在学习完单片机课程之后, 能够独立的完成项目设计、调试和设计工作。因此, 教师在进行模块化教学时, 要从宏观上进行把握, 合理设计模块, 从而最大程度上提高学生的学习效果。

4 以模块为中心, 注重微观教学模式

所谓的微观教学模式, 就是指每一堂课中的结构和课堂内容的安排。我们在确定了课程的宏观模式后, 就要认真研究课程的微观教学模式, 只有在教学方法、教学手段、教学形式方面将二者有机结合起来, 让两者相互协调, 才能真正提高学生的知识和能力水平。在宏观上确定好模块之后, 教师就应该要精心设计每一节课、每一个实训项目以及每一个学习单元, 努力提高学生的参与程度, 让学生积极主动的学习, 在实践中明白理论教学中所学到的相关概念和知识点。

在考核方式上, 教师可以改变传统的用试卷考试的考核方法, 在实践中对学生进行考核。在实践中考核学生也有两种考核模式, 即过程考核和结果考核, 过程考核就是在实践过程中查看学生的实践情况, 结果考核就是查看学生实训项目的完成情况。只有在理论和实践两个方面对学生进行全面考核, 才能让学生的能力得到真实体现。

在《单片机应用技术》课程中, 我们事先做好一个线路板, 这个线路板是一个综合模块应用系统, 然后给每一个学生发放一块电路板和一份原理图。在课堂上, 教师要对这个系统进行演示以及说明, 介绍这个系统的每一个实例都可以扩展和改进, 从而可以有更多实际的应用。要让学生明白, 他们所学习的每一个实例都是可以扩展的, 而且他们学习的每一个知识点都与实践紧密相连。学生可以通过电路板, 了解课堂上所要学习的每一个模块每一个实训项目。在课堂教学中, 教师在传授完理论知识后, 要让学生在电路板上进行相关实训项目, 教师要告知学生《单片机应用技术》课程的学习目标、教学模式、教学方法以及考核方式, 同时要提供多个制作项目共参考, 要鼓励学生到图书馆去查找资料, 选定的项目可以在课堂上进行讨论。这样, 可以有效提高学生的学习积极性。

5 设计知识点, 提高学生素质

在本次的《单片机应用技术》课程中, 我们将内容分为了八个模块, 每个模块都有相应的教学内容、教学要求和实训项目等。在这八个模块中, 每一个模块都会有相关的知识点, 将这些知识点分到各个小模块或者学习单元之中。教师要在这些模块的教学时, 要激发学生的学习兴趣, 让学生以高度的热情投入到模块的实训项目中, 大量的实训项目能够让学生有足够的动手操作的机会, 这些可操作的内容代替枯燥的说教, 让学生的学习兴趣大大提高, 学习效果也得到明显改善。

在教学过程中, 不仅仅是单片机课程, 在所有的课程中, 教师不应该只是单纯的重视专业能力的培养, 而要兼顾专业素质的培养。在《单片机应用技术》课程中, 我们并没有硬性规定的学生的实训项目, 而是有一定的弹性空间, 注重培养学生的自主学习能力和创新能力, 让学生拥有过硬的专业知识的同时, 更重要的是让学生具备了学习的能力, 这个无论对学生的在校学习还是之后的工作都有很大的帮助。教师为了鼓励学生的自主学习和创新能力, 对那些题目新颖、富有创新精神的模块设计, 要在考核中适当的予以加分, 对学生加以肯定。这一个加分的机制要在课程开始之初就跟学生说明, 从而鼓励学生在之后的学习中多思考、多创新。

教师在日常的教学中, 也要多注意培养学生的非专业素质, 比如, 在进行课堂教学时, 可以采取合作小组的形式, 以合作小组的形式来回答问题、探讨以及项目制作等。这种形式, 可以有效培养学生的团队协作能力。此外, 为了培养学生的独立自主的能力, 可以进行单独的操作考核, 操作考核可以包括单片机编程能力考核、硬件设计能力考核、软件设计能力考核、硬件和软件的调试能力考核, 综合运用能力考核等。的立自主种形式, 不仅可以考、多创新。此采取合作小组的形式, 让学生

6 结束语

《单片机应用技术》课程是电子信息工程技术专业课程改革的试点课程。对《单片机应用技术》课程的课程体系及其实践研究进行探讨, 建立一个与电子信息工程技术专业对教学内容与课程体系改革的要求一致的《单片机应用技术》课程的课程体系, 将促进电子信息工程技术专业的课程建设, 推动电子信息工程技术专业的专业发展。电子信息工程技术专业教学内容与课程体系改革的思路:提出的以“淡化专业, 强化课程, 拓展基础, 增强能力”为建立课程体系和改革教学内容的出发点, 确定的教学内容能够反映当前社会技术先进水平和最新岗位资格要求, 有创新特色, 有利于培养目标的实现, 有利于学生素质和专业知识、技能的提高与拓展。

模块化的教学方法能够让理论学习和实践操作紧密相连, 能够有效提高学生的学习兴趣和学习积极性。在学习一定的理论知识之后, 将理论知识应用于实践操作中, 能够让学生感受到学习到了实实在在的本领, 有利于他们自信心的培养。在理论指导下的技能训练能够让学习的质量得到有效的提高。

学生在整个的实训项目过程中, 都能够得到教师的指导和帮助, 理论学习和实训项目有机结合, 能够避免出现学生盲目学习的情况。在模块化教学中, 学生是主体, 教师是一个指导者的角色, 在很多环节中, 学生要自己去观察、思考、分析和动手操作, 这样能够有效培养他们的自主学习能力和创新精神, 提高了他们的综合素质。

通过模块化教学, 教师的能力也得到了很大的提升。由于模块化教学中, 教师在宏观方面要认真设计模块, 在微观方面要精心选择相应的教学模式、教学方法和教学手段, 这些, 都能够让教师的业务能力和教学水平上升到一个新的台阶。

摘要:以《单片机应用技术》课程为例, 该文探讨了模块化教学内容和教学方法。模块化教学对学生的专业素质和创新能力的培养有一定指导意义。

关键词:模块化教学,单片机,创新

参考文献

[1]卢倩, 王福元, 崔治, 等.基于单片机的模块化实验台设计研究[J].中国高新技术企业, 2011, 18 (30) :58-60.

[2]赵方, 赵霞, 摆银龙, 等.“教学做一体化”教学模式在高职单片机教学中的应用[J].中国现代教育装备, 2010, 13 (22) :83-85.

[3]倪晓军, 章韵.基于模块化实验系统的单片机教学改革[J].计算机教育, 2009, 7 (18) :138-141.

单片机实验教学改革分析 篇3

关键词:单片机;教学改革;现状;措施

【中图分类号】TP368.1-4

单片机是一种最简单的电子计算机,在实际的生活中发挥着重要的作用,使得传统的电子设备具有智能化、自动化的功能,从而提高了设备的运行效率。同时单片机又因其结构简单、操作简便的特点,在各大高校中的自动化、通信等专业得到了普遍的应用。在实际的生产领域,单片机的性能的在不断的提高、其构造也在不断的复杂化,复杂数据的处理能力以及编程语言更加智能化,这就对单片机的实验教学提出了更高要求。

一、单片机实验教学的现状分析

目前,在单片机的实验教学的过程中,一般都是由老师在黑板或者是投影仪上,将在实验指导书中有关实验方面的内容讲解给学生,然后在试验箱中进行操作,将实验的结果演示给学生,最后让学生根据实验指导书的步骤进行实验。因单片机存在实践性很强的特点,老师只是采取口头讲解的方法,导致一些概念学生不理解,而试验箱的结果也会因学生的做法存在差别,从而影响其授课效果。

一般来说,现在单片机的实验教学设备大多采用实验箱或实验板的方式,其实验内容基本上是验证性的基本实验,如 I/O 口控制实验、串并转换、显示与键盘及 A / D等[1]。其实验的模式一般采用由实验老师选择一个实验,然后由学生编写程序,最后在实验箱上进行连线操作,验证其结果正确与否的方式。而在这其中就会存在一些问题,首先由于实验箱的限制,会使得实验的内容受到限制,重复性比较高,学生之间的抄袭现象严重。经常会出现一个做出来,全班都做出来了相同实验的现象,达不到实验的目的[2]。其次,由于实验箱的使用时间过长,存在接触不良等现象,就会导致实验效果出错,从而降低学生的兴趣。最后,由于试验箱只能放在实验室,对于一些爱好学习的学生来说,想做实验,会受到限制。因此必须对单片机的实验教学进行改革,使其适应当前社会发展的需要。

二、单片机实验教学改革措施

1、在单片机的实验教学中采用多媒体软件

多媒体教学的发展给实验教学带来了极大的便利,打破了传统的老师采用黑板教学的方式。教师可以利用多媒体软件直接进行各种实验的演示,让学生清楚的明白单片机的工作原理,实验的原理以及操作过程。利用多媒体软件技术,可以让学生清楚的看到每个实验的原理、步骤,从而实现了集语音、图像等一体的教学模式。这样不仅减轻了教师的负担,而且提高了教学效率,带动了学生的学习积极性。

例如在闪烁灯的实验中,教师就可以利用多媒体软件来进行教学。闪烁灯实验的任务就是在电路图中的P1.0端口上接一个发光二极管L1,使L1不停的一亮一灭,且时间间隔为0.2秒。如果是用传统的黑板教学,就会使得描述电路图中端口的接线比较繁琐,若利用多媒体软件教学则可以利用软件不仅可以将电路图中的接线过程清晰的呈现在学生的面前,而且可以将在闪烁灯这个实验中的实验原理、实验流程以及程序设计都可以清晰的表现出来,有利于学生的理解,便于学生掌握有关实验的知识,达到教学的目的。

2、引入 Proteus 仿真软件

由于在利用实验箱进行实验时,一般只有单片机I/O的接线示意图,学生只需要根据接线图接好线就可以进行实验,从而导致学生对外围电路一点也不了解。如果利用Proteus 仿真软件进行实验,就可以达到让学生熟悉单片机的外围电路以及了解常用元器件使用方法的目的。Proteus 仿真软件具有原理图设计、电路仿真、软件仿真的功能。Proteus虚拟仿真实验还具有不需要实验硬件设备就可以完成实验的优点。对于学生来说,计算机更容易普及,就可以不受实验室条件的限制可以自由的开展实验[3]。对教师而言,利用Proteus 仿真软件进行教学,使得教学目的更容易实现。

利用Proteus 仿真软件,可将复杂、难理解的概念形象化、具体化。例如在走马灯这个基本的实验,就牵扯到了中断的概念。在设计走马灯实验的时候共分为硬件设计和软件设计两个部分,其中硬件设计部分:首先使用89C2051单片机作为控制芯片,可以用P1端口作为控制端口,用来控制LED的點亮,其次用外部中断0控制走马灯的暂停和继续操作,最后用定时/计数器T0来控制走马灯闪烁的速度问题。这时教师可以利用Proteus 仿真软件演示给学生看,首先给学生演示不加中断的走马灯实验,可以看到由P1口控制LED灯的闪烁,其闪烁速度是由延时控制的。其次加上外端中断,即用外部的按键控制走马灯的暂停和继续操作。最后加上定时/计数器来控制走马灯的闪烁的速度,而此时的闪烁速度是由定时器控制[4]。其用Proteus 仿真软件仿真的效果图如图1所示。这样通过教师的演示操作,能够让了解中断的概念,以及对外端终端和定时器的使用方法,达到教学实验的目的。

结束语:

随着电子科学技术的不断发展,越来越多的芯片不断被研制出来并投入实际生产中,使得各种智能化的设备逐渐被带入人们的生活中,给人们的生活带来了极大的便利。随之带来的就是对硬件设备制造、嵌入式系统开发人才的大量需求[5]。各大院校通过对单片机实验教学的改革,使得学生更容易对单片机有关的知识进行掌握,从而使自身的专业能力得到提升,促进学生的就业能力。

参考文献:

[1]玄金红,郭振环. 单片机实验教学改革实例[J]. 科技信息(科学教研),2008,04:17.

[2]李莉. 单片机实验教学改革与创新能力的培养[J]. 电脑与电信,2008,04:71-72.

[3]冯刚. 单片机实验教学平台的改革[J]. 计算机教育,2010,02:144-146.

[4]郑晓霞. 浅谈单片机实验教学改革[J]. 青春岁月,2014,21:106.

单片机实验 篇4

一、MCS51单片机基本开发环境

1. 实验目的:

1)熟悉软件的集成开发环境 2)掌握单片机软件设计流程

3)掌握单片机存贮器结构及各窗口之间的联系 2. 实验内容:

1)用三种方法实现将累加器A内容改为20H

方法1--MOV A,#20H 方法2—MOV R0,#20H MOV A,R0 方法3—MOV R0,#20H XCH A,R0 心得:越往下做实验时就越感觉这题根本不能说是题目,但不得不说在没接触过编程软件,刚开始学的汇编,第一次做的实验就光这道题都觉得不知道做什么.所以凡是总有开始,不了解情况的多简单的都会觉得难.2)将58H位单元置为1,观察内部RAM中2BH内容的变化 代码:

SETB 2BH.0 JMP $ END 心得:这是关于内部存储中对单元和字节了解,不理解很容易做错.比如开始写的指令为

MOV R0,#58H;MOV @R0,#1

这是错误的指令。这就需要认真去了解单片机中的字节地址与位地址的关系。80C51中有位寻址区和字节寻址区。题目中58H为位地址,2BH为字节地址,且58H为2B字节的最低位。由于58H属于位寻址区,可用位操作指令 SETB 进行置位,SETB 2BH.0 执行后,2BH中内容变为01

3)如果当前状态为有进位、工作寄存器使用区2,请用3种方法设置这种状态

代码:

ANL PSW,#01H MOV A,PSW

CJNE A,#01,LAB2 LAB1:JMP LAB1

LAB2: SETB PSW.4 MOV P0,#01H MOV R0,#18H CLR PSW.3 MOV C,P0.0 MOV PSW,R0 MOV PSW.4,C CPL C MOV PSW.3,C END

心得:以上LAB2写了三段代码,可分别完成题目要求。不过实验时只是对代码进行了错误调试,没有对结果进行检验。其中值得注意的是对于布尔(位)操作指令的用法,比如传送指令必须经累加器C,如第二段中MOV P0,#01H;MOV C,P0.0,以及对于位寻址的方式(如需用到“.”隔开)的应用。4)编一个小程序将内部RAM中的20H单元的内容送到21H单元并调试

代码:

MOV R0,#20H MOV @R0,#10H MOV R1,#21H MOV @R1,20H JMP $ END

5)用程序将堆栈指针指向60H,然后在堆栈中依次压入01,02,03,04,05五个数,观察哪些单元内容发生了变化,各变为多少?从哪些窗口可以发现这些变化?顺序将堆栈中的五个数放入30H~34H五个单元中,编程实现之。

代码:

MOV R1,#60H MOV SP,R1 MOV DPL,#1H LAB1:PUSH DPL INC DPL MOV A,DPL CJNE A,#6,LAB1 POP 34H POP 33H POP 32H POP 31H POP 30H JMP $ END

6)将外部数据存贮器1000H~100FH 16个单元中存放00H~0FH 代码:

MOV DPTR,#1000H MOV R1,#10H LOOP:MOVX @DPTR,#1234H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END

心得:此处需要访问片外存储空间,需要借助寄存器DPTR,需注意其为16位的寄存器,在使用时若与八位寄存器进行数据交换时需分为高八位DPH与低八位DPL来用。7)若要求程序从0010H单元开始运行,可用两种方法实现?

方法一 ORG 0010H 方法二 AJMP 0010H

3. 选做实验内容:数据传送 目的:

1)掌握8051单片机内部数据存贮器、外部数据存贮器的数据传送特点和应用 2)掌握MOV,MOVX和MOVC类指令的用法及区别 内容:

1)将片内RAM数据区20H为首地址的十六个字节传送到30H为首地址的数据区,即:20H~2FH送30H~3FH

代码: ORG 0000H JMP MAIN ORG 0030H MAIN:MOV R0,#20H MOV R1,#30H LOOP:MOV @R0,#1234H MOVA,@R0 MOV @R1,A INC R0 INC R1 CJNE R1,#30H,LOOP JMP $ END

2)将外部数据存储器2000H~200FH单元的十六个数传送至内部数据存储器的30H~3FH 代码: ORG 0000H JMP MAIN ORG 0030H MAIN: MOV DPTR,#2000H MOV R1,#30H LOOP:MOVX @DPTR,#12H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END

总体心得体会:

第一次做实验主要是熟悉了解了下单片机编程软件的使用,开始接触时在对其软件不是太了解的情况下实验编程做的确实很乱,不清楚该怎样进行,比如不知如何进行对指令的调试,也不清楚该如何观察结果,没有一个整体的概念,所以在了解其开发环境上花了不少时间。经过一段时间的摸索后也终于了解了其具体的使用,也能够顺利的对指令的编程运用。运行指令时遇到的一些问题需要注意的也在上面各题中做了说明。还有需要注意的是:进入软件仿真时需要对存储空间进行查看的方法是在Address窗口中输入:d:00h 显示内部数据存储器从00h开始的单元; x:1000h 显示外部数据存储器从1000h开始的单元; c:0000H 显示程序存储器内容。还有由于伪指令 END 定义的原因,在程序末需加一条死循环调转指令(如 JMP $)使程序不会进入其他未知空间执行其他指令。实验

二、加、减法实验

1. 实验目的

1)正确使用单片机的加减运算指令

2)掌握不同指令对于程序状态字的影响及程序状态字的意义、用处 3)掌握ADD,ADDC,SUBB和DA A等指令的用法 4)学习模块化程序设计方法 2. 实验内容

1)编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。程序入口为: 加数:22H,21H,20H三字节,22H为最高位

被加数:32H,31H,30H三字节,32H为最高位

程序出口为: 23H,22H,21H,20H四字节,23H为最高位 例如:地址:23 22 21 20 32 31 30 执行前数据: 01 23 45 FF 01 01 执行后数据:01 00 24 46

代码:

ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 22H,#01H MOV 21H,#23H MOV 20H,#45H MOV 32H,#0FFH MOV 1H,#01H MOV 30H,#01H ACALL ADDI HERE:JMP HERE ORG 100H ADDI: PUSH PSW MOV R0, #20H;加数1地址、和的地址 MOV R1, #30H;加数2地址 CLR C MOV R2, #3;循环3次 LOOP: MOV A, @R0;取 ADDC A, @R1;加 MOV @R0, A;存 INC R0 INC R1 DJNZ R2, LOOP CLR A ADDC A, #0;得到进位 MOV 23H, A;保存 POP PSW RET END

2)编写三字节二进制减法子程序 入口:被减数: 52H,51H,50H, 50H为最低位

减数: 42H,41H,40H, 40H为最低位

出口:差:外部数据存贮器2003H~2000H(2000H为最低位)用主程序调用多组数据来调试,需考虑无借位和有借位两种情况。例如:

执行前:地址: 52 51 50 42 41 40

数据: 90 80 70 10 10 10

执行后:地址: 2003 2002 2001 2000

数据: 00 80 70 60 代码:

ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 52H,#90H MOV 51H,#80H MOV 50H,#70H MOV 42H,#10H MOV 41H,#10H MOV 40H,#10H ACALL SUB1 HERE:JMP HERE SUB1: PUSH PSW MOV R0, #50H;被减数地址 MOV R1, #40H;减数地址 MOV DPTR, #2000H;差的地址 CLR C MOV R2, #3;循环3次 LOOP: MOV A, @R0;取 SUBB A, @R1;减 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP CLR A SUBB A, #0;得到借位 MOVX @DPTR, A;存 POP PSW RET END

3)编写10位十进制加法子程序(十进制数采用压缩BCD码存放)入口: 加数:24H—20H,低地址放低字节

被加数:29H—25H,低地址放低字节

出口 和:4005H—4000H,低地址放低字节

要求调用多组数据调试,注意观察PSW的变化,理解DA A指令的含义。例如:

执行前地址:24 23 22 21 20 29 28 27 26 25

数据:12 34 56 78 90 88 99 33 12 74

执行后地址:4005 4004 4003 4002 4001 4000

数据: 01 01 33 89 91 64

代码:

ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 24H,#12H MOV 23H,#34H MOV 22H,#56H MOV 21H,#78H MOV 20H,#90H MOV 29H,#88H MOV 28H,#99H MOV 27H,#33H MOV 26H,#12H MOV 5H,#74H ACALL ADD2 HERE:JMP HERE ADD2: PUSH PSW MOV R0, #20H;加数1地址 MOV R1, #25H;加数2地址 MOV DPTR,#4000H CLR C MOV R2, #5;循环5次 LOOP: MOV A, @R0;取 ADDC A, @R1;加

单片机实验总结 篇5

本学期的单片机实验转眼已到尾声,共做了六项实验,分别是KEIL4、ISP下载软件的安装于使用、P1口输出循环灯实验、P1口转弯灯实验、P3.3口输入P1口输出实验和中断实验。在王承林老师的带领与指导下,我们认真完成每次的实验任务,并在实验中拓展,去发现一些新的问题。

在这六项实验中让我刻骨铭心的是中断实验。中断可以说是我的一个弱点,首先从概念上我理解比较含糊,理解能力差;其次,6个中断源比较难记清,经常记混,加之它们分配的寄存器存在太多的异同,工作方式更是让人头疼;再次,中断的使用。中断的精髓是在于使用,在电路设计中使用中断来控制单片机的工作,使之更好的达到所需目的。我刚开始学习的时候连怎么使用中断还是一无所知,后来我到图书馆里查找资料,慢慢的琢磨。至今学会了中断源的4种工作方式,能简单设计出中断电路。虽然起步晚,但我相信能厚积薄发,未来一定能熟练使用它们。

经过学习单片机的中断控制,我发现自己存在许多不足,但这些都困难无法阻挡我对单片机的追求。许多同学在做实验时都抱着不良的心态,他们只想照着实验本的步骤原原本本把实验完成就算大功告成,很少更深层次挖掘里面的奥秘,更有甚者是打酱油的,我不得不为他们如此浪费那么好的学习机会感到可惜。我能为他们做的就是帮助他们讲解一些单片机知识,有时教他们编写程序。实验室是培养高层次人才和开展科学研究的重要基地。邢台学院对培养学生的动手能力是十分重视的,为了提高学生的动手能力,让学生做相关实训并完成单片机实验,在实验的形式上注重培养学生的实验技能和动手能力。从单片机实验中学生就可以总结出大量的经验以适应当代社会的发展。

学习单片机这门课程,要掌握单片机指令系统中汇编语言各种基本语句的意义及汇编语言程序设计的基本知识和方法,以及单片机与其他设备相连接的输入输出中断等接口技术。使我从硬件软件的结合上理论联系实际,提高动手能力,从而全面掌握单片机的应用。

单片机课是一门实践性很强的课程,仅有课堂上理论知识的学习,对运用好单片机是完全不够的,必须亲自做实验,从实验中吸取教训,总结经验,增加实战经验,加深对单片机的理解,更好的运用单片机。单片机实验课的目的就是为学生提供做实验的机会,让学生能够从几个简单的实验中学会单片机开发的过程和单片机的实际运用。单片机实验课让我将课堂上学到的理论知识运用到实验当中去,在实验中发现问题,解决问题,强化理论知识的运用。下面是自己做实验当中遇到的一些问题和体会。

首先,自己在实验课上对老师讲解的东西没有很好的领会。自己觉得老师讲的电路和原理自己都懂,就没有认真听老师的讲解,但是当自己去理解程序和修改程序就发现自己对电路的工作原理和过程并不是很了解,使得自己在改编程序实现不同功能时遇到较多的问题。

其次,自己对汇编语言的运用不是很熟练。自己之前接触和使用的编程语言都是诸如C语言等的高级语言,对汇编语言基本上是空白状态。虽然每个实验老师都给出了参考程序,但是自己理解整个程序的运行过程和程序的功能依然遇到了比较大的困难。这就说明基础薄弱是实验中最大的问题。

最后,也是最突出的一个问题。自己逻辑思维和分析问题的能力比较欠缺。对程序的分析能力不足,不能够很好的理解程序段之间的逻辑关系。同时,自己对实验中遇到的问题不能及时分析并找出解决的办法,知识一味的依赖老师的指导和同学的帮助。这也提醒自己,只有多加强锻炼,才能不断提高这方面的能力。

六周的时间说短不短,说长不长,因为在这个不同寻常的六周时间里,我除了做实验,还到图书管理查阅了许多与单片机相关的书籍,学习用C语言编写程序,艰苦奋斗,使我在单片机学习上有了质的飞跃。现在的我虽然不是学习最好的,可是我已经改变过去一事无成的我,如今站在大家面前是个全新的我。我始终梦想着以后自己能在单片机行业上有所建树,经过自己的双手创造无价的财富,成就感伴随终生。

身存在的不足之处。而且这也激发了我今后努力学习的兴趣。

发现问题、提出问题、分析问题、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。

1、不管做什么事,计划是很重要的。没有一个完好的计划,做事情就会没有一个好的顺序,做事情会比较乱,很难成功。而有一个好的计划,不管做什么事都会事半功倍,做事心中有数,明确重点和缓急,不会有疏漏。这样才能提高成功率。

2、做事要多动脑,选出最好的方法。一件事往往有多种解决方法,一个好的方法,不仅能使事情事半功倍,而且往往决定最后的成与败,所以做事时一定要多动一下脑筋,想出最好的方法。

3、要注意细节。细节决定成败,这句话在这次课题中不仅一次得到了印证,特别是在软件的编程过程中,一点点的错误就会使你整个程序不能运行。因此我们不仅仅要有整体意识,也要注意细节,不要因一个关键地方的一个细节而导致满盘皆输。

4、最后,也是最重要的一点,通过这次课题,我们学到了很多有关单片机方面的知识,也对单片机有了更深入的了解。使我们受益匪浅。

总之,亲自动手是课堂学习的延续,电子领域随时随地都在发生着翻天覆地的变化,现有的知识储备总是落后于科技的发展脚步,我们只有不断学习新知识,才能做到面对新课题时游刃有余。

感谢王承林老师的教育指导!

单片机实验报告 篇6

学号_ 实验班号_ 机器号__

一、实验目的:

1.掌握单片机C语言程序结构; 2.掌握单片机C语言程序调试方法;

3.掌握MSP430FG2553基本I/O控制方法; 4.巩固编写和调试单片机C语言程序方法; 5.了解简单接口电路的控制方法;

6.了解MSP430汇编格式的寻址方式和指令系统

二、实验基本任务

1、练习调试程序

内容:用跳线将实验板上的8个发光二极管与单片机连接。编写的程序L2_debug.C如下,功能是控制与单片机相连接的8个发光二极管在全亮与全灭这两种状态下循环变换。该程序没有语法上的错误,但运行后不能实现上述现象,请上机调试其中的问题,指出程序的问题,并修改程序。

答: 将单片机P2端口的8个引脚与L1~L8相连。电路如下:

原有程序为:

通过上机调试,发现原程序有以下错误:

① 由于是P2端口上引脚与LED相接,所以应该设置P2而不是P1 ② 应将P2端口调为基本I/O端口,仅通过DIR寄存器是不行的 ③ 源程序没有对P2OUT进行初始化,无法达到全亮全灭的效果

④ 没有循环结构,无法达到全亮全灭的循环效果,可用for(;;)或while(1)结构 ⑤ delay()函数延时过短,人眼几乎无法感受亮灭的变化 正确的程序应为: #include “io430.h” void delay();int main(void){

WDTCTL = WDTPW + WDTHOLD;//关闭看门狗

P2SEL=0;

//将P2端口设为基本I/O端口

P2SEL2=0;

P2DIR=0Xff;

//设置端口2为输出方向

P2OUT=0;

//初始化P2端口引脚,For(;;){

P2OUT=~P2OUT;

delay();} } void delay(){

unsigned int j;

for(j=0;j<0xffff;j++);

//延时 } 2.

控制发光二极管的显示变化

在任务 1 的连线基础上,编程控制 8 个发光二极管按下面的 2 种规律循环变换,即规 律 1→规律 2→规律 1→规律 2→……,如此循环反复。

1)规律 1:8 个 LED 灯顺时针一个一个单独点亮,即 L1 L2……L7 L8 亮,每次只有一个灯亮,其他灯灭;

2)规律 2:8 个LED灯两两点亮,顺序为 L1 和 L8,L2和 L7,L3 和 L6,L4 和 L5,每次只有两个灯亮,其他灯灭; 答:程序如下: #include “io430.h” void delay();void rule1();void rule2();int main(void){

WDTCTL = WDTPW + WDTHOLD;//关闭看门狗

P2SEL=0;

//将P2端口设为基本I/O端口

P2SEL2=0;

P2DIR=0Xff;

//设置端口2为输出方向

P2OUT=0;

//初始化P2端口引脚,for(;;){

rule1();

rule2();

} } void rule1()

//规律1 {

unsigned char LED_0=0x01,LED_temp;

LED_temp=LED_0;

for(unsigned int i=0;i<8;i++)

{

P2OUT=~LED_temp;

delay();

LED_temp=LED_temp<<1;

} } void rule2()

//规律2 {

unsigned char LED_data[]={0x81,0x42,0x24,0x18};

for(unsigned int i=0;i<4;i++)

{

P2OUT=~LED_data[i];

delay();

} } void delay(){

unsigned int j;

for(j=0;j<0xffff;j++);

//延时 }

思考:

如果选择用单片机的 P1 端口控制 8 个发光二极管,如何在实验板上设计连线、并编程实现任务 2 的功能?

答:

设计连线:将P1端口的8个引脚与L1~L8对应相连。

程序设计:将原先程序中所有关于P2端口的操作都换为P1端口即可 3.用按键控制发光二极管的显示变化

在任务 2 基础上,增加 2 个按键与单片机的引脚相连,编程实现由按键控制发光二级管 的显示变化:当按下实验板上的 K1 键时,8 个发光二极管按任务 2 中的规律 1 变化; 当按下实验板上的 K2 键时,8 个发光二极管按任务 2 中的规律 2 变化。

答:在实验1的连线基础上,将P1.0、P1.1分别于K1、K2相连。如下图

程序如下:

#include “io430.h” void delay();void rule1();void rule2();int main(void){

WDTCTL = WDTPW + WDTHOLD;//关闭看门狗

P2SEL=0;

//将P2端口设为基本I/O端口

P2SEL2=0;

P2DIR=0xff;

//设置端口2为输出方向

P2OUT=0;//初始化P2端口引脚,P1SEL&=~(BIT0+BIT1);//设置P1为基本I/O

P1SEL2&=~(BIT0+BIT1);

P1DIR&=~(BIT0+BIT1);//设置P1.0和P1.1为输入状态

P1REN=0x03;//使P1.0和P1.1能上拉电阻

P1OUT=0x03;

int key=2;

for(;;)

{

if((P1IN&BIT0)==0)

key=0;

else if((P1IN&BIT1)==0)

key=1;

if(key==0)

rule1();

else if(key==1)

rule2();

} }

void rule1()

//规律1 {

unsigned char LED_0=0x01,LED_temp;

LED_temp=LED_0;

for(unsigned int i=0;i<8;i++)

{

P2OUT=~LED_temp;

delay();

LED_temp=LED_temp<<1;

} } void rule2()

//规律2 {

unsigned char LED_data[]={0x81,0x42,0x24,0x18};

for(unsigned int i=0;i<4;i++)

{

P2OUT=~LED_data[i];

delay();

} } void delay(){

unsigned int j;

for(j=0;j<0xffff;j++);

//延时 } 4.并行方式控制数码管的显示

参看附录A,掌握 MSP430G2553 扩展板上 4 个数码管的工作原理,用单片机的 8 个 I/O 引脚并行控制数码管的控制端 Sh~Sa,设计相关连线。编程完成下面任务:

1)画出单片机与 4 个数码管连接的原理图,分析控制方法;

2)编程控制四个数码管从右到左、依次每个数码管分别循环显示 0~

9、A~F。

3)用 4 个数码管做一个电子表,高两位数码管显示分钟值,低两位数码管显示秒值。每计数到 5分钟时,控制蜂鸣器发出一报警声,然后又从 0 开始重新计时。

其中 1 秒时间可通过延时完成,如执行 for(i=0;i<0x1FFFF;i++),约为 1 秒。本次实验对 秒值长短精确度不要求。

思考:每个数码管显示的时间不能太长,也不能太短,为什么?

答:

1)原理图如下:

控制方法:

P2.0~P2.7与S a~S h相连,控制LED灯的亮灭,P1.0~P1.3控制选择哪一个数码管进行输出。

2)编程控制四个数码管从右到左、依次每个数码管分别循环显示 0~

9、A~F。程序如下: #include “io430.h” void delay();const char LEDtab[16]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};int main(void){ WDTCTL = WDTPW + WDTHOLD;//关闭看门狗 P1SEL=0;//设置P1为基本I/O P1SEL2=0;P1DIR=0xff;//设置P1为输出出口 P1OUT=0;P2SEL=0;//设置P2为基本I/O P2SEL2=0;P2DIR=0xff;//设置P2为输出出口 P2OUT=0xff;unsigned int i;for(;;){ P1OUT=BIT0;//第一个数码管开始输出 for(i=0;i<16;i++){ P2OUT=LEDtab[i];delay();} P1OUT=BIT1;//第二个数码管开始输出 for(i=0;i<16;i++){ P2OUT=LEDtab[i];delay();} P1OUT=BIT2;//第三个数码管开始输出 for(i=0;i<16;i++){ P2OUT=LEDtab[i];delay();} P1OUT=BIT3;//第四个数码管开始输出 for(i=0;i<16;i++){ P2OUT=LEDtab[i];delay();} } } void delay(){ //延时函数 unsigned int j;for(j=0;j<0xffff;j++);//延时 } 3)用 4 个数码管做一个电子表,高两位数码管显示分钟值,低两位数码管显示秒值。每计数到 5分钟时,控制蜂鸣器发出一报警声,然后又从 0 开始重新计时。

其中 1 秒时间可通过延时完成,如执行 for(i=0;i<0x1FFFF;i++),约为 1 秒。本次实验对 秒值长短精确度不要求。

答:在上述连线的基础上,将P1.7与BUZZ相连,程序如下

#include “io430.h” void delay();void second();const char LEDtab[10]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};unsigned char a,b,c,d;int main(void){ // 关闭看门狗

WDTCTL = WDTPW + WDTHOLD;P1SEL=0;P1SEL2=0;P1DIR=0xff;P1OUT=0+BIT7;P2SEL=0;P2SEL2=0;P2DIR=0xff;P2OUT=0xff;//初始化 for(;;){ a=b=c=d=~0x3F;for(int k=0;k<5;k++)//分钟 { c=LEDtab[k];for(int j=0;j<6;j++)//秒钟十位 { b=LEDtab[j];for(int i=0;i<10;i++)//秒钟个位 { a=LEDtab[i];second();} } } P1OUT=~BIT7;//报警器报警 for(int j=0;j<0xffff;j++);} } void delay()//延时函数 { for(int j=0;j<0x100;j++);} void second()//读秒函数,同时以很快的速度显示4个数码管的读数 { for(int j=0;j<40;j++){ P2OUT=a;P1OUT=BIT0+BIT7;delay();P2OUT=b;P1OUT=BIT1+BIT7;delay();P2OUT=c;P1OUT=BIT2+BIT7;delay();P2OUT=d;P1OUT=BIT3+BIT7;delay();} } 思考:每个数码管显示的时间不能太长,也不能太短,为什么?

答:时间过长,没有连续的效果;时间过短,不利于观察读数。5.汇编格式指令和寻址方式的学习(可在simulator下完成)

L2_2.c源程序见下,建立C项目,进入DEBUG状态,点击view/disassembly,在反汇编 窗口得到L2_2.c汇编格式指令的程序代码,如图2-1和图2-2,阅读该程序的汇编格 式代码。

1)程序用到了哪些指令?

答:数据传送指令;调用指令;逻辑运算指令;跳转指令;堆栈操作指令;减法运算指令;加法运算指令;返回指令;无条件转移指令。2)程序用到了哪几种寻址方式?

答:立即数寻址;寄存器寻址;绝对地址寻址;符号地址寻址。

3)修改l2_2.C,将变量i定义为全局变量,通过反汇编的代码,比较与定义为局部变

量的不同;

答:定义为全局变量时寻址方式为绝对寻址;而定义为局部变量时为寄存器寻址;全局变量在分配内存是是分配在数据区的,所以所有的程序代码都可以访问,但是局部变量是在堆栈段,所以局部变量在使用完成之后就消失了的

4)修改L2_2.C, 将变量i的类型从 unsigned int 类型,改为unsigned long 类型,反汇编看看函数delay的代码发生了什么变化?程序执行的结果有什么不同?为什 么?(需在实验板上运行)。

答:

① 代码增加了。unsigned int类型下

Unsigned long 类型下:

② 程序执行时,发光二极管亮灭的时间间隔增大 ③ delay程序执行时间增长

三、已完成的选做任务

1.(选做)用蜂鸣器、发光二极管显示按键信息

设计在实验板上用 3 个相邻发光二极管、8 个按键、1 个蜂鸣器与单片机的连接,编程

完成每按下某一个键,8个发光二极管以二进制形式显示该键值,K1~K8 的键值分别 为 000~111B,同时每按下一次键,蜂鸣器响一下,用声音提示接收到按键信息。答:连线:将P2.0~P2.2分别于L1~L3相连,P2.3与BUZZ相连,P1.0~P1.7分别与K1~K8 相连.程序如下:

#include “io430.h” void delay();int main(void){

WDTCTL = WDTPW + WDTHOLD;

P2SEL&=0xf0;

P2SEL2&=0xf0;

P2OUT|=0x0f;

P2DIR=0xff;

P1REN=0xff;

P1OUT=0xff;

P1SEL=0;

P1SEL2=0;

P1DIR=0x00;

//初始化

for(;;){

if((P1IN&BIT0)==0)

//按下K1

{

P2OUT=0x07;

//LED灯显示为000,蜂鸣器响

delay();

P2OUT+=BIT3;

//蜂鸣器停止响

};

if((P1IN&BIT1)==0)

{

P2OUT=0x06;

delay();

P2OUT+=BIT3;

};

if((P1IN&BIT2)==0)

{

P2OUT=0x05;

delay();

P2OUT+=BIT3;

};

if((P1IN&BIT3)==0)

{

P2OUT=0x04;

delay();

P2OUT+=BIT3;

};

if((P1IN&BIT4)==0)

{

P2OUT=0x03;

delay();

P2OUT+=BIT3;

};

if((P1IN&BIT5)==0)

{

P2OUT=0x02;

delay();

P2OUT+=BIT3;

};

if((P1IN&BIT6)==0)

{

P2OUT=0x01;

delay();

P2OUT+=BIT3;

};

if((P1IN&BIT7)==0)

{

P2OUT=0x00;

delay();

P2OUT+=BIT3;

};

};} void delay(){

unsigned int i;

for(i=0;i<0xffff;i++);

//延时 } 2.(选做)增加按键控制功能:

按下 K1 键开始计时(或称继续计时)

K2 键暂停计时,计时保持不变,此后若

;按下 按下 K1 键将继续计时;按下 K3 键将计时归零,并停止计时,若此后按下 K1 键,将开始计时。

答:在前面并行电路制作电子表连线的基础上,将P1.4~P1.6与K1~K3相连

程序如下:

#include “io430.h” void delay();void second();const char LEDtab[10]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};unsigned char a,b,c,d;unsigned char key=0;int main(void){ // 关闭看门狗

WDTCTL = WDTPW + WDTHOLD;P1SEL=0;P1SEL2=0;P1DIR=0x8f;//设置P1引脚的输入输出状态 P1REN=0x70;//使P1.4~P1.6能上拉电阻 P1OUT=BIT4+BIT5+BIT6+BIT7;P2SEL=0;P2SEL2=0;P2DIR=0xff;P2OUT=0xff;//初始化 while(1){ while(key!=1){ //等待按K1键开始计时 if((P1IN&BIT4)==0)key=1;} a=b=c=d=~0x3f;unsigned char flag=1;for(int k=0;k<5;k++){ c=LEDtab[k];for(int j=0;j<6;j++){ b=LEDtab[j];for(int i=0;i<10;i++){ a=LEDtab[i];if((P1IN&BIT5)==0)key=2;while(key==2)//等待按K2键暂停计时 { second();if((P1IN&BIT4)==0)key=1;if((P1IN&BIT6)==0)key=3;} if(key==1)second();if(key==3)//清零操作开始 { flag=0;break;} } if(flag==0)break;} if(flag==0)break;} P1OUT=BIT4+BIT5+BIT6;//蜂鸣器响 for(int j=0;j<0xffff;j++);P1OUT=BIT4+BIT5+BIT6+BIT7;//蜂鸣器停止响 } } void delay(){ for(int j=0;j<0x500;j++);} void second(){ for(int j=0;j<40;j++){ P2OUT=a;P1OUT=BIT0+BIT4+BIT5+BIT6+BIT7;delay();P2OUT=b;P1OUT=BIT1+BIT4+BIT5+BIT6+BIT7;delay();P2OUT=c;P1OUT=BIT2+BIT4+BIT5+BIT6+BIT7;delay();P2OUT=d;P1OUT=BIT3+BIT4+BIT5+BIT6+BIT7;delay();} } 3.(选做)串行方式控制数码管的显示

1)画出单片机与 4 个数码管连接的原理图,分析控制方法;

2)编程控制四个数码管从右到左、依次每个数码管分别循环显示 0~

9、A~F。

3)用 4 个数码管做一个电子表,高两位数码管显示分钟值,低两位数码管显示秒值。每计数到 5分钟时,控制蜂鸣器发出一报警声,然后又从 0 开始重新计时。其中 1 秒时间可通过延时完成,如执行 for(i=0;i<0x1FFFF;i++),约为 1 秒。本次实验对 秒值长短精确度不要求。答:

1)原理图如下:

2)编程控制四个数码管从右到左、依次每个数码管分别循环显示 0~

9、A~F。答: 连线方式:

将P1.0~P1.3与S1~S4相连,P1.4与DS相连,P1.5与SHCP相连,P1.6与STCP相连,Sa~Sh与Q0~Q7相连。程序如下:

#include “io430.h” void output(char Data);void delay();const char LEDtab[16]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};int main(void){

WDTCTL = WDTPW + WDTHOLD;

P1SEL=0;

P1SEL2=0;

P1DIR=0XFF;

P1OUT=BIT7;

//初始化

while(1)

{

P1OUT=BIT0+BIT7;

//第一个数码管输出

for(int i=0;i<16;i++)

{

output(LEDtab[i]);

for(int i=0;i<0xffff;i++);}

P1OUT=BIT1+BIT7;

for(int i=0;i<16;i++)

{

output(LEDtab[i]);

for(int i=0;i<0xffff;i++);}

P1OUT=BIT2+BIT7;

for(int i=0;i<16;i++)

{

output(LEDtab[i]);

for(int i=0;i<0xffff;i++);}

P1OUT=BIT3+BIT7;

for(int i=0;i<16;i++)

{

output(LEDtab[i]);

for(int i=0;i<0xffff;i++);}

} }

void output(char Data)

//串行方式输出指定信号 {

for(int i=0;i<8;i++)

{

if((Data&BIT7)==0)

P1OUT&=~BIT4;

else

P1OUT|=BIT4;

Data=Data<<1;

P1OUT|=BIT5;

delay();

P1OUT&=~BIT5;

}

P1OUT|=BIT6;

delay();

P1OUT&=~BIT6;} void delay()

//延时函数 {

for(int i=0;i<0xff;i++);} 3)用 4 个数码管做一个电子表,高两位数码管显示分钟值,低两位数码管显示秒值。每计数到 5分钟时,控制蜂鸣器发出一报警声,然后又从 0 开始重新计时。答:在上述连线的基础上,将P1.7与BUZZ相连,程序如下 #include “io430.h” void delay();void second();void output(char Data);const char LEDtab[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};unsigned char a,b,c,d;int main(void){

WDTCTL = WDTPW + WDTHOLD;// 关闭看门狗

P1SEL=0;

P1SEL2=0;

P1DIR=0XFF;

P1OUT=BIT7;

//初始化

for(;;){

a=b=c=d=~0x3F;

for(int k=0;k<5;k++)

//分钟

{

c=LEDtab[k];

for(int j=0;j<6;j++)

//秒钟十位

{

b=LEDtab[j];

for(int i=0;i<10;i++)//秒钟个位

{

a=LEDtab[i];

second();

}

}

}

P1OUT=~BIT7;

//报警声

for(int j=0;j<0xffff;j++);

} } void output(char Data)

//串行方式向数码管输出信号 {

for(int i=0;i<8;i++)

{

if((Data&BIT7)==0)

P1OUT&=~BIT4;

else

P1OUT|=BIT4;

Data=Data<<1;

P1OUT|=BIT5;

delay();

P1OUT&=~BIT5;

}

P1OUT|=BIT6;

delay();

P1OUT&=~BIT6;} void delay()

//延时函数 {

for(int j=0;j<50;j++);} void second(){

for(int j=0;j<0x40;j++){

output(a);

P1OUT=BIT0+BIT7;

delay();

output(b);

P1OUT=BIT1+BIT7;

delay();

output(c);

P1OUT=BIT2+BIT7;

delay();

output(d);

P1OUT=BIT3+BIT7;delay();}} 思考:

如果数码管电路的控制端DS、SHCP、STCP分别与单片机的P2.0~P2.2相连,如何修改程序? 答:引脚初始化时也将P2端口的前三个引脚初始化,然后将上述程序中的output()函数定义改为:

void output(char Data)

//串行方式向数码管输出信号 {

for(int i=0;i<8;i++)

{

if((Data&BIT7)==0)

P2OUT&=~BIT0;

else

P2OUT|=BIT0;

Data=Data<<1;

P2OUT|=BIT1;

delay();

P2OUT&=~BIT1;

}

P2OUT|=BIT2;

delay();

P2OUT&=~BIT2;} 如果程序中没有关闭看门狗那条语句,后果是什么?

单片机实验内容 篇7

关键词:单片机实验教学,Proteus仿真,实验箱,一个小灯亮灭

单片机原理及应用这门课程是高校计算机、电子信息工程、通信工程、自动化等很多工科电类专业的基础课程, 该课程具有较强的理论性和实践性, 学生初次学习往往感觉该课程难以理解, 内容枯燥。而传统的单片机课程实验教学主要是依靠实验板或者实验箱这样的硬件平台完成, 该实验平台开展的大多是一些验证性实验, 学生只需要简单地在实验箱上搭几条线, 或者简单地下载几条程序在实验箱上运行观察结果即可, 这样学生不能够真正地理解其中的原理, 从而导致学生学习兴趣下降[1]。另外, 实验箱使用时间长, 会存在损坏和接触不良的现象, 会影响到实验结果, 降低了学生对实验的兴趣, 影响了实验效果。而且, 实验箱只存放在实验室里, 如果学生对实验内容有兴趣, 想继续学习, 又受到限制[2]。

一、Proteus仿真软件及应用

Proteus是Lab center Electronics公司于1989年推出, 为单片机应用系统开发提供的功能强大的虚拟仿真工具。除具有模拟电路、数字电路的仿真功能外, 最大特色是对单片机应用系统连同程序运行以及所有的外围接口器件、外部测试仪器一起仿真。针对单片机的应用, 可直接在基于原理图的虚拟模型上进行编程, 并实现源代码级实时调试。用软件手段对单片机应用系统进行仿真开发, 与用户样机硬件无任何联系, 只需在PC机安装Proteus, 就可进行单片机应用系统的设计开发、虚拟仿真与调试。

Proteus仿真软件不仅节约实验成本, 减少实验开支, 而且“绿色”, “环保”, 例如, 制作PCB板, 传统的做法是先画原理图 (电路图) , 再布线, 然后焊接, 接着就是调试, 如果调试期间发现问题, 那么就存在着重新布线, 或者重新焊接问题, 甚至有时候会因为某个布线出错, 导致整个板子作废, 需要重新设计一块新电路板的后果。这样, 既造成浪费, 又因反反复复布线“污染”了实验室环境。而用Proteus仿真软件模拟PCB板制作, 就可以直接在proteus软件上构造设计PCB板, 并可以将其反复调试, 调试成功以后, 再实际制作PCB板, 这样设计调试周期短, 成功率高, 也避免了器件浪费。

(一) Proteus软件与单片机实验教学

利用Proteus仿真软件进行仿真实验不仅可将单片机实验功能形象化, 也可将许多单片机实验运行过程形象化, 达到实物演示的效果。该软件具有各种常用仿真元器件库, 能够提供实验所用的元器件, 从而实现仿真电路与传统的单片机实验硬件电路高度对应[1], 学生通过亲自动手, 用导线将元器件按正确的方向连接起来, 加深其对相关电路知识的理解, 也加深了对单片机元器件功能的了解, 激发了学生学习单片机的兴趣。利用Proteus仿真软件进行单片机实验教学具有实验内容广泛、硬件投入少、损耗小等优势。

(二) 单片机实验仿真应用实例

Proteus可以将一些现象虚拟放大, 实验者通过观察现象, 加深对理论的理解。以单片机实验教学中控制一个小灯的亮灭为例, 详细介绍Proteus软件的实验仿真过程。首先, 绘制实验电路原理图。打开Proteus ISIS软件, ISIS (智能原理图输入) 界面用来绘制单片机系统的电路原理图, 在该界面下, 可进行单片机系统的虚拟仿真。在元件库中选择所需元件, 按照实验电路连接元器件, 即完成了仿真电路图的绘制, 如图1所示。

其次, 进行软件调试及仿真。在实验教学中通常采用Keil软件来完成软件的调试。本实验采用汇编语言进行程序的编写, 按照实验内容编制程序如下:

编写好源程序后, 在Keil软件中编译, 调试无误, 并通过编译生成可执行的“一个灯亮灭.hex”文件, 以备仿真时调用。如图2所示。

然后, 介绍在protues ISIS软件中如何调用源程序及仿真运行。打开已经绘制好的实验电路原理图, 选中单片机芯片AT89C51, 点击鼠标右键选择“Edit Properties”属性, 出现编辑元器件对话框, 在Program File选项中加载编译好的“一个灯亮灭.hex”文件, 其他选项可以设置为默认, 最后点击“OK”完成设置。

接下来, 就可以点击运行按钮进入电路仿真运行状态, 若程序无误, 且硬件电路连接正确, 则会出现一个小黄灯亮灭交替的仿真运行结果, 其中, 元器件引脚还会出现红、蓝两色的方点 (在微机显示器上可分辨出颜色) , 来表示此时引脚电平高低。红为高电平, 蓝表示低电平。

而实际上, 因为程序中没有加延时子程序, 小灯亮灭的速度非常快, 用肉眼是捕捉不到小灯变化的, 因此, 如果用单片机实验板或者实验箱做此实验的话, 看到的只是小灯保持一个灭的状态不变的想象。

尽管Proteus具有开发效率高, 不需要附加的硬件开发装置成本, 且在多数场合可以获得和实际一样的效果, 但是需要注意的是, 使用Proteus来对用户系统仿真, 是在理想的状况下的仿真, 对硬件电路的实时性还不能完全准确地模拟, 因此不能进行用户样机硬件部分的诊断与实时在线仿真。而且, 如果完全依靠仿真, 学生获得的感性认识远远不够, 因此, 基于实验板或者实验箱的实验教学仍然是不可缺少的环节[3]。

二、仿真与实验板结合的实验教学设计

通过proteus仿真软件, 打破时间限制, 实验课的课时有限, 只靠课堂时间, 学生很难完全掌握所学知识。通过Proteus软件, 只需要一台电脑, 学生就可以利用课余时间来设计电路, 编程仿真。教师可以在实验课前让学生熟悉实验课的内容, 用Proteus画好原理图, 编好程序完成仿真, 确认软件没有问题。在实验课的时候, 再在实验板或者实验箱上完成实际的操作。这样软硬件结合, 理论联系实际, 学生对实验内容掌握得更透彻[2]。

在实验板或者实验箱实际操作过程中, 如果实验结果与仿真结果不一样, 还能促进学生找原因, 例如, 是实验箱接线不对呢, 还是Proteus仿真不精确, 亦或者是实验箱硬件部分有损坏等, 这样激发了学生学习单片机实验的兴趣, 加深了对单片机原理的认识, 提高了单片机的应用水平。

三、结束语

将Proteus引入实验教学并结合实验板, 不但弥补了传统实验教学中存在的设备紧张、更新速度慢、元器件损耗大等不足, 而且实现了理论与实践的有机结合, 使教学过程更加丰富且易于表达清楚, 亦打破了时间和空间的限制, 提高了学生学习的主动性。实践证明, 只有在教学中将现代化的手段和传统实验方式有机结合起来, 充分发挥各自优势, 才能达到事半功倍的效果[4]。

参考文献

[1]朱永涛, 李明菜, 高凤梅.基于Proteus仿真软件的单片机实验教学改革探讨[J].科技信息, 2011, (27) .

[2]常淑俊, 黄杰勇.单片机实验教学的探讨[J].实验科学与技术, 2013, 11 (2) .

[3]伦翠芬, 张海峰.Proteus仿真与实验板结合的单片机教学[J].武汉职业技术学院学报, 2012, 11 (4) .

单片机实验内容 篇8

關键词:Proteus;Keil;单片机;虚拟实验室

单片机作为嵌入式系统的一个重要分支,目前已广泛地应用于智能化家用电器、办公自动化设备、工业自动化控制、智能化仪表、通信产品、汽车电子产品、航空航天国防军事等人类生活的各个领域。全国大中专院校电气自动化专业、应用电子技术专业、通信专业、机电专业等许多专业相继开设了单片机课程。

目前单片机的课堂教学及实验中存在诸多问题:一是单片机课堂教学多以理论教学为主,教学中需要很多硬件设备,一般理论课堂难以辅助硬件进行教学,即便演示,效果也不好。二是单片机实验室由专人管理,学生除了上课外,平时难得有机会实践,而采用的单片机实验设备大多是成品,学生很难参与其中的细节设计,因此学生动手能力也很难得到提高。三是配套的实验设备多采用实验箱或硬件仿真器配目标实验板,这种配置方式直接导致该课程的实验项目有限、实验时间过长、设备维护工作量大等现实问题。四是实验设备不足、落后,单片机实验室建设成本高,由于技术的不断更新,设备的不断老化,实验仪器也会很快落后。

针对上述问题,作者将Proteus和Keil软件引入单片机课堂教学,以构建一个适合“教、学、做”一体化教学的单片机虚拟实验室,把单片机实验室搬进课堂,实现理论教学和实践教学的无缝衔接,让理论教学和实践教学同时进行,教师根据授课要求随意切换理论教学和实践教学的环境,教师能够做到“教中做、做中教”,学生能够做到“学中做、做中学”,达到真正意义上的“教、学、做”一体化的教学要求,将理论教学和实践教学融为一体,提高学生的动手实践能力,激发学生的创新思维,强化学生的职业能力,提高教学效果。

一、Proteus和Keil软件特点

(一)Proteus软件特点

Proteus软件是英国Labcenter公司开发的电路分析与实物仿真软件,它运行于Windows操作系统,可以仿真、分析各种模拟器件和集成电路。Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。当硬件和软件调试成功后,利用Proteus软件提供的原理图绘制工具和印刷电路板设计工具,很容易获得其PCB图,为实物的制作提供方便。因此该软件给我们提供了一个元器件丰富、测试仪器齐全、单片机的种类繁多、开发工具齐备的单片机虚拟实验室。

(二)Keil软件特点

Keil软件是目前最流行开发MCS-51系列单片机的开发软件,它提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部份组合在一起。KEIL μVision支持众多不同公司的MCS-51架构的芯片,它集编辑、编译、仿真等于一体,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序、软件仿真方面也有很强大的功能。

将Proteus与Keil整合起来使用,构建单片机虚拟实验室,充分利用各自的仿真功能,可以让单片机的软硬件设计和调试变得十分方便。

二、单片机虚拟实验室构建

利用Proteus实现对单片机实验的改进,单片机实验将脱离传统实验硬件的限制,并结合目前广泛使用的一款51单片机开发平台KeilμVision2,将Proteus与KeilμVision2结合起来,联合利用它们的仿真功能,充分利用各自的优势构建虚拟实验室。基于Proteus和Keil的虚拟实验室构建步骤如下:

1.分析问题,提出解决方案。针对要解决的问题进行分析,确定控制要求,提出多种解决方案,综合考虑实现难易程度、硬件成本和系统性能等因素,确定最终的软硬件实施方案。

2.设计仿真电路。将手工绘制的硬件电路原理图在Proteus软件中实现,学生通过Proteus软件的使用,可以学到硬件电路设计、组装、调试的方法。

3.编写程序。学生通过Keil软件编制、调试应用程序,掌握单片机软件开发的步骤、方法和技巧。

4.软硬件联合仿真系统。软硬件联合仿真系统是将Proteus硬件开发环境和Keil软件开发环境二者在计算机上结合使用,达到完美的单片机模拟开发全过程,其结合方式有两种,一种是静态结合,一种是动态结合。静态结合仿真就是把Keil C51软件下生成的HEX文件,嵌入Proteus软件进行软硬件模拟仿真。静态结合仿真优点是简单方便,缺点是HEX文件嵌入Proteus软件后,只能在Proteus软件下仿真,不能在Keil C51软件动态观察。动态结合仿真就是利用Proteus软件支持第三方的软件编译和调试环境的特点,把Proteus软件和Keil C51软件动态连接,实现二者的动态实时仿真。动态结合仿真优点是可以实现在Keil C51软件动态仿真,在Proteus软件实时观察结果,缺点是Pruteus软件和Keil C51软件设置相对比较繁琐。

5.观察实验结果。单击Proteus中的执行按钮,开始仿真。如果实验没有达到预期效果,可以很方便地修改硬件电路或软件程序重新实验,直到完全达到控制要求为止。

三、仿真教学实例

下面以基于AT89C51的串行多通道A/D转换模拟实验为例,介绍如何用Proteus和Keil实现对单片机控制系统的联合仿真。

(一)硬件设计

根据实验目的和要求,在Proteus中建立电路原理图。首先是工作窗口加入电路所必需的元器件,其中包括控制芯片AT89C51,A/D转换芯片TLC2543,驱动芯片ULN2003A,显示设备数码管以及其它必需的电容、电阻、晶振等。随后根据电路工作原理对已加入项目的元器件进行连接,并加入电源和地线。如果在实验要观察某些信号的变化则可加入电压表,电流表或是逻辑分析仪等虚拟显示设备,至此系统硬件电路已设计完成。

(二)软件设计

打开Keil μVision2,新建一个项目,命名为“串行A/D转换.uv2”。选择Project菜单下的Select Device for Targer为这一项目选择目标CPU,这里选择AT89C51。然后单击Project菜单下的Option for Targer工程名菜单项,选择Debug选项进行相应设置,接下来编写源程序并命名“串行转换A/D.asm”,将此文件加入到工程里面,经过编译、调试、修改生成Hex文件。

(三)联合调试

Proteus软件和Keil软件联合调试在这里采用的静态结合的方法,即在Proteus软件中将Keil软件编译生成的Hex文件加载到89C51单片机中。单击Proteus软件中运行按钮,观察仿真结果可见,每个通道模拟电压值被转换为数字量轮流显示在数码管上。如果出现错误或是没有达到控制要求则可以检查电路或是修改程序再进行调试,直到完成实验目标。

四、虚拟实验室的实际意义

(一)有利于解决设备紧缺问题

解决以往以理论为主实践少,且存在实践以验证性为主及设备不足等问题。由于Proteus特有的虚拟仿真技术能在没有单片机实际硬件的条件下实现单片机系统的软硬件同步仿真调试,只要在安装有Proteus和Keil软件的虚拟实验室里就可以完成整个开发过程,无需任何其他硬件设备的支持;在实验室不开放的情况下,学生也可以利用自己的电脑来完成。

(二)有利于培養学生创新能力

由于Proteus提供的都是虚拟设备,可以让学生自由、大胆地进行各种设计,无需担心损害实验设备,也不用承担设计开发的各种费用,节约了实验经费。学生的某些创造性设想在仿真软件可以很快地得以实施,相比于到电子市场购买元器件再组装调试,既节约了成本又提高了效率。

(三)有利于推进课程教学改革

基于“工作过程系统化”的单片机项目式教学法突破了传统的教学模式,以项目取代章节,将理论知识贯穿于各项目中,开展理实一体化项目教学,强调理论知识与实践技能相结合,融“教、学、做”一体。单片机虚拟实验室的建立成为大力推进项目教学的有力保障,对于项目教学来说课程划分若干项目,每一个项目都是一个具体的控制任务,软硬件均可以在Keil和Proteus联合仿真调试,学生可以在教师指导下独立完成设计任务并检查控制效果。单片机虚拟实验室的建立可以较好地克服传统的单片机教学中无法兼顾理论教学和实践教学,或是由实物演示带来教师工作量大和教学效率低等问题。

(四)为学生实习就业创造条件

建成的单片机创新虚拟实验室可以作为学生实习的场地,在没有合适的实习场所的情况下,让学生做创新性设计实习。

单片机技术应用于各种嵌入式系统中,掌握单片机技术是自动化类专业学生就业的一个基本条件,有相当的单片机设计、开发经验,对学生毕业找工作将起到很好的帮助作用。

五、结 语

伴随着电子信息技术的飞速发展,出现了大量的仿真工具,为实际系统的开发提供了准确可靠的保证,同时节约人力和物力,是未来产品设计的发展方向。本文运用Proteus与Keil联合仿真功能完成单片机虚拟环境的构建,是对传统实物电路仿真的一种有力补充,有利于促进课程和教学改革,有利于提高学生的学习兴趣和创新能力。利用Proteus提供的可靠的虚拟仪器和仪表,不仅可以节约开发时间和开发成本,而且具有很大的灵活性和可扩展性,大大提高了教学效率。但必须指出,仿真不能完全代替实物,在实际应用中会遇到很多新的问题,不可能抛弃已有的教学模式和实验手段而仅仅依靠虚拟的实验环境。只有将仿真结果应用于具体电路系统,才能真正锻炼学生的软硬件综合开发能力。

参考文献:

[1] 余桂兰,左敬龙.创新模式下的高校单片机虚拟实验室

[J].广东石油化工学院学报,2011,21(1):59-62.

[2] 焦铬,戴小新.基于Proteus和Keil的单片机虚拟实验室的

构建[J].电脑知识与技术,2010,6(28).

[3] 吴新华.单片机虚拟实验室的构建[J].萍乡高等专科学

校学报,2009,26(3):38-41.

[4] 黄克亚,尤凤翔.基于“工作过程系统化”的单片机系列

课程教学改革探索[J].职业时空,2011,(10):74-75.

Higher Vocational Colleges Microcontroller Virtual Laboratory Construction

Scheme Research

HUANG Ke-ya

Abstract: Based on the single chip microcomputer curriculum theory teaching and traditional practice teaching problems or insufficient, Proteus was put forward based on the joint simulation of single chip microcomputer and Keil virtual laboratory construction plan. Specific means is Proteus software design in hardware circuit and software development in Keil software program, both the union simulation realize commissioning. The plan to reduce the laboratory construction funds, to promote the reform of teaching and improve teaching efficiency and to improve students' interest in learning and innovation ability.

Key words: proteus; keil; single chip microcomputer; virtual laboratory

收稿日期:2012-07-01

作者简介:黄克亚(1982-),男,硕士,苏州大学阳澄湖校区自动控制系讲师、软件设计师,从事电气自动化、集成电路

上一篇:教育督导工作简报下一篇:“校中厂”人员与设备管理办法