首页 单片机实验指导书_出

单片机实验指导书_出

举报
开通vip

单片机实验指导书_出单片机原理及应用实验指导书 实验一、单片机最小系统的熟悉 一、实验目的 在进行其他实验之前,先熟悉实验装置的核心模块——单片机最小系统模块。掌握该实验模块的电路原理和接口的使用方法。 1.掌握单片机振荡器时钟电路及CPU工作时序;掌握复位状态及复位电路设计;掌握单片机各引脚功能及通用I/O口的使用;掌握单片机基本指令的使用。 2.掌握IDE集成开发环境,仿真器和烧录器等开发工具的使用。 二、实验设备 1.单片机仿真器(伟福S51、仿真头POD-H8X5X),烧录器(西尔特Superpro 680); ...

单片机实验指导书_出
单片机原理及应用实验指导 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 实验一、单片机最小系统的熟悉 一、实验目的 在进行其他实验之前,先熟悉实验装置的核心模块——单片机最小系统模块。掌握该实验模块的电路原理和接口的使用 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 。 1.掌握单片机振荡器时钟电路及CPU工作时序;掌握复位状态及复位电路 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 ;掌握单片机各引脚功能及通用I/O口的使用;掌握单片机基本指令的使用。 2.掌握IDE集成开发环境,仿真器和烧录器等开发工具的使用。 二、实验设备 1.单片机仿真器(伟福S51、仿真头POD-H8X5X),烧录器(西尔特Superpro 680); 2.单片机最小系统实验模块,键盘实验模块,发光二极管阵列实验模块。 三、实验要求 1.连接实验电路,编写简易单片机汇编程序达到下述工作要求:以任意两个独立式按键作为输入,当第一键按下时,点亮第一行发光二极管;当第二键按下时,点亮第二行发光二极管。 2.将编写的程序调入仿真器中,在IDE集成开发环境中进行调试; 3.在IDE中产生机器码文件,用烧录器烧录到单片机芯片中,插在板子上观察工作情况。 四、实验原理 4.1 AT89C51引脚说明 我们以常用的单片机芯片AT89C51为教学实例,首先对其引脚进行简要介绍: · P0.0~P0.7:P0口的8位双向三态I/O口线; · P1.0~P1.7:P1口的8位准双向口线; · P2.0~P2.7:P2口的8位准双向口线; · P3.0~P3.7:P3口的8位具有双重功能的准双向口线; · -ALE:地址锁存控制信号。 · -PSEN:外部程序存储器读选通信号,读外部ROM时PSEN低电平有效。 · -EA:访问程序存储器控制信号,当EA为低电平时,对ROM的读操作限制在外部程序存储器;当EA为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。 · RST 复位信号,复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作。 · XTAL1 和 XTAL2 外接晶体引线端,当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。 · Vss 地线。 · Vcc +5V电源。 图1-1 AT89C51引脚图及逻辑符号图 P3口线的第二功能见表1-1,这些特殊功能我们将在以后的实验中进行学习。 表1-1 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 外部RAM写选通 P3.7 RD 外部RAM读通 4.2 振荡电路、时钟电路和CPU时序 (1)振荡电路、时钟电路。如图1- 2所示,外部时钟振荡电路由晶体振荡器和电容C1、C2构成并联谐振电路,连接在XTAL1、XTAL2脚两端。对外部C1、C2的取值虽然没有严格的要求,但电容的大小会影响到振荡器频率的高低、振荡器的稳定性、起振的快速性。C1、C2通常取值C1=C2=30PF左右;8051的晶振最高振荡频率为12M,AT89C51的外部晶振最高频率可到24M。在单片机最小系统板上已经提供了晶振电路,在使用该电路时,应加上跳线帽,并插入合适的晶振。 图1-2 片内振荡器等效电路和外接元件 AT89C51也可以采用外部时钟方式,外部时钟从XTAL1脚输入,XTAL2脚浮空。可以采用我们板子上提供的外部时钟源作为单片机外部时钟输入。 (2)CPU时序 晶振(或外部时钟)的振荡频率的确定,就确定了CPU的工作时序。这里介绍几个重要的时序概念,我们在以后的实验中还会经常涉及到: ◇ 振荡周期:是指为单片机提供定时信号的振荡器的周期。 ◇ 时钟周期:振荡周期的两倍,前部分通常用来完成算术逻辑操作;后部分完成内部寄存器和寄存器间的传输。 ◇ 机器周期:在8051单片机中,一个机器周期由12个振荡周期组成。 ◇ 指令周期:是指执行一条指令所占用的全部时间。一个指令周期通常含有1~4个机器周期。机器周期和指令周期是两个很重要的衡量单片机工作速度的值。 若外接12MHz晶振时,8051的四个周期的值为: 振荡周期=1/12us; 时钟周期=1/6us; 机器周期=1us; 指令周期=1~4us。 在一些应用中,传统的8051的速度显得有些慢,因此,当前很多采用8051内核的新型单片机采用了加速处理器结构,使机器周期提高到振荡周期的6倍、4倍等等,RISC(精简指令集)的采用,更让单片机在单个时钟周期完成一条指令,使得单片机在处理速度上得到大大提高。 4.3 复位状态和复位电路设计 (1)复位状态 在8051单片机中,只要在单片机的RST引脚上出现2个机器周期以上的高电平,单片机就实现了复位。单片机在复位后,从0000H地址开始执行指令。复位以后单片机的P0~P3口输出高电平,且处于输入状态,SP(堆栈寄存器栈顶指针)的值为07H(因此,往往需要重新赋值,其余特殊功能寄存器和PC(程序计数器)都被清为0。复位不影响内部RAM的状态。 (2)复位电路 单片机可靠的复位是保证单片机正常运行的关键因素。因此,在设计复位电路时,通常要使RST引脚保持10ms以上的高电平。当RST从高电平变为低电平之后,单片机就从0000H地址开始执行程序。 8051单片机通常都采用上电自动复位和开关复位两种方式。实际使用中,有些外围芯片也需要复位,如8255等。这些复位端的复位电平要求与单片机的复位要求一致时,可以把它们连起来。 在最小系统板上,提供了一个通用的复位电路,在使用该板之前,必须将该电路与单片机联结起来。另外,还可以采用主板上的微处理器监控模块来控制复位脚,以便更加可靠地管理单片机的工作。 4.4 存储器、特殊功能寄存器及位地址 51单片机的存储器包括5个部分:程序存储器、内部数据存储器、特殊功能寄存器、位地址空间、外部数据存储器。位地址空间、特殊功能寄存器包括在内部数据存储器内。 51单片机的内部数据存储器一般只有128字节或256字节,当空间不够用时也就需要扩展外部数据存储器(参见实验十三)。有些单片机不具有内部程序存储器,例如8031,这时就需要扩展外部程序存储器(参见实验十四)。在单片机系统中,程序存储器和外部数据存储器的编址独立,各可寻址64K字节空间。两者在电路上,可以通过PSEN信号线区别开来。 特殊功能寄存器是非常重要的部分,我们通过对特殊功能寄存器的设置和读写来完成单片机的大部分工作。限于篇幅,这里不对其 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 进行罗列,请查阅有关书籍。 4.5 51系列单片机内部资源概览表 芯片种类 片内存储器 中断源 定时/计数器 串行口 耗电 制造工艺 ROM/EPROM RAM 8051 4K 128 5 2 1 125mA HMOS 8052 8K 256 6 3 1 100mA HMOS 以上列出的是Intel8051、8051的主要资源配置。现在,由于8位51单片机的广泛使用,各个芯片生产厂商推出了具有自身特色的采用51内核的单片机,它们在这些基本资源的基础上进行了进一步的裁减或增强。 五、实验步骤 1、连接单片机与复位电路、时钟源(晶振电路或外部时钟源),选择几组I/O口,用导线分别连接发光二极管阵列、及键盘。以下对涉及到的其他实验模块进行简要介绍: (1)发光二极管阵列模块: 如左图所示,每行为8个发光二极管,共4行。每行与底部的8针排线座相对应。第一行发光二极管与从左数第一个插座对应,第二行发光二极管与左数第二个插座对应……。插座的每个引脚与发光管阴极相连,也就是说,当对应脚为低电平时,发光二极管点亮。 (2)键盘阵列模块:键盘模块是“独立式”和“矩阵式”两用键盘。使用之前,必须连接键盘模块右下角的VCC和GND,为模块提供电源。模块右边的S0~S15锁紧孔,是独立式键盘接口,分别对应着键S0~S15。当某个键按下时,对应的接口将被拉低。 电路示例如下: 图1-3 电路原理图示例 2、实验示例程序: 假设P1.0,P1.1口分别连接两个键,P0口连接第一行发光二极管,P2口连接第二行发光二极管,参看电路图1-3。程序实例如下: ORG 0000H START: MOV P1,0FFH MOV A,P1 MOV 40H,A ;暂存于40H ACALL DL10MS ;去抖延时 MOV A,P1 CJNE A,40H,PASS CJNE A,#0FEH,LAMP1 ;第一键? MOV P2,#0FFH MOV P0,#00H ;点亮第一行发光二极管 PASS: LCALL DL10MS ;延时 AJMP START LAMP1: CJNE A,#0FDH,PASS ;第二键? MOV P0,#0FFH MOV P2,#00H AJMP PASS ;延时子程序: DL10MS: MOV R7,#08h LOOP1: MOV R6,#0F9H LOOP2: NOP NOP DJNZ R6,LOOP2 DJNZ R7,LOOP1 RET END 在IDE集成开发环境中编写单片机程序,进行程序编译,排除所有的错误,直到编译完全成功。 3、正确连接仿真器与PC机、仿真头与目标板、仿真器电源。正确连接目标板电源。在仿真环境下运行程序,观察程序运行结果,程序运行正确后,输出机器代码文件。 4、正确连接烧录器和PC机、烧录器电源。把单片机芯片放入烧片机芯片座(注意放置位置),夹紧;打开烧录器驱动软件,把文件被固化到单片机中。 5、除去目标板电源,将单片机取下,插入目标板插座中,注意对齐1脚。正确连接目标板电源。观察程序运行情况。 六、实验报告 1、说明单片机的各个引脚的功能及作用,比较P0,P3脚的异同? 2、时钟周期、机器周期的关系是什么?在单片机外部晶振为12M时,下面的延时子程序延时了多少时间?当晶振为6M时呢? DELAY: MOV R5,#08H DL1: MOV R6,#00H DL2: MOV R7,#80H DJNZ R7,$ DJNZ R6,DL2 DJNZ R5,DL1 RET 3、画出实验原理图。 4、给出单片机程序流程图和程序清单。 3、进行完该项实验后,你对单片机的开发工具和开发过程了解了吗?请画出单片机开发过程流程图。 实验二 分支程序,查表程序编写实验 一、实验目的 1.掌握跳转指令 2.掌握子程序调用指令 3.掌握查表程序运用 二、实验设备 单片机IDE集成开发软件 三、实验要求 验证“实验原理”一节中给出的实例程序,熟悉各种跳转指令、子程序调用指令,以及查表程序编写方法。 四、实验原理 作为软件实验,可以在没有硬件及仿真仪的情况下,利用集成开发环境进行。 1.跳转指令 控制转移的指令包括无条件转移指令和有条件跳转指令。 (1)长跳转指令LJMP addr16 长跳转,把16位(2个字节)的地址送入PC中。 〔2〕绝对转移指令AJMP addr11 在存储空间2kB内转移。与PC当前值高5位共同组成16位目标地址。 (3)短跳转指令SJMP rel 8位补码表示的地址。可以在-128到127之间跳转。 (4)间接跳转指令JMP @A+DPTR 这是一条很有用的散转指令。跳转地址在程序运行时动态决定。 (5)累加器判零转移指令JZ rel,JNZ rel, JZ rel,累加器为0转移,JNZ rel,累加器不为0转移。 (6)比较转移指令,CJNE <目的字节>,<源字节>,rel。 CJNE A,#data,rel CJNE A,direct,rel CJNE @Ri,#data,rel CJNE Rn,#data,rel (8)循环转移指令 DJNZ Rn,rel。首先Rn减1,然后判断是否是零,不是则跳转。 DJNZ direct , rel。首先直接地址中的数据减1,然后判断是否是零,不是则跳转。 (9)位控制转移指令 JC rel,若Cy=1,则(PC)<--(PC)+2+rel 若Cy=0,则(PC)<--(PC)+2 JNC rel若Cy=0,则(PC)<--(PC)+2+rel 若Cy=1,则(PC)<--(PC)+2 JB bit,rel; 若(bit)=1,则(PC)<--(PC)+3+rel 若(bit)=0,则(PC)<--(PC)+3 JNB bit,rel若(bit)=0,则(PC)<--(PC)+3+rel 若(bit)=1,则(PC)<--(PC)+3 JBC bit,rel; 若(bit)=1,则(PC)<--(PC)+3 若(bit)=0,则(PC)<--(PC)+3+rel,(bit)(0 2.子程序调用和返回指令。 把重复使用的程序段编写为一个子程序,通过主程序调用它。这样不断减少编程工作量,而且减少程序所占存储空间。 1)长调用指令 LCALL addr16 ; (PC)((PC)+3 (SP)((SP)+1, ((SP))((PC)7~0 (SP)((SP)+1, ((SP))((PC)15~8 (PC)(addr16 除了PC要断点保护,注意其他寄存器不能冲突。 2)绝对调用指令 ACALL addr11 ; (PC)((PC)+2 (SP)((SP)+1, ((SP))((PC)7~0 (SP)((SP)+1, ((SP))((PC)15~8 (PC)(addr11 3)返回指令 RET:子程序返回指令, RETI:中断程序返回指令; 当RET或RETI被执行时,系统通过以下步骤恢复了PC指针: (PC)15~8(((SP)), (SP)( (SP)-1 (PC)7~0 (((SP)), (SP)((SP)-1 利用以上转移指令,我们编写分支程序,查表程序,子程序。 3.应用实例 1)分支程序 包括无条件转移和条件转移指令。根据不同的条件,条件分支程序执行不同的程序段。MCS-51中直接用来判断分支条件的指令有JZ、JNZ、CJNE、JC、JNC、JB、JNB等。正确合理地运用条件转移指令是编写条件分支程序的关键。 [例27-1] 设变量X存放于R2,函数值y存放在R3。试按照下式的要求给y赋值: 1 X>0 y = 0 X=0 -1 X<0 解:这是一个三分支的条件转移程序,通常可分为“先分支后赋值”和“先赋值后分支”两种求解办法。分述如下: ①先分支后赋值。自变量X是个带符号数,故可采用累加器判零条件转移和位控制条件转移指令来 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 判断。程序流程图如图27-1(a)所示。程序如下: ORG 0000H MOV A,R2 ;自变量-->(A) CJNE A,#0,L1 ;(A)与0比较,不等则转移 MOV R3,#0 ;若相等,0((R1) SJMP L3 L1: JB ACC.7,L2 ;自变量<0则转移 MOV R3,#01H ;自变量>0,1+(R1) SJMP L3 L2; MOV R3,#0FFH ;自变量<0,1((R1) L3; SJMP $ END ②先赋值后分支。先把X调入累加器A,并判断它是否为零。若X=0,则A中内容送R3;若X≠0,则先给R0赋值(=-1)。然后判断A<0。若A<0,则R0送R3;若A>0,则把R0修改为1后送R3,程序流程如图27-1(b)所示。程序如下: ORG 0000H MOV A,R2 ;取X到A JZ L2 ;X=0则转移 MOV R0,#0FFH JB ACC.7,L1 ;若X<0则转移 MOV R0,#1 ;若X>0,(R0)=1 L1: MOV A,R0 L2: MOV R3,A ; 存结果 SJMP $ END 图2-1 流程图 2)查表程序设计 查表程序是根据查表算法设计的。该方法把事先计算或实验数据按一定顺序编成表格,存于程序存储器内,然后根据输入参数值,从表中取得结果。查表程序可完成数据补偿、计算和转换等功能。采用MCS-51汇编语言查表非常方便。它有两条专门的查表指令: MOVC A,@A+DPTR, MOVC A,@A+PC 第一条查表指令采用DPTR存放数据表格的地址,查表过程比较简单。查表前需要把数据表格表头地址存人DPTR,然后把所要查得的数在表中相对表头地址的偏移量送入累加器A,最后使用“MOVC A,@A+DPTR”完成查表。 采用“MOV A,@A+PC”指令查表,所需操作有所不同,可分为三步: ①用传送指令把所查数据的项数送人累加器A; ②使用“ADD A,#data"指令对累加器A进行修正,data值由PC当前值+data=数据表头地址。确定,实际上data值等于查表指令和数据表格之间的字节数; ③用指令“MOVC A,@A十PC”完成查表。 查表程序主要用于代码转换、代码显示、实时值查表计算和按命令号实现转移等。 范例: 求函数y=X!(X=0,…,7)的值。设自变量存放在ABC单元,表头的地址为TABL,y值为双字节存放在寄存器R2R3中,R3存放y值低字节,写出查表程序。 程序如下: ORG 0000H ABC EQU 30H L1: MOV A,ABC ;取X ADD A,ABC ;X乘2与双字节Y相对应 MOV R3,A ;保存指针 ADD A,#07H ;计算偏移量 MOVC A,@A+PC ;查低字节 XCH A,R3 ADD A,#04H ;计算偏移量 MOVC A,@A+PC ;查高字节 MOV R2,A SJMP $ TABLE: DB 01,00,01,00,02,00,06,00 DB 24H,00,20H,01,20H,07,40H,50H END 五、实验步骤 1、分别编写简单分支程序,及子程序调用程序,然后在开发环境中编译运行。 2、编写查表程序。然后在开发环境中编译运行。 六、实验报告 1、给出各个程序的清单,要求有注释。 2、MCS-51系列单片机有那些跳转指令?列出这些指令,并说明其功能。 3、MCS-51系列单片机有哪些子程序调用和返回指令?列出这些指令,并说明其功能。 4、MCS-51系列单片机有哪些查表指令?列出这些指令,并说明其功能。 实验三、多字节、多进制加减运算实验 一、实验目的 1. 学习多字节压缩BCD码加减法运算的程序设计 2. 学习单字节有符号数加减运算的程序设计 二、实验要求 1.编写通用4字节压缩BCD码的加、减法运算程序 2.编写通用单字节有符号二进制数加、减法运算程序 三、实验原理 对于简单的8位加减可以直接调用指令就可以了。例如加法可以使用指令ADD以及带进位加ADDC,但单字节加减法只能在256之内进行运算;在实际应用中经常需要进行多字节运算,从而处理更大的数据。该实验介绍单片机BCD码多字节加、减运算通用程序的设计。 1.多字节无符号压缩BCD码加法运算 假设多字节无符号被加数的最低字节的地址为R0,加数的最低字节地址为R1,字节数共为len;计算结果的地址于被加数相同。 ◆ 入口参数: R0:被加数地址指针; R1:加数地址指针; len:字节数。 ◆ 出口参数: @R0:计算结果; rLen:计算结果字节数。 ◆ 使用资源:ACC,R0、R1,内部RAM单元len、rlen及存放被加数、加数、计算结果的内存单元。 示例程序如下: ADDl: PUSH PSW ;保护标志寄存器内容 CLR C ;进位位清0 MOV rlen,#00H ;和的字节数先清0 ADD: MOV A,@R0 ;取被加数 ADD A,@R1 ;求和 DA A ;十进制调整 MOV @R0,A ;保存 INC R0 ;地址增1 INC R1 INC rlen ;字节数增1 DJNZ len,ADD ;所有字节未加完继续,否则向下执行 JNC ADD20 ;和的最高字节无进位转ADD20 MOV @R0,#01H ;和的最高字节地址内容为01H INC rlen ADD20: POP PSW RET END 多字节加法运算一般是按从低字节到高字节的顺序进行的,所以必须考虑低字节向高字节的进位情况,被加数和加数的压缩BCD码,最大不超过99,而99+99+1(进位)=199,此时不需要使用ADDC指令,但当两字节当最低两字节相加后,必须使用“DA A”进行十进制调整,调整后产生进位。而最高两字节相加后应考虑是否有进位。若有进位,应向和的最高位字节地址写入01H,这时和数将比加数或被加数多出一个字节。 2.单字节带符号数加法运算 编程范例: 两个8位二进制带符号数加法,被加数和加数分别存于BLK和BLK+1单元,和超过8位要占两个单元,设为SUM和SUM+1单元。 解:两个带符号数的加法是作为补码加法处理的。由于和超过8位,因此,和就是一个16位带符号数,符号位在16位数的最高位。为此,直接相加进位是不够的,还要做一些处理。例如-65和-65相加,若直接求和产生溢出,即使扩展到16位,结果也不正确。如: -65 1 0 1 1 1 1 1 lB +) -65 1 0 1 1 1 1 1 1B 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 OB 现在这个16位数的最高位为0,两个负数相加变为正数,显然是错误的。 处理的方法是先将8位带符号数扩展成16位带符号数,然后再相加。若是8位正数,则高8位扩展为00H;若是8位负数,则高8位扩展为0FFH。这样处理后,再按双字节相加,就可以得到正确的结果。如上例,由于是负数,高8位应是全1,然后再加: -65 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1B +) -65 1 1 1 1 1 1 1 1 1 0 1 l 1 1 1 1B 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0B, 最高位的进位丢失不计。换算成真值为—130,结果正确。 在编程时,判别加数和被加数的符号位,再决定是否要将高8位改为0FFH。 程序如下: BLK DATA 30H SUM DATA 40H MOV R0,#BLK ;R0指向被加数 MOV R1,#SUM ;R1指向和 MOV R2,#0 ;高8位先设为0 MOV R3,#0 MOV A,@R0 ;取出被加数 JNB ACC.7,N1 ;若是正数转移到N1 MOV R2,#0FFH ;若是负数高8位为全1 N1:INC R0 ;修改即指针 MOV B,@R0 ;取加数到B JNB B.7,N2 ;若是正数转移N2 MOV R3,#0FFH ;若是负数高8位为全1 N2:ADD A,B ;低8位相加 . MOV @R1,A ;存低8位和 INC R1 ;修改R1指针 MOV A,R2 ;准备加高8位 ADDC A,R3 ;高8位相加 MOV @R1,A ;存高8位和 SJMP $ END 3.多字节无符号压缩BCD码减法运算 为了使用“DA A”指令对十进制减法进行调整,必须采用对减数求补相加的方法,以9AH为模减去减数即得到减数的补数。设被减数低字节地址存在R1,减数低字节地址存在R0,字节数存在len;差的低字节地址存在R0,差的字节数存在rlen。 · 入口参数: R0:减数地址指针; R1:被减数地址指针; len:字节数 · 出口参数: R0:差的地址指针 R3:差的字节数 · 使用资源: A,R0,R1,内部RAM单元 范例程序如下: SUBCD: MOV rlen,#00H ;差字节单元清0 CLR 07H ;符号位清0 CLR C ;借位位清0 SUBBCD: MOV A,#9AH ;减数对模100求补 SUBB A,@R0 ADD A,@R1 ;补码相加 DA A MOV @R0,A ;存结果 INC R0 INC R1 1NC rlen CPL C ;进位求反以形成正确借位 DJNZ len,SUBCDl ;未减完去SUBCDl,减完向下执行 JNC SUBCD2 ;无借位去别Ⅸm返回主程序,否则继续 SETB 07H ;有借位,置“1”符号位 SUBCD2: RET END 程序中对减数求补后与被减数相加,用“DA A”指令进行调整。若二者相加调整后结果无进位(C=0),则表示二者相减有借位;若二者相加调整后有进位(C;1),则表示二者相减无借位。所以必须对进位标志位C进行求反操作,才能得到正确结果。 四、实验步骤 1.按照实验要求编写程序。 2.在开发环境中运行程序,对通用寄存器进行赋值,看运算结果是否正确。 五、实验报告 1.给出各个程序的清单,要求有注释。 2.分析DA A指令的作用。 3.请说明你怎样处理单字节有符号数的减法? 实验四、数码管动态扫描显示实验 一、实验目的 1.学习和理解数码管动态扫描的工作原理 2.学习和掌握数码管动态扫描的电路接口设计及程序编写 二、实验设备 1.仿真器 2.单片机最小系统教学实验模块 3.动态数码管显示模块 三、实验要求 使8位数码管显示“0 1 2 3 4 5 6 7”字样。 四、实验原理 4.1 8段数码管显示原理 数码管中的每一段相当于一个发光二极管,8段数码管则具有8个发光二极管。对于“共阳极”的数码管,内部每个发光二极管的阳极被接在一起,成为该各段的公共选通线;发光二极管的阴极则成为段选线。对于“共阴极”数码管,则正好相反,内部发光二极管的阴极接在一起,阳极成为段选线。这两种数码管的驱动方式是不同的。当需要点亮“共阳极”数码管的一段时,公共段需接高电平(即写逻辑1)、该段的段选线接低电平(即写逻辑0),从而该段被点亮。当需要点亮“共阴极”数码管的一段时,公共段需接低电平(即写逻辑0)、该段的段选线接高电平(即写逻辑1),该段被点亮。 数码管的段位顺序如右图所示: 一般来说在一个字节中按照abcdefg dp的顺序放置字型码,比如在一个“共阴极”数码管上要显示“1”,则b、c段需被点亮,因此在段选线中写入60H。例如使用P0口接段选线,则使用下面的语句即可点亮数码管: MOV P0,#06H 对应规则: a----->D7 b----->D6 c----->D5 d----->D4 e----->D3 f----->D2 g----->D1 dp---->D0 4.2 多位数码管的显示 在多位8段数码管显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个单片机的8位I/O口控制,形成段选线的多路复用。而各位数码管的共阳极或共阴极分别由单片机独立的I/O口线控制,顺序循环地点亮每位数码管,这样的数码管驱动方式就称为“动态扫描”。在这种方式中,虽然每一时刻只选通一位数码管,但由于人眼具有一定的“视觉残留”,只要延时时间设置恰当,便会感觉到多位数码管同时被点亮了。 8位8段LED动态显示器电原理图如图2-1所示。 图2-1 8位8段LED动态显示器电原理图 图2-1所示为一个8位8段LED动态显示器电路原理图。其中段选线占用一个8位I/O口,位选线占用一个8位I/O口,由于各位的段选线并联,段线码的输出对各位来说都是相同的。因此,同一时刻,如果各位位选线都处于选通状态的话,8位LED将显示相同的字符。若要各位LED能够显示出与本位相应的显示字符,就必须采用扫描显示方式,即在某一位的位选线处于选通状态时,其它各位的位选线处于关闭状态,这样,8位LED中只有选通的那一位显示出字符,而其它位则是熄灭的。同样,在下一时刻,只让下一位的位选线处于选通状态,而其他的位选线处于关闭状态。如此循环下去,就可以使各位“同时”显示出将要显示的字符。由于人眼有视觉暂留现象,只要每位显示间隔足够短,则可造成多位同时亮的假象,达到显示的目的。 五、实验步骤 8位共阳极数码管动态扫描显示的单片机电路连线如图2-2所示,图中的三角形符号是加在位选线上的驱动,即74HC245,这一举措使得数码管能够得到合适的亮度。 图2-2 扫描8位LED动态显示器 1、按照图2-2的电路原理,用导线正确连接动态扫描方式实验模块和单片机最小系统模块。 2、示例程序如下: ORG 0000H START: MOV R1,#01h MOV R0,#00H MOV R2,#08H DISP: MOV DPTR,#TAB MOV A,R0 MOVC A,@A+DPTR MOV P0,A MOV A,R1 MOV P1,A ACALL DL10MS INC R0 MOV A,R1 RL A MOV R1,A DJNZ R2,DISP AJMP START DL10MS:MOV R7,#01H DL0: MOV R6,#0FH DL1: nop nop DJNZ R6,DL1 DJNZ R7,DL0 RET tab: db 03h,09FH,25h,0Dh,099h,49h,41h,01Fh,01h,09h,0BFH END ; 0 1 2 3 4 5 6 7的字型码 将程序调入仿真器进行调试,直至达到实验要求。 六、实验报告 1. 画出实验电路原理图,并简要分析电路的执行过程。 2. 画出单片机程序的流程图,给出程序清单,并给予适当注释。 3. 电路中74HC245的作用是什么? 4. 如果将数码管换成共阳极,电路中要做那些修改?程序中要做哪些修改,给出共阳极数码管动态扫描显示的电路和程序清单。 5.实验过程中遇到哪些问题,是如何解决的? 实验五、数码管串行静态显示实验 一、实验目的 1.学习单片机串行口的工作方式0的工作原理及应用 2.学习静态串行显示的工作原理 3.学习静态串行显示的电路接口设计及程序设计 二、实验设备 1.仿真器 2.单片机最小系统教学实验模块 3.静态串行方式数码管显示模块 三、实验要求 要求在6位数码管中显示“-PHIL-”的字符串。 四、实验原理 51单片机的串行口的“工作方式0”为同步移位寄存器方式,串行数据都通过RXD(P3.0)输入输出,TXD(P3.1)则输出同步移位脉冲,可接收/发送8位数据(低位在前)。波特率(每秒传输的位数)固定在fosc/12,即当晶振为12MHZ时,波特率为1MBPS。 如图3-1所示,单片机与6片串入并出移位寄存器74HC164相连。其中,RXD作为164的数据输入,TXD作为6片164的同步时钟。程序运行时,单片机将6个数码管的段码(6个字节)连续发送出来,通过串行口送给164。6位字型码送完后,TXD保持高电平。此时每片164的并行输出口将送出保存在内部移位寄存器中的8位的段码给数码管,令数码管稳定地显示所需的字符。 这样,单片机不必进行不间断的扫描,就能实现数码管的稳定显示,从而减轻了CPU的工作负担。同时这种显示方法占用的口线很少(只需RXD,TXD两根线),使该方法得到了广泛的应用。 当多位数码管显示器工作于静态显示方式时,应将各位的共阴(或共阳)端连接在一起并接地(或+5V);每位的段选线(a~dp)分别与一移位寄存器的输出相连。之所以称为静态显示,是由于显示器中的各位相互独立,而且各位的显示字符一经确定,相应的寄存器的输出将维持不变,直到收到其他的显示字符为止。因此要注意,如果要保持数码管的稳定显示,则不应使TXD有任何变动,否则将造成164内部数据移位,使显示变得混乱。 图5-1 串行口6位静态LED显示器电路图 五、实验步骤 1、按照图3-1的电路图,用导线把数码管静态串行显示模块和单片机的最小系统实验模块正确连接。 2、示例程序如下: START: MOV SCON,#00H ;设定串行工作模式为0 MOV R1, #06H ;数码管显示的位数6 MOV R0, #00H ;字型码首地址偏移量 MOV DPTR,#TAB ;字型码表首地址 LOOP: MOV A,R0 MOVC A,@A+DPTR ;取出字型码 MOV SBUF,A ;发送 WAIT: JNB TI,WAIT ;等待一帧发送完毕 CLR TI INC R0 ;指向下一字型码 ; ACALL DELAY ;延时 DJNZ R1,LOOP …… ;6位显示完毕 TAB: DB 40H,0CEH,6eH,60H,1CH ;显示字型为PHIL 将程序调入仿真器进行调试,直至达到实验要求。 六、实验报告 1. 画出接口电路原理图,简要分析单片机串口及电路的工作原理。 2. 给出针对实验要求编写的程序流程图、程序清单、并给予适当注释。 3.在显示过程中加入延时子程序,如实例程序中的ACALL DELAY。将延时子程序的延时时间加长,出现了什么现象?可以根据该现象了解静态显示的原理。 3.怎样避免在静态显示方式下出现显示段位混乱的情况? 实验六、独立式键盘输入实验 一、 实验目的 1.认识独立式键盘的工作原理 2.学习独立式键盘的接口设计 二、实验设备 1.单片机最小系统模块 2.仿真器 3.独立式键盘实验模块 4.发光二极管显示模块 三、实验要求 要求由8个独立式键盘和8个发光二极管组成实验电路,当按下某一个键时相应的发光二极管被点亮。 四、实验原理 独立式键盘中,各按键相互独立,每个按键各接一根输入线,每根输入线上的按键工作状态不会影响其它输入线上的工作状态。因此,通过检测输入线的电平状态就可以很容易的判断按键是否被按下了。独立式键盘电路配置灵活,软件结构简单。但每个按键需占用一根输入线,在按键数量较多时,输入口浪费大,电路结构显得很繁杂,故此种键盘适用于按键较少或操作速度较高的场合。下面介绍独立式按键的接口方法。 图6-1(a)为中断方式的独立式键盘工作电路,图(b)为查询方式的独立式按键工作电路,按键直接与89C51的I/O口线相接,通过读I/O口,判定各I/O口线的电平状态,即可识别出按下的按键。 (a)中断方式    (b)查询方式 图6-1 独立式键盘接口电路 此外,也可以用扩展I/O口连接独立式键盘接口电路。 上述独立式键盘电路中,各按键开关均采用了上拉电阻,这是为了保证在按键断开时,各I/O口线有确定的高电平。在我们的键盘模块中,已经在键盘输出端加上了上拉电阻,因此不用再额外加上。 五、实验步骤 实验参考连线如图6-2所示。(以6键、6发光管为例) 图6-2 实验连线图 1、按照图6-2的电路原理,用导线正确连接独立式键盘、发光二极管实验模块和单片机最小系统模块。 2、示例程序如下(以6键、6发光管为例): BEGIN: MOV P0,#0FFH ;熄灭二极管 LOOP: MOV A,P0 ;读键盘状态   ANL A,#3FH ;屏蔽高二位   MOV 40H,A ;把读的键盘状态暂放在40H的地址 CJNE A,#3FH,HADKEY SJMP LOOP HADKEY:   ACALL DL10MS ;延时10MS   MOV A,P0 ;再读键盘状态   ANL A,#3FH ;屏蔽高二位   CJNE A,40H,LOOP ;比较两次读键盘状态,如不同则重读 MOV P2,A ;使相应的二极管发亮 NOP NOP LJMP LOOP DL10MS: MOV R7,#05 LOOP1: MOV R6,#0F9H LOOP2: NOP   NOP   DJNZ R6,LOOP2  DJNZ R7,LOOP1  RET 将程序调入仿真器进行调试。 六、实验报告 1.画出接口电路原理图,并简要分析电路工作原理。 2.给出针对实验要求编写的程序清单、程序流程图、并给予适当注释。 3.独立式键盘的工作的原理是什么? 4.独立式键盘的消抖的方法是什么? 实验七、矩阵式键盘输入实验 一、实验目的 1.学习矩列式键盘工作原理 2.学习矩列式接口的电路设计和程序设计 二、实验设备 1.仿真器 2.单片机最小系统实验教学模块 3.矩阵式键盘实验模块 4.动态扫描数码管显示模块 三、实验要求 要求实现:在矩阵式键盘中的某个键被按下时,8位LED动态显示器上最低位显示该键对应的字符,以前的字符向高位推进1位(即类似于计算器)。 注意,在进行该项实验之前,请先进行实验二“数码管动态扫描显示实验”。 四、实验原理 矩阵式由行线和列线组成,按键位于行、列的交叉点上。如图所示,一个4*4的行、列结构可以构成一个由16个按键的键盘。很明显,在按键数量较多的场合,矩阵式键盘与独立式键盘相比,要节省很多的I/0口。 图7-1 矩阵式键盘结构 4.1 矩阵式键盘工作原理 按键设置在行、列交节点上,行、列分别连接到按键开关的两端。行线通过上拉电阻接到VCC上。平时无按键动作时,行线处于低电平状态,而当有按键按下时,列线电平为低,行线电平为高。这一点是识别矩阵式键盘是否被按下的关键所在。因此,各按键彼此将相互发生影响,所以必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。 4.2 按键识别方法 下面以图7-2中4号键被按下为例,来说明此键是如何被识别出来的。 前已述及,键被按下时,与此键相连的行线电平将由与此键相连的列线电平决定,而行线电平在无键按下时处于高电平状态。如果让所有列线处于高电平那么键按下与否不会引起行线电平的状态变化,始终是低电平,所以,让所有列线处于高电平是没法识别出按键的。现在反过来,让所有列线处于低电平,很明显,按下的键所在行电平将也被置为高电平,根据此变化,便能判定该行一定有键被按下。但我们还不能确定是这一行的哪个键被按下。所以,为了进一步判定到底是哪—列的键被按下,可在某一时刻只让一条列线处于低电平,而其余所有列线处于高电平。当第1列为低电平,其余各列为高电平时,因为是键4被按下,所以第1行仍处于低电平状态;当第2列为低电平,其余各列为高电平时,同样我们会发现第1行仍处于低电平状态,直到让第4列为低电平,其余各列为高电平时,因为是3号键被按下,所以第1行的高电平转换到第4列所处的高电平,据此,我们确信第1行第4列交叉点处的按键即3号键被按下。 根据上面的分析,很容易得出矩阵键盘按键的识别方法,此方法分两步进行。第一步,识别键盘有无健被按下;第二步,如果有键被按下,识别出具体的按键。分述如下: 识别键盘有无键被按下的方法是:让所有列线均为低电平,检查各行线电平是否有高电平,如果有,则说明有键被按下,如果没有,则说明无键被按下(实际编程时应考虑按键抖动的影响,通常总是采用软件延时的方法进行消抖处理)。 识别具体按键的方法是(亦称之为扫描法):逐列置零电平,并检查各行线电平的变化,如果某行电平由低电平变为高电平,则可确定此行此列交叉点处按键被按下。 图7-2 实验硬件连线图 五、实验步骤 1、按照图7-2的电路图,用导线将矩阵式键盘、数码管动态扫描显示模块和单片机的最小系统实验模块连接正确。 2、示例程序如下: Keyvalue EQU 40H ;读到键盘的值暂放的地址 Firstptr EQU 30h ;显示缓冲区地址低位 Lowptr EQU 36H Highptr EQU 37H ;**************** ;主程序 ;**************** ORG 0000H WAIT: LJMP MAIN NOP NOP LJMP WAIT ;先清空30-3f之间的16个暂存区 MAIN: MOV R1,#Firstptr MOV R0,#08H LOOP: MOV A,#10H ;指向表格的指针,现在为0FFH即无显示 MOV @R1,A INC R1 DJNZ R0,LOOP MOV P2,#00H ;关闭所有的显示 LOOP1: MOV R1,#04H ;列数为4。 MOV R2,#0EFH ;准备扫描,P1口高4位为列线 KEY: MOV P1,#0FFH ;读出口状态之前,先向P1口写1 MOV A,R2 ;先扫描第一列 MOV R3,A ;列信息 MOV P1,A ;低电平送P1口 MOV A,P1 ;扫描结果送回ACC MOV Keyvalue,A ;存储扫描结果供去抖后判断 ORL A,#0F0H ;屏蔽高四位 CJNE A,#0F0H,KEY_ON ;有键按下则转到KEY_ON MOV A,R2 ;该行没有键按下,继续扫描下一列 RL A MOV R2,A LCALL DISP DJNZ R1,KEY ;四列有无扫描完成 SJMP LOOP1 ;等待释放子程序 KEY_ON: LCALL DL10MS ;去抖延时 MOV P1,#0FFH MOV P1,R3 MOV A,P1 ;测试键是否释放 CJNE A,KEYVALUE,K0 LCALL DISP JMP KEY_ON ;判断各行是否有低电平 ;键处理子程序 K0: MOV A,Keyvalue CJNE A,#0E1H,K1 ;K0未按下,转移K1 LCALL MOVDISP
本文档为【单片机实验指导书_出】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_788212
暂无简介~
格式:doc
大小:12MB
软件:Word
页数:0
分类:其他高等教育
上传时间:2011-12-15
浏览量:27