单片机编程范文

时间:2023-10-14 21:40:13

单片机编程

单片机编程篇1

关键词:单片机 应用编程 技巧分析

中图分类号:TP311 文献标识码:A 文章编号:1672-3791(2014)01(c)-0025-02

单片机也被称为单片微控制器,它不是完全意义上的完成某逻辑功能的芯片,而是把计算机系统集成到芯片上。它具有体积小、重量轻、价格便宜等优点,给人们的生产和生活带来了很大的便利。单片机的应用系统是由软件和硬件组成的,单片机之所以能够发挥这么大的作用,主要是因为单片机的软件系统中有着由多种指令构成的应用程序,工作时能够按照这种应用程序进行工作。单片机的应用程序的编写主要是采用汇编语言和高级语言。汇编语言虽然是一种低级语言,但是语言直观,便于理解和记忆。单片机的应用编程常会用到汇编语言程序,一个好的汇编程序应当是执行时间较短、占用的储存空间少。

1 单片机的应用程序分析和设计

1.1 流程图的设计

解决问题的算法不同,会导致编出的程序不尽相同,程序运行的时间和效率也大不一样。解决这个问题的关键是要设计好的流程图,在选择的时候要选择占用内存少、执行时间快的算法,算法选定后,要根据算法绘制一个流程图,这是应用程序设计的重要内容。下面将以具体的实例来说明。

例如:我们平时所用的空调机在制冷的时候,如果排出空气的温度比吸入的空气温度低6度,那么这种情况下就被认为是空调机的正常工作,否则就会被认为是空调机存在一定的故障,影响了空调机的工作效能。因此,我们可以将XRZ设定为吸入空气的温度值的地址,把吸入空气的温度值存于这个地址内;将PCZ设定为排出空气的温度值的地址,把排出空气的温度值存于此处;设定KZ为空调状态地址,空调机工作状态放KZ单元。空调机工作正常时,KZ等于0,否则等于FFH。空调工作温度控制流程图如图1所示。

1.2 复杂程序的设计

在复杂程序的设计过程中,循环程序和子程序都是复杂的应用程序的组成部分。在应用程序中使用循环结构和子程序,能够有效减少程序的长度,减少程序所占用的内存空间,使得应用程序的逻辑结构得以简化,应用程序便于调试。虽然,依此程序设计的机器周期数量并不会减少,但是确实提高了程序的编制效率。

循环结构的程序多用在机器的同一组操作需要重复执行的时候;子程序的应用主要是在某一程序需要多次使用的时候,例如:数制的转换、函数的计算等。如果这两种情况均不使用循环结构的程序和子程序,那就需要重复书写同一个指令,这样不仅会大量增加程序的工作量,还会因为书写同一个指令而占用和浪费大量的存储空间。

2 应用程序的时间和空间的优化

同一个汇编程序有多种实现方法,不同的应用程序所占用的时间和空间也不尽相同。在编写应用程序时,应当充分考虑到应用程序对时间和空间的要求。对于一般的控制系统来说,以考虑空间为主,以确保应用程序能够安装下;而对于一些实时控制系统,以考虑时间为主,确保应用程序的执行时间越短越好。不同的应用系统对时间和空间的要求不尽相同,所以,要求应用程序的编写时要对应用程序的时间和空间进行优化,以满足应用系统的要求。

(1)时间的优化。

应用编程的时间优化主要有三种方法,第一种也是最基本的方法是编写周期较短的指令,比如:在编写乘除运算时,可以运用移位的方法来实现;第二种是利用寄存器寻址,因为寄存器寻址的指令具有周期少的特点,在执行时可以优化应用程序的执行时间;第三种是“空间换时间”的方法,主要是应用在有很大存储空间的单片机应用系统中,即可以充分利用闲置的存储空间,编写那些执行时间较短的应用程序,例如:在一个循环的程序中,可以把这个循环程序划分成几个单独的应用程序执行,将一些带参数的子程序设计成可以直接调用的子程序,这样就可以减少对参数赋值的时间。

(2)空间的优化。

应用程序优化空间的方法除了采用循环结构程序和子程序外,还可以采用存储空间复用的方法,一般说来,一个存储空间只作一个用途,但是在资源有限的情况下,也可以对一些存储空间复用。此外,如果碰到应用系统对时间的要求不高时,也可以采取“时间换空间”的方法,压缩程序大小。例如,可以把一些功能相近的程序合并为一个子程序。

(3)建立子程序库。

单片机的应用程序现在已普遍采用结构化程序设计法,如果我们能够建立一个子程序库,那么在具体编写应用程序时,就可以直接利用现存的或者是稍加修改,这样就可以大大提高编程的效率。子程序库的建立应当具有以下几个特点:第一,相容性(各子程序的入口和出口条件相容);第二,功能性(子程序应当具有多种功能,避免用户重复工作);第三,质量问题(优化算法,提高运行速度,反馈错误信息);第四,透明化(子程序运行完成后,不会破坏用户现场)。

3 结语

单片机的应用程序的编程要考虑到多方面的因素,不仅要保证应用程序能够正常使用,而且还能实用,占用的内存空间少,执行起来效率高,耗费时间短。因此,在应用程序的设计过程中,应当采取适当办法来提高单片机的编程的总体执行效能。在单片机的应用编程方面的一些小技巧就可以采用,如合理设计流程图、优化应用程序的时间和空间、建立子程序库等,提高单片机的编程效率。

参考文献

[1] 孙吴松,王烈准,刘荣富.单片机汇编程序编写技巧[J].科技向导・职业教育,2012(155).

[2] 翟晓华,程珩.浅谈单片机汇编语言编程技巧[J].机械工程与自动化,2007(143).

[3] 符红霞.C语言和汇编语言混合编程电子设备中的应用研究[J].工业控制计算机,2011(14).

