填空 单片机与普通计算机的不同之处在于其将()()和()三部分集成于一块芯片上 答:CPU、存储器、IO口 8051与8751的区别是:答:内部程序存储器的类型不同 在MCS-51单片机中,如果采用6MHz晶振,1个机器周期为()。答:2us 内部RAM中,位地址为30H的位,该位所在字节的字节地址为()。答:26H 若A中的内容为63H,那么,P标志位的值为()。答:0 PC可以看成是程序存储器的地址指针 8031单片机复位后,R4所对应的存储单元的地址为(),因上电时PSW=()。这时当前 的工作寄存器区是()组工作寄存器区。答:04H、00H、0 使用8031芯片时,需将/A引脚接()电平,因为其片内无()存储器。答:低、程序 片内RAM低128个单元划分为0003个主要部分 答:工作寄存器区、位寻址区、数据缓冲区 通过堆栈操作实现子程序调用,首先就要把()的内容入栈,以进行断点保护。调用返回 时,再进行出栈保护,把保护的断点送回到()。答:PC、PC 在基址加变址寻址方式中,以()作变址寄存器,以()或()作基址寄存器。 答:累加器A,DPTR、PC 假定累加器A中的内容为30H,执行指令 1000H: MOVC A, @A+PC 后,把程序存储器()单元的内容送入累加器A中。 答:103H 下列程序段的功能是什么? PUSH A PUSH B POP A POP B 答:交换A、B的内容 外部中断1所对应的中断入口地址为()H。答:0013H 各中断发出的中断请求信号,都会标记在MCS-51系统的TCON与SCON寄存器中 在MCS-51中,需要外加电路实现中断撤除的是电平方式的外部中断 在存储器扩展中,无论是线选法还是译码法,最终都是为了扩展芯片的(片选) 端提供信号 起止范围为0000HI-3FFH的存储器的容量是(16)KB 在MCS-51中,PC和DPTR都用于提供地址,但PC是为了访问(程序)存储 器提供地址,而DPIR是为访问(数据)存储器提供地址。 计算机工作时,cpu将数码存入存储器的过程称为“写”操作,从存储器中取 数的过程称为“读”操作。 指令分为操作码和操作数两大部分。操作码表示该指令执行何种操作,操作数表 示参加运算的数据或数据所在的地址 将汇编语言程序翻译成目标程序的过程称为汇编。 存储器由存储体、地址寄存器、地址译码器、存储器输λ隃输出控制电路等部分 组成
一 填空 单片机与普通计算机的不同之处在于其将( )( )和( )三部分集成于一块芯片上。 答:CPU、存储器、I/O 口 8051 与 8751 的区别是:答:内部程序存储器的类型不同 在 MCS-51 单片机中,如果采用 6MHz 晶振,1 个机器周期为( )。答:2us。 内部 RAM 中,位地址为 30H 的位,该位所在字节的字节地址为( )。答:26H 若 A 中的内容为 63H,那么,P 标志位的值为( )。答:0 PC 可以看成是程序存储器的地址指针。 8031 单片机复位后,R4 所对应的存储单元的地址为( ),因上电时 PSW=( )。这时当前 的工作寄存器区是( )组工作寄存器区。答:04H、00H、0 使用 8031 芯片时,需将/EA 引脚接( )电平,因为其片内无( )存储器。答:低、程序 片内 RAM 低 128 个单元划分为()()()3 个主要部分 答:工作寄存器区、位寻址区、数据缓冲区 通过堆栈操作实现子程序调用,首先就要把( )的内容入栈,以进行断点保护。调用返回 时,再进行出栈保护,把保护的断点送回到( )。答:PC、PC 在基址加变址寻址方式中,以( )作变址寄存器,以( )或( )作基址寄存器。 答:累加器 A,DPTR、PC 假定累加器 A 中的内容为 30H,执行指令 1000H:MOVC A,@A+PC 后,把程序存储器( )单元的内容送入累加器 A 中。 答:1031H 下列程序段的功能是什么? PUSH A PUSH B POP A POP B 答:交换 A、B 的内容 外部中断 1 所对应的中断入口地址为( )H。答:0013H 各中断发出的中断请求信号,都会标记在 MCS-51 系统的 TCON 与 SCON 寄存器中。 在 MCS-51 中,需要外加电路实现中断撤除的是电平方式的外部中断 在存储器扩展中,无论是线选法还是译码法,最终都是为了扩展芯片的(片选) 端提供信号。 起止范围为 0000H-3FFFH 的存储器的容量是(16)KB。 在 MCS-51 中,PC 和 DPTR 都用于提供地址,但 PC 是为了访问(程序)存储 器提供地址,而 DPTR 是为访问(数据)存储器提供地址。 计算机工作时, cpu 将数码存入存储器的过程称为“写”操作,从存储器中取 数的过程称为“读”操作。 指令分为操作码和操作数两大部分。操作码表示该指令执行何种操作,操作数表 示参加运算的数据或数据所在的地址。 将汇编语言程序翻译成目标程序的过程称为汇编。 存储器由存储体、地址寄存器、地址译码器、存储器输入/输出控制电路等部分 组成
堆栈指针SP是一个专用地址寄存器,它指明栈顶的位置,起着管理堆栈工作的作用 数据传送的方式有无条件传送方式、查询传送方式、中断传送方式和直接数据通道传送方式 P0口分时复用为第8位地址总线和双向数据总线。 P3口除作为准双向IO接口使用外,还具有第二功能。 “s”一般指本指令所在的首地址,也即本指令执行前的PC值。 在串行通讯中,用每秒传送数据的位数衡量,称为波特率。 除法指令 DIVAB中,被除数放在累加器A中,除数放在寄存器B中,除得的 商放在A中,余数放在B中。 251÷18=13余17 MO A. #251 #FB MOvB,#18;#12H B;(A)=0DH,(B)=11H (Ov)=0,CY)=0 二判断题 判断下列说法是否正确 A、程序计数器PC不能为用户编程时直接使用,因为它没有地址。 B、内部RAM的位寻址区,只能供位寻址使用,而不能供字节寻址使用 C、8031共有21个特殊功能寄存器,它们的位都是可以用软件设置的,因此,是可以 进行位寻址的。 答:对、错、错 判断下列指令的正误: 1)MOV28H,@R2错2)MOVF0,C对 三读程序 假定A=83H,(R0)=17H,(17H)=34H,执行以下指令 ANL ORL 17H.A XRL AaRO 后,A的内容为() 答:0CBH 已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H=FFH。下述程序执行后 POP POP MOV DPTR #4000H RL MOV BA MOVC AQA+DPTR PUSH A MOV AB MOVC A, @A+DPTR PUSH A
堆栈指针 SP 是一个专用地址寄存器,它指明栈顶的位置,起着管理堆栈工作的作用。 数据传送的方式有无条件传送方式、查询传送方式、中断传送方式和直接数据通道传送方式。 P0 口分时复用为第 8 位地址总线和双向数据总线。 P3 口除作为准双向 I/O 接口使用外,还具有第二功能。 “$”一般指本指令所在的首地址,也即本指令执行前的 PC 值。 在串行通讯中,用每秒传送数据的位数衡量,称为波特率。 除法指令 DIV AB 中,被除数放在累加器 A 中,除数放在寄存器 B 中,除得的 商放在 A 中,余数放在 B 中。 251÷18 = 13 余 17 MOV A , #251 ;#FB MOV B , #18 ;#12H DIV AB ;(A) = 0DH,(B) = 11H, (OV) = 0,(CY) = 0 二 判断题 判断下列说法是否正确 A、 程序计数器 PC 不能为用户编程时直接使用,因为它没有地址。 B、内部 RAM 的位寻址区,只能供位寻址使用,而不能供字节寻址使用。 C、8031 共有 21 个特殊功能寄存器,它们的位都是可以用软件设置的,因此,是可以 进行位寻址的。 答:对、错、错 判断下列指令的正误: 1)MOV 28H,@R2 错 2)MOV F0,C 对 三 读程序 假定 A=83H,(R0)=17H,(17H)=34H,执行以下指令: ANL A,#17H ORL 17H,A XRL A,@R0 CPL A 后,A 的内容为( )。 答:0CBH 已知程序执行前有 A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下述程序执行后: POP DPH POP DPL MOV DPTR,#4000H RL A MOV B,A MOVC A,@A+DPTR PUSH A MOV A,B INC A MOVC A,@A+DPTR PUSH A
RET ORG 4000H DB 10H, 80H,30H, 50H, 30H, 50H 请问:A=(),SP=(),(5H)=(),(52H)=(),PC=() 答:A=50H,SP=50H,(51H=30H,(52H=50H,PC=5030H 在串行数据通讯中,由于传输距高较远,数据信号在传输过程中可能发生畸变,从而引起误码, 为了保证传输质量,软件上可采取排错措施,例如采用串行口方式2,传送11位数据时,可用 第9位数据作为奇偶检验。下面的程序是发送端发送一个字节数据及奇偶位,请完善程序。 MOV SCON #80H 选串行口方式2,传送11位数据 MOV A. #DATA 待发送8位数据送A,注意此时A的 内容将影响PSW中的奇偶标志P,即PSW.0 MOV C. PSW.O ;奇偶标志送C,奇为1、偶为0 MOV TB8. C ;奇偶标志送TB8,待发送的第9位 MOV SBUF.A ;启动一次发送共11位数据 LOOP: JBC TI,NEXT;TI=1时,一帧数据发完,清TI转下 SMP LOOP NEXT 判断P1口输入的数据若为负则转DIR,否则转MIN 方法1:8000E590 MIN: MOvA, PI 800233 RLC A 800340el IC DIR 800580e2 SMP MIN 8007 求偏移量:e=〔目的地址-下条指令地址〕补码 el=(800AH-8005H)补码=05H e2=〔8000H-8007H)补码=(-7)补码=F9H
RET ORG 4000H DB 10H,80H,30H,50H,30H,50H 请问:A=( ),SP=( ),(51H)=( ),(52H)=( ),PC=( )。 答:A=50H , SP=50H , (51H)=30H , (52H)=50H , PC=5030H 在串行数据通讯中,由于传输距离较远,数据信号在传输过程中可能发生畸变,从而引起误码, 为了保证传输质量,软件上可采取排错措施,例如采用串行口方式 2,传送 11 位数据时,可用 第 9 位数据作为奇偶检验。下面的程序是发送端发送一个字节数据及奇偶位,请完善程序。 MOV SCON, #80H ;选串行口方式 2,传送 11 位数据 MOV A, #DATA ;待发送 8 位数据送 A,注意此时 A 的 内容将影响 PSW 中的奇偶标志 P ,即 PSW.0 MOV C , PSW.0 ;奇偶标志送 C,奇为 1、偶为 0 MOV TB8 , C ;奇偶标志送 TB8 ,待发送的第 9 位 MOV SBUF , A ;启动一次发送共 11 位数据 LOOP: JBC TI ,NEXT ;TI = 1 时,一帧数据发完,清 TI 转下 SJMP LOOP ……………. NEXT:… 判断 P1 口输入的数据若为负则转 DIR,否则转 MIN。 方法 1:8000 E5 90 MIN : MOV A,P1 8002 33 RLC A 8003 40 e1 JC DIR 8005 80 e2 SJMP MIN 8007 。。。 800A DIR: 。。。 求偏移量:e = 〔目的地址 – 下条指令地址〕补码 e1 = 〔800A H - 8005H〕补码=05H e2 = 〔8000H – 8007H〕补码=〔-7〕补码=F9H
以6MHZ晶振为例 1振荡周期=1/6M=1/6us 1状态周期=2×振荡周期=1/3us 1机器周期=12/2s 1指令周期=2~8μs执行每条指令需要的机器周期数可在指令表中查到。 延时程序就是计算机重复执行一些指令,累积的时间就是软件延时的时间。 例 每条指令执行 执行 总机器 机器周期数T 次数 周期数 D15MS: MOV R5, #N DDI: MOV R7, #M DD2: NOP MNNOP MIN MNDNZ R7, DD2 MN 2MNDJNZ R5, DDI 2NRET 2执行该程序所需总机器周期数为:5MN+3N+3 忽略3机器周期,令该延时程序延时时间等于15ms, 以6MHZ为例,T=2μs则:(5MN+3N)×2×106=15×103 取M=100则 当N=14,延时时间为14084ms 当N=15,延时时 间为1509ms例:在累加器A中的存放一个0-7的数据,由该数据控制程序转向转向8个 子程序中的一个。说明:PROC1PROC8是8个子程序名。*程序清单: START:ANLA,#7H;屏蔽高5位 MOVB,#3;LJMP为3字节 MUL AB MOV DPTR.#BRNH JMP QA+DPTR BRNH: LJMP PROC1 LIMP PROC2 LIMP PROC3 LIMP PROC4 LIMP PROC5 LIMP PROC6 LIMP PROC7 LJMP PROCS 四编程题
以 6MHZ 晶振为例: 1 振荡周期=1/6M=1/6μs 1 状态周期=2×振荡周期=1/3μs 1 机器周期=12/f= 2μs 1 指令周期=2~8μs 执行每条指令需要的机器周期数可在指令表中查到。 延时程序就是计算机重复执行一些指令,累积的时间就是软件延时的时间。 例: 每条指令执行 执行 总机器 机器周期数 T 次数 周期数 D15MS:MOV R5, #N 1 1 1 DD1: MOV R7, #M 1 N N DD2: NOP 1 MN MNNOP 1 MN MN NOP 1 MN MNDJNZ R7,DD2 2 MN 2MNDJNZ R5, DD1 2 N 2NRET 2 1 2 执行该程序所需总机器周期数为: 5MN+3N+3 忽略 3 机器周期,令该延时程序延时时间等于 15ms, 以 6MHZ 为例,T=2μs 则:(5MN+3N)×2×10-6=15×10-3 取 M=100 则: 当 N=14 ,延时时间为 14.084ms 当 N=15 , 延时时 间为 15.09ms 例:在累加器 A 中的存放一个 0~7 的数据,由该数据控制程序转向转向 8 个 子程序中的一个。说明:◆PROC1~PROC8 是 8 个子程序名。程序清单: START: ANL A,#07H;屏蔽高 5 位 MOV B, #3 ;LJMP 为 3 字节 MUL AB MOV DPTR,#BRNH JMP @A+DPTR BRNH: LJMP PROC1 LJMP PROC2 LJMP PROC3 LJMP PROC4 LJMP PROC5 LJMP PROC6 LJMP PROC7 LJMP PROC8 四 编程题
1.试编写程序,查找在内部RAM的30H~50H单元中是否有0AAH这一数据。若有,则 将51H单元置为“0IH”;若未找到,则将5H单元置为“00H”。 答: START MOV RO,#30H MOV R2.#20H LOOP MOV A,、 CJNE A, #OAAH, NEXT MOV 51H#OlH LIMP EXIT NEXT INC DJNZ R2. LOOP MOV 51H#OOH EXIT: RET 2.采用定时器/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方 式。定时1ms后,又转为计数方式,如此循环不止。假定MCS-51单片机的晶体振荡器的 频率为6MHz,请使用方式1实现,要求编写出程序。 解答:定时器/计数器T0在计数和定时工作完成后,均采用中断方式工作。除了第一次计数 工作方式设置在主程序完成外,后面的定时或计数工作方式分别在中断程序完成,用一标志 位识别下一轮定时器/计数器T0的工作方式。编写程序如下: ORG 0000H LJMP MAIN ORG 00BH LJ MP ITOP MAIN: MOV TMOD,#06H:定时器/计数器T0为计数方式2 MOVT0,#156 计数100个脉冲的初值赋值 MOV THO.#156 SETB GAtE 打开计数门 SETB TRO 启动T0,开始计数 SETB ETO 允许T0中断 SETB EA CPU开中断 CLR 设置下一轮为定时方式的标志位 WAIT. AJMP WAIT ITOP. CLR EA 关中断 F0, COUNT:FO=1,转计数方式设置 MOV TMOD,#00H:定时器/计数器T0为定时方式0 MOV TH0,#OFEH:定时lms初值赋值 MOV TLO.#OCH SETB EA SETB FO RET COUNT MOV TMOD#06H MOV TLO.#156 SETB EA LR FO RET
1.试编写程序,查找在内部 RAM 的 30H~50H 单元中是否有 0AAH 这一数据。若有,则 将 51H 单元置为“01H”;若未找到,则将 51H 单元置为“00H”。 答:START: MOV R0,#30H MOV R2,#20H LOOP: MOV A,@R0 CJNE A,#0AAH,NEXT MOV 51H,#01H LJMP EXIT NEXT: INC R0 DJNZ R2,LOOP MOV 51H,#00H EXIT: RET 2.采用定时器/计数器 T0 对外部脉冲进行计数,每计数 100 个脉冲后,T0 转为定时工作方 式。定时 1ms 后,又转为计数方式,如此循环不止。假定 MCS-51 单片机的晶体振荡器的 频率为 6MHz,请使用方式 1 实现,要求编写出程序。 解答:定时器/计数器 T0 在计数和定时工作完成后,均采用中断方式工作。除了第一次计数 工作方式设置在主程序完成外,后面的定时或计数工作方式分别在中断程序完成,用一标志 位识别下一轮定时器/计数器 T0 的工作方式。编写程序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: MOV TMOD,#06H ;定时器/计数器 T0 为计数方式 2 MOV TL0,#156 ;计数 100 个脉冲的初值赋值 MOV TH0,#156 SETB GATE ;打开计数门 SETB TR0 ;启动 T0,开始计数 SETB ET0 ;允许 T0 中断 SETB EA ;CPU 开中断 CLR F0 ;设置下一轮为定时方式的标志位 WAIT: AJMP WAIT IT0P: CLR EA ;关中断 JB F0,COUNT ;F0=1,转计数方式设置 MOV TMOD,#00H ;定时器/计数器 T0 为定时方式 0 MOV TH0,#0FEH ;定时 1ms 初值赋值 MOV TL0,#0CH SETB EA SETB F0 RETI COUNT: MOV TMOD,#06H MOV TL0,#156 SETB EA CLR F0 RETI
3.编写一段程序,功能要求为:当P1.0引脚的电平正跳变时,对PL.1的输入脉冲进行计数: 当P12引脚的电平负跳变时,停止计数,并将计数值写入RO、Rl(高位存R1,低位存R0) 解答:将P1.1的输入脉冲接入INT0,即使用T0计数器完成对P1.1口的脉冲计数。编写程 序如下 ORG O00OH LJMP MAIN oRG 000BH LJMP ITOP MAIN: JNB PLO.MAIN MOV TMOD#05H:定时器/计数器T0为计数方式1 SETB TRO 启动T0,开始计数 SETB ETO 允许T0中断 SETB EA :CPU开中断 WAIT JB P12 WAIT CLR EA CLR TRO MOV RITHO MOV RO TLO AJMP S ITOP. INC R2 RETI 4.试编写一个程序,将两个非压缩BCD数拼接成一个压缩BCD数(例如将05H 和06H拼为56H),设原始数据放在片外数据区2001H单元和2002H单元中, 按顺序拼装后的单字节数放入2002H 解:本题主要考察了对外部存储器的读、写操作,同学们只要记住正确使用 MOX指令就可以了。编程思路:首先读取2001H的值,保存在寄存器A中, 将寄存器A的高四位和低四位互换,再屏蔽掉低四位然后将寄存器A的值保存 到30H中,然后再读取200)2H的值,保存在寄存器A中,屏蔽掉高四位,然后 将寄存器A的值与3OH进行或运算,将运算后的结果保存在2002H中。 ORG 000OH MAIN MOV DPIR,#2001H;设置数据指针的初值 A,DPTR 读取2001H的值 SWAP ANL A, #OFOH 屏蔽掉低四位 MOV 保存A INC DPTR 指针指向下一个 MOVX A,DPTR ;读取2002H的值 ANL A, #OFH ;屏蔽掉高四位 A,30H 进行拼装 aDPTR,A ;保存到2002H END 5假设8155H的 TIMERIN引脚输入的脉冲频率为1MHz,请编写出在8155H的 TIMEROUT引脚上输出周期为10ms的方波的程序。 解:将IMHz的脉冲改变为10ms的方波,这就让我们想到了在数字电路里面学
3. 编写一段程序,功能要求为:当 P1.0 引脚的电平正跳变时,对 P1.1 的输入脉冲进行计数; 当 P1.2 引脚的电平负跳变时,停止计数,并将计数值写入 R0、R1(高位存 R1,低位存 R0)。 解答:将 P1.1 的输入脉冲接入 INT0,即使用 T0 计数器完成对 P1.1 口的脉冲计数。编写程 序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: JNB P1.0,MAIN MOV TMOD,#05H ;定时器/计数器 T0 为计数方式 1 SETB TR0 ;启动 T0,开始计数 SETB ET0 ;允许 T0 中断 SETB EA ;CPU 开中断 WAIT: JB P1.2,WAIT CLR EA CLR TR0 MOV R1,TH0 MOV R0,TL0 AJMP $ IT0P: INC R2 RETI 4.试编写一个程序,将两个非压缩 BCD 数拼接成一个压缩 BCD 数(例如将 05H 和 06H 拼为 56H),设原始数据放在片外数据区 2001H 单元和 2002H 单元中, 按顺序拼装后的单字节数放入 2002H。 解:本题主要考察了对外部存储器的读、写操作,同学们只要记住正确使用 MOVX 指令就可以了。编程思路:首先读取 2001H 的值,保存在寄存器 A 中, 将寄存器 A 的高四位和低四位互换,再屏蔽掉低四位然后将寄存器 A 的值保存 到 30H 中,然后再读取 2002H 的值,保存在寄存器 A 中,屏蔽掉高四位,然后 将寄存器 A 的值与 30H 进行或运算,将运算后的结果保存在 2002H 中。 ORG 0000H MAIN: MOV DPTR,#2001H ;设置数据指针的初值 MOVX A,@DPTR ;读取 2001H 的值 SWAP A ANL A,#0F0H ;屏蔽掉低四位 MOV 30H,A ;保存 A INC DPTR ;指针指向下一个 MOVX A,@DPTR ;读取 2002H 的值 ANL A,#0FH ;屏蔽掉高四位 ORL A,30H ;进行拼装 MOVX @DPTR,A ;保存到 2002H END 5 假设 8155H 的 TIMERIN 引脚输入的脉冲频率为 1MHz,请编写出在 8155H 的 TIMEROUT 引脚上输出周期为 10ms 的方波的程序。 解:将 1MHz 的脉冲改变为 10ms 的方波,这就让我们想到了在数字电路里面学
到的分频器。计算得出分频前后频率之比为100001,这样我们只要将定时器初 值设置为64H就可以了。(假设IO口地址为7FO0H-7F05H) START: MOV DPTR,#7F04H:指针指向定时器低8位 A,#64H 送初值给A aDPTR,A 初值送给低8位 INC DPTR ;指向高8位 A,#40H 定时器方波输出 @DPTE, A MOV DPTR,#7FO0H;指向命令/态口 A, #OC2H ;设定控制字 MOVX DPTE, A 启动定时器 END 判断20H单元内容中1的个数。 MOv A, 20H MOV RI, #08H ;计数判断8次 MOVR0,#00H;1的个数计数单元清0 LOOP: RLC A INC ZERO ZERO: DNz R LOOP STOP: SMP STOP 数据拼装 要求将20H单元低5位送入30H单元低5位,21H单元低3位送入30H单元 高3位 MOv 30H, 20H ;取20H单元的数 LNL30H,#0011111B 切取低5位 MOVA,21H;取2IH单元的数 SWAP A ;低4位移入高4位 CLR C RLC A 原21H低3位移入高3位 ANLA,#111000切取高3位 ORL 30H ;拼凑字节 用定时器方式1编制1秒的延时程序系统采用12M晶振,采用定时器T1方式1定时50ms, 用R3做50ms计数单元 DELAY:MOVR3,#14H;置50ms计数循环初值 MOV TMOD,#10H;设定时器1为方式1 MOV TH1,#3CH;置定时器初值 MOV TLl, #OBOH SETB TRI 启动T1 LPI TF1,LP2;查询计数溢出 SMP LP1;未到50ms继续计数 LP2: MOV TH1,#3CH;重新置定时器初值
到的分频器。计算得出分频前后频率之比为 10000:1,这样我们只要将定时器初 值设置为 64H 就可以了。(假设 I/O 口地址为 7F00H-7F05H) START: MOV DPTR,#7F04H ;指针指向定时器低 8 位 MOV A,#64H ;送初值给 A MOVX @DPTR,A ;初值送给低 8 位 INC DPTR ;指向高 8 位 MOV A,#40H ;定时器方波输出 MOVX @DPTE,A MOV DPTR,#7F00H ;指向命令/状态口 MOV A,#0C2H ;设定控制字 MOVX @DPTE,A ;启动定时器 END 判断 20H 单元内容中 1 的个数。 MOV A,20H MOV R1, #08H ;计数判断 8 次 MOV R0 ,#00H ;1 的个数计数单元清 0 LOOP: RLC A JNC ZERO INC R0 ZERO:DJNZ R1 ,LOOP STOP:SJMP STOP 数据拼装 要求将 20H 单元低 5 位送入 30H 单元低 5 位,21H 单元低 3 位送入 30H 单元 高 3 位。 MOV 30H,20H ; 取 20H 单元的数 ANL 30H,#00011111B ;切取低 5 位 MOV A, 21H ; 取 21H 单元的数 SWAP A ; 低 4 位移入高 4 位 CLR C RLC A ;原 21H 低 3 位移入高 3 位 ANL A,#11100000B ;切取高 3 位 ORL 30H ,A ;拼凑字节 •用定时器方式 1编制 1秒的延时程序.系统采用 12M晶振,采用定时器 T1方式 1定时 50ms, 用 R3 做 50ms 计数单元 . DELAY: MOV R3,#14H ;置 50ms 计数循环初值 MOV TMOD,#10H ;设定时器 1 为方式 1 MOV TH1, #3CH ;置定时器初值 MOV TL1, #0B0H SETB TR1 ;启动 T1 LP1: JBC TF1,LP2 ;查询计数溢出 SJMP LP1 ;未到 50ms 继续计数 LP2: MOV TH1,#3CH ;重新置定时器初值
MOv TLI, #OBOH DNz R3, LPl ;未到ls继续循环 RET 返回主程序 用定时器中断方式编制1秒的延时程序采用定时器T1中断定时50ms,用R3做50ms计 数单元,在此基础上再用08H位作1s计数溢出标志,主程序从0100H开始,中断服务程 序名为 cOnTO ORG 0000H ;程序入口 AJMP 0100H ;指向主程序 ORG 001BH ;定时器T1中断入口 AJMP CONT ;指向中断服务程序 ORG 0100H MAIN: MOV TMOD,#10H;置T1为工作方式1 MOV TH1,#3CH;置50ms定时初值 MOV TLl, #OBOH SETB EA CPU开中断 SETB ETI ;定时器T1开中断 SETB TRI ;启动T1 CLR08H;清1s计满标志位 MOVR3,#4H;置50ms循环初值 JNB08H,S;查询ls时间到否 CONT MOV TH1,#3CH;重置50ms定时初值 MOV TLl, #OBOH DJNZ R3,EXIT;判ls定时到否 MOV ,#14H:重置50ms循环初值 SETB 08H 标志位置 EXIT: RETI 编制多字节无符号相减程序。设被减数与减数已分别在以 ADDRI与ADDR2为初址的片内 数据存储器区域内,注意数据自高字节起,由高到低依次存放;他们的字节数为L:被减数 够减,即最高字节相减时不至借位:减得的差放回原放被减数的单元。 MOV RO. #ADDR MOV RL#ADDR2 MOV A#L-1 ADD A RO MOV RO. A MOV A#L-1 ADDA RI MOV RLA MOV R2#L CLR C LOOP: MOV A.RO
MOV TL1,#0B0H DJNZ R3,LP1 ;未到 1s 继续循环 RET ;返回主程序 用定时器中断方式编制 1 秒的延时程序 .采用定时器 T1 中断定时 50ms,用 R3 做 50ms 计 数单元,在此基础上再用 08H 位作 1s 计数溢出标志,主程序从 0100H 开始,中断服务程 序名为 CONT。 ORG 0000H ;程序入口 AJMP 0100H ;指向主程序 ORG 001BH ;定时器 T1 中断入口 AJMP CONT ;指向中断服务程序 ORG 0100H MAIN:MOV TMOD,#10H;置 T1 为工作方式 1 MOV TH1,#3CH ;置 50ms 定时初值 MOV TL1,#0B0H SETB EA ;CPU 开中断 SETB ET1 ;定时器 T1 开中断 SETB TR1 ;启动 T1 CLR 08H ;清 1s 计满标志位 MOV R3,#14H ;置 50ms 循环初值 JNB 08H,$ ;查询 1s 时间到否 CONT: MOV TH1,#3CH ;重置 50ms 定时初值 MOV TL1,#0B0H DJNZ R3,EXIT ;判 1s 定时到否 MOV R3,#14H ;重置 50ms 循环初值 SETB 08H ;标志位置 1 EXIT: RETI 编制多字节无符号相减程序。设被减数与减数已分别在以 ADDR1 与 ADDR2 为初址的片内 数据存储器区域内,注意数据自高字节起,由高到低依次存放;他们的字节数为 L;被减数 够减,即最高字节相减时不至借位;减得的差放回原放被减数的单元。 MOV R0, #ADDR1 MOV R1,#ADDR2 MOV A, #L-1 ADD A, R0 MOV R0, A MOV A, #L-1 ADD A, R1 MOV R1,A MOV R2,#L CLR C LOOP: MOV A,@R0
SUBB A, ORI MOV @RO, A DEC RO DEC RI DJNZ R2 LOOP END 五回答问题 若SP=60H,标号 LABEL所在的地址为3456H。 LCALL指令的地址为2000H,执行指 令如下: 2000H LCALL LABEL 后,堆栈指针SP和堆栈内容发生了什么变化?PC的值等于什么?如果将指令 LCALL 直接换成 ACALL是否可以?如果换成 ACALL指令,可调用的地址范围是什么? 答:1)SP=SP+1=61H(61H=PC的低字节=03H SP=SP+1=62H(62H=PC的高字节=20H 2)PC=3456H 3)可以 4)2KB=2048 Byte 简答题 1.为什么MCS-51串行口的方式0帧格式没有起始位(0)和停止位(1) 解答:串行口的方式θ为同步移位寄存器输入输出方式,常用于外接移位寄存器,以扩展并 行O口,一般不用于两个MCS-51之间的串行通信。该方式以fosc/12的固定波特率从低 为位到高位发送或接受数据。 2某8031串行口,传送数据的帧格式为1个起始位(0),7个数据位,1个偶校验位和1个 停止位(1)组成。当该串行口每分钟传送1800个字符时,试计算出波特率 解答:串口每秒钟传送的字符为:180060=30个字符/秒 所以波特率为:30个字符/秒×10位/个字符=300b/s 3.若晶体振荡器为11059MHz,串行口工作于方式1,波特率为4800b/s,写出用T1作为 波特率发生器的方式控制字和计数初值 解答:初值计算:查阅P148表7-2可得,FAH 控制字: ANL TMOD,#OFOH ORL TMOD#20H MOV THL#OFAH MOV TLL#OFAH MOV SCON.#40H 4.为什么定时器/计数器T1用做串行口波特率发生器时,采用方式2?若已知时钟频率、 通讯波特率,如何计算其初值 解答:因为定时器/计数器在方式2下,初值可以自动重装,这样在做串口波特率发生器设 置时,就避免了重装参数的操作
SUBB A,@R1 MOV @R0,A DEC R0 DEC R1 DJNZ R2, LOOP END 五 回答问题 若 SP=60H,标号 LABEL 所在的地址为 3456H。LCALL 指令的地址为 2000H,执行指 令如下: 2000H LCALL LABEL 后,堆栈指针 SP 和堆栈内容发生了什么变化?PC 的值等于什么?如果将指令 LCALL 直接换成 ACALL 是否可以?如果换成 ACALL 指令,可调用的地址范围是什么? 答:1)SP=SP+1=61H (61H)=PC 的低字节=03H SP=SP+1=62H (62H)=PC 的高字节=20H 2)PC=3456H 3)可以 4)2KB=2048 Byte 简答题 1.为什么 MCS-51 串行口的方式 0 帧格式没有起始位(0)和停止位(1)? 解答:串行口的方式 0 为同步移位寄存器输入输出方式,常用于外接移位寄存器,以扩展并 行 I/O 口,一般不用于两个 MCS-51 之间的串行通信。该方式以 fosc/12 的固定波特率从低 为位到高位发送或接受数据。 2 某 8031 串行口,传送数据的帧格式为 1 个起始位(0),7 个数据位,1 个偶校验位和 1 个 停止位(1)组成。当该串行口每分钟传送 1800 个字符时,试计算出波特率。 解答:串口每秒钟传送的字符为:1800/60=30 个字符/秒 所以波特率为:30 个字符/秒×10 位/个字符=300b/s 3.若晶体振荡器为 11.0592MHz,串行口工作于方式 1,波特率为 4800b/s,写出用 T1 作为 波特率发生器的方式控制字和计数初值。 解答:初值计算:查阅 P148 表 7-2 可得,FAH 控制字:ANL TMOD,#0F0H ORL TMOD,#20H MOV TH1,#0FAH MOV TL1,#0FAH MOV SCON,#40H 4.为什么定时器/计数器 T1 用做串行口波特率发生器时,采用方式 2?若已知时钟频率、 通讯波特率,如何计算其初值? 解答:因为定时器/计数器在方式 2 下,初值可以自动重装,这样在做串口波特率发生器设 置时,就避免了重装参数的操作
已知时钟频率、通讯波特率,根据公式:波特率=2x/c 计算 3212×(256-X) 出初值 1.串行口有几种工作方式?有几种帧格式?各种工作方式的波特率如何确定? 答:串行口有4种工作方式:方式0、方式1、方式2、方式3:有3种帧格式,方式2和3 具有相同的帧格式;方式0的发送和接收都以fosc12为固定波特率, 方式1的波特率=2M00/32×定时器T1的溢出率 方式2的波特率=2M09164×fosc 方式3的波特率=25M0/32×定时器T1的溢出率 2.键盘有哪3种工作方式,它们各自的工作原理及特点是什么 解:一.编程扫描方式:当单片机空闲时,才调用键盘扫描子程序,反复的扫描 键盘,等待用户从键盘上输入命令或数据,来响应键盘的输入请求。二.定时扫 描工作方式:单片机对键盘的扫描也可用定时扫描方式,即每隔一定的时间对键 盘扫描一次。三.中断工作方式:只有在键盘有键按下时,才执行键盘扫描程序 并执行该按键功能程序,如果无键按下,单片机将不理睬键盘 3.LED的静态显示方式于动态显示方式有何区别?各有什么优缺点? 解:静态显示时,数据是分开送到每一位LED上的。而动态显示则是数据是送到 每一个LED上,再根据位选线来确定是哪一位LED被显示。静态显示亮度很高, 但口线占用较多。动态显示则好一点,适合用在显示位数较多的场合 4.为什么要消除按键的机槭抖动?消除按键的机械抖动的方法有哪几种? 原理是什么? 解:在按键的闭合和断开过程中,由于开关的机械特性,导致了按键抖动的产生。 如果不消除按键的机械抖动,按键的状态读取将有可能出现错误。消除按键抖动 般是采用软件或硬件去抖。软件去抖的原理:在第一次检测到有键按下时,该 键所对应的航线是为低电平,执行一端延时10ms的子程序后,确认该行线电平 是否仍然为低电平,如果仍为低电平,则确认为该行确实有键按下。 5.常用的IO接口编址有哪两种方式?它们各有什么特点?MCS-51的IO端口 编址采用的是哪种方式? 解:一独立编址方式:独立编址方式就是IO地址空间和存储器地址空间分开编 址。独立编址的优点是IO地址空间和存储器地址空间相互独立,界限分明。但 是,却需要设置一套专门的读写IO的指令和控制信号。二统一编址方式:这种 编址方式是把IO端口的寄存器与数据存储器单元同等对待,统一进行编址。统 编址的优点是不需要专门的IO指令,直接使用访问数据存储器的指令进行IO 操作,简单、方便且功能强大。MCS-51单片机使用的是I/O和外部数据存储器 RAM统一编址的方式
已知时钟频率、通讯波特率,根据公式: 32 12 (256 ) 2 X fOSC SMOD − 波特率= ,计算 出初值。 1. 串行口有几种工作方式?有几种帧格式?各种工作方式的波特率如何确定? 答:串行口有 4 种工作方式:方式 0、方式 1、方式 2、方式 3;有 3 种帧格式,方式 2 和 3 具有相同的帧格式;方式 0 的发送和接收都以 fosc/12 为固定波特率, 方式 1 的波特率=2SMOD/32×定时器 T1 的溢出率 方式 2 的波特率=2SMOD/64×fosc 方式 3 的波特率=2SMOD/32×定时器 T1 的溢出率 2.键盘有哪 3 种工作方式,它们各自的工作原理及特点是什么? 解:一.编程扫描方式:当单片机空闲时,才调用键盘扫描子程序,反复的扫描 键盘,等待用户从键盘上输入命令或数据,来响应键盘的输入请求。二.定时扫 描工作方式:单片机对键盘的扫描也可用定时扫描方式,即每隔一定的时间对键 盘扫描一次。三.中断工作方式:只有在键盘有键按下时,才执行键盘扫描程序 并执行该按键功能程序,如果无键按下,单片机将不理睬键盘。 3.LED 的静态显示方式于动态显示方式有何区别?各有什么优缺点? 解:静态显示时,数据是分开送到每一位 LED 上的。而动态显示则是数据是送到 每一个 LED 上,再根据位选线来确定是哪一位 LED 被显示。静态显示亮度很高, 但口线占用较多。动态显示则好一点,适合用在显示位数较多的场合。 4.为什么要消除按键的机械抖动?消除按键的机械抖动的方法有哪几种? 原理是什么? 解:在按键的闭合和断开过程中,由于开关的机械特性,导致了按键抖动的产生。 如果不消除按键的机械抖动,按键的状态读取将有可能出现错误。消除按键抖动 一般是采用软件或硬件去抖。软件去抖的原理:在第一次检测到有键按下时,该 键所对应的航线是为低电平,执行一端延时 10ms 的子程序后,确认该行线电平 是否仍然为低电平,如果仍为低电平,则确认为该行确实有键按下。 5.常用的 I/O 接口编址有哪两种方式?它们各有什么特点?MCS-51 的 I/O 端口 编址采用的是哪种方式? 解:一.独立编址方式:独立编址方式就是 I/O 地址空间和存储器地址空间分开编 址。独立编址的优点是 I/O 地址空间和存储器地址空间相互独立,界限分明。但 是,却需要设置一套专门的读写 I/O 的指令和控制信号。二.统一编址方式:这种 编址方式是把 I/O 端口的寄存器与数据存储器单元同等对待,统一进行编址。统 一编址的优点是不需要专门的I/O指令,直接使用访问数据存储器的指令进行I/O 操作,简单、方便且功能强大。MCS-51 单片机使用的是 I/O 和外部数据存储器 RAM 统一编址的方式。 6.