第一篇:单片机原理及应用教案-第5章
第5课
教学内容:
2.4.8 MCS-51单片机指令的时序 第3章 汇编语言程序设计 3.1基本知识
3.2分支程序设计实例分析
3.3循环程序设计实例分析
教学目标:
了解:MCS-51单片机指令时序;程序设计方法;汇编语言格式及汇编方法
掌握:分支程序设计要点,先分支后赋值程序设计,先赋值后分支程序设计;循环程序设计要点,实例2程序设计方案。
课时安排:
课时
教学重点:
分支和循环程序设计方法
教学提示:
一、重点内容与要点分析
(一)MCS-51单片机指令的时序
执行指令的最小时间单元是机器周期。每个机器周期由12个时钟周期构成,分为6个S状态。一般每个机器周期中ALE和/PSEN信号有效两次。指令长度有单字节、双字节、三字节三种情况。执行指令的时间有单周期、双周期、四周期三种情况。单字节指令的执行时间有单周期、双周期、四周期三种情况;双字节指令的执行时间有单周期、双周期两种情况;三字节指令的执行时间都为双周期。具体指令的长度和执指时间见附录。
(二)汇编语言程序设计
掌握:分支程序设计、循环程序设计、子程序设计。1.画出清晰的程序流程图
一般地,开发者都是首先对自己开发的项目进行仔细地分析了解,在心里有个大概的框架后就开始编程序。但是程序是很难一步到位的,当需要改变一点小小的漏洞或者是要加入一个新的功能时,编程者往往显得不知所措,不知从何下手,重新整理自己的思路而耗费大量的时间。因此最好在进行编程前画出整个项目的流程图,这样自己分析和解决问题的过程一目了然,而且要尽量详细具体,重要的地方应作上标记,便于以后作修改时能很快明白自己的思路。总之在编程过程中,有了流程图,就有了自己的主线,即使以后需要作大的变动,根据在流程图中的标记和说明,可以轻松地解决问题,以免在焦头烂额之际,思路不清晰而陷入困境。2.变量定义的直观性
大家肯定听说过Windows编程中的匈牙利命名法,它突出的特点就是变量名称的直观性,从变量的名称就能知道该变量的基本含义和用途,这样方便自己和别人理解程序,提高效率。其实在汇编程序中也可以实现,使用伪指令EQU和BIT即可。EQU用于定义字节常量,此变量可以代表地址,也可以代表立即数,只是使用时要注意如果是立即数的话,必须要在变量名称前面加上#号。还要注意在以字母开始的变量值前面加上0,如FFH应写成0FFH,否则会报错。BIT用于定义位变量。请看下面这段程序: SPEED_1 EQU 10H SPEED_2 EQU 20H SPEED_3 EQU 30H COUNT_H EQU 8DH COUNT_L EQU 10H ALARM_1 BIT 83H ALARM_2 BIT 84H ALARM_3 BIT 85H 一看就知道上面变量的基本含义,SPEED肯定和速度有关,COUNT和计数有关,ALARM和报警有关。当使用MOV A,SPEED_1时,SPEED_1是地址变量,即将10H地址单元中的数据送到寄存器A中。MOV A,#SPEED_1语句中,SPEED_1代表立即数,因为它前面有#号,即将立即数10H送到寄存器A中。注意:字符串变量的长度不能太长,一般宜在12个英文字母左右,否则编译会出错。
这样做还有一个好处是修改特别方便,当程序需要变动存储单元时,不用在每个使用此变量的地方轮流去修改,而只要在变量表中将相应的地址更改即可,如:如果以后需要加上一个存储单元而占用10H,将10H地址变成别的地址数值,假设为11H,按照一般的写法需要在程序中将地址10H逐个换成11H,特别麻烦。如果建立变量表的话,只需将该字符串变量对应的地址值改变即可,因为应用程序中使用的是字符串变量。例如,如果在程序中使用了10个MOV A,10H赋值语句,如果没有使用变量表,需要将10个10H地址值变成11H,如果是使用了变量表,只需将字符串变量对应的地址值由10H变成11H即可。
3.间接寻址的使用
一般提到间接寻址大家首先会想到DPTR,这是个16位的外部RAM地址寄存器。但是我要说的是内部的RAM地址寄存器,51系列单片机中8052单片机内部有256字节的RAM,我们可以用直接寻址访问其中00H-7FH字节单元,而80H-FFH范围内的内部RAM地址和特殊功能寄存器的地址空间是重叠的,因此51规定对于特殊功能寄存器的访问只能用直接寻址方式,而对于80H-FFH范围内的内部RAM地址只能用间接寻址,一般使用的指令是: MOVX @Ri,A 和MOVX A,@Ri
例如将内部RAM地址81H的数据送到寄存器A,程序如下:
MOV R0,#81H MOVX A,@R0
将寄存器A的数据送到内部RAM地址81H,程序如下: MOV R0,#81H MOVX @R0,A 4.中断现场的保护
在使用多种中断方式后,这个问题尤其显得重要,因为如果有一个寄存器的数据没有保护好,那么付出的调试代价是巨大的,这点大家肯定有体会。如果内部RAM变量不多的话,可以将堆栈大小尽量设大些,而且最好在每次进入中断的时候都进行压栈,主要针对寄存器A、B、C、PSW。注意在退出中断时执行退栈指令。还有就是注意堆栈的大小防止溢出。
5.返回指令的使用
其实这个问题应该是不值得提的,但是在初学者中这个问题还是比较普遍的。RET指令是子程序返回指令,但是好多人把它当成一个万能的回转指令,其功能是完成从堆栈中取出以前压入的16位地址送入PC,从而完成子程序的返回。但是有些人总是使用RET指令返回到自己预想的地方,这样造成的后果是致命的。
二、教学方式
在课堂讲授教学内容后,留20分钟,学生作报告。课堂讲授为主,结合电子CAI课件和教学网站,提供教学效果。
三、作业
1.结合实例2回答以下问题:
(1)冒泡程序结束后为什么A中内容与任何数据单元都不同?(2)ORG 0100H的作用?为什么说是伪指令?
(3)分支程序中 X=-1时,写入 #FFH → A→31H,但最后31H单元中内容为什么不是-1?
2.试将实例2参考程序改为能使64个数从大到小顺序排列,并说明改动理由。3.试编写能将存放在片外RAM的100个数进行从小到大顺序排列的双循环程序,并加以必要说明。
4.讨论 在实例2中
(1)在1轮冒泡比较循环中,R0的最小值是多少?最大值又是多少?(2)在第10轮冒泡比较循环中,R0的最小值是多少?最大值又是多少?(3)在最后1轮冒泡比较循环中,R0的最小值是多少?最大值又是多少?
5.冒泡法排序程序,如果改变数组长度为7,数据从40单元开始存放,如何修改程序? 6.编写程序,把累加器中的8位无符号二进制数转换成为(两个字节)BCD码。百位数存入HUND变量单元,十位数和个位数存入相邻的变量单元TENONE中。这段子程序的入口地址以符号BINBCD表示。
第二篇:《单片机原理及应用》课程教案
《单片机原理及应用》课程教案
第三次课 2学时 主要内容: 第二部分 单片机的原理与结构(3)2.5 并行I/O端口 2.6 时钟电路与时序 2.7 复位操作和复位电路 重点: P0~P3端口功能及使用中应注意的问题 机器周期、时钟周期、指令周期的定义,及时钟周期、频率的计算 复位后,特殊功能寄存器的初值 难点: P0端口的功能 2.5 并行I/O端口 4个双向的8位并行I/O端口(Port),记作P0~P3 属于特殊功能寄存器,还可位寻址。2.5.1 P0端口(讲解时强调端口完成的功能)P0口某一位的电路包括:(1)一个数据输出锁存器,用于数据位的锁存(2)两个三态的数据输入缓冲器。(3)一个多路转接开关MUX,设置多路转接开关的目的:P0口既作通用I/O口,又可作为系统的地址/数据线口。(4)数据输出的驱动和控制电路,由两只场效应管(FET)组成,上面的场效应管构成上拉电路。P0口传送地址或数据时,CPU发出控制信号为高电平,打开上面的与门,使多路转接开关MUX打向上边,使内部地址/数据线与下面的场效应管处于反相接
通状态。这时的输出驱动电路由于上下两个FET处于反相,形成推拉式电路结构,大大提高负载能力。P0口作通用的I/O口使用。这时,CPU发来的“控制”信号为低电平,上拉场效应管截止,多路转接开关MUX打向下边,与D锁存器的Q*端接通。(1)作输出口使用 来自CPU的“写入”脉冲加在D锁存器的CP端,内部总线上的数据写入D锁存器,并向端口引脚P0.x输出。注意:由于输出电路是漏极开路(因为这时上拉场效应管截止),必须外接上拉电阻才能有高电平输出。(2)作输入口使用 应区分“读引脚”和“读端口”(或称“读锁存器”)。“读引脚”信号把下方缓冲器打开,引脚上的状态经缓冲器读入内部总线;“读锁存器”信号打开上面的缓冲器把锁存器Q端的状态读入内部总线。2.5.2 P1端口 字节地址90H,位地址90H~97H。P1口只作为通用的I/O口使用,在电路结构上与P0口有两点区别:(1)因为P1口只传送数据,不再需要多路转接开关MUX。(2)由于P1口用来传送数据,因此输出电路中有上拉电阻,这样电路的输出不是三态的,所以P1口是准双向口。因此:(1)P1口作为输出口使用时,外电路无需再接上拉电阻。(2)P1口作为输入口使用时,应先向其锁存器先写入 “1”,使输出驱动电路的FET截止。2.5.3 P2端口 字节地址为A0H,位地址A0H~A7H。在实际应用中,因为P2口用于为系统提供高位地址,有一个多路转接开关MUX。但MUX的一个输入端不再是“地址/数据”,而是单一的“地址”,因为P2口只作为地址线使用。当P2口用作为高位地址线使用时,多路转接开关应接向“地址”端。正因为只作为地址线使用,口的输出用不着是三态的,所以,P2口也是一个准双向口。
P2口也可以作为通用I/O口使用,这时,多路转接开关接向锁存器Q端。2.5.4 P3端口 P3口的字节地址为B0H,位地址为B0H~B7H。P3口的第二功能定义,应熟记。P3口的第二功能定义: 口引脚 第二功能 P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INT0*(外部中断0)P3.3 INT1*(外部中断1)P3.4 T0(定时器0外部计数输入)P3.5 T1(定时器1外部计数输入)P3.6 WR*(外部数据存储器写选通)P3.7 RD*(外部数据存储器读选通)2.5.5 P0~P3端口功能总结 使用中应注意的问题:(1)P0~P3口都是并行I/O口,都可用于数据的输入和输出,但P0口和P2口除了可进行数据的输入/输出外,通常用来构建系统的数据总线和地址总线,所以在电路中有一个多路转接开关MUX,以便进行两种用途的转换。而P1口和P3口没有构建系统的数据总线和地址总线的功能,因此,在电路中没有多路转接开关MUX。由于P0口可作为地址/数据复用线使用,需传送系统的低8位地址和8位数据,因此MUX的一个输入端为“地址/数据”信号。而P2口仅作为高位地址线使用,不涉及数据,所以MUX的一个输入信号为“地址”。(2)在4个口中只有P0口是一个真正的双向口,P1~P3口都是准双向口。原因:P0口作为系统的数据总线使用时,为保证数据的正确传送,需要解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;不进行数据传送时,芯片内外应处于隔离状态。为此,要求P0口的输出缓冲器是一个三态门。在P0口中输出三态门是由两只场效应管(FET)组成,所以是一个真正的双向口。而其它的三个口P1~P3中,上拉电阻代替P0口中的场效应管,输出缓冲器不是三态的,因此不是真正的双向口,只能称其为准双向口
(3)P3口的口线具有第二功能,为系统提供一些控制信号。因此在P3口电路增加了第二功能控制逻辑。这是P3口与其它各口的不同之处。2.6 时钟电路与时序 时钟电路用于产生MCS-51单片机工作所必需的时钟控制信号。2.6.1 时钟电路 时钟频率直接影响单片机的速度,电路的质量直接影响系统的稳定性。常用的时钟电路有两种方式:内部时钟方式和外部时钟方式。2.6.2 机器周期、指令周期与指令时序 单片机执行的指令的各种时序均与时钟周期有关
一、时钟周期 单片机的基本时间单位。若时钟的晶体的振荡频率为fosc,则时钟周期Tosc=1/fosc。如fosc=6MHz,Tosc=166.7ns。
二、机器周期 CPU完成一个基本操作所需要的时间称为机器周期。执行一条指令分为几个机器周期。每个机器周期完成一个基本操作。MCS-51单片机每12个时钟周期为一个机器周期,一个机器周期又分为6个状态:S1~S6。每个状态又分为两拍:P1和P2。因此,一个机器周期中的12个时钟周期表示为:S1P1、S1P2、S2P1、S2P2、„、S6P2。
三、指令周期 执行任何一条指令时,都可分为取指令阶段和指令执行阶段。取指令阶段,PC中地址送到程序存储器,并从中取出需要执行指令的操作码和操作数。指令执行阶段,对指令操作码进行译码,以产生一系列控制信号完成指令的执行。ALE信号是为地址锁存而定义的,以时钟脉冲1/6的频率出现,在一个机器周期中,ALE信号两次有效(但要注意,在执行访问外部数据存储器的指令MOVX时,将会丢失一个ALE脉冲)2.7 复位操作和复位电路 2.7.1 复位操作 单片机的初始化操作,摆脱死锁状态。
引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可使MCS-51复位。复位时,PC初始化为0000H,使MCS-51单片机从0000H单元开始执行程序。除PC之外,复位操作还对其它一些寄存器有影响,见表2-6(P34)。SP=07H,P0-P3的引脚均为高电平。在复位有效期间,ALE脚和PSEN*脚均为高电平,内部RAM的状态不受复位的影响。2.7.2 复位电路 片内复位结构:
复位电路通常采用上电自动复位和按钮复位两种方式。最简单的上电自动复位电路:
按键手动复位,有电平方式和脉冲方式两种。电平方式:
脉冲方式:
两种实用的兼有上电复位与按钮复位的电路。
图2-19中(b)的电路能输出高、低两种电平的复位控制信号,以适应外围I/O接口芯片所要求的不同复位电平信号。74LS122为单稳电路,实验表明,电容C的选择约为0.1mF较好。第四次课 2学时 主要内容: 第三部分 寻址方式,指令系统(1)3.1 指令系统概述 3.2 指令格式 3.3 指令系统的寻址方式 3.4.1 数据传送类指令 重点:指令系统的寻址方式 数据传送类指令
难点:指令系统的寻址方式 第三部分 寻址方式,指令系统(1)介绍MCS-51汇编语言的指令系统。3.1 指令系统概述 MCS-51的基本指令共111条,按指令所占的字节来分:(1)单字节指令49条;(2)双字节指令45条;(3)三字节指令17条。按指令的执行时间来分:(1)1个机器周期(12个时钟振荡周期)的指令64条;(2)2个机器周期(24个时钟振荡周期)的指令45条;(3)只有乘、除两条指令的执行时间为4个机器周期(48个时钟振荡周期)。12MHz晶振:机器周期为1ms。3.2 指令格式 两部分组成,即操作码和操作数。操作码用来规定指令进行什么操作,操作数则是指令操作的对象,有单字节指令、双字节指令、三字节不同长度的指令,格式不同。(1)单字节指令:指令只有一个字节,操作码和操作数同在一个字节中。(2)双字节指令:一个字节为操作码,另一个字节是操作数。(3)三字节指令:操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址。3.3 指令系统的寻址方式 寻址方式就是在指令中说明操作数所在地址的方法。共7种寻址方式。1.寄存器寻址方式 操作数在寄存器中 MOV A,Rn ;(Rn)→A,n=0~7 表示把寄存器Rn的内容传送给累加器A 寻址范围包括:(1)4组通用工作寄存区共32个工作寄存器。(2)部分特殊功能寄存器,例如A、B 以及数据指针寄存器DPTR等。
2.直接寻址方式 操作数直接以单元地址的形式给出: MOV A,40H 寻址范围:(1)内部RAM的128个单元(2)特殊功能寄存器。除了以单元地址的形式外,还可用寄存器符号的形式给出。例如: MOV A,80H 与 MOV A,P0是等价的。直接寻址方式是访问特殊功能寄存器的唯一寻址方式 3.寄存器间接寻址方式 寄存器中存放的是操作数的地址,在寄存器的名称前面加前缀标志“@” 访问内部RAM或外部数据存储器的低256个字节时,只能采用R0或R1作为间址寄存器。例如:MOV A,@Ri ;i=0或1 其中Ri中的内容为40H,把内部RAM中40H单元的内容送到A。寻址范围:(1)访问内部RAM低128个单元,其通用形式为@Ri(2)对片外数据存储器的64K字节的间接寻址,例如: MOVX A,@DPTR(3)片外数据存储器的低256字节,例如: MOVX A,@Ri(4)堆栈区,堆栈操作指令PUSH(压栈)和POP(出栈)使用堆栈指针(SP)作间址寄存器。4.立即寻址方式 操作数在指令中直接给出,需在操作数前面加前缀标志“#”。例如: MOV A,#40H 5.基址寄存器加变址寄存器间址寻址方式 本寻址方式是以DPTR或PC作基址寄存器,以累加器A作为变址寄存器。例如:指令 MOVC A,@A+DPTR 其中A的原有内容为05H,DPTR的内容为0400H,该指令执行的结果是把程序存储器0405H单元的内容传送给A。说明:(1)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到64KB。(2)本寻址方式的指令只有3条:
MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR 6.位寻址方式 MCS-51有位处理功能,可以对数据位进行操作,例如MOV C,40H 是把位40H的值送到进位位C。寻址范围包括:(1)内部RAM中的位寻址区。位有两种表示方法,例如,40H;另一种是单元地址加上位,例如,(28H).0,指的是28H单元中的最低位。它们是等价的。(2)特殊功能寄存器中的可寻址位 可寻址位在指令中有如下4种的表示方法: a.直接使用位地址。例如PSW.5的位地址为0D5H。b.位名称的表示方法。例如:PSW.5是F0标志位,可使用F0表示该位。c.单元地址加位数的表示方法。例如 :(0D0H).5。d.特殊功能寄存器符号加位数的表示方法。例如:PSW.5。7.相对寻址方式 在相对寻址的转移指令中,给出了地址偏移量,以“rel”表示,即把PC的当前值加上偏移量就构成了程序转移的目的地址: 目的地址=转移指令所在的地址 + 转移指令的字节数+ rel 偏移量rel是一带符号的8位二进制数补码数。范围是:–128 ~ +127。向地址增加方向最大可转移(127+转移指令字节)个单元地址,向地址减少方向最大可转移(128-转移指令字节)个单元地址。3.4 MCS-51指令系统分类介绍 111条指令,按功能分类,可分为下面5大类:(1)数据传送类(28条)(2)算术操作类(24条)(3)逻辑运算类(25条)(4)控制转移类(17条)(5)位操作类(17条)指令中符号的意义: Rn 当前寄存器区的8个工作寄存器R0~R7(n=0~7)。Ri 当前选中的寄存器区中可作间接寻址寄存器的2 个寄存器R0、R1(i=0,1)。
Direct 直接地址,即8位的内部数据存储器单元或特殊功能寄存器的地址。#data 包含在指令中的8位立即数。#data16 包含在指令中的16位立即数。rel 相对转移指令中的偏移量,为8位的带符号补 码数 DPTR 数据指针,可用作16位的地址寄存器。bit 内部RAM或特殊功能寄存器中的直接寻址位。C(或Cy)进位标志位或位处理机中的累加器。addr11 11位目的地址 addr16 16位目的地址 @ 间接寻址寄存器前缀,如@Ri,@A+DPTR(X)X中的内容。((X))由X寻址的单元中的内容。→ 箭头右边的内容被箭头左边的内容所取代。3.4.1 数据传送类指令 使用最频繁的一类指令,通用格式: MOV <目的操作数>,<源操作数> 属“复制”性质,而不是“搬家”,数据传送类指令不影响标志位, CyOV,但不包括奇偶标志位P。1.以累加器为目的操作数的指令 MOV A,Rn;(Rn)→A,n=0~7 MOV A,@Ri;((Ri))→A,i=0,1 MOV A,direct;(direct)→A MOV A,#data;#data→A 例如: MOV A,R6;(R6)→A,寄存器寻址 MOV A,70H;(70H)→A,直接寻址 MOV A,@R0;((R0))→A,间接寻址 MOV A,#78H;78H→A,立即寻址 2.以Rn为目的操作数的指令、Ac和
MOV Rn,A;(A)→Rn,n=0~7 MOV Rn,direct;(direct)→Rn,n=0~7 MOV Rn,#dat;#data→Rn,n=0~7 功能:是把源操作数的内容送入当前一组工作寄存器区的R0~R7中的某一个寄存器。3.以直接地址direct为目的操作数的指令 MOV direct,A;(A)→direct MOV direct,Rn;(Rn)→direct, n=0~7 MOV direct1,direct2;MOV direct,@Ri;((Ri))→direct MOV direct,#data;#data→direct 功能:把源操作数送入直接地址指出的存储单元。direct指的是内部RAM或SFR的地址。4.以寄存器间接地址为目的操作数的指令 MOV @Ri,A;(A)→((Ri)),i=0,1 MOV @Ri,direct;(direct)→((Ri))MOV @Ri,#data;#data→((Ri))5.16位数传送指令 MOV DPTR,#data16;#data16→DPTR 唯一的16位数据的传送指令 ,立即数的高8位送入DPH,立即数的低8位送入DPL。6.堆栈操作指令 MCS-51内部RAM中可以设定一个后进先出(LIFO-Last In First Out)的区域称作堆栈.堆栈指针SP指出堆栈的栈顶位置。(1)进栈指令 PUSH direct 先将栈指针SP加1,然后把direct中的内容送到栈指针SP指示的内部RAM单元中。例如: 当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令
PUSH ACC;(SP)+1=61H→SP,(A)→61H PUSH B;(SP)+1=62H→SP,(B)→62H 结果:(61H)=30H,(62H)=70H,(SP)=62H(2)出栈指令 POP direct SP指示的栈顶(内部RAM单元)内容送入direct字节单元中,栈指针SP减1.例如: 当(SP)=62H,(62H)=70H,(61H)=30H,执行下列指令: POP DPH;((SP))→DPH,(SP)-1→SP POP DPL;((SP))→DPL,(SP)-1→SP 结果:(DPTR)=7030H,(SP)=60H 7.累加器A与外部数据存储器传送指令 MOVX A,@DPTR;((DPTR))→A,读外部RAM/IO MOVX A,@Ri;((Ri))→A,读外部RAM/IO MOVX @DPTR,A;(A)→((DPTR)),写外部RAM/IO MOVX @Ri,A;(A)→((Ri)),写外部RAM/IO 功能:读外部RAM存储器或I/O中的一个字节,或把A中一个字节的数据写到外部RAM存储器或I/O中。注意:RD*或WR*信号有效。采用DPTR间接寻址,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。采用Ri(i=0,1)间接寻址,可寻址片外256个单元的数据存储器。Ri内容由P0口输出。8位地址和数据均由P0口输出,可选用其它任何输出口线来输出高于8位的地址(一般选用P2口输出高8位的地址)。MOV后 “X”表示单片机访问的是片外RAM存储器或I/O。8.查表指令 共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。(1)MOVC A,@A+PC
以PC作基址寄存器,A的内容作为无符号整数和PC中的内容(下一条指令的起始地址)相加后得到一个16位的地址该地址指出的程序存储单元的内容送到累加器A。注意:PSEN*信号有效。例如:(A)=30H,执行地址1000H处的指令 1000H: MOVC A,@A+PC 本指令占用一个字节,执行结果将程序存储器中1031H的内容送入A。优点:不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。缺点:表格只能存放在该条查表指令后面的256个单元之内,表格的大小受到限制,且表格只能被一段程序所利用。(2)MOVC A,@A+DPTR 以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,把由该地址指出的程序存储器单元的内容送到累加器A.例如(DPTR)=8100H(A)=40H 执行指令 MOVC A,@A+DPTR 本指令的执行结果只和指针DPTR及累加器A的内容有关,与该指令存放的地址及常数表格存放的地址无关,因此表格的大小和位置可以在64K程序存储器中任意安排,一个表格可以为各个程序块公用。两条指令是在MOV的后面加C,“C”是CODE的第一个字母,即代码的意思。9.字节交换指令 XCH A,Rn XCH A,direct XCH A,@Ri 例如:(A)=80H,(R7)=08H,(40H)=F0H(R0)=30H,(30H)=OFH 执行下列指令: XCH A,R7;(A)与(R7)互换
XCH A,40H;(A)与(40H)互换 XCH A,@R0;(A)与((R0))互换 结果:(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H 10.半字节交换指令 XCHD A,@Ri 累加器的低4位与内部RAM低4位交换。例如:(R0)=60H,(60H)=3EH,(A)=59H执行完
指令,则(A)=5EH,(60H)=39H。XCHD A,@RO
第三篇:《单片机原理及应用》课程
《单片机原理及应用》课程
自评报告
陕西理工学院电气工程系《单片机原理及应用》课程组 二○一○年三月
目 录
第一部分 课程简介
第二部分
课程内容与体系的改革 第三部分 实验教材
第四部分 自评结果和评分依据 第五部分 存在的主要问题及整改措施 附件:自评评分依据 《单片机原理及应用》课程自评报告
第一部分 课程简介
单片机技术广泛地应用于工业控制、智能仪器仪表、机电一体化产品、家用电器等各个工业领域。因此,单片机原理及应用是工科院校各专业学生的一门重要的应用技术课程,对电类学生尤为重要,通过该课程可以了解工业高新技术,培养综合的工程设计能力。学生在课程设计、毕业设计、科研项目中会广泛应用到单片机知识,而且,进入工作后,更会广泛接触到单片机的工程项目。近几年,一些用人单位直接把单片机应用技术测试作为人才选用的条件。显然,提高该门课程的教学质量,对培养学生的综合应用能力,提升学生在人才需求市场中的竞争能力,具有重要意义。
《单片机原理及应用》课程是自动化、电气工程及其自动化、计算机科学与技术等专业的一门专业技术基础课。单片机应用技术包含着广泛的内容(基本原理、接口技术、开发方法、开发工具、控制技术等),而且构成完整的知识体系。也就是说,缺少某一个方面或某一个环节的知识,将会影响实践应用能力。再者,单片机产品及其应用技术发展日新月异。在一门课程的有限教学时间内,如何让学生比较系统全面的掌握单片机应用知识,同时能反映比较新的应用技术,培养学生的工程设计能力,必须加强课程建设力度,在课程内容与课程体系上进行重大改革。
《单片机原理及应用》课程在自动化、电气工程及其自动化、计算机科学与技术3个本、专科专业中开设学时为40-60学时。多年来,该课程组师资队伍建设稳步提高,教学和实验条件逐步完善,现已形成了相对稳定的较高教学水平的师资队伍和完全满足实验教学条件的实验平台。
目前,《单片机原理及应用》课程组共有6名课程主讲教师和多位实验技术人员,其中教授1人、副教授2人、讲师3人,研究生5人,实验师多人,承担校内相关3个专业本、专科学生的单片机原理及应用课程教学与实验任务。
《单片机原理及应用》课程组在多年的具体教学与实践过程中,在课程建设和教学改革方面取得了较为显著的成效。从2000年开始,课程改革小组注重教育思想和教学观念的转变,开展了课程教学内容、课程体系、教学方法及教学手段的改革研究与实践,对课程的教学内容与体系进行了优化。目前已初步建立了以培养学生工程素质和综合应用能力为教学目标的新的课程体系,在教材建设、实践性教学环节建设方面取得了可喜的成果。李建忠教授把课程组研究的理论成果变成了现实成果,编著的《单片机原理及应用》(第二版被评为国家十一五规划教材)一书被全国30多个省市的100多所高校采用,在国内产生较大影响。组织的实践教学环节在本院多届学生中也取得了显著的成效。
《单片机原理及应用》教学仪器设备丰富,实验开出率100%,同时开设一定的设计性、综合性实验。实验室规章制度健全,管理人员到位,教学服务及时,为实验课程教学提供了有力保障。
随着“单片机原理及应用”课程内容和课程体系改革的进行,课程教学质量逐步明显提高。伴随着教学质量的提高,浮现出了许多科研项目。例如,智能型家用有毒气体探测语音报警呼救装置、机车防带电过分相装置、消失模浇注充型速度的微机化测试的研制,科研项目的进行又推动了教学质量的进一步提高。教师在教学中,结合自己的科研生动地讲解原理、方法、技术。近几年课程组成员结合自己的科研项目,在单片机应用技术方面发表论文多篇。
第二部分 课程内容与体系的改革
教材是教育思想、教育理念体现的载体,是一门课程教学内容与体系、教学方法及手段的集中表现。一本好的教材不能局限在知识的传递上,还应表现在科学思维方法、获取知识的方法、综合能力和创新设计能力培养方法的传递上,便于运用新的教学方法和手段组织实施教学。这是课程组改革研究的一个理论成果。
在理论研究的指导下,确定以教材建设为龙头进行课程内容与体系的优化。由于单片机应用技术知识包含的内容广泛,单片机产品及其应用技术发展速度快,如何在有限的计划课时内让学生比较完整的掌握单片机应用技术知识体系,同时了解一些比较新应用技术,吸取了国内外先进的教学思想和教学经验,广泛收集和查阅国内外优秀教材和有关教学资料,又结合我们多年积累的教学经验和教训,比较全面地考虑了各种因素,对课程内容与课程体系进行整体优化,编著了《单片机原理及应用》(第二版被评为国家十一五规划教材)、《单片机原理及应用实践教程》,形成了一套新的课程教学体系。教材内容体系进行了优化组合。既体现了系统全面,包含了基本原理、接口技术、开发方法、开发工具、控制技术等,又进行了浓缩精练,论述严谨透彻。教材内容的组织上采用“以点见面,触类旁通”的精练浓缩方法。例如,在每一章节前都概述出相关的一般性内容和方法,然后再以具体的内容或典型的实例进行说明。始终贯穿应用观点。例如,在单片机原理的讲解中,着重强调站在应用角度,掌握单片机的功能特性和配置结构。即用户站在单片机芯片外部看它所提供给用户的使用功能和资源,达到正确、合理的使用单片机所提供的硬、软件资源。这不仅给学生强调了达到应用的学习目标,而且给学生树立了一个学习掌握应用知识的正确学习方法界面。这一点经教学实践检验,取得了良好的教学效果。又例如,在应用技术的讲解中,大多数选自生产和科研中的应用实例,使学生学后就能用。注重科学思维方法、获取知识的方法、综合能力和创新设计能力的培养方法的传递。掌握一门学科知识的学习方法,其实质是找出并抓住学科知识的内在联系,形成一个完整体系。该书突出了这方面的特色。例如,在指令系统的讲述中,大多数教材采取按功能类逐条指令罗列讲解,使初学者很难理解记忆。其实,指令系统中有一些操作指令的子集合是具有特征规律的,不同操作指令的子集合之间也具有一些可比性特征规律,在该书的讲述中用归纳、类推、类比方法进行纵向归类,横向类推、比较。这不仅能使学生掌握知识,而且学习了科学思维方法和学习方法。在讲解基础知识的基础上,反映新的应用技术成果。例如,紧密结合基础知识讲解了单片机应用程序开发设计方法。
第三部分 实验教材
在广泛调研现有实验教材经验与问题的基础上,引入新的教育理念,针对现代工程人才的培养模式、人才素质及能力的要求,课程组认为实验教材不能局限在对基础知识的验证上、不能局限在基本实验的操作指导上、不能局限在某一门课程知识的动手实践能力的培养上、不能局限在理论教材的辅助功能作用上,还应给学生提供广阔的、自由灵活的动手实践空间,要培养学生在基本理论知识的基础上能够吸收、使用新技术方法,培养学生一般的工程实践能力和创新设计能力,使实验教材成为相对独立的综合实践能力培养的指导书。在这样的思想指导下,组织编写了《单片机原理及应用实践教程》的,于2001年5月在本院内部印刷使用。在多年的使用中取得了良好的效果。
《单片机原理及应用实践教程》一书主要具有以下特色:(1)知识的系统完整性与实践过程的系统完整性并重 实验内容的编写上紧密结合理论教学,按照单片机原理及应用课程知识的内在联系,保持了知识的系统完整性。从宏观结构上,实验内容分为单片机系统功能、单片机系统扩展、单片机系统配置和综合应用四大实验组。在每个实验组中又按照基础→综合→工程应用的方式安排了多个实验项目,每个实验项目中又按照基本原理、知识提要、基本技术、方法论证、实验结果分析的方式进行组织。这样,使该书成为学习、掌握单片机原理及应用知识的很有价值的参考书。从实践应用过程看,该书宏观上反映了单片机应用系统的开发环境、开发方法、开发过程。在每一个实验项目中,又反映出了一个单片机应用系统立题概要分析、功能结构论证分析、器件选择、硬软件设计、系统调试、性能分析与测试、文档收集与整理的全过程。使学生能够学习、掌握到一个单片机应用系统开发设计过程中各个环节的技术方法。
(2)知识掌握和科学思维能力培养并重
在每个实验项目中都提示出所依据的基本原理知识,所采用的方法和技术,通过实验来加深对基本知识的理解,达到熟练掌握。在每个实验项目后,提出一些很有价值的思考问题,主要围绕实验现象观察与分析,培养学生科学细致地观察与分析问题的方法和能力。每个实验既给出了参考方案,又要求学生在参考方案的基础上自行设计、调试,充分发挥学生的主观能动性和创造力、有意识地培养学生对工程问题的分析与设计方法。每个实验都要求学生按照严格的格式写出实验报告,在实验报告中深入细致地分析、论证有关实验现象与结果,通过实验报告的书写,培养学生严谨求实的科学方法和态度。
(3)既面向验证性实验又面向开放性、设计性实验
根据单片机原理与应用的知识结构,实验内容分为单片机系统功能、单片机系统扩展、单片机系统配置和综合应用四个实验组。每个实验组又按照基本原理、技术、方法的应用,综合应用、工程设计的思路方式安排了多个实验项目,为学生提供了广泛的实验内容,即可以供课程实验使用,也可以供开放实验、设计实验使用。
(4)实验教学的目标确定在以下几个方面:
验证基本理论、方法和技术。通过验证性实验,使学生加深对基本理论、方法和技术理解,能够熟练应用,并使学生进一步认识到:基本理论、方法和技术来源于实践,又对实践有强大的推动作用,在实践中得到发展,得到创新。
基本实践能力的培养。基本实践能力包含:掌握小型单片机应用系统开发研制所采用的基本环境、方法、手段及所使用的仪器设备。
综合工程实践能力的培养。综合工程实践能力包含:掌握复杂单片机工程应用系统开发研制所采用的先进的环境、方法、手段及所使用的仪器设备,并能进行工程决策分析。
创新设计能力的培养。创新设计能力包含:在一些关键的技术环节上能够激发出超常的思想方法或采用前沿性的技术手段分析解决问题。
(5)实验教学的实施方式
根据现代工程人才的培养模式、人才素质及能力的要求,我们设计出了形式多样的实验教学方式。
指导型实验。这类实验纳入单片机原理及应用课程的教学计划和教学大纲,在老师的指导下,进行规定要求实验,实验后要写出实验报告。实验目标是基本实践能力的培养。
开放型实验。这类实验是学生根据自己的要求自发地进行实验,实验室必须随时满足学生的实验要求。在这种实验中,学生可根据自己的情况实现多种目标。
设计型实验。这类实验学生带着自己的设计问题,进入实验室进行调试或测试,一般结合课程设计、毕业设计、大学生科技活动项目进行。实验要有明确的目标,主要培养学生综合工程实践能力和创新设计能力。
第四部分 自评结果和评分依据
为了进一步提高课程教学质量,努力做好课程建设与评估,电气工程系专门成立了院系、教研室(课程组)两级评估领导小组,负责对申报课程的指导、监督和审查。课程组全体任课教师认真学习、领会相关课程建设与评估精神,认真对照精品课程建设评估指标体系的各项要求,总结多年来课程建设的成果,结合课程建设过程中存在的实际问题,进行了认真细致地资料整理、自查自评。通过本次自查自评活动,真正达到了“以评促改,以评促建”的目的。
自评结果:Q=102分(≥100),符合并达到了校级精品课程的条件。详见附件:课程自评表。
第五部分 存在的主要问题及整改措施
1.网络教学和资源共享方面还需进一步的丰富和完善。实现与本课程相关的信息查询、辅导答疑、作业练习等多种功能,方便学生网上学习。
2.实验教学设备更新不够,试验教学手段还不够丰富、不够先进,理论教学内容和体系还需要进一步整合、优化;
3.进一步加大教学改革力度,转变教育教学理念,探索高教理论,不断改进和提高教师的理论与实践教学方法和手段。
同时还需要认清形势,剖析自我,虚心向兄弟院校学习先进的课程建设经验,弥补自己的差距和不足,加快课程建设步伐,使《单片机原理及应用》课程教学全面上台阶、上水平。
附件:自评评分依据 师资结构:19分/20 1.1师资结构:A级,4分/4 课程组职称结构合理,有教授、副教授、讲师、高级实验师、实验师共8人,主要由教授、副教授、讲师上课。
1.2教学水平:A级,5 分/6 教学水平高,高、中级职称教师均开课2门以上;教学工作量饱满,教案齐全;有教改及科研项目。
1.3学术水平:A级,6 分/6近3年发表论文篇,人均6篇;主编、参编教材9部;完成省厅级科研项目3项,校级科研基金项目3项,院教改项目7项。
1.4教风建设:A级,4分/4 教风良好;教研室制度健全,坚持教学研究活动,每年教研活动大于18次,有记录;能坚持相互听课、评教;能收集学生对教学的反馈信息,并改进教学;教学组无任何教学事故。教学条件:24分/25 2.1教学大纲:A级,6分/6 教学大纲符合专业培养目标和教学计划的基本要求,并能结合教学计划适时修订、完善;大纲能反映课程体系结构,项目完整,层次清晰,重点、难点突出,要求明确;教学过程中能够严格执行大纲。
2.2教材及教学参考书:A级,7 分/7 选用学校自编国家级规划教材及相应教学参考书,满足不同专业的培养计划要求,使用效果好。
2.3课程教学管理及教学文件:A级,5分/6 教学参考资料丰富、齐全,能反映本课程发展现状;课程有完整的教学工作总结,教师有教学日历和教案。
2.4教学设备和手段:A级,6分/6 使用多媒体、板书讲解和现场教学等手段;与实验室共同开发研制有相应的实验教学设备,且符合本校学生情况,使用效果好,完全能满足正常的教学需要。3 考核:15分/17 3.1考试说明:A级,3分/3 在教学大纲的指导下,能按要求进行命题考试工作,命题质量高,考分分布合理。3.2题库(卷库)建设:B级,4分/5 有与教材配套使用的高质量的试题库,试题库完全符合教学要求。3.3命题与评分:A级,4分/4 考试命题形式多样,有外校试题、教研室组织命题、试题库组题等,全部为考教分离;有评分标准,流水阅卷,有效控制了评分误差。3.4试卷分析:B级,3分/5 试题内容体现教学大纲的基本要求,难度适中,有一定的可信度和区分度;成绩分布基本合理。4 教学改革:分/13 4.1教改方案:A级,4分/5 在切实可行的教改计划,且能运用在教学过程中,有一定的总结。4.2教改效果:A级,7分/8 有专业教改项目的实施,完成教改项目7项,教改效果比较显著,获校教学成果奖二等奖3项。5 教学效果:21分/25 5.1讲课质量:A级,9分/10 根据师生对讲课质量的综合评价,课程组总体讲课水平较高。5.2课外指导:A级,5分/6 对学生课外学习有明确具体的要求,并认真落实、检查;坚持课外辅导、答疑,效果较好。
5.3教学获奖情况:A级,4分/4近几年获院级以上教学成果奖、讲课大赛奖、教案评比奖的人数占课题组人数的70%;有毕业生调查信息表,毕业生反映本课程教学效果优良。
5.4学习质量:B级,3分/5 在严格组织考试、评分的情况下,学生考试成绩真实,客观反映了学生学习的现状;学生基本知识掌握较扎实,但综合解题能力一般。6 特色指标:A级,16分/20(1)兼顾教学的典型性和技术先进性
教学内容的典型性有利于学生理解相关基础知识,掌握基本原理和方法,触类旁通。随着单片机应用技术日异月新的发展,在未来的实际工作中又会广泛接触到新技术、新器件。在理论教学和实践充分考虑了典型性问题,同时在每个实验的实现方案中又提示学生在典型性问题的基础上采用一些新器件、新方法自行设计,让学生接触一些先进性技术、方法。
(2)基础训练与实际应用相结合
在注重单片机原理、实用接口技术的基础上、还突出教学内容的实践性和实用性。大多数实验内容都取材于生产和科研实际。综合应用实验集中锻炼学生了解实际系统要求,设计应用系统的能力。有助于开拓视野,强化工程观念,培养创新能力和协作精神,提高综合素质。
(3)注重综合工程实践能力和创新设计能力的培养
大多数实验内容都取材于生产和科研实际,使学生所学就能所用。
每一个实验项目的实验过程都突出一个单片机工程应用系统开发设计的各个关键技术环节,尤其突出调试方法和手段。每一个实验项目中都设置了若干问题,让学生充分发挥主观能动力和创新思维能力进行调试。每一个实验项目除给出参考实验方案外,还提示采用不同的方案、不同的器件、不同的方法自行设计、调试,给学生留下创新发挥的空间。
电气工程系
《单片机原理及应用》课程组
2010.3
第四篇:单片机原理及应用课程设计
智能电子钟(LCD显示)
1、设计内容及要求...............................................................................................2 1.1、设计内容..............................................................................................2 1.2、设计要求..............................................................................................2 1.3、撰写设计报告......................................................................................2
2、总体方案设计...................................................................................................2 2.1、方案图................................................................................................2 2.2、面板布置图.........................................................................................2 2.3、方案讨论.............................................................................................3 2.4、明晰任务.............................................................................................4
3、电路原理图......................................................................................................4
4、程序框图.........................................................................................................5 4.1、显示子程序流程图............................................................................5 4.2、实时时钟芯片 1302 读/写数据流程图............................................6
5、编程序................................................................................................................6
6、调试....................................................................................................................6 6.1、软件调试.............................................................................................6 6.2、仿真调试..............................................................................................7
7、自我感想............................................................................................................7
8、参考书目............................................................................................................8 附录:C 语言编程源程序.......................................................................................8 1.设计内容及要求 1.1、设计内容:
以AT89C51 单片机为核心,制作一个 LCD 显示的智能电子钟。1.2、设计要求:
(1)计时:秒、分、时、天、周、月、年。(2)闰年自动判别。
(3)五路定时输出,可任意关断(最大可到16路)。(4)时间、月、日交替显示。(5)自定任意时刻自动开/关屏
(6)计时精度:误差≤1秒/月(具有微调设置)
(7)键盘采用动态扫描方式查询。所有的查询、设置功能均由功能键K1、K2完成 1.3、撰写设计报告
单片机课程设计是以课题或项目设计方式开展的一门课程,具有较强的综合性、实践性,是工科、工程类院校或职业类院校电类专业在校生的必修课,是将单片机原理与应用课程的理论知识转变为应用技术的重要教学环节。这一环节不但能加深对单片机原理的理解,而且还能培养学生的实践动手能力,开发学生的分析、解决问题的能力。单片机课程设计环节的训练能够让学生知道单片机工程项目的制作过程,使学生尽早了解单片机系统的开发过程。
2.总体方案设计 2.1、方案图
2.2、面板布置图
2.3、方案讨论
方案一:采用实时时钟芯片
实时时钟芯片具备年、月、日、时、分、秒计时功能和多点计时功能,计时数据的更新每秒自动进行一次,不需程序干预。计算机可通过中断或查询方式读取计时数据进行显示,因此计时功能的实现无需占用 CPU 的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性 RAM,可用来存放需长期保存但有时也需变更的数据,由于功能完善,精度高,软件程序设计相对简单,且计时不占用 CPU 时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。
方案二:软件控制
利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时及秒表计时。该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌握单片机应用技术 MCS-51 汇编语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现计时。而由于 Atmel 公司 的AT89C51 是一种自带 4KB Flash 存储器的低电压、高性能的 CMOS 8 位微处理器。该器件采用 Atmel 高密度非易失存储器制造技术制造,与工业标准 的MCS-51 指令集和输出引脚相兼容。AT89C51 将多功能 8 位 CPU 和闪存集成在单个芯片中,是一种高效的微控制器,使用也更方便,寿命更长,可以反复擦除 1000 次。形成了功能强大、使用灵活和具有较高性能价格比的微控制器。它的功能强大而且也比较容易购买,故本设计中所选的单片机为 AT89C51 单片机。2.4、明晰任务
采用 AT89C51 单片机作为系统的控制核心。时钟数据通过市场上流行的时钟芯片 DS1302 来获取。DS1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和 31 字节静态 RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。实时时钟/日历电路能够计算 2100 年之前的秒、分、时、日、星期、月、年的,具有闰年自动判断调整的能力。定时电路能够实现自定任意时刻自动开/关屏,采用 LCD LM016L 显示年、月、周、天、时、分、秒。通过按键开关实现微调,确保计时精度:误差≤1 秒/月。DS1302 时钟芯片的主要功能特性:
(1)能计算 2100 年之前的年、月、日、星期、时、分、秒的信息;每月的天数
和闰年的天数可自动调整;时钟可设置为 24 或 12 小时格式。(2)31B 的 8 位暂存数据存储 RAM。(3)串行 I/O 口方式使得引脚数量最少。
(4)DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需 3 根线。
(5)宽范围工作电压 2.0-5.5V。
(6)工作电流为 2.0A 时,小于 300nA。
(7)功耗很低,保持数据和时钟信息时功率小于 1mW。
3.电路原理图
4.程序框图
4.1、显示子程序流程图
4.2、实时时钟芯片 1302 读/写数据流程图
5.编程序 源程序见附录部分 6.调试 6.1、软件调试
目前设计过程中容易造成元件和仪器仪表的损坏,而借助 Keil 和 Proteus进行单片机系统的开发,可以节省设计成本,提高设计速度。Keil 软件包是一个功能强大的开发平台,它包括项目管理器、CX51 编译器、AX51 宏汇编器、BL51/LX51 连接定位器、RTX51 实时操作系统、Simulator 软件模拟器及 Monitor51 硬件目标调试器。它是一种集成化程度高的文件管理编译环境,主要功能为编译 C 语言源程序,汇编程序或混合语言源程序,连接和定位目标文件和库,创建 HEX 文件,调试目标程序等。Keil 是目前最好的 51 单片机开
发工具之一。Keil 支持软件模拟仿真(Simulator)和用户目标调试(Monitor51)两种工作模式。前者不需要任何单片机硬件即可完成用户程序仿真、调试,后者利用硬件目标板中的监控程序可以直接调试目标硬件系统。Proteus 是一个完整的嵌入式系统软件、硬件设计仿真平台,它包括原理图输入系统 ISIS、带扩展的 Prospice 混合模型仿真器、动态元件库、高级图形分析模块和处理器虚拟系统仿真模型 VSM。ISIS 是 Proteus 系统的中心,具有超强的控制原理设计环境。ProteusVSM 最重要的特点是能把微处理器软件作用在处理器上,并和该处理器的任何模拟和数字元件协同仿真,仿真执行目标码就像在真正的单片机系统上运行一样,VSM CPU 模型能完整仿真 I/O 接口、中断、定时器、通用外部设备口及其他与 CPU 有关的外部设备,甚至能仿真多个处理器。6.2、仿真调试 Proteus 仿真
7.自我感想
经历过这么多天不间断的课程设计,我们有挺多感触的,从最基本上说我们看到了,也意识到了自己的不足,对于不断克服的各种阻碍也让我们体会到了课程设计的意义所在。对于只接触课本只动笔杆的我们,面临实际的设计尺寸,让我们很是尴尬,都说理论联系实际,真正到联系的时候才发现挺困难的,不过正是理论知识的各种补充才让我们能最终完成任务,然后深深地体会到理论对现实的指导作用。我们现在最缺乏的就是实际工作经验,而理论联系实践并不像我们想象的那么简单,他需要坚实的理论基础和实际工作经验。坚实的理论基础决定了我必须坚持学习新的知识新的理论,完善了自己的知识结构,才能在以后的实际中轻松面对,才能设计出更好的更有益于人们生活与工作的机械,才能跟上时代的步伐,不被淘汰。在这个一边忙着复习忙着考试又要准备课程设计的日子里,真真正正的体会到了时间的宝贵,有点像高中忙忙碌碌的生活,不过能按时完成课程设计对我们来说也是一个莫大的安慰。严谨和细心是做机械设计的必要态度,要想做好一件事,就必须一丝不苟、态度认真。俗话说:“失之毫厘,谬之千里。”在机械设计上尤其应该注意。在以后的工作中,你的很小的一个疏忽将会造成一个公司很大的损失,甚至给用户带去生命危险,而自己也会为自己的不负责任行为付出代价。再者就是设计中要严谨和细心,对于机械是不能出差错的,任何的微小误差都可能产生不可预计的后果,当然对于我们来说就是设计中要走一些弯路,而且在这个严重缺少时间又惦记回家问题的我们来说也是一个很严重的后果。不过,困难虽是难免的,但我们有信心就能并且已经战胜了困难,完成了这个无比揪心的课程设计。因为时间等各种关系设计中难免有些不足还请老师助教给予批评和帮助。
8.参考文献
《MCS-51 系列单片机原理及应用》 孙涵芳 主编 《新概念 51 单片机 C 语言教程》 郭天祥 主编 《51 单片机课程设计》 周向红 主编 《单片机原理及其应用教程》 张元良 主编 附录:C 语言编程源程序
#include
uint year_data,t;//-----sbit SCLK=P3^5;//DS1302 通讯线定义 sbit DIO=P3^6;sbit RST=P3^7;sbit speak=P0^0;sbit DS=P2^0;//595 通讯线定义 sbit SH_CP=P2^1;sbit ST_CP1=P2^2;sbit ST_CP2=P2^3;sbit ST_CP3=P2^4;sbit ST_CP4=P2^5;sbit ST_CP5=P2^6;sbit ST_CP6=P2^7;sbit ST_CP7=P3^0;sbit ST_CP8=P3^1;sbit OE1=P1^0;sbit OE2=P1^1;sbit OE3=P1^2;sbit OE4=P1^3;sbit OE5=P1^4;sbit OE6=P1^5;sbit OE7=P1^6;sbit OE8=P1^7;sbit K1=P3^2;//按键接口定义 sbit K2=P3^3;sbit K3=P3^4;sbit K4=P0^1;sbit K5=P0^2;//-----void write_595(uchar temp)//写 74HC595 一个字节 { uchar temp_595,i;temp_595=temp;for(i=0;i<8;i++)
{
SH_CP=0;
_nop_();_nop_();_nop_();if(temp_595&0x80){ DS=1;} else { DS=0;} _nop_();_nop_();_nop_();SH_CP=1;temp_595<<=1;} } //--------------void delay(uint z)//Nms 延时 { uint x,y;for(x=z;x>0;x--)for(y=112;y>0;y--);} //-------------void delaynus(uint z)//ums 延时 { uint x,y;for(x=z;x>0;x--)for(y=10;y>0;y--);} //---------------void write(uchar date)//写入 DS1302 一个字节 { uchar temp,i;RST=1;SCLK=0;temp=date;for(i=0;i<8;i++){ SCLK=0;if(temp&0x01)DIO=1;else DIO=0;SCLK=1;temp>>=1;} } //-----uchar read()//读出 DS1302 一个字节 { uchar a,temp;RST=1;for(a=8;a>0;a--){ temp>>=1;SCLK=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();SCLK=0;if(DIO){ temp=temp|0x80;} else { temp=temp|0x00;} } return(temp);} //---void write_1302(uchar add,uchar dat)//写 DS1302 数据 { RST=0;SCLK=0;RST=1;write(add);write(dat);SCLK=1;RST=0;} //----------uchar read_1302(uchar add)// 读 DS1302 数据 { uchar temp;RST=0;SCLK=0;RST=1;write(add);temp=read();SCLK=1;RST=0;return(temp);} //------------void display()//显示子程序 { miao=read_1302(0x81);//读秒 fen=read_1302(0x83);//读分
shi=read_1302(0x85)&0x3f;//读时 date=read_1302(0x87);//读日 month=read_1302(0x89);//读月 year=read_1302(0x8d);//读年 day=read_1302(0x8B);//读星期 write_595(miao);//显示秒 ST_CP1=0;ST_CP1=1;ST_CP1=0;delaynus(10);write_595(fen);//显示分 ST_CP2=0;ST_CP2=1;ST_CP2=0;delaynus(10);write_595(shi);//显示时 ST_CP3=0;ST_CP3=1;ST_CP3=0;delaynus(10);write_595(date);//显示日 ST_CP4=0;ST_CP4=1;ST_CP4=0;delaynus(10);write_595(month);//显示月 读 ST_CP5=0;ST_CP5=1;ST_CP5=0;delaynus(10);write_595(year);//显示年 ST_CP6=0;ST_CP6=1;ST_CP6=0;delaynus(10);write_595(xingqi[day]);//显示星期 ST_CP7=0;ST_CP7=1;ST_CP7=0;delaynus(10);} //----------void ds1302_init()//1302 初始化 { RST=0;SCLK=0;/* write_1302(0x80,0x00);//设置初始值 SEC write_1302(0x82,0x00);//设置初始值 MIN write_1302(0x84,0x00);//设置初始值 HR write_1302(0x86,0x00);//设置初始值 DATE write_1302(0x88,0x00);//设置初始值 MONTH write_1302(0x8A,0x00);//设置初始值 DAY */ write_1302(0x8C,0x10);//设置初始值 YEAR } //--------------void PORT_INIT()//端口初始化 { P0=0XFE;P1=0X00;P2=0X00;P3=0XFC;} void time_init()//定时器初始化 { TMOD=0x11;//设置定时 器 01 都为工作方式 1 TH0=(65536-50000)/256;//装入初值 TL0=(65536-50000)%256;TH1=(65536-10000)/256;//装入初值 TL1=(65536-10000)%256;PT0=1;//T0 定时器优先级最高 EA=1;//开总中断
ET0=1;//开定时器 0 中断 ET1=1;//开定时器 1 中断 TR0=1;//启动定时器 0 TR1=1;// 启动定时器 1 } //--------------void main(void)//主程序 { PORT_INIT();ds1302_init();time_init();year=read_1302(0x8d);//读年数据 year_data=0x2000|year;write_595(year_data>>8);//显示 2010 年的 20 字样 ST_CP8=0;ST_CP8=1;ST_CP8=0;set_shi=0x09;//闹钟初始值设定 set_fen=0x39;time_flag=0;//标志位 set=0;while(1){ switch(set){ case 0: //设置秒 { display();// 显 示 子 程 序
if((shi==set_shi)&&(fen==set_fen)&&(time_flag==0))小时和分钟 { speak=~speak;if((K2==0)&&(time_flag==0))//按键 K2 停 止闹钟响 { P0&=0XFE;time_flag=1;} delay(10);} } break;} if(fen==set_fen+1)// 当 不 按 下 闹 钟 停止按键,一分钟后自动停止闹 钟 { P0&=0XFE;time_flag=0;} } } //--------void time0()interrupt 1 // 定时 器 0 中断 { TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;mun++;if(mun==15){ mun=0;switch(set){ case 1: //设置秒闪烁 {OE1=1;delay(300);OE1=0;} break;case 2: //设置分闪烁 { OE2=1;delay(300);OE2=0;} break;case 3: //设置时闪烁 { OE3=1;delay(300);OE3=0;} break;case 4: //设置日闪烁 { OE4=1;delay(300);OE4=0;} break;case 5: //设置月闪烁 { OE5=1;delay(300);OE5=0;} break;case 6: //设置年闪烁 { OE6=1;OE8=1;delay(300);OE6=0;OE8=0;} break;case 7: //设置星期闪烁 { OE7=1;delay(200);OE7=0;} break;case 8: //设置闹钟闪烁 { OE2=1;OE3=1;delay(200);OE2=0;OE3=0;} break;} } TR0=1;} //-----------void time1()interrupt 3 // 定时器 1 中断 { TR1=0;//先关定时器 TH1=(65536-20000)/256;TL1=(65536-20000)%256;//-if(K1==0){ delay(10);if(K1==0){ set++;if(set==9){ set=0;write_1302(0x80,miao);//设置初始值 SEC write_1302(0x82,fen);//设置初始值 MIN write_1302(0x84,shi);//设置初始值 HR write_1302(0x86,date);//设置初始值 DATE write_1302(0x88,month);// 设置初始值 MONTH write_1302(0x8A,day);//设置初始值 DAY write_1302(0x8C,year_data);//设置初始值 YEAR } t=50000;while((!K1)&&t){ t--;} } } //-------if(K2==0){ delay(10);if(K2==0){ switch(set){ case 1: { miao++;if((miao&0x0f)>0x09){ miao+=0x10;miao&=0xf0;} if(miao==0x60){ miao=0x00;} write_595(miao);ST_CP1=0;ST_CP1=1;ST_CP1=0;} break;case 2: { fen++;if((fen&0x0f)>0x09){ fen+=0x10;fen&=0xf0;} if(fen==0x60){ fen=0x00;} ST_CP2=0;ST_CP2=1;ST_CP2=0;} break;case 3: { if((read_1302(0x85)&0x80)==0x00){ shi++;if((shi&0x0f)>0x09){ shi+=0x10;shi&=0xf0;} if(shi==0x24)//24 小时制 { shi=0x00;} } else { shi=(shi|0x80)+1;if((shi&0x0f)>0x09){ shi+=0x10;shi&=0xf0;} if(shi==0x12)//12 小时制 { shi=0X80;} } write_595(shi);//显示时 ST_CP3=0;ST_CP3=1;ST_CP3=0;} break;case 4: { date++;if((date&0x0f)>0x09){ date+=0x10;date&=0xf0;} if((date==0x32)&&((month==0x01)||(month==0x03)||(month==0x05)||(month ==0x07)||(month==0x08)||(month==0x10)||(month==0x12))){ date=0x01;} else if((date==0x31)&&((month==0x04)||(month==0x06)||(month==0x09)||(month ==0x11))){ date=0x01;} else if((date==0x29)&&(month==0x02)&&((year_data|read_1302(0x8d))%100!=0)& &((year_data|read_1302(0x8d))%400!=0)){ date=0x01;} else if((date==0x30)&&(month==0x02)&&((year_data|read_1302(0x8d))%100==0)& &((year_data|read_1302(0x8d))%400==0)){ date=0x01;} write_595(date);ST_CP4=0;ST_CP4=1;ST_CP4=0;} break;case 5: { month++;if((month&0x0f)>0x09){ month+=0x10;month&=0xf0;} if(month==0x13){ month=0x01;} write_595(month);ST_CP5=0;ST_CP5=1;ST_CP5=0;} break;case 6: { year_data++;if((year_data&0x000f)==0x0a){ year_data+=0x0010;year_data&=0xfff0;} if((year_data&0x00ff)==0xa0){ year_data+=0x0100;//向前进 1 year_data&=0xff00;//后面尾数归 0 } write_595(year_data);ST_CP6=0;ST_CP6=1;ST_CP6=0;write_595(year_data>>8);ST_CP8=0;ST_CP8=1;ST_CP8=0;} break;case 7: { day++;if((day&0x0f)==0x08){ day=0x01;} write_595(xingqi[day]);ST_CP7=0;ST_CP7=1;ST_CP7=0;} break;} t=50000;while((!K2)&&t){ t--;} } } //-------------------------if(K3==0){ delay(10);if(K3==0){ switch(set){ case 1: { miao--;if((miao&0x0f)==0x0F){ miao&=0xf9;//减到 0 后,再减一次就归 0, } if(miao==0xF9)//当全部减到 00 时,再 减一次就为 59 { miao=0x59;} write_595(miao);ST_CP1=0;ST_CP1=1;ST_CP1=0;} break;case 2: { fen--;if((fen&0x0f)==0x0F){ fen&=0xf9;} if(fen==0xF9){ fen=0x59;} write_595(fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;} break;case 3: { if((read_1302(0x85)&0x80)==0x00){ shi--;if((shi&0x0f)==0x0F){ shi&=0xf9;} if(shi==0xF9)//24 小时制 { shi=0x23;} } else { shi=(shi|0x80)-1;if((shi&0x0f)==0x0F){ shi&=0xf9;} ST_CP4=0;} break;case 5: { month--;if((month&0x0f)==0x0F){ month&=0xf9;} if(month==0x00){ month=0x12;} write_595(month);ST_CP5=0;ST_CP5=1;ST_CP5=0;} break;case 6: { year_data--;if((year_data&0x000f)==0x0F){ year_data&=0xfff9;} if((year_data&0x00f0)==0xF0){ year_data&=0xf999;} write_595(year_data);ST_CP6=0;ST_CP6=1;ST_CP6=0;write_595(year_data>>8);ST_CP8=0;ST_CP8=1;ST_CP8=0;} break;case 7: { day--;if((day&0x0f)==0x00){ day=0x07;} write_595(xingqi[day]);ST_CP7=0;ST_CP7=1;ST_CP7=0;} break;} t=50000;while((!K3)&&t)//松手检测 { t--;} } } //---switch(set){ case 8: { if(K4==0){ delay(10);if(K4==0){ if((read_1302(0x85)&0x80)==0x00){ set_shi++;if((set_shi&0x0f)>0x09){ set_shi+=0x10;set_shi&=0xf0;} if(set_shi==0x24)//24 小时制 { set_shi=0x00;} } else { set_shi=(set_shi|0x80)+1;if((set_shi&0x0f)>0x09){ set_shi+=0x10;set_shi&=0xf0;} if(set_shi==0x12)//12 小时制 { set_shi=0X80;} write_595(set_shi);// 显示闹 钟的时 ST_CP3=0;ST_CP3=1;ST_CP3=0;t=50000;while((!K4)&&t){ t--;} } } //----if(K5==0){ delay(10);if(K5==0){ set_fen++;if((set_fen&0x0f)>0x09){ set_fen+=0x10;set_fen&=0xf0;}
if(set_fen==0x60)
{
set_fen=0x00;
} write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;t=50000;while((!K5)&&t){ t--;} } set_shi+=0x10;set_shi&=0xf0;} if(set_shi==0x12)//12 小时制 { set_shi=0X80;} write_595(set_shi);// 显示闹 钟的时 ST_CP3=0;ST_CP3=1;ST_CP3=0;t=50000;while((!K4)&&t){ t--;} } } //----if(K5==0){ delay(10);if(K5==0){ set_fen++;if((set_fen&0x0f)>0x09){ set_fen+=0x10;set_fen&=0xf0;}
if(set_fen==0x60)
{
set_fen=0x00;
} write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;t=50000;while((!K5)&&t){ t--;} } } } } //------------------------if(((K4==0)||(K5==0))&&(set==0)){ delay(10);if(((K4==0)||(K5==0))&&(set==0)){ write_595(set_shi);//显示闹钟的时 ST_CP3=0;ST_CP3=1;ST_CP3=0;write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;P1=0XF9;while((!K4)||(!K5));P1=0X00;} } //----------TR1=1;//退出时开定时器 } } //----------
第五篇:单片机原理与应用课程实验教案
《单片机原理与应用》实验教案
第一章 实验安排
共8个实验,要求8次上机完成。这8个实验分别为: 实验一 利用软件仿真器调试算术运算程序 实验二 INT0中断实验
实验三 定时器/计数器定时实验 实验四 定时器/计数器计数实验
实验五 定时器/计数器T0扩展外部中断源实验 实验六 串行口扩展实验 实验七 DAC0832数模转换实验 实验八 8155接口芯片使用实验
其中前六个实验为验证性实验,第七个实验为设计性实验。最后一个为综合性实验。每个实验3学时。
第二章 实验须知
一、预习要求
1、实验前认真阅读实验要求,明确实验目的和实验任务。
2、拟订实验步骤,编好上机程序。
二、报告要求
共八个实验,每个实验完成后交实验报告,写在实验报
告纸上,报告中应包含以下内容:
1、实验名称、实验人姓名、学号、班级
2、实验目的、任务(内容);
3、实验步骤
记录主要实验过程。
4、实验结果
(1)记录实验现象;
(2)要求写出已调试通过的实验程序清单(加适量注 释)
第三章 实验项目及内容
实验一 利用软件仿真器调试算术运算程序 1.目的要求
(1)熟悉WAVE调试软件的使用。(2)熟悉算术运算程序编程和调试的方法。2.实验内容
(1)有6个数据分别放在片内RAM区50H~55H单元中,试求和,并将结果放在片内RAM区03H(高位),04H(低位)单元中。
(2)编程将内部RAM70H~7FH中的16个数据按从小到 大的顺序重新排序。
3.主要仪器设备
PC机一台。
4.程序清单(1)数据和.ASM ORG 0000H LJMP MAIN ORG 1000H MAIN:MOV R2,#06H MOV R3,#00H MOV R4,#00H MOV R0,#50H L1:MOV A,R4 ADD A,@R0 MOV R4,A INC R0 CLR A ADDC A,R3 MOV R3,A DJNZ R2,L1 END(2)数据排序.ASM ORG 0000H LJMP MAIN ORG 1000H MAIN:MOV R2,#70H MOV R3,#71H L2:ACALL L1 INC R2 INC R3 CJNE R3,#80H,L2 L3:SJMP L3 NOP L1:MOV A,R2 MOV R0,A MOV A,R3 MOV R1,A MOV A,@R0 L5:CLR C SUBB A,@R1 MOV A,@R0 JC L4 XCH A,@R1 MOV @R0,A L4:INC R1 CJNE R1,#80H,L5
RET END
实验二 INT0中断实验(验证性实验
3学时,必做)
1.目的要求
(1)掌握MCS-51单片机中断原理以及编程使用方法。(2)理解下降沿中断和低电平中断的区别。
2.实验内容
(1)编写主程序,读取开关SW1的状态,当其闭合时初始化为下降沿中断,反之,初始化为低电平中断,且发光管灭;编写中断服务程序,使发光管闪烁5次,间隔250ms,即中断服务程序的执行时间为2.5秒。退出中断程序时,使发光管灭。(2)用万用表测量C点的电平,按下TR31秒钟,然后松 开,观察C点电平的变化。
3.实验所用仪器
实验板一块、直流稳压电源、编程器一台、万用表一块
4.程序清单(EXP7.ASM)ORG 0000H SJMP MAIN ORG 0003H LJMP INT0 MAIN:MOV SP,#60H mov p1,#0ffh NOP CLR P1.2 NOP NOP MOV C,P1.3 JC LOWER SETB IT0 SJMP CONT LOWER:CLR IT0 CONT:SETB EX0 SETB EA HERE:SJMP HERE INT0:MOV R0,#5 LP:CPL P1.2 DLY:MOV 30H,#5 DEL0:MOV R7,#100 DEL1:MOV R6,#125
DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 DJNZ 30H,DEL0 DJNZ R0,LP CLR P1.2 RETI END
实验三 定时器/计数器定时实验(验证性实验
3学时,必做)
1. 目的和要求
(1)掌握MCS-51单片机定时器/计数器定时功能的使用方法。
(2)了解定时和计数的本质区别和联系。
2. 实验内容
编写程序,初始化定时器/计数器T0工作在定时方式1,使P1.2输出周期为10秒的方波,即使发光管亮3秒,灭7秒。
3.实验所用仪器
实验板一块、直流稳压电源、编程器一台、万用表一块
4. 程序清单(EXP9.ASM)ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 MAIN: MOV SP,#60H CLR P1.2 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 SETB ET0 SETB EA LP: SETB P1.2 MOV A,#30 MOV 30H,#00 DL1:CJNE A,30H,DL1 CLR P1.2
MOV A,#70 MOV 30H,#00 DL2:CJNE A,30H,DL2 SJMP LP INTT0: MOV TL0,#0B0H MOV TH0,#3CH INC 30H RETI END 实验四 定时器/计数器计数实验(验证性实验
3学时,必做)
1. 实验目的和要求
(1)掌握MCS-51单片机定时器/计数器计数功能的使用方法。
(2)了解定时和计数的本质区别和联系。
2. 实验内容
编写程序,通过8个发光二极管来显示所计脉冲个数。
3.实验所用仪器
实验板一块、直流稳压电源、编程器一台、万用表一块
4.程序清单(EXP10.ASM)
U33CLK EQU 0FF90H ORG 0000H MAIN:MOV SP,#60H MOV TMOD,#05H SETB TR0 MOV DPTR,#U33CLK RDTIMER: MOV A,TH0 MOV R0,TL0 CJNE A,TH0,RDTIMER MOV R1,A MOV A,R0 CPL A MOVX @DPTR,A SJMP RDTIMEr END
实验五 定时器/计数器T0扩展外部中断源实验
(验证性实验
3学时,必做)
1. 实验目的和要求
掌握利用定时器/计数器扩展外部中断源使用的方法。
2. 实验内容
编写主程序,使发光管灭;编写中断服务程序,当执行中断服务程序时,发光管闪烁5次,间隔500ms,主程序运行后通过按TR3按钮触发中断。
3.实验所用仪器
实验板一块、直流稳压电源、编程器一台、万用表一块
3. 程序清单(EXP11.ASM)ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 MAIN:MOV SP,#60H MOV TMOD,#05H MOV TH0,#0FFH MOV TL0,#0FFH SETB ET0
SETB EA SETB TR0 CLR P1.2 HERE:SJMP HERE INTT0:MOV R0,#10 LP:CPL P1.2 DLY:MOV 30H,#10 DEL0:MOV R7,#100 DEL1:MOV R6,#125 DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 DJNZ 30H,DEL0 DJNZ R0,LP CLR P1.2 MOV TH0,#0FFH MOV TL0,#0FFH RETI END
实验六 串行口扩展实验(验证性实验
3学时,必做)
1.实验目的和要求
(1)掌握MCS-51单片机串行口方式0的工作原理。(2)了解方式0的应用,即通过串行口扩展输出口,进行静态显示的方法。
(3)掌握串行移位寄存器芯片74LS164的工作原理。
2.实验内容
编制程序使数码管循环依次显示00到99,每秒加1。
3.实验所用仪器
实验板一块、直流稳压电源、编程器一台、万用表一块
4.程序清单(12.ASM)
ORG 0000H LJMP MAIN ORG 000BH LJMP intt0 MAIN:MOV SP,#60H MOV TMOD,#01H SETB ET0 SETB EA MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 LLP:MOV 30H,#0 MOV 31H,#0 MOV 32H,#0 MOV 33H,#0 LP:MOV R0,#32H MOV R7,#2 ACALL BINBCD MOV DPTR,#TAB DSPLY: MOV A,@R0 MOVC A,@A+DPTR;cpl a MOV SBUF,A DSP1:JNB TI,DSP1 CLR TI INC R0 DJNZ R7,DSPLY LP1:MOV A,30H CJNE A,#10,LP1 MOV 30H,#00H INC 31H MOV A,31H
CJNE A,#100,LP SJMP LLP intt0:MOV TL0,#0B0H MOV TH0,#3CH INC 30H RETI;tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h BINBCD:MOV A,31H MOV B,#10 DIV AB MOV 33H,A MOV A,B MOV 32H,A RET END
实验七 DAC0832数模转换实验(设计性实验
3学时,必做)
1. 设计目的
(1)掌握DAC0832与MCS51单片机的接口方法。(2)掌握D/A转换程序的设计方法。
2. 设计题与要求
认真复习所学习的DAC0832的工作方式,利用单缓冲
方式使0832输出锯齿波和三角波。并设计使运放LM741输出0-5V和0--5V的波形。如果不用示波器,如何测试你所设计的电路和所编写的程序是否正确。
3.实验所用仪器
实验板一块、直流稳压电源、编程器一台、万用表一块、示波器一台。
4.设计原理
D/A转换器的输入为数字量,经转换后输出为模拟量。
DAC0832为一个8位D/A转换器,单电源供电,在+5~+15V范围内均可正常工作。MCS-51单片机与DAC0832的接口有3种连接方式,即直通方式、单缓冲方式及双缓冲方式。所谓单缓冲方式就是使DAC0832的两个输入寄存器中有一个处于直通方式,而另一个处于受控的锁存方式,当然也可使两个寄存器同时选通及锁存。本实验中采用该方式。要求WR1和WR2连接在一起接在89C51的WR端,CS和XFER连接在一起接在片选端,ILE接+5V。
0832可以产生很多波形,如:三角波、锯齿波、梯形波等。5.设计内容
编制程序使运放LM741输出锯齿波和三角波,具体步骤:断开开关SW1,输出锯齿波;闭和开关SW1,输出三角波。
6.程序清单(DAC0832.asm)CS0832 EQU 0FF9FH ORG 0000H MAIN:MOV P1,#0FFH NOP JNB P1.3,RWAVE MOV DPTR,#CS0832 MOV A,#00H LP:MOVX @DPTR,A NOP NOP INC A AJMP LP RWAVE:MOV DPTR,#CS0832 MOV A,#00H LP1:MOVX @DPTR,A NOP INC A CJNE A,#255,LP1 NOP LP3:MOVX @DPTR,A NOP
DEC A CJNE A,#00H,LP3 MOVX @DPTR,A NOP SJMP LP1 END
实验8 8155接口芯片使用实验(综合性实验
3学时,必做)
1.实验目的和要求
(!)掌握MCS-51单片机系统I/O扩展方法。
(2)掌握并行接口芯片8155的性能以及编程使用方法。(3)掌握单片机系统动态LED显示和键盘输入程序的设计方法。
2.实验内容
编写程序实现下列功能:程序运行后数码显示管显示HHMMSS(000000),即时分秒,按键调整其为正确的时间并继续运行。
该实验综合性较强,建议学生分两步走:第一步完成显示,可以参考实验六;第二步完成键盘扫描。
3.实验所用仪器
实验板一块、直流稳压电源、编程器一台、万用表一块
4.程序清单(EXP152.asm)CE8155 EQU 0FF80H CA8155 EQU 0FF81H CB8155 EQU 0FF82H CC8155 EQU 0FF83H HMS EQU 40H SECOND EQU 41H MINUTE EQU 42H HOUR EQU 43H ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 MAIN:MOV SP,#60H MOV A,#00000011B MOV DPTR,#CE8155 MOVX @DPTR,A MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA
SETB TR0 LP2:MOV HMS,#00H MOV SECOND,#00H MOV MINUTE,#00H MOV HOUR,#00H LP3:MOV R0,#30H MOV R7,#6 ACALL BINBCD MOV R2,#01H MOV A,R2 LOOP:MOV DPTR,#CA8155 MOVX @DPTR,A INC DPTR PUSH DPL PUSH DPH MOV DPTR,#TAB MOV A,@R0 MOVC A,@A+DPTR POP DPH POP DPL MOVX @DPTR,A ACALL DL2MS INC R0 MOV A,R2 JB ACC.5,LP1 RL A MOV R2,A AJMP LOOP lp1:acall kd1 AJMP LP3 INTT0:MOV TL0,#0B0H MOV TH0,#3CH INC HMS MOV A,HMS CJNE A,#0AH,PP MOV HMS,#00H INC SECOND MOV A,SECOND CJNE A,#60,PP MOV SECOND,#00H INC MINUTE MOV A,MINUTE CJNE A,#60,PP MOV MINUTE,#00H
INC HOUR MOV A,HOUR CJNE A,#24,PP MOV HOUR,#00H PP:RETI BINBCD:MOV A,HOUR MOV B,#10 DIV AB MOV 30H,A MOV 31H,B MOV A,MINUTE MOV B,#10 DIV AB MOV 32H,A MOV 33H,B MOV A,SECOND MOV B,#10 DIV AB MOV 34H,A MOV 35H,B RET tab:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DL2MS:MOV R3,#5 DLT1:MOV R4,#125 DLT2:DJNZ R4,DLT2
DJNZ R3,DLT1
RET KD1:ACALL KS1 JNZ LK1 ACALL DL2MS AJMP QQ LK1:ACALL DL2MS ACALL DL2MS ACALL DL2MS ACALL DL2MS ACALL KS1 JZ QQ MOV R5,#0FEH MOV R4,#00H MOV DPTR,#CA8155 MOV A,R5 MOVX @DPTR,A INC DPTR INC DPTR MOVX A,@DPTR JB ACC.0,LONE mm1:acall dl2ms acall dl2ms acall ks1 jnz mm1 INC HOUR MOV A,HOUR CJNE A,#24, LONE MOV HOUR,#00H LONE:MOV A,R5 RL A MOV R5,A MOV DPTR,#CA8155 MOV A,R5 MOVX @DPTR,A INC DPTR INC DPTR MOVX A,@DPTR JB ACC.0,LONE1 mm2:acall dl2ms acall dl2ms acall ks1 jnz mm2 INC MINUTE MOV A,MINUTE CJNE A,#60,LONE1 MOV MINUTE,#00H LONE1: MOV A,R5 RL A MOV R5,A MOV DPTR,#CA8155 MOV A,R5 MOVX @DPTR,A INC DPTR INC DPTR MOVX A,@DPTR JB ACC.0,QQ mm3:acall dl2ms acall dl2ms acall ks1 jnz mm3 INC SECOND MOV A,SECOND
CJNE A,#60,QQ MOV SECOND,#00H QQ:RET KS1:MOV DPTR,#CA8155 MOV A,#00H MOVX @DPTR,A INC DPTR INC DPTR MOVX A,@DPTR CPL A ANL A,#03H RET END
四、考核办法
每个实验:预习10%、实验操作60%、实验报告30%。最后成绩以每次实验课程成绩累加被实验项目个数相除的办法计算。
五、主要参考资料
1、《单片机接口技术开发实验指导书》
北京科技大学C31实验室
2、《8051实验指导书》
西安唐都科教仪器公司