[4] 鲁杰爽.汇编程序开发中的“隐含错误”分析[J].濮阳职业技术学院学报,2010(155).

单片机编程篇2

关键词:单片机 发光二极管 闪烁

0 引言

单片机由于体积小、价格低廉、功能强、可靠性高、面向控制和价格低廉等优点,不仅成为工业测控领域使用的智能化控制工具,而且已渗入到人们工作和生活的各个角落。在工科学校中基本都开设有《单片机原理及应用》这门课,而对所有学习单片机的人来说最入门的就是对发光二级管LED的控制。

1 发光二级管的工作原理

发光二极管Light-Emitting Diode简称为LED,由镓(Ga)与砷(As)、磷(P)的化合物制成的二极管。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光,因而可以用来制成发光二极管。在电路及仪器中作为指示灯,或者组成文字或数字显示。磷砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光。

LED只能往一个方向导通,发光二极管的反向击穿电压约5伏。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过管子的电流来控制LED的亮度。限流电阻R可用下式计算:

R=(E-UF)/IF

式中E为电源电压,UF为LED的正向压降,IF为LED的一般工作电流。

2 LED的编程方法

假设LED的连接电路图如图1所示,八个红色发光二极管通过限流电阻分别接到单片机P1端口的8个引脚上,单片机选用AT89C51。

2.1 单个发光二极管的控制

在图1中,如图所示,如果要使发光二极管D1点亮,由于D1的正极通过电阻R1接到电源VCC上,那么D1要正向导通必须使D1的阴极为低电平,也就是P1.0引脚为低电平,这个可以通过软件可以控制,完整的C51程序如下:

同样的,如果要使发光二极管D1一亮一灭不停地闪烁,则工作原理是让D1点亮并延时一段时间,接着使D1熄灭并延时一段时间并不断的循环,这样就可以观察到D1一亮一灭不停地闪烁。延时可以采用软件延时或者定时计数器定时延时两种方式,本文采用软件延时,其工作原理是利用每条指令运行都需要一定的时钟周期,运行一定数量的时钟周期可以实现延时的功能,本图中晶振为12MHz,那么12个振荡周期为1us,延时1ms的延时程序如下:

2.2 多个发光二极管的控制 多个多个发光二极管的控制原理与单个发光二级管的控制原理一样,在图1中,如果要控制8个发光二极管同时一亮一灭的闪烁,那么只需要同时使8个发光二级管点亮延时一段时间,再同时使8个发光二级管熄灭并延时一段时间,周而复始不断循环就可以实现8个LED不停地闪烁,完整的C51程序如

下:

2.3 花样流水灯的控制 对于花样流水灯,工作原理和前面多个发光二极管的控制原理一样,只需要把不同状态下灯所对应端口的值送到相应的控制端口并延时一定的时间就可以实现,编程时可以把所以对应状态的端口值放在一个数组里存放,不停循环地取数组的值,每取一个值延时一段时间,即可以实现,程序略。

3 总结

单片机在各行各业中使用越来越多,文中对单片机中发光二极管的使用和编程方法进行总结,并给出各种方法的工作原理和完整的程序。

参考文献:

[1]戴仙金.51单片机及其C语言程序开发实例.北京:清华大学出版社,2007.

[2]李朝青.单片机原理与接口技术.北京:北京航空航天大学出版社,2005.

[3]李广军等.实用接口技术.成都:电子科技大学出版社,1997.

[4]蒋国平,周国伟.基于PROTEUS的单片机系统设计与仿真实例.北京:机械工业出版社,2009.

单片机编程篇3

关键词:单片机;编程;中职;教学

中图分类号:G712 文献标识码:B 文章编号:1002-7661(2015)08-012-02

一、中职学校《单片机技术》的教学现状

中等职业教育主要是培养技术技能型人才,为企业提供合格的生产工人。近年,中国正从制造业大国向制造业强国跨越,不断提高中国产业核心竞争力,迫切需要加强中等职业教育,加快培养一大批掌握熟练技能、高超技艺和具有较强创新能力的人才。

而《单片机技术》做为全国职业院校电类专业教学用书,是电子信息、电气控制应用专业的学生必须完成的一门课程。教材主要内容有MCS-51单片机的硬件结构、指令系统、汇编语言程序设计、中断系统、系统扩展等理论知识,并结合实例详细地讲述了单片机应用系统的设计、开发、调试流程。

在《单片机技术》的学习中,硬件知识的具备和编程技术的掌握都是不可或缺的。而编程能力更需要学生发挥自己的逻辑思维,将编程语言的编写方法、基本思想、实际应用要求等方面进行综合思考,开发出具有一定实用价值的单片机程序。中职生生源普遍较差,缺乏理论基础,面对复杂、枯燥的程序设计,常常失去学习信心。因此,在教学中,如何适应学生的认知能力,提升他们的学习兴趣,提高他们的编程能力,笔者做出了以下的尝试。

二、提高单片机编程能力需进行“理实一体”教学

单一的程序语言理论教学,不仅生硬、难懂,也提不起中职生学习的兴趣。应采取“理实一体”的教学方式,“理论”能第一时间生动的反应在“实验”现象上。激发学生的学习兴趣,并对单片机编程有一个感官上的认识,促进学生学习编程语言,并自主进行编程。它并不是单纯的把课程分成:理论课和实验课。而是要求教师一边演示,一边讲解理论要点及启发学生独立思考并编写一些程序,再由实验验证的过程。最后,通过实验结果不断修改和改进自己的程序,达到提高单片机编程能力的目的。

