版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单 片机 原 理与 应用 电子 科技出版 社 主编:苏 珊 高 如新 谭兴国第一章习题答案1 什么叫单片机?它有哪些主要特点?单片机是将中央处理器( CPU)、随机存储器( RAM)、只读存储器( ROM)、 中断系统、定时 / 计数器、 I/O 口等主要计算机部件集成在一片集成电路芯片上 的单片微型计算机( Single Chip Microcomputer )的简称。具有体积小、功耗 低、价格便宜、控制功能强等特点。2 请简述单片机的技术发展历史,单片机的主要技术发展方向是什么? 单片机技术发展经历了单芯片微机形成阶段、性能完善提高阶段和微控制 器化阶段三个主要阶段。目前单片机主要技术发展
2、方向是:大容量高性能化、 小容量低价格化、外围电路内装化、多品种化以及 I/O 接口功能的增强、功耗 降低等。3. 单片机主要用在哪些方面?由于单片机体积小、 功耗低、价格便宜, 广泛应用于仪器仪表、 家用电器、 医用设备、航空航天专用设备的智能化管理及过程控制等领域;又由于单片机 具有较强的实时数据处理能力和控制功能,可以使系统保持在最佳工作状态, 提高系统的工作效率和产品质量,所以在工业控测控、航空航天、尖端武器等 各种实时控制系统中,都作为控制器件使用。第二章习题参考答案1单片机系统复位后, PC值为( 0000H )。2MCS-51 单片机中,一个机器周期 =( 6 )状态周期 =(
3、12 )振荡周期。当主频为 12MHz时,一个机器周期为(1s)寄存器 R2 的地址为 ( 12H )4 MCS-51单片机的 EA =0,程序存储器访问的是(片外 ROM )5 MCS-51单片机上有( 4 )个独立的存储空间。6MCS-51系列单片机在片内集成了哪些主要逻辑功能部件?答:有微处理器 CPU、程序存储器、数据存储器、定时 / 计数器、中断源、并 行 I/O 端口等功能部件组成。7程序计数器( PC)作为不可寻址寄存器,它有哪些特点?数据地址指针DPTR有哪些特点?答: PC是一个 16 位的特殊功能寄存器,又称程序指针,它具有自动加1的功能,始终指向下一条指令的首地址,以保证
4、程序按顺序执行;DPTR是一个 16位的专用地址指针寄存器。作间址寄存器使用,用来存储外接64KB的数据存储器和 I/O 端口,DPTR也可以拆成两个独立 8 位的寄存器, 即 DP(H高 8 位字节) 和 DPL(低 8 位字节),分别占据 83H 和 82H 两个地址。8MCS-51单片机片内 256B 的数据存储器可分为几个区?分别作什么用?答: 00H 1FH共 32 个单元通常作为工作寄存器区, 20H2FH可用位寻址 区,可直接进行位操作, 30H7FH共 80 个单元为用户 RAM区,作堆栈或数据缓 冲器用, 80H FFH为特殊功能寄存器区。9开机复位后, CPU 使用的是哪组
5、工作寄存器?它们的地址是什么? CPU如何 确定和改变当前工作寄存器组?答:开机复位后,由于 PSW复位值是 00H, CPU使用的是 0 区的工作寄存器R0R7,它们的地址是 0007H,可以通过改变 PSW的 RS1 RS0 两个位的值确定和改变当前工作寄存器组。10堆栈有哪些功能?堆栈指针( SP)的作用是什么?在程序设计时,为什么 还要对 SP 重新赋值答:堆栈是一个特殊的存储区,用来暂存数据和地址。堆栈指针 SP 是用来 管理堆栈的它指示出堆栈顶部在片内 RAM 中的位置。系统复位后, SP 初始化 为 07H ,使得堆栈实际上从 08H 单元开始。由于 08H1FH 单元分属于工作
6、寄 存器 13区, 20H2FH 为位寻址区,若程序中要用到这些区,应把SP值改为30H 或更大的值。11 MCS-51的 SFR占用了什么空间?其寻址方式如何?答: MCS-51的 SFR占用了片内数据存储器的空间,地址范围为80HFFH。其寻址方式为直接寻址。12程序状态寄存器 PSW的作用是什么?常用状态位有哪些?它们的作用各是 什么?答:PSW 是一个 8 位的特殊功能寄存器。 用于存放程序运行中的各种状态信 息。常用状态位及其作用:(1) 进位标志位 Cy 。在进行加或减运算时,如果操作结果最高位有进位或 借位, Cy由硬件置“ 1”,否则清“ 0”。(2) 辅助进位标志位 Ac 。
7、在进行加或减运算时,如果低四位数向高位有进 位或借位,硬件会自动将 Ac 置“ l”,否则清“ 0”。(3) 工作寄存器区指针 RSl RS0。用于选择 CPU 当前工作寄存器的工作区。 可由用户用软件来改变 RSl RS0 的组合,以切换当前选用的寄存器的工作区。OV(4) 溢出标志位 OV 。当进行算术运算时,如果产生溢出,则由硬件将 位置“ l”,否则清“ 0”。(5)奇偶标志位 P。该位始终跟踪累加器 A 中含“ 1”个数的奇偶性。如果A 中有奇数个“ 1”,则 P 置“ l”,否则置“ 0”。13MCS-51单片机复位条件是什么?常用复位电路有哪些? 答:复位条件是在单片机的 RST
8、 引脚输入持续至少两个机器周期高电平。MCS-51 单片机通常采用上电复位和上电 +按钮电平复位两种方式。 第三章习题参考答案1. 选择题:(1)可以实现片外数据存储器访问的指令是(A )。AMOVXB. MOV C. NOP D. DIV(2)下列指令中,可以实现将累加器 A的第 0 位置 1(其它位不变)的指令是 ( B )。AMOVA , #01H B. SETB ACC.0 C. ANLA ,#0FFH D. SETB ACC(3)MOVX A DPT指R 令中,源操作数的寻址方式是( B )A寄存器寻址B. 寄存器间接寻址 C. 直接寻址 D.立即寻址(4)LCALL指令操作码地址是
9、 2000H,执行完子程序返回指令后, PC=( D )。A2000HB. 2001H C.2002H D. 2003H(5)对程序存储器的读操作,只能使用 ( B )AMOVXB. MOVC C. PUSHD. MOV(6)执行下面指令后, 30H 内容是( C )MOV R1,#30HMOV 40H,#0E0HMOV R1, 40HA40HB. 30H C. 0E0H D. FFH7)下列指令格式正确的是(D )A DEL: XCHA,30HB. MOV :INC AC. 2AB :MOV A, #20HD. ABC:MOV 23H,A8)当执行指令( A )后,累加器 A 的内容为 00
10、H。AANL A,#00HB. ORL A ,#00HC. XRL A , #00HD. 以上都不对2 比较下面各组指令,并在指令后添加注释(1)MOV A ,20H; 20H 内容送累加器 AMOV C ,20H;位地址 20H内容送位累加器 C(2)MOV A ,20H;20H 内容送累加器 AMOV R1 ,#20H;20H 送累加器 AMOV A , R1; 20H 指向地址的内容累加器 A3)CJNE A ,R1,L1;比较 A 和 R1指向地址的内容,若相等程序顺序运行,不相等则转 L1 处DJNZ R2 ,L1;R2内容减 1,不等于 0转 L1处,等于 0则顺序运行3判断下列指
11、令是否正确,并改正错误(1). SUBB 30H , #12H该指令错误,带进位减法指令目的操作数必须是A,要将立即数 12H 和 30H内容相加,可改为: MOV A , 30HSUBB A, #12H(2). MOV A ,2000H该指令错误, MOV为内部数据传送指令,范围只是在内部数据存储器和累加器传送,地址不超过 FFH。要将外部 2000H送累加器可改为MOV DPTR ,2000HMOVX A, DPTR(3). ADD R0 , 0A3H该指令错误,要将 A3H内容和 R0 内容相加,可改为: MOV A , R0ADD A, 0A3H(4). CJNE 20H , #20H
12、,L1该指令错误, CJNE第一操作数可以是 A、寄存器 Rn或 Ri可改为: MOV R1,20HCJNE R1,#20H, L1(5). RLC A该指令正确4设 R0的内容为 32H,A的内容为 48H,而片内 RAM 32H单元的内容为 80H,40H单元的内容为 08H。请指出在执行下列程序段后,上述各单元的内容变化。MOV A , R0 ;R0 指向地址 32H 内容送 A,即( A)=80HMOV R0, 40H ; 32H( 40H),即( 32H)=(40H)=08HMOV 40H ,A; 40H( A),即( 40H) =(A)=80H5 根据要求要求写出相应的指令。1).
13、 将 R0 的内容送 R1MOV A,R0MOV R1,A2)将 30H内容送 20H。MOV 20H,30H3)将立即数 30H 送 R0HMOV R0,#30H5)将 R0的内容送以 R1 中内容为地址的存储单元MOV A,R0MOV R1,A6)将内部 RAM30H内容送外部 20H单元。MOV A,30MOV R1,#20HMOVX R1,A7)将外部 RAM3000H内容送内部 30H 单元。MOV DPTR,#3000HMOVX A, DPTRMOV 30H,A8)将 ROM2000H内容送 R1。MOV DPTR,#3000HMOVC A, A+DPTRMOV R1,A9)将 R
14、OM2000H内容送内部 30H 单元。MOV DPTR,#2000HMOVC A, A+DPTRMOV 20H,A10)将 ROM2000H内容送外部 20H 单元。MOV DPTR,#2000HMOVC A, A+DPTRMOV R1,#20HMOVX R1,ARAM6编程将片外数据存储器地址为 40H60H 区域的数据块, 全部搬移到片内 的同地址区域,并将原数据区全部填为 FFH。MOV R0, #40HMOV R1, #33LOOP: MOVX A, R0MOV R0, AMOV A, #0FFHMOVX R,0 AINC R0DJNZ R1,LOOPRET7编程找出片外 2000H
15、200FH数据区中的最小值,结果存放于 R2中。MOV DPT,R #2000HMOV R7, #0FHMOVX A, DPTRMOV B,ALOOP: INC DPTRMOVX A, DPTRCJNE A,B, LOOP1LOOP1:JNC LOOP2MOV B, ALOOP: DJNZ R7,LOOPMOV R7, BRET第四章习题参考答案1. 是在外部 RAM中的 xdata 区定义了无符号字符型的字变量 OUTX,2 它的地 址是( 1002H)。2. (1)编程容易 ;(2)容易实现复杂的数值计算; (3)容易阅读、 调试、 维护程序;(4)容易实现模块化开发; ( 5)程序可移植
16、性好。3. bit,data,idata,pdata,code,xdata,sbit,sfr,sfr164. bit 和 sbit 都是 C51 扩展的变量类型。bit 是位变量,编译器在编译过程中分配地址。除非指定,否则这个地址是随机分配的。这个地址是整个可寻址空间,也就是内部RAM、外扩 RAM和ROM。sbit 是对应可位寻址空间的一个位, 包括可位寻址区: 20H 2FH和特殊功能寄存器区。一旦用了形如 sbi xxx = REGE6 的定义,这个 sbit 量就确定 地址了。bit 和 sbit 的最大区别在于, bit 是定义一个变量; sbit 经常用在寄存 器中的,方便对寄存器
17、的某位进行操作。5. (1)使用 C51运行库中的预定义宏; (2)通过指针访问; (3)使用 C51 扩展关键字 _at_ 。6. (1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都 将导致编译出错。( 2)中断函数没有返回值, 如果企图定义一个返回值将得不到正确的结果, 建议在定义中断函数时将其定义为 void 类型,以明确说明没有返回值。(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为 中断函数的返回是由 8051单片机的 RETI指令完成的, RETI指令影响 8051 单片 机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数, RETI 指令
18、的操作结果会产生一个致命的错误。(4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必 须与中断函数相同。否则会产生不正确的结果。(5)C51 编译器对中断函数编译时会自动在程序开始和结束处加上相应的 内容,具体如下:在程序开始处对 ACC、B、DPH、DPL和 PSW入栈,结束时出栈。 中断函数未加 using m 修饰符的,开始时还要将 R0R1入栈,结束时出栈。如 中断函数加 using m 修饰符,则在开始将 PSW入栈后还要修改 PSW中的工作寄 存器组选择位。( 6) C51编译器从绝对地址 8n+3处产生一个中断向量,其中 n 为中断号, 也即 interrupt 后
19、面的数字。该向量包含一个到中断函数入口地址的绝对跳转。( 7)中断函数最好写在文件的尾部, 并且禁止使用 extern 存储类型说明。 防止其它程序调用。7. 有 small , compact 和 large 三种存储器模式。 Small 存储器模式参数及 局部变量放入可直接寻址的内部存储器(最大128B,默认存储器类型为 data )compact 存储器模式参数及局部变量放入分页外部数据存储器 (最大 256B, 默认存储器类型为 pdata )large 存储器模式参数及局部变量直接放入外部数据存储器(最大64KB,默认存储器类型为 xdata )8. #include <reg
20、51.h>main( )int i;unsigned char xdata *p=0x2000; /*指针指向 2000H 单元 */for(i=0;i<256;i+) /*清零 2000H-20FFH单元 */*p=0; p+;9. ( 1)unsigned char code dis_code10=0x3f,0x06,0x5b,0x4f, 0x66,0x6d, 0x7d, 0x07, 0x7f, 0x6f;2) unsigned char data TL0_L _at_ 0x30;unsigned char data TH0_H _at_ 0x31;3) unsigned ch
21、ar idata data_buf204) unsigned char xdata data_array1005) unsigned char bdata status ;sbit flag_lamp1=status0;sbit flag_lamp2=status1;sbit flag_machine1=status2;sbit flag_machine2=status3;sbit flag_port1=status4;sbit flag_port2=status5;第五章习题参考答案1. MCS-51单片机有 5 个中断源, 2 个中断优先级。优先级由软件填写特殊功能 寄存器 IP 加以选择
22、。2. 外部中断请求标志位是 IE0 和 IE1。3. 8051 单片机响应中断后,产生长调用指令LCALL,执行该指令的过程包括:首先把当前 PC 的内容压入堆栈,对断点保护,然后把长调用指令的 16 位地址 送 PC,使程序转向执行中断入口地址区。4.8051 单片机的 IP 寄存器功能是设置中断优先级5. 用指令完成下列要求。 INT1、 T0 开中断,其余禁止中断;MOV IE, #86H全部开中断MOV IE, #FFH INT0、 T0 开中断,其余保持不变;SETB EASETB EX0SETB ET0 INT1、串行口为高优先级,其余为低优先级;MOV IP, #85H5. 子
23、程序和中断程序有何异同, 为什么子程序返回指令 RET和中断返回指令 RETI 不能相互替代? 答:中断类似于子程序设计中的调用子程序,但它们有着本质的区别。调用子 程序是程序员事先安排好的,而中断是由一些特殊事件触发的,是随机的。 RET 功能是恢复堆栈中 PC的值,从调用指令的下一条指令开始运行程序,不影响标 志位。 RETI 除了具有 RET指令功能外,还清除内部相应的中断状态触发器,因 此中断服务程序必须以 RETI为指令结束。 CPU执行 RETI指令后至少再执行一条 指令,才能响应新的中断请求,因此不能互换。1. 外部中断有几种中断触发方式?对跳变触发和电平触发信号有什么要求? 如
24、何设置?答:外部中断有低电平触发和边沿触发两种触发方式。 低电平触发时,施加在相应引脚上的低电平在中断返回前必须撤消,否则将再次申请中断造成出错。 即施加在 INTi 引脚上的低电平持续时间应大于一个机器 周期,且小于中断服务程序的执行时间。在边沿触发方式中,为了保证 CPU 在 两个机器周期内能够检测到由高至低跳变的电平,输入的高电平和低电平的持 续时间至少要保持 12 个振荡周期(即一个机器周期的时间) 。通过 TCON 寄存器的 IT1 和 IT0 来设置。 ITi 设置为“ 0”时,相应的外部中 断为低电平触发方式;设置为“ 1”时,相应的外部中断为边沿触发方式, 7. 为何要在程序的
25、首地址安排一条跳转到主程序的指令?在响应中断的过程中 为什么要保护现场?应如何保护?答:因为程序的首地址与外中断 0的入口地址之间只相差 3 各单元,放不下 完整的主程序,一般将主程序放到 0030H 以后的单元,故要安排一条跳转到主 程序的指令。主程序中通常用到 PSW、工作寄存器和特殊功能寄存器等。 如果在中断服务 程序中要用这些寄存器,会造成这些现场寄存器中数据的混乱,在中断服务前 应将它们的内容保护起来称保护现场。通常利用堆栈操作来保护现场。8. 利用 INT0 做一个计数器。当 INT0有脉冲时, A 的内容加 1。并且当 A 的内容 大于或等于 100 时将 P1.0置位。ORG
26、0000HLJMP MIN0ORG 0003HLJMP INTB0ORG 0030HMIN0: MOV SP , #30H ;主程序SETB IT0SETB EX0SETB EAMOVA, #00MIN1: NOPLJMP MIN1ORG 0100HINTB0: PUSH PSW ; INT0 的中断服务程序ADD A, #01CJNE A, #100,INTB1LJMP INTB2INTB1 : JC INTB3INTB2 : SETB P1.0INTB3 : POP PSWRETIEND第六章习题答案1当定时器 T0 工作在方式 3 时,要占用定时器 T1 的 TF1 和 TR1 两个控制
27、 位。2在定时器工作在方式 1下,计数器的计数器的宽度为 16 位,若 fosc=12MHz , 最大定时时间为 1s,若 fosc=6MHz ,则最大定时时间为 2s。3定时时间与定时器的工作方式、计数初值及晶振频率有关。4 MCS-51 的定时器 /计数器作计数器使用时,计数脉冲由外部信号通过引 脚 P3.4 和 P3.5 提供。5 MCS-51 的定时器 /计数器 T0 门控信号 GATE 设置为 1 时,只有 INT0 引 脚为高电平且由软件使 TR0 置 1 时,才能启动定时器工作。6 MCS-51 系列单片机内部设有几个定时器 /计数器?它们是由哪些专用寄 存器组成?有哪几种工作方
28、式?简述各种工作方式的功能特点。MCS-51 单片机内部设有两个 16 位定时器 /计数器 T0 和 T1。分别有的 8 位 计数器 TH0 、TL0 和 TH1、 TL1 组成,各有 4 种工作方式。方式 0 是一个 13位的定时器 /计数器。只用了 16位寄存器中的高 8 位( THi ) 和低 5位( TLi 的D4D0位),TLi 的高 3位未用。方式 1为 16位定时器/计数器方式,由THi的 8位和 TLi 的 8位构成 16位加 1 计数器 , , 当 16 位计数满溢出时,溢出标志位 TFi 置“ 1”。方式 2为 8位自动重装计数器。 仅 TLi 作为计数器, 而THi 的值
29、在计数中不 变。 TLi 溢出时, THi 中的值自动装入 TLi 中。方式 3只适用定时器 /计数器 T0。T0 在该方式下被拆成两个独立的 8位计数 器TH0 和 TL0 , TL0 可作 8位的定时器或计数器用,而 TH0 借用 T1的控制位 和溢出标志位 TR1 和 TF1,只可用作简单的定时器使用。 该方式下 T1 可用作串 行口波特率发生器。7MCS-51 系列单片机定时器 /计数器作定时器或计数器使用时,其计数脉 冲分别由谁提供?作定时器使用时,其实质是在单片机内部对机器周期进行计数,计数脉冲输 入信号由内部时钟提供,每一个机器周期计数器自动加1。作计数器使用时,其实质是对外部事
30、件进行计数,计数脉冲来自相应的外部输入引脚 T1或 T0,当外部输入脉冲信号由 1至0的跳变时,计数器自动加 1c=12MHz 。8采用程序查询方式, 由 T1产生一个 50Hz的方波,从 P1.1输出,fo 解:方波周期 T=1/50=0.02s=20ms,用 T1 定时 10ms,计数初值为 216 10× 10-3× 12×106 12=65536 10000=55536=D8F0H 源程序如下:ORG 0000HLJMP T1BUSORG 0030HT1BUS: MOV TMOD,#10H;T1 方式 1,定时模式SETB TRl;启动 T1LOOP: M
31、OV TH1,#0D8H;送 T1 计数初值MOV TL1 ,#0F0HLOOP1: JNB TF1 ,LOOP1; T1 没有溢出等待CLR TF1;产生溢出清标志位CPL P1.1;P1.1 取反输出SJMP LOOP;循环END第七章习题答案1. 选择题(1)MCS-5l 系列单片机的串行口是( B )。A. 单工 B. 全双工 C. 半双工 D. 并行口( 2)表示串行数据传输速率的指标是(D )。3)串行口的控制寄存器是( C )A. PCON B.SMOD4)当设置串行口工作于方式A.MOV SCON,#80HC. MOV PCON, #80HC.SCON D.SBUF2 时,采用
32、( A )指令。B. MOV SCON , #10HD. MOV PCON , #10H5)当串行口工作于方式 0 时,其波特率( C )A.取决于定时器 1的溢出率 B. 取决于 PCON的 SMODC. 取决于时钟频率 D. 取决于 PCON的 SMOD和定时器 1 的溢出率6)当串行口工作于方式 1 时,其波特率( D )。A.取决于定时器 1的溢出率 B. 取决于 PCON的 SMODC. 取决于时钟频率 D. 取决于 PCON的 SMOD和定时器 1 的溢出率7)串行口的发送数据和接收数据端为(A )A.TXD和 RXDB.TI和 RI C.TB8 和 RB8 D.REN8)串行口是
33、单片机的( A )A. 内部资源 B.外部资源 C. 输入设备 D. 输出设备简答题1串行口有几种工作方式?有几种帧格式?各工作方式的波特率如何确定?SM0 SM1工作方式功能波特率0 0方式 08 位同步移位寄存器fosc /120 l方式 l10 位 UART可变(由定时器控制)10方式 211 位 UARTfosc /64 、 fosc /3211方式 311 位 UART可变(由定时器控制)2何谓波特率、溢出率?如何计算和设置MCS-51 系列单片机串行通信的波特率?波特率是串行数据传输中,串行口每秒钟发送(或接收)的二进制位数称为 波特率,单位是 b/s(位/秒)。溢出率是指定时器
34、T1 作为波特率发生器使用时的 溢出频率,其大小为溢出周期之倒数在方式 0 时,每个机器周期发送或接收一位数据,因此波特率固定为振荡频率的 l/12,且不受 SMOD 位的控制。方式 2 的波特率要受 PCON 中 SMOD 位的控制,波特率 = f OSC /(64/ 2SMOD ),当SMOD 设置为“ 0”时,波特率等于 fosc /64,若 SMOD 设置为“ 1”时,则波特 率等于 fosc /32。方式 1 或方式 3 时,其波特率由定时器 / 计数器 T1 的溢出率与 SMOD 位共同控制。其波特率可表示为:波特率 =T1 的溢出率 /( 32/ 2SMOD )3为什么 T1 用
35、作串行口波特率发生器时,常选用操作方式2?定时器 T1 工作于方式 2 是 8 位的自动重装方式,这样就避免了由于软件装载引起的误差,故通常将 T1 设置为方式 2,作为波特率发生器。4串行口控制寄存器 SCON 中 TB8 、RB8 起什么作用?在什么方式下使用? TB8 和 RB8:方式 2 和方式 3 时发送和接受的第 9 位数据。在双机通信中 可以作为奇偶校验位,在多机通信中,可作为地址和数据的区别第八章习题答案1. 地址译码方法包括线选法和译码法。 其中译码法又分为部分地址译码法和全地址译码法。全地址译码法是将各扩展芯片上的地址线均接到单片机系统对应的地址总线上,剩余的全部地址线全部
36、连接到译码器上,各芯片的片选信号由译码电路产生,因此得到的每个选中单元的地址都是唯一的。而部分译码法 是将部分剩余高位地址线通过译码的方式生成外设地址,所以地址可能不唯一。2. 不会。这是因为访问外部程序存储器使用MOVC指令,而访问外部数据存储器和 IO 采用 MOVX指令,两者对应的时序和控制信号是不同的,总线不会冲 突。3. 电路如下所示。6264(1) 地址范围: 0000H1FFFH;6264(2) 地址范围: 2000H3FFFH;2764(1) 地址范围: 0000H1FFFH;2764(2) 地址范围: 2000H3FFFH;4.8255IO 口有三种工作方式基本输入 / 输出
37、、选通输入 / 输出、双向选通输入 输出方式。其中通过其控制寄存器设定。 8155A有四种 IO 工作方式,包含基本 IO和选通 IO 等组合,也需通过其控制寄存器进行配置。5. 设 8255 控制寄存器地址为 XXH,则 A 口工作与方式 2,则 B 口只能工作 与方式 0。8255 初始化程序:MOV DPTR,#XXHMOVX DPTR,A6. 单片机晶振频率为 12Mhz,将其 24 分频,工作频率为 500K,要获得 10ms定时,需要对该信号计数 5000 次。对应十六进制数 1388H,设只需要进行单次 10ms 计数,则定时计数器 M2M1=0,0 则定时器低位寄存器为 88H
38、,高位为 13H设控制口地址为 C000H,则定时计数器低位地址为 C0004H,定时计数器高位地址为 C0005H。则初始化程序为:MOV DPTR, #0C000HMOV A,#00000101B; 8155 IO 工作方式 3,A 输出, B 输入MOV DPTR,AMOV DPTR,#0C004;H装 入初值低 8 位MOV A,#88HMOV DPTR,AMOV A,#13H;装入初值高 8 位INC DPTRMOV DPTR,A启动定时器第九章参考答案1. 参看 9.1 节第二部分(二)矩阵式键盘。2. 分为软件消抖和硬件消抖两种方法。去抖方法参看9.1 节第一部分。判断键是否释放
39、方法:计算键值以后,再以延时和扫描的方式等待并判定键释放。3. 参考电路图如下:C51参考程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar HSM,LJC; / 定义行扫描码和列检测数据uchar tmp,keyvalue; / 定义接收键值和键值 uchar keyscan();void delay(uint x); /*函数名称: main() 函数功能:主函数,键值处理*/void main()while(1) tmp=keyscan();switch(tmp)case
40、0x11: P0=0x3f; /0break;case 0x21: P0=0x06; /1break;case 0x41: P0=0x5b; /2break;case 0x81: P0=0x4f; /3 break;case 0x12: P0=0x66; /4 break;case 0x22: P0=0x6d; /5 break;case 0x42: P0=0x7d; /6 break;case 0x82: P0=0x07; /7 break;case 0x14: P0=0x7f; /8 break;case 0x24: P0=0x6f; /9 break;case 0x44: P0=0x77
41、; /A break;case 0x84: P0=0x7c; /B break;case 0x18: P0=0x39; /C break;case 0x28: P0=0x5e; /Dbreak;case 0x48: P0=0x79; /Ebreak;case 0x88: P0=0x71; /Fbreak;default: P0=0x00;delay(100); /*函数名称: void delay(uint x)函数功能:延时 xms ,振荡器频率为 f=12MHz*/void delay(uint x)uchar j,k;for(;x>0;x-)for(j=4;j>0;j-) f
42、or(k=250;k>0;k-);/*函数名称:void keyscan()函数功能:键盘扫描及按键处理*/uchar keyscan()P1=0xf0; /行扫描全为低电平,列线全为高电平LJC=P1&0xf0;/第一次读列检测状态if(LJC!=0xf0)delay(10); /若有键盘被按下,则延时 10msLJC=P1&0xf0;/第二次读取列检测状态:0xe0、0xd0、0xb0、0x70if(LJC!=0xf0)/若有闭合键,则逐行扫描HSM=0xfe; /扫描码分别为 0xfe 、0xfd 、0xfb 、 0xf7while(HSM&0x10)!=0
43、) /若扫描码为 0xef ,则结束扫描P1=HSM; / 输出行扫描码LJC=P1&0xf0; / 读列检测数据: 0xe0、0xd0、0xb0、 0x70 keyvalue=(HSM)+(LJC|0x0f); / 计算键盘值 return(keyvalue); / 返回键值else HSM=(HSM<<1)|0x01; / 行扫描左移 1 位,准备扫描下一行 return(0x00); 汇编语言参考程序:ORG 00HLJMP MAINMAIN: LCALL KEYJUDGELCALL KEYSCANLCALL DISPLJMP MAINKEYJUDGE: MOV P3
44、,#0F0HMOV A,P3XRL A,#0F0HJNZ DELAYDELAY:MOV R4,#08HLOOP1:MOV R5,#0FAHLOOP2:DJNZ R5,LOOP2DJNZ R4,LOOP1MOV P3,#0F0HMOV A,P3XRL A,#0F0HJZ MAINRETKEYSCAN:MOV R0,#00HMOV R1,#00HMOV R2,#0FEHMOV R3,#04HKEY:MOV P3,R2KEY0:JB P3.4,KEY1MOV R1,#00HLJMP NUMKEY1:JB P3.5,KEY2MOV R1,#04HLJMP NUMKEY2:JB P3.6,KEY3LJM
45、P NUMKEY3:JB P3.7,NEXTMOV R1,#0CHLJMP NUMNEXT:INC R0MOV A,R2RL AMOV R2,ADJNZ R3,KEYLJMP NUMNUM:MOV A,R0ADD A,R1MOV DPTR,#TABMOVC A,A+DPTRMOV R6,ARETDISP:MOV P0,R6LCALL DELAY1RETDELAY1:MOV R4,#0FHLOOP10:MOV R5,#0FAHDJNZ R4,LOOP10RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H
46、,71HEND4. 静态显示:静态显示方式要求每位 LED显示器的公共端( COM)必须接地 (共阴极),或接高电平(共阳极) 。而每位 LED 显示器都由一个具有锁存功能 的 8 位端口去控制。动态显示:把所有显示器的同名字段互相连接在一起,并把它们连到字形 口上。为了防止各个显示器同时显示出相同的字符, 每个显示器的公共端 ( COM) 还要受另一组信号控制,即把它们接到字位口上。这样对于一组LED 数码显示器需要有两种信号控制:一组是字形口输出的字形码,用来控制显示内容;另 一组是字位口输出的字位码,用来控制将字符显示在第几位显示器上。在这两 组信号的控制下使各个显示器依次从左至右轮流点
47、亮一遍,过一段时间再轮流 点亮一遍,如此不断重复。虽然在任意时刻只有一位显示器被点亮,但由于显 示器具有余辉效应,而人眼又具有视觉惰性,所以看起来与全部显示器持续点 亮效果完全一样。字形码: 为了将数字或字符在 LED 显示器上输出,把数字或字符在 LED 显 示器上显示时所对应的发光二级管状态按照一定顺序进行编码,称为字形码。 LED 显示器的字形码分为共阳 LED 编码和共阴 LED 编码。5. 电路图参考图 9-10.C51参考程序:#include<reg51.h>#define uchar unsigned charunsigned char code table=0x0
48、c0,0x0f9,0x0a4,0x0b0,0x99, 0x92,0x82, 0x0f8, 0x80, 0x92 ;Uchar sec,mSec;Void main()Uchar showData;Sec=0;mSec=0;TMOD=0x10;/ T1 模式 1,定时TH1=0xd8;/ T1 计数初值 TL1=0x0f0;EA=1;/ CPU 、T1 开中断ET1=1;TR1=1;/ 启动 T1While(1)If(sec%2=0 )showData=2;Display(showData); showData=0;Display(showData); showData=1;Display(sh
49、owData); showData=6;Display(showData); Else showData=2;Display(showData); showData=0;Display(showData); showData=4;Display(showData); showData=9;Display(showData); Void display(unsigned char indx)unsigned char temp=tableindx;SBUF=temp;While(!TI)TI=0;void timer1() interrupt 3TH1=0x0d8;/ T1 计数初值TH1=0x
50、0f0;mSec+;If(mSec=100)Sec+;mSec=0; 汇编语言程序:ORG 00HLJMP MAINORG 001BHLJMP INT1MAIN: MOV TMOD, #01H ; 选 T1 方式 1 ,晶振 12MHZ,定时 50msMOV TH1 , #3CH ; 赋初值高 8 位MOV TL1 , #0B0H ; 赋初值低 8 位SETB TR1;启动 T1 定时SETB ET1;开 T1 中断允许MOV R0,#00HSETB EA;开总中断允许DIS:MOV A,#2ACALL DSPLYMOV A,#0ACALL DSPLYMOV A,#1ACALL DSPLYMO
51、V A,#6ACALL DSPLYCJNE R0,#14H,DISDIS1:MOV R0,#0MOV A,#2ACALL DSPLYMOV A,#0ACALL DSPLYMOV A,#4ACALL DSPLYMOV A,#9ACALL DSPLYCJNE R0,#14H,DIS1MOV R0,#0AJMP DISDSPLY: MOV DPTR, #TABLEMOVC A, A+DPTRMOV SBUF, AJNB TI, $CLR TIRETINT1:MOV TH1, #3CH ; 赋初值高 8 位MOV TL1 , #0B0H ; 赋初值低 8 位INC R0RETITABLE: DB 0C
52、0H,0F9H,0A4HDB 0B0H,99H,92HDB 82H,0F8H,80H,90HEND6. 电路图参考图 9-6 和图 9-20 。图 9-6 对应汇编程序实现把键值存放到 A 中,调用键扫描后程序后,只需要把 A 中内容用传送指令 MOV 40H,A指令即可把键值存储 40H单元。至于题目中要求 2秒钟扫描一次键盘, 需要 2秒钟定时,可以把题目 5中的 1秒钟定时中断服务程序作如下修改即可:C51参考程序:void timer1() interrupt 3TH1=0x0d8;/ T1 计数初值TH1=0x0f0;mSec+;If(mSec=200)Sec+;Key=keysca
53、n();在主程序中等待 key 的改变,根据不同的 key 值作出相应的输出。 汇编语言参考程序:ORG 00HLJMP MAINORG 001BHLJMP INT1ORG 0030HMOV TH1 , #3CH ; 赋初值高 8 位MOV TL1 , #0B0H ; 赋初值低 8 位SETB TR1;启动 T1 定时SETB ET1;开 T1 中断允许MOV R0,#00HMOV R1,#40HSETB EA ; 开总中断允许SCANKE:Y CJNE R0,#3CH,SCANKEY;3秒钟扫描一次键盘MOV R0,#00HLCALL KEY1;KEY1为按键扫描子程序,键值存放在 A 中MOV R1,AINC R1CJNE R1,#7FH,SCANKEY若; 地址超过 7FH,重新从 40H 单元开始存键 值MOV R1,#40HAJMP SCANKEYINT1: MOV TH1, #3CH ; 赋初值高 8 位MOV TL1 , #0B0H ; 赋初值低 8 位INC R0RETI第十章习题答案1. 启动 AD 转换器的方法,在芯片选中的情况下,在START端口施加 200ns以上的正脉冲即可启动 ADC0809。单片机可通过查询 EOC信号判断 AD 转换是否 完成。可通过定时 / 查询/ 中断的方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度门式起重机租赁合同及设备升级改造协议2篇
- 二零二五年度高校教授长期聘用协议合同书3篇
- 二零二五版打桩工程突发事件应急预案及处理合同规范范本3篇
- 二零二五版电商平台卖家分销返利合同3篇
- 2025版房地产工程劳务施工承包合同风险控制与索赔处理3篇
- 二零二五煤炭运输合同能源消耗统计报告标准4篇
- 2025年度铲车出口贸易与代理服务合同范本4篇
- 二零二五年度动漫游戏代理记账与版权授权合同3篇
- 2025年度文化旅游区零星工程景观设计合同范本4篇
- 2025年度车辆抵押贷款担保物评估及保管服务合同4篇
- 机电安装工程安全培训
- 洗浴部前台收银员岗位职责
- 2024年辅警考试公基常识300题(附解析)
- GB/T 43650-2024野生动物及其制品DNA物种鉴定技术规程
- 暴发性心肌炎查房
- 工程质保金返还审批单
- 【可行性报告】2023年电动自行车项目可行性研究分析报告
- 五月天歌词全集
- 商品退换货申请表模板
- 实习单位鉴定表(模板)
- 数字媒体应用技术专业调研方案
评论
0/150
提交评论