例如:利用数字I/O口控制发光二极管的亮暗(使用按钮输入信号,发光二极管显示输出电平,在按下某个按钮后,某发光二极管发亮),不仅可以直观的观察到自己所编程序的执行结果,还加深了对数字电路中组合逻辑功能的理解,巩固了单片机引脚的数字I/O功能的知识,并可以引申出一些重要的编程思想:必须设置很多寄存器对引脚进行初始化处理,才能使引脚具备有数字输入和输出功能。每使用单片机的一个功能,就要对控制该功能的寄存器进行设置。以上都是单片机编程的特点,所有的单片机都是一样的。

讲解“定时器/计数器”和“中断系统”这部分知识时,没有实验的辅助更是行不通的。例如:学生在传统教学中,很难理解采用中断方式实现定时器应用的程序执行顺序和过程。就可以利用“理实一体”教学。先讲解定时器T0的结构和工作原理,编写一个利用T0的中断系统实现循环点亮八个时间间隔为100ms的发光二极管的程序,来让学生进行调试。学生采用单步和断点调试等方法一步步分析程序的执行过程和相应的变换。由于学生对程序的每一步执行都有了感性的认识和体验,对这部分知识的理解和掌握就更加深刻和牢固。

三、提高单片机编程能力需与案例分析相结合

所有的学习都是从模仿开始。学生自主编写单片机程序,必须要借鉴一些案例中的成功经验。所以,分析一些成功案例的程序,对学生了解每一步编程的过程和意图有很大的帮助,有助于学生提高编程能力。

当然,案例的选择应该具有典型性、渐进性及实用性。典型的程序案例应用范围广,可降低学生在自主编写程序时的难度。案例的难度逐渐加深,符合学生学习的认知规律。案例的实用性有利于学生将单片机技术应用于实际,解决实际问题。

例如:当讲解外部中断时,可先列举一个案例程序进行分析:当外部按键每按1下,P1的小灯左移点亮。程序如下(附分析要点):

再引导学生完成一个楼道开关设计,该开关在按钮按下一次后,灯亮3分钟后自动熄灭。教师可以分析本次设计要求,即为:当外部按键每按1下,P1.0的小灯亮180s。学生可在教师的帮助下自行设计程序。程序如下:

最后布置与本节课所学知识相关的编程作业:当外部(P3.3)按键每按1下,P1.0的小灯闪3次。

通过循序渐进的典型案例分析,让学生从模仿教师编写程序过渡到自主设计程序,最后能独立(或与他人合作)完成一个实用程序的设计,切实的提高学生单片机编程能力。

四、提高单片机编程能力需贯彻项目教学

项目教学法是将一个相对独立的项目,交由学生自己处理,信息的处理、方案的设计、项目的实施及最终的评价,尽量全部交由学生负责,学生通过项目的进行,了解并把握整个过程及每一环节中的基本要求。《单片机技术》是一门讲究应用性和技能操作的课程,特别适宜采用项目形式来组织教学。将项目教学法引入到单片机的教学活动,并将其贯穿于理论教学、实验教学的整个教学过程后,学生通过项目的完成,不仅有效的提高了单片机编程能力,也训练了单片机知识的整体应用能力。从教学效果来看,大部分学生能掌握和基本掌握单片机编程技术。能进行系统设计、调试的学生人数比例明显增加,有一部分学生已初步具备了单片机应用系统的设计能力。

该方法的主要教学阶段是:1、教师选择一个典型的单片机应用系统为项目任务2、教师引导学生以单片机应用系统的工程开发方法和开发工具作为实验教学手段,合理设计实验项目与实验内容。3、学生完成整个实际系统的设计过程,并进行系统调试。4、学生进行成果展示,与教师一起对项目成果进行检查评估。

要取得期望的教学效果,项目任务的选择、实验项目与实验内容的设置皆具有重要的作用。以“基于单片机的电子钟”项目任务为例。

教学阶段 教师行为

提出项目任务内容 分析电子钟的各项功能要求和实现途径。

分阶段完成准备性实验 引导学生完成分支程序设计、码制转换程序设计、定时器应用程序设计、基本输入/输出口程序设计、显示程序设计、键盘与接口程序设计等。

模块组合,整体调试 教师指导学生将上述调试完成的功能子程序,以及示例提供的功能程序模块组合,写出完整程序并在单片机开发系统上进行整体调试。

学生自我评价,教师总结 教师组织成果展示、检查评比和效果评价。

总之,教师要从培养学生编程思维的角度出发,认真组织教学,减少学生编程过程中遇到的困难,提高软件编程能力和巩固硬件部分知识,研究学生学习特点,培养学生良好的学习习惯,化繁为简,循序渐进,拓宽学生学习思路,不断提高学生编写程序的熟练性与处理问题的灵活性,最终使学生将所学知识融会贯通。

参考文献:

[1] 闫亚红.《关于中职学校中〈单片机技术〉教学的探讨》福州电子职业中专学校教育教学论文汇编2008.3

[2] 邓文娟.朱兆优、王嵩 《探索单片机教学改革 提高学生工程实践能力》东华理工大学学报(社会科学版) 2010.12

单片机编程篇4

    0 引言

    PIC18Fxx8单片机是美国微芯公司推出的16位RISC指令集的高级产品,由于芯片内含有A/D、内部E2PROM存储器、I2C和SPI接口、CAN接口、同步/异步串行通信(USART)接口等强大的功能,具有很好的应用前景。但是,目前介绍其应用和以C语言编程的中文参考资料很少。本文将探讨该型单片机异步串行通信的编程应用,程序用HI-TECH PICC-18 C语言编写,并在重庆大学-美国微芯公司PIC单片机实验室的PIC18F458实验板上通过。

    1 PIC18FXX8单片机同步/异步收发器(USART)

    通用同步/异步收发器(USART)模块是由PIC18FXX8内的三个串行I/O模块组成的器件之一(USART也叫串行通信接口即SCI),可以配置为全双工异步方式、半双工同步主控方式、半双工同步从动方式三种工作方式。

    TXSTA是PIC18FXX8单片机串行通信发送状态和控制寄存器,RCSTA是接收状态和控制寄存器。由于在实际工程中,异步方式用得最多,这里仅介绍异步工作方式,其它方式可参阅相关资料。

    1.1 USART 异步工作方式

    在异步工作方式下,串行通信接口USART采用标准的不归零(NRZ)格式(1位起始位、8位或9位数据位和一位停止位),最常用的数据位是8位。片内提供的8位波特率发生器BRG可用来自振荡器时钟信号产生标准的波特率频率。通过对SYNC位(在TXSTA寄存器中)清零,可选择USART异步工作方式。

    1.2 USART波特率发生器(BRG)

     USART带有一个8位的波特率发生器(BRG),这个BRG支持USRAT的同步方式和异步方式。用SPBRG寄存器控制一个独立的8位定时器的周期。在异步方式下,BRGH位(控制寄存器TXSTA的)也被用来控制波特率。在同步方式下,用不到BRGH位。表1给出了在主控方式下(内部时钟)不同USART工作方式时的波特率计算式。

表1  主控方式下的波特率计算式

SYNC

BRGH=0(低速)

BRGH=1(高速)

(异步)波特率=FOSC/[64(X+1)]

波特率 = FOSC/[16(X+1)]

1

(同步)波特率=FOSC/[4(X+1)]

    1.3 USART 异步工作方式配置

    下面是串行通信异步工作方式配置步骤(顺序可以改变):

  (1)配置发送状态和控制寄存器TXSTA;

  (2)配置接收状态和控制寄存器RCSTA;

  (3)配置RX(RC7引脚)、TX(RC6引脚)分别为输入和输出方式;

  (4)通过设定的通信波特率配置SPBRG寄存器,计算公式参见表1;

  (5)设置串行通信接收或发送中断是否使能;

  (6)清串行通信接收或发送中断标志;

  (7)设置串行通信接收中断或发送中断的优先级是高或低优先级中断方式,PIC18单片机默认情况下是高优先级中断,若是低优先级中断,则必须进行设置;

   (8)设置串行通信接收和发送数据是否允许。

     若用到了中断功能,还需设置总中断和中断使能,以开放未屏蔽的中断。

    2 USART接口硬件电路

    利用PC机配置的串行口,可以很方便地实现PC机与PIC18单片机的串行数据通信。PC机与PIC单片机USART连接最简单的是三线方式。由于PIC单片机输入、输出电平为TTL电平,而RS-232C PC机配置的是RS-232C标准串行接口,二者电气规范不一致,因此要完成PC机与微控制器的串行数据通信,必须进行电平转换。图1为PIC18F458单片机的RS-232电平转换电路。图中MAX232(或MAX202)将PIC18单片机TX输出的TTL电平信号转换为RS-232C电平,输入到PC机,并将PC机输出的RS232C电平信号转换为TTL电平输出到PIC微控制器的RX引脚。J9和PC机的连接方式见RS-232标准,与单片机相接的D型头(J9)的2脚(PIC接收信号)与接PC机D型头的3脚(PC机发送信号)相连,与单片机相接的D型头(J9)的3脚(PIC发送信号)与接PC机D型头的2脚(PC机接收信号)相连,二者的5脚与5脚相连(地相连)。PC机串口数据的发送和接收显示均可采用各种串口调试软件,我们使用的是串口调试助手V2.2(或V2.1、V2.0均可),在网上可以下载该调试软件,该软件操作简单,这里不作介绍。

    3 USART异步工作方式编程

    串行通信的接收有查询和中断2种方式,在实际应用中,一般不采用查询接收数据,常用的是中断接收数据。发送有中断发送和非中断发送,在下面的例程中我们采用了中断接收数据,发送数据采用中断方式还是非中断方式可以在程序中通过对发送方式标志Send_Mode(不为0,中断方式发送;=0,非中断方式发送)进行设置实现。

    在PIC单片机发送数据时,发送中断标志TXIF不能用软件清0,只有当新的发送数据送入发送数据寄存器TXREG后,TXIF位才能被硬件复位,因此在程序中清该标志是无效的。采用中断发送数据的方法是:在主程序中启动发送一串数据的第一个数据,然后利用发送完成中断启动下一个数据发送,当一串数据发送后,不再发送数据,但有发送完成中断标志,程序还要进入一次中断,这最后一次中断对数据发送是无用的,必须将该标志清0,采用的方法是禁止发送使能(TXEN=0)而引起发送被终止或对发送器复位。

    下面是一个用串行通信进行接收和发送数据的例程,程序实现功能:PIC18单片机接收到PC机下发的8个数据后,将收到的8个数据以中断或非中断发送方式返送回PC机。

#include "pic18.h"    /* PIC18系列的头文件 */

unsigned char receive232[8];  /* 接收数据数组 */

unsigned char send232[8];  /* 发送数据数组 */

unsigned char receive_count=0; /* 接收数据个数计数 */

unsigned char send_count=0;  /* 发送数据个数计数 */

unsigned char *pointer;   /* 发送数据指针 */

unsigned char i;    /* 程序中用到的循环变量 */

unsigned char SciReceiveFlag; /* =1,接收到8个数据 */

unsigned char Send_Mode=0;  /* 不为0,中断方式发送;=0,非中断方式发送 */

void sciinitial()           /* 串行通讯初始化子程序 */

{

 TXSTA=0x04;    /* 选择异步高速方式传输8位数据 */

 RCSTA=0x80;    /* 允许串行口工作使能 */

 TRISC=TRISC|0X80;  /* :将RC7(RX)设置为输入方式 */

 TRISC=TRISC&0Xbf;  /* RC6(TX)设置为输出 */

 SPBRG=25;    /* 4M晶振且波特率为9600时,SPBRG设置值为25 */

 PIR1=0x00;    /* 清中断标志 */

 PIE1=PIE1|0x20;   /* 允许串行通讯接口接收中断使能 */

 RCIP=0;     /* 设置SCI接收中断为低优先级中断  */

 CREN=1;     /* 允许串口连续接收数据 */

 if(0==Send_Mode) TXEN=1; /* Send_Mode=0,非中断方式发送,串口发送数据使能 */

 else      /* Send_Mode=1,中断方式发送 */

 {

  PIE1=PIE1|0x10;  /* 允许中断发送 */

  TXIP=0;    /* 发送低优先级中断 */

 }

}

void interrupt low_priority LOW_ISR()  /* 低优先级中断子程序 */

{

 if(RCIF==1)       /* RS232接收中断 */

 {

  RCIF=0;       /* 清中断标志 */

  receive232[receive_count]=RCREG; /* 接收数据并存储 */

  send232[receive_count]=RCREG;      /* 接收数据存放到发送缓冲数组 */

  receive_count++;     /* 接收计数器加1 */

  if(receive_count>7)     /* 如果已经接收到8个数据 */

  {

   receive_count=0;    /* 接收计数器清0 */

   SciReceiveFlag=1;    /* 置接收到8个数据标志 */

  }

 }

 else if((0!=Send_Mode)&&(TXIF==1))  /* 中断发送数据方式且为发送中断 */ 

 {

  if(send_count>7)     /* 已经发送完8个数 */

  {

   TXEN=0;      /* 发送不使能 */

   return;

  }

  else

  {

   send_count++;     /* 发送计数器加1 */

   TXREG=*pointer++;   /* 发送当前应发送数据,发送指针加1 */

  }

 }

}

main()                                /* 主程序 */

{

 INTCON=0x00;      /* 关总中断 */

 ADCON1=0X07;      /* 设置数字输入输出口,不用作模拟口 */

 PIE1=0;        /* PIE1 的中断不使能 */   

 PIE2=0;        /* PIE2 的中断不使能 */ 

 PIE3=0;        /* PIE3 的中断不使能 */

 Send_Mode=1;       /* Send_Mode不为0,中断方式发送数据;

Send_Mode =0,非中断方式发送数据 */

 sciinitial();       /* 串行通讯初始化子程序 */

 IPEN=1;        /* 使能中断高低优先级 */

 INTCON=INTCON|0xc0;    /* 开总中断、开接口中断 */

 while(1)

 {

  if(1==SciReceiveFlag)    /* 是否接收到8个通信数据 */

  {

   SciReceiveFlag=0;    /* 清接收到8个通信数据标志 */

   if(0!=Send_Mode)       /* Send_Mode不为0,中断方式发送 */

   {

    send_count=0;    /* 发送数据计数清0 */

    pointer=&send232[0];  /* 发送指针指向发送数据数组首地址 */

    TXREG=*pointer++;  /* 发送第一个数据后,将发送指针加1 */

    TXEN=1;     /* 使能发送 */

   }

   else        /* Send_Mode =0,非中断方式发送数据 */

   {

    pointer=&send232[0];  /* 发送指针指向发送数据数组首地址 */

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

    {

     TXREG=*pointer++; /* 发送数据后,将发送指针加1 */

     while(1)    /* 等待发送完成 */

     {

      if(TXIF==1) break; /* 等待发送完成 */

     } 

    }

   }

  }

 }

}

参考文献

单片机编程篇5

摘要:介绍基于sram的可重配置cpld的原理,通过对多种串行配置的比较,提出了由单片机和flash存储器组成的串行配置方式,并从系统复杂度、可靠性和经济性等方面进行了比较和分析。

两个指令产生dclk时钟,一个指令移位取数据。如果晶振为fosc,一个指令周期为12/fosc,因此它的下载速率为fosc/48。然而如果采用串行口方式0,其下载速率提高为fosc/12。考虑到pld配置文件数据比较大,通常都在数十千字节以上(其配置文件大小如表2),为了加快配置速度,并适合各种不同规模的pld,采用了winbond78e58单片机。

表1 配置引脚功能说明

单片机编程篇6

单片机;微处理器;编程

[中图分类号]TD684[文献标识码]A [文章编号]1009-9646(2011)06-0044-02

由于《单片机原理及应用》这门课程较为抽象,逻辑思维能力要求较高。所以对于中职学生来说,基础较差学习难度大。那么如何能够教好这门课程,使学生更容易掌握好这门技术呢?首先我们需要让学生在头脑中对单片机有一个概念,然后再通过后需不断的学习加深学生对单片机的认识。因此我们在讲授单片机这门课程伊始首先要解决的问题,如下:

一、什么是单片机?

在开始学习单片机这门课程之前学生心中最大的疑问:“什么是单片机?单片机是怎样的一个东西?单片机可以实现些什么功能?它主要应用在哪些领域?”在我们的第一节课,我们就上面的这些问题与学生先做一个初步的探讨。以引起学生对这门课程的兴趣。

所谓单片机,通俗的来讲,就是在一块硅片上集成了微处理器(Microcontroller),存储器(memory),及各种输入输出接口的芯片,这样一块芯片就具有了计算机的属性,因而被称为单片微型计算机“Single Chip Microcomputer”。他的功能要靠使用者自行编程来完成。而我们编程的目的就是控制这块芯片的引脚在不同时间输出不同的电平,进而控制与单片机各个引脚相连接的电路的电器状态。编程时可使用C语言或者汇编语言,现在使用较多的是C语言。

二、单片机能做什么?

单片机是一种可以通过编写程序来进行控制的微处理器。它自身并不能运行到某项工程或产品上,必须依靠数字器件或模拟器件的协调才可发挥功能。那么单片机及其设备主要应用在哪些方面呢?

①消费类电子产品。如洗衣机、空调、电冰箱、IC卡、汽车电子设备、计算器等。

②工业自动化。如数据采集、测控技术。

③智能仪器一表。如数字万用表,数字示波器,感应电流表等。

④通信方面。如手机、小灵通等

三、如何学习单片机?

在我们对单片机有了大致的了解之后我们就可以正式的来学习单片机了,那么单片机的学习和其他课程的学习有什么不同之处呢?我们应该怎样来教授单片机才能使学生学习起来更加轻松呢?

由于单片机是门实践性很强的课程,所以不动手仅凭课堂讲授是很难让学生真正学会、掌握这门课程的。因此我们要加强学生动手能力的培养,是学生能够通过自己动手来获得知识。总之,要学好单片机就要多动手,将理论知识和实际操作结合起来,才能够体会到书本中理论知识的真正含义。

四、编写程序时应注意哪些问题?

在学生了解和掌握了单片机的相关知识之后,我们的核心教学任务就是程序的编写了。同样一个功能的任务由于每个人的思路不同,编写出的程序也是千差万别。那么怎样才能够编写出易于使用的程序呢?我们将其归纳为以下几点:

①扎实的基础。数据结构、编译原理,这些都是学习单片机的基础,如果不掌握他们,很难写出高水平的程序。程序人人都会写,但你想要使自己的编程水平得到提高的话就要回过头来学学这些最基本的理论。

②良好的编程风格。注意养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致。大家都知道如何排除代码中错误,却往往忽视了对注释的排错。注释是程序的一个重要组成部分,它可以使你的代码更容易理解,而如果代码已经清楚地表达了你的思想,就不必再加注释了,如果注释和代码不一致,那就更加糟糕。

③最简单的是最好的。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。

④不钻牛角尖。当你遇到障碍的时候,不妨做点自己喜欢的事。使负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。

⑤对答案的渴求。只有坚定信念,一定要找到问题的答案,才会付出精力去探索,即使最后没有得到答案,在过程中也会学到很多东西。

⑥韧性和毅力。成功能给我们带来无比的喜悦,但过程却是无比的枯燥乏味。

总之,单片机是一门实践性很强的学科。要想使学生学好单片机,就必须得多做实验多练习。通过实际操作中学习到的知识来反馈到书本中,加深对理论知识的理解。在实践过程中肯定会遇到问题,在遇到问题时应引导学生自己主动地去翻书找答案,与人讨论,或是上网寻求帮助。教会学生自己解决问题的能力。这样才能够使学生在以后的工作当中独立的解决问题,更好的适应工作的需要。

[1]郭天祥.51单片机C语言教程――入门、提高、开发、拓展全攻略[M].北京:电子工业出版社,2009.

单片机编程篇7

一、现状

作为一所职业院校,根据教学目标与要求,教学的重点是进行大量的实践教学,培养学生的技能与操作能力,理论上够用实用为标准。我院单片机教学一直沿用传统的模式,老师教学困难,认为单片机课程难教,学生没有学单片机的天赋;而学生也认为单片机难学,对其中的内容一知半解,课程学完了还不知道单片机是啥东西,单片机能干什么,更别谈什么进行单片机开发了。为了改变现状,在进行大量学习与参考其它院校与社会单片机学生的经验教训基础上,特别是哈尔滨工业大学郭天祥的教学经验与社会影响震撼了我。一名没有出校门的学生,根据自己学习单片机的经验,进行十天的单片机培训就让学生学会了单片机,比那些所谓的专业教授都受欢迎,郭天祥的教学视频在网上疯传,他开发的单片机教学实验板也以高价出售,现在可以说郭天祥的视频仍然是网上下载量很高的作品。受郭天祥的教学启发,结合职业院校的实际与电气专业与机电一体化专业的培养目标、学生的实际情况,对单片机教学进行了革命性的改革,下面我就我的改革进行一些理论与实践的探讨,欢迎同仁批评指正。

1、教材现状

我手头有多本单片机教材,几乎各个出版社的都有,翻看其中的内容,大部分都如出一辙。第一部分为基础知识及单片机结构,主要讲计算机和单片机的发展史,以及数制与码制。及单片机的结构和时序。第三部分为单片机的汇编指令系统,51单片机有七种寻址方式, 111条指令,汇编语言指令多、难记忆、可移植性差、可读性差。第四部分为中断系统与定时/计数器。第五部分为存储器的扩展,这一部分现在用到的很少,但几乎每一本书都大讲特讲程序存储器与数据存储器的扩展,另外有些教材还有IO 口的扩展,讲8225a芯片的使用等。

2、教学方法现状

在教学方法上,过去的单片机教学也存在很大问题。一是在黑板上教同学们编程序,这个程序能不能编译成功,书写有没有错误老师也不知道,因为编译过程要求很严格,即使出现一个标点符号的错误,程序也不能通过编译。二是单片机教学过程中讲结构及原理的多,讲编程的少。三是教学以讲授方法为主,讲解一门实践性很强的课程,没有大量的实践作基础,没有讲练结合,没有接触实际的单片机,没有与实际的电路结合起来,仅仅是纸上谈兵,根本学不会单片机。四是教学与实际脱钩,在教学过程中所举的例子往往没有实际用途,为说明一个语句的使用而举例。

3、实验与实训现状

在实验与实训方面,主要存在如下问题。一是实验设备方面落后与老化。二是实验内容,教学内容与实验内容脱节,教学主要讲结构与原理,而实验内容是根据实验器材安排的。教师根据实验指导书上的步骤教学生做一遍,做不成功也不知道错在什么地方。三是教师也对单片机一知半解,教师的实际动手能力也有限,教师按照教材内容在黑板上把课程顺下来还可以,真真拿一个单片机做一个实际的项目能力还欠缺。

二、教学大纲与教学目标改革

1、分解教学目标。职业院校的特点决定了我们的学生学习应以技能为主,以实际应用为重点,故在理论与实践的关系上,是为实践而学理论,实践中用到那些理论就学习那些理论,对于一些纯粹的理论问题不过分强调。改变实践是为了验证理论的教学观与学习观,让理论为实践服务,根据实践中碰到的问题去学习理论,把理论学习融入实践学习之中。

根据电气专业的教学目标与单片机课程的特点,将单片机教学以实践为主线分解为三大部分12分模块。

第一部分为基础模块部分,利用很少的时间(一般为一次课),大致过一遍单片机中用到C语言及单片机的外部引脚等,不要求学生听懂,只要求学生有一个印象。第二个部分为基础训练模块,由浅入深学习单片机的输出、输入、单片机的定时与计数、单片机的中断、单片机的串口通讯。第三部分为单片机的应用与综合开发。主要是单片机的最小系统、单片机控制数字液晶显示与图形液晶显示、单片机与I2C总线的接口电路与编程、单片机与实时时针芯片、单片机与AD、DA转换芯片的接口与应用。

三、教材内容改革

整合了计算机基础、C语言、单片机结构、电子线路等内容。第一章内涵盖所有的基础,不让理论的艰涩阻碍学生学习单片机的热情与兴趣。在教材内容顺序上以实践内容为教材安排的线索,每一个模块形成一个章节,分为理论部分:单片机基础知识、电路基础、C语言基础理论;实践部分:程序设计、编译、调试、下载与功能的完成为重点。讲理论是为了实践,实践中融入理论分析,把所有的理论及电路接口等内容一点一滴地消化在整本教材的各个部分。

四、教学改革的理论依据

根据职业院校的教育目的与学生特点,结合单片机课程的实际情况,根据郭天祥教学经验与社会反响,在总结自己多年从事职业教育的经验的基础上,提出了一套电气自动化及机电一体化专业的单片机教学模式。1、根据布鲁姆的目标分类的教育理论,对单片机的教学内容进行目标分解。对单片机教学内容目标分类的依据是根据实践技能的难易程度进行目标分解。2、根据皮亚杰的建构主义的教育思想。学习是学生的主动的建构过程,是一次次的“同化”与“顺应”。 3、根据陶行知的知行合一的教育思想,在教学上做到“教、学、做合一”。每一次课都是一个实际的单片机工程设计过程,从工程目标、电路设计、涉及的理论分析、编程编制、编译、下载、调试、验证等。编程都是现场进行(从不先写好后给同学解释),教学过程就是一个“做”的过程,用实际的单片机开发板、通过摄像头让同学看到现场发生的现象。

五、教学设备与环境设计

一是多媒体投影室,把教师及实验中电路板上出现的现象真实呈现在同学们面前,投影仪可以把教学过程中的教师机电脑屏幕上的第一步都实时传送给同学。二是真实单片机实验板电路。三是一个视频投影仪,把实际发生的情况展现在同学面前,即使教师做的有错误也让学生知道错的原因与必错的方法。四是机房加实验板,学习是学生的主动构建过程,只听教师的现场演练没有亲自动手实践是不可能学会单片机的,学生必须到机房亲自试验,反复演练才能掌握学习内容。

六、教学方法设计

1、教学做合一。教学过程不是教师的个人表演过程,而是教师完成一个单片机工程的开发全过程,教学过程是做单片机项目的真实过程,有电路分析、有单片机基础分析,有C语言语法、语句、算法等分析。并且把所有过程,一步一步呈现给学生,让学生有现场感、真实感,让学生最后看到我们的最终成果――单片机实验电路板上呈现的现象。整个过程是教师开发了一个单片机工程项目,对事说是做、对教师说是教、对学生说是学,此之谓陶行知先生所说“教学做合一”。

2、讲练结合教学法。学生单靠教师在多媒体教室的“教学做合一”的教学过程是根本学不会单片机的,单片机是理论与实践结合的一门学问,必须经过大量的实践活动才能学会单片机,没有经过实际的演练不可能掌握单片机的精髓。我采用一节教学一节机房加实验板的实训方法进行教学安排,让学生把学到的东西马上进行实际练习,使理论与实践结合。今年的单片机教学我又在原来的基础上进行了改革,全部在机房利用实验板进行教学,采用边教学、边练习的方法,让教师的教与学生的学真正做到无缝对接。

3、项目驱动教学法。在完成基础模块的教学后,学生的单片机学习就进入到另一个阶段,进行综合实训――做实际的工程。前面的教学与实践都是在单片机实验扳上完成的,这对学生来说仍然不真实,不实在,为了使学生能学生出校门就能搞项目,学生在学校必须经历实际工程的锻炼。让学生做电子表、数字温度计、数字电压表等项目。从画原理图、PCB图、制作电路板、硬件连接。软件程序编制、下载、调试与修改等所有过程都亲自参与。学生不再是学习过程的旁观者,而是整个过程的亲历者,让学生体会到创造的快乐,学习就象玩一样。

七、学习方法设计

1、听,上课注意听教师讲解,充分理解教师讲的内容。听课是关键,没有继承就没有发展。2、抄,把教师在课堂上所编写的程序抄下来,认真记笔记。抄有两方面的作用,(1)是手脑并用,可以加深学生对教学内容的印象;(2)是为下一步的摹仿打基础,没有抄写出来的程序就不可能进行下一步的学习。3、摹,在机房利用实验板进行摹仿与练习。摹是理论与实践相结合的关键一环,通过摹仿理解教师讲的内容,通过摹仿发现自己编程过程中出现的问题以及解决问题的方法。4、创,在摹仿教师编程的基础上自己根据教师的课后习题编写新的相似的程序反复练习。5、练,鼓励学生自己购买电脑与单片机实验板,课后进行大量的练习,反复实验,鼓励学生每天编10个程序,3个月编写1000个程序就可练就一个单片机高手。

八、考试方式改革

对单片机的考试方法也进行了改革,不再考试同学是否记住了单片机的发展史,单片机的结构与汇编语言的111条语句,而是考查同学们是否会用单片机实现一个指定的功能。分为两部分,(1)是平时听课及做实验时的表现,根据出勤率等记分;(2)是期末教师出一些考查同学实际动手能力的单片机项目,现场编程、下载、调度与验证,根据学生的实际动手能力强弱打分。不要求同学死记硬背,只要灵活应用,完成教师的任务就给高分,如果能创造性的发挥,还要根据情况加分。把考试变成检验学生能力的一次机会,而不是检查学生背会了多少指令、多少个概念,知道不知道单片机的发展史等内容。关于单片机的考试方法我还在探索中,如果可行的和话,可以采取课下完成的方式交一个单片机的设计新产品。

参考文献:

1. 郭天祥新概念51单片机C语言教程2009.1

2.曹克澄单片机原理及应用2005.1

3.陶行知陶行知文集2008.6

4.布鲁姆教育目标分类学1986.8

5.何克杭建构主义的教学模式、教学方法与教学设计

单片机编程篇8

一、c语言与单片机课程在中职学校电子及相关专业中的重要地位

c语言是一种被广泛使用的计算机程序设计语言,在中职学校引入c语言课程,不但能使学生掌握一种基础的编程语言,还为学生发展能力和进一步学习打下基础。

传统的电子装置,只能使用复杂的模拟电路或分立的集成电路来实现,这样的产品不仅体积大,且成本高,控制的精度也不高,适应性更差。有了单片机后,可实现很多复杂的功能。而学好单片机可让学生在电子行业内找到一个比较好的工作。所以,单片机课程,也常被称为“饭碗”课程。

二、中职学校“c语言”与“单片机”课程教学方式现状分析

目前,中职学校中“c语言”与“单片机”课程的教学是采用完全割离的方式进行的,一般在第二学期开设“c语言”,在第四学期开设“单片机”。

在讲授“c语言”时,通常以turboc 2.0为蓝本,除了介绍“c语言”的数据类型、控制语句、数组、指针外,还对函数、结构体甚至文件进行详细地介绍。整个教学过程中,过分注重语句、语法的细节和程序设计技巧的讲授,对如何分析和解决实际问题讲得不够。从而没有明确的学习目的,更缺少学习的兴趣。wwW.133229.Com

而单片机的教材中,往往以汇编语言做为编程工具,为了能正确地运用汇编语言编写单片机的程序,就要对单片机内部结构、存储器结构等知识做详细介绍。从多年的教学实践来看,单片机课程讲到寻址方式时,就基本上讲不下去了,后面的课程,学生只能像听天书一样被动地接受。

所以,多年来,学生怕学c语言,更怕学单片机。学过c语言课程的学生,不知道c语言的具体用途,学完后很快就忘记了。学过单片机的学生,感觉单片机内部结构难懂,汇编语言更加难掌握,学到最后,连数码管、键盘这样的最基本的程序,也无法顺利完成。因此,这两门课程的教学改革,势在必行。

三、“c语言”与“单片机”课程整合的可行性分析

通过上述对“c语言”与“单片机”本文由收集整理教学现状的分析,我们发现,之所以这两门课难教难学,其根本原因在于两门课教学过程的割裂。

c语言是一门较特别的高级语言,它把高级语言的基本结构和语句与低级语言的实用性结合起来,允许直接访问物理地址,可直接对硬件进行操作,因此既具有高级语言的功能,又有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作。而单片机的指令系统和硬件结构,正是学生最头疼的内容。而有了c语言这个编程工具后,单片机的学习效率会大大提高。

同时,单片机用c语言编程,绕过了单片机中难学的内容,用c语言编程,驱动单片机装置,解决了c语言应用抽象的难题,所以,这两个课程,整合在一起教学,真可谓是“天生一对”!

四、“c语言”与“单片机”课程整合的方法

对c语言与单片机课程的教学过程进行整合,可提高两门课的学习效果,但整合过程中,要想达到最佳的效果,也要采用正确的方法。

首先,这种整合不是简单的“一加一”式的整合,不是将两门课在相对集中的时间内相继开设,就叫“整合”,而是要以单片机课程做为“主线”,在讲授单片机课程的同时,根据编程的需要,不断地“渗透”c语言的知识。再通过观察程序驱动硬件的现象,深入体会单片机的原理。

其次,这种整合,也不必追求课时的压缩,认为既然是“整合”了,效率提高了,就应该体现在课时的减少上,这种想法是错误的。所以,建议两门课程,仍然保持两个学期的课时量:第一个学期,主要介绍基本知识;第二个学期,可以项目实训的方式,让学生完成一些综合性的实验,以提高对两门课程知识的实际运用能力。

五、“c语言”与“单片机”课程整合的实践与效果

近年来,在笔者的教学过程中,一直在进行两门课程的“整合”实验。2009年底至2010年初,在指导学生参加职业学校技能竞赛过程中,充分利用了“整合”的教学方式,训练效果十分突出,在四个学生选手事先都没有单片机基础的情况下,经过三个多月的训练,在2010年苏州职业学校技能竞赛单片机项目中,取得了两个一等奖和两个二等奖,其中一名学生代表苏州市参加“省赛”并获奖。经过多个学期的实践,取得了很好的结果,多数学生在学习了这门课后,对c语言编程及单片机知识都有了深刻地了解,并能较熟练地运用。

上一篇:单片机原理及接口技术范文 下一篇:stc单片机范文