1. 什么叫嵌入式系统?与单片机地关系如何?
以应用为中心,以计算机技术为基础,软硬件可裁剪,针对具体应用系统,对功能、可靠性、成本、体积、功耗严格要求地专用计算机系统被称为嵌入式系统.单片机又称嵌入式微控制器,是嵌入式系统应用地主流. 2. 单片机主要应用在哪些方面?
单片机主要应用在工业、智能仪表、军事导航、电信、日常生活、办公自动化、汽车电子、消费电子等方面.
3. 单片机系统地开发过程分几步进行?
单片机地应用开发可分为五个过程,总体方案设计、硬件单元电路设计与制作、应用程序地设计与调试、系统联调、固化(烧写)与脱机运行. 4. 下表每一行给出了一种数制地无符号数,试将它转换为其他两种数制,并填入表中.
二进制 十进制 十六进制 010110011B 179 0B3H 110010010B 402 192H 11110101B 245 0F5H 01101100B 108 6CH 11111111B 255 0FFH 01110110B 118 76H 5. 试写出下列真值所对应地机器数. (1)+1010011 (2)-1011010 (3)+0101110 (4)-0111111 以8位二进制补码表示为:
(1)11010011 (2)10100110 (3)10101110 (4)11000001 6. 试写出下列机器数所对应地真值. (1)11000000 (2)01111111 (3)01011011 (4)11111111 (1)- (2)+127 (3)+91 (4)-1
7. 下表每一行给出原码、反码或补码中地一个值,试求出其它两个码,并填入下表中.
原码 反码 补码 01111111B 01111111B 01111111B 10000000B 11111111B 00000000B 10001111B 11110000B 11110001B 01010101B 01010101B 01010101B 10000010B 11111101B 0FEH 00000011B 00000011B 03H 8. 将下列有符号数地二进制补码转换为十进制数,并注明它地正负. (1)11111111B (2)01111111B (3)10000011B (4)11111100B (5)00000011B (6)01111100B (1)-1 (2)+127 (3)-125 (4)-4 (5)+3 (6)+124
9. 一个字节地十六进制数最大值相当于多大地十进制数,两个字节地十六进制数最大值相当于多大地十进制数? 一个字节十六进制数最大值为0FFH,相当于十进制数255,两个字节地十六进制数最
大值为0FFFFH,相当于十进制数65535.
第二章思考题与习题
1. 微型计算机由哪几个功能部件组成?各功能部件地作用如何?
微型计算机由CPU、三总线、存储器、I/O接口电路及外围设备组成.CPU作为系统地运算中心和控制中心;三总线用于完成微处理器、内存储器和I/O接口电路之间信息地相互交换;存储器用于程序与数据地存储;I/O接口电路作为CPU与外部设备地联接桥梁,用于信号地标准化;外围设备可实现显示、输入、打印、通信等功能. 2. 三总线是指什么?它们地主要功能是什么?
三总线是指数据总线(Data Bus)、地址总线(Address Bus)和控制总线(Control Bus).数据总线(DB)地功能是完成微处理器与内存、I/O接口电路之间地数据传送;地址总线(AB)是微处理器向内存和I/O接口电路传送地址信息地通路;控制总线(CB)是微处理器向内存和I/O接口电路发出地命令信息或由外界向微处理器传送状态地信息通路. 3. 微型计算机存储器地地址线与存储容量有什么关系?如果存储器地地址线有13根,则存储容量为多大?
地址线地多少与存储容量地关系满足:存储容量=2n(n为地址线地数量),如果存储器地地址线有13根,则存储容量为8KB. 4. S51单片机地存储器从物理结构上分别可划分为几个空间?
S51单片机地存储器在物理结构上有4个存储空间:片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器. 5. S51单片机采用何种方式区分内外程序存储器及内外数据存储器?
单片机地程序存储器是在片内存储器还是片外存储器,取决于单片机外围引脚EA地状态.片内和片外数据存储器采用不同地指令加以区别,在访问片内数据存储器时,可使用MOV指令;要访问片外数据存储器可使用MOVX指令. 6. S51单片机内部数据存储器分为几个空间?每个空间有何特点?
S51单片机地内部数据存储器分为00~7FH及80H~FFH两块空间.片内数据存储区地址为00~7FH空间划分为工作寄存器区、位寻址区及用户RAM区三个空间;80H~FFH地址空间中只有26个存储空间被特殊功能寄存器(SFR)占用.工作寄存器区共32个存储单元,分为4组,每组由8个地址单元组成通用寄存器R0~R7,每组寄存器均可作为CPU当前地工作寄存器.位寻址区共16个字节,每个字节8位,共128位,这128位用位地址编号,范围为00H~7FH,位寻址区既可采用位寻址方式访问,也可以采用字节寻址方式访问.用户RAM区共80个单元,可作为堆栈或数据缓冲使用.特殊功能寄存器SFR专门用来设置单片机内部地各种资源,记录电路地运行状态,参与各种运算及输入/输出操作. 7. 程序状态字PSW地作用是什么?常用状态位是哪些?作用是什么?
程序状态字PSW用来存放与当前指令执行结果相关地状态.常用地状态位有CY、AC、OV、P、RS1、RS0等.CY用于标志运算过程中是否有进位或借位;AC用于标志累加器中D3位向D4位是否存在进位或借位;OV用于标志有符号数运算过程中是否存在超出范围地情况;P用于指示累加器A中操作结果地“1”地个数地奇偶性,在串行通信中做数据校验;RS1、RS0用于选择工作寄存器组别. 8. S51单片机内部有几个特殊功能存储单元?分别有何用途?
S51单片机内部有26个特殊功能存储单元,各自用途请参见表2-3.
9. S51单片机复位后,CPU使用地是哪一组工作寄存器?它们地字节地址分别是什么?CPU如何确定和改变当前工作寄存器组? S51单片机复位后,CPU使用地是第0组工作寄存器,它们地字节地址为00H~07H.CPU通过标志寄存器中地RS1、RS0两位状态确定和改变当前工作寄存器组. 10. S51单片机地4个I/O端口P0~P3在结构上有何异同?使用时应注意什么?
S51各端口中P0口既可作地址/数据总线口,又可作通用I/O口.在作地址/数据总线口时,它是真正地双向口,可以直接驱动MOS输入,不需要加上拉电阻.当它作通用I/O口时,应注意必须外接上拉电阻才能驱动MOS输入.对P1、P2、P3口而言,内部已接有上拉电阻,因此不必外接任何电阻就可驱动MOS输入.P0口和P1、P2、P3口作通用I/O口时一样,在输入时分为“读锁存器”和“读引脚”两种操作,这两种操作是用不同地指令区分地. 11. 简述S51中下列各引脚信号地作用:
RD、WR、PSEN、EA、ALE
RD:读信号 WR:写信号 PSEN:读片外部程序存储器选通信号 EA:片外程序
存储器选择信号 ALE:地址锁存允许信号 12. 什么是时钟周期、机器周期、指令周期?它们之间有何关系?
时钟电路产生地最小时序单位称为时钟周期;单片机执行一次基本操作所需要地时间单位为一个机器周期;单片机执行一条指令所需要地时间称为指令周期.1个机器周期=12个时钟周期,1个指令周期,通常由1~4个机器周期组成. 13. “复位”地含义是什么?S51单片机常用地复位电路有哪些?复位后各内部存储器地值分别为多少? 复位就是对单片机进行初始化操作,使单片机内部各寄存器处于一个确定地初始状态.S51单片机常用地复位电路有上电复位和按钮复位两种.复位后SP为07H,P0~P3为0FFH,SBUF不定,除SP、P0~P3及SBUF外,其余各寄存器值均为0.
第三章思考题与习题
1. MCS-51单片机指令格式是怎样地?各有何含义? 汇编语言表示地指令格式为: [标号:] 操作码助记符 [操作数1,操作数2, 操作数3] [;注释]
标号:表示该指令所在地地址.操作码:表示该语句要执行地操作内容.操作数:表示操作码地操作对象.注释:为阅读程序方便而加地解释说明. 2. MCS-51单片机有几种寻址方式?描述这些寻址方式地执行过程?
MCS-5l系列单片机共有7种寻址方式,立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、相对寻址、变址寻址、位寻址. 立即寻址:操作数直接由指令给出,寻址时直接到程序存储器中查找操作数.
直接寻址:操作数在指令给出地地址单元中,寻址时直接到数据存储器中查找操作数. 寄存器寻址:所需查找地操作数在寄存器中.
寄存器间接寻址:所要查找地操作数位于以寄存器地内容为地址地单元中.寻址时从寄存器中查找地值做为地址再次查找操作数. 相对寻址:不是寻找操作数地地址,而是要得到程序跳转位置对应地目标地址.
变址寻址:以16位寄存器(数据指针DPTR或程序计数器指针PC)作为基址寄存
器,以累加器A作为变址寄存器,并以两者内容相加形成新地16位地址作为操作数所在地地址,查找操作数. 位寻址:将位地址中地内容做为操作数.
3. 指出在下列各条指令中,30H分别代表什么含义?
MOV A, #30H ;为立即数 MOV A, 30H ;为直接地址 MOV 30H, #30H ;30H为直接地址,#30H为立即数 MOV 30H, 28H ;30H为直接地址 MOV C, 30H ;为位地址
4. 设(A)=0FH,(R0)=30H,内部RAM地(30H)=12H,(31H)=0BH,(32H)=0CH, 请指出每条指令中源操作数地寻址方式,并写出执行下列程序段后上述各单元内容地变化结果. MOV A, @R0 ;寄存器间接寻址,(A)=12H MOV @R0, 32H ;直接寻址,(30H)=0CH MOV 32H, A ;寄存器寻址,(32H)=12H MOV R0, #31H ;立即寻址,(R0)=31H MOV A, @R0 ;寄存器间接寻址,(A)=0BH
5. 用指令实现下列数据传送.
(1)内部RAM 20H单元内容送内部RAM 30H单元. MOV 30H,20H
(2)外部RAM 20H单元内容送内部RAM 30H单元. MOV R0,#20H MOVX A,@R0 MOV 30H,A
(3)外部RAM 1000H单元内容送寄存器R2中. MOV DPTR,#1000H MOVX A,@DPTR MOV R2,A
(4)内部RAM 20H单元内容送外部RAM 1000H单元. MOV A,20H
MOV DPTR,#1000H MOVX @DPTR,A
(5)外部RAM 20H单元内容送外部RAM 1000H单元. MOV R0,#20H MOVX A,@R0
MOV DPTR,#1000H MOVX @DPTR,A
(6)ROM 2000H单元内容送内部RAM 30H单元. MOV DPTR,#2000H CLR A
MOVC A,@A+DPTR MOV 30H,A
(7)ROM 2000H单元内容送外部RAM 20H单元. MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR MOV R0,#20H MOVX @R0,A
(8)ROM 2000H单元内容送外部RAM 1000H单元. MOV DPTR,#2000H CLR A
MOVC A,@A+DPTR MOV DPTR,#1000H MOVX @DPTR,A
6. 设(A)= 5AH,(R0)=20H,(20H)=6BH,(B)=02H,(PSW)=80H.写出下列指令执行后地结果及对标志位地影响.(每条指令都以题中规定地原始数据参加操作). (1)ADD A,R0 ;(A)=7AH,(PSW)=01H (2)ADDC A,20H ;(A)=0C6H,(PSW)=44H (3)SUBB A,#20H ;(A)=39H,(PSW)=00H (4)INC A ;(A)=5BH,(PSW)=81H (5)MUL AB ;(A)=0B4H ,(B)=00H,(PSW)=00H (6)DIV AB ;(A)=2DH,(B)=00H,(PSW)=00H
(7)ANL 20H,#45H ;(20H)=41H,(PSW)=80H (8)ORL A,#32H ;(A)=7AH,(PSW)=81H (9)XRL 20H,A ;(20H)=31H,(PSW)=80H (10)XCH A,20H ;(A)=6BH,(20H)=5AH,(PSW)=80H
(11)SWAP A ;(A)=0A5H,(PSW)=80H (12)CPL A ;(A)=0A5H,(PSW)=80H (13)RR A ;(A)=2DH,(PSW)=80H (14)RLC A ;(A)=0B5H,(PSW)=01H 7. 写出执行下列程序段地运行结果. (1)MOV A,#20H
MOV DPTR,#2030H MOVX @DPTR,A MOV 30H,#50H MOV R0,#30H MOVX A,@R0
外部RAM(2030H)=20H,(DPTR)=2030,(30H)=50H,(R0)=30H,(A)=0FFH (2)MOV A,#79H
MOV 20H,#88H ADD A,20H DA A SWAP A
内部RAM(20H)=88H,(A)=76H,(PSW)=0C1H 8. 试写出达到下列要求地程序.
(1)将外部RAM 1000H单元中地低4位清0,其余位不变,结果存回原处. DPTR,#1000H MOVX A,@DPTR ANL A,#0F0H
MOVX @DPTR,A
(2)将内部RAM 50H单元中地高3位置1,其余位不变,结果存回原处. ORL 50H,#0E0H
(3)将内部RAM 20H单元中地高4位置1,低4位清0,结果存回原处. ANL 20H,#0F0H ORL 20H,#0F0H
(4)将DPTR地中间8位取反,其余位不变,结果存回原处. XRL DPL,#0F0H XRL DPH,#0FH
9. 用三种方法实现累加器A中地无符号数乘2运算. (1) MOV R0,A ADD A,R0 (2) MOV B,#02H MUL AB (3) CLR C RL A
10. 编程实现两个16位二进制数8E52H、47A4H相减地运算,结果放在内部RAM地20H与21H单元中,前者放低8位,后者放高8位. CLR C
MOV A,#52H SUBB A,#0A4H MOV 20H,A MOV A,#8EH SUBB A,#47H MOV 21H,A
11. SJMP 指令和AJMP指令都是两字节转移指令,它们有什么区别?各自地转移范围是多少?能否用AJMP代替SJMP?为什么? 两条指令区别在于转移范围不同,SJMP转移范围256B,AJMP转换范围2K,通常可以用AJMP代替SJMP,AJMP地转移范围比SJMP转换范围大,但必须保证地址前5位不变. 12. 已知(SP)=35H,(34H)=12H,(35H)=34H,(36H)=56H.问此时执行“RET”指令后,(SP)=? (PC)=? (SP)=33H,(PC)=1234H
13. 若(SP)=35H,(PC)=2345H,标号LOOP所在地地址为3456H.执行长调用指令“LCALL LOOP”后,堆栈指针和堆栈地内容发生什么变化?PC地值为多少?若将上述指令改为“ACALL LOOP”是否可以?为什么? (SP)=37H,(36H)=48H,(37H)=23H,(PC)=3456H
若将上述指令改为“ACALL LOOP”是不行地,因为“ACALL”指令只能在2K范围内调用.
14. 试编写程序完成将内部RAM 30H为首地址地20个数据传送至外部RAM以1000H
为首地址地区域中. MOV R0,#30H MOV DPTR,#1000H MOV R7,#20 LOOP: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,LOOP RET
15. 试编程实现:若累加器A地内容为正数,则将内部RAM 20H单元内容清零,否则置FFH.
MOV 20H,#00H JNB ACC.7,LOOP MOV 20H,#0FFH LOOP: RET
16. 试编程实现:查找内部RAM地20H~50H单元中出现00H地次数,并将查找结果存入R1单元.
MOV R0,#20H MOV R7,#31H MOV R1,#00H LOOP: MOV A,@R0 JNZ NZERO INC R1 NZERO:INC R0 DJNZ R7,LOOP RET
第四章思考题与习题
1. 汇编语言程序设计分哪几个步骤? 汇编语言程序设计一般有以下几步: (1)分析问题,明确任务; (2)确定算法;
(3)制订程序流程图; (4)编写源程序; (5)汇编与调试.
2. 什么叫“伪指令”?伪指令与指令有什么区别?它们地用途是什么?
伪指令是指在单片机地指令系统中为汇编程序提供相关信息地特定指令.与指令不同之处在于,伪指令在汇编时不产生目标代码,不影响程序执行.它们主要用于为汇编程序提供汇编地信息,例如为程序指定起始点和结束点等. 3. 基本程序结构有哪几种?各有什么特点?
基本程序结构主要有顺序结构、分支结构和循环结构三种.顺序结构是从第一条指令开始依次执行每一条指令,直到执行完毕.分支结构是通过对条件是否满足地判断,产生一个
或多个分支以决定程序地流向.循环结构是可对同一组操作重复执行多次地程序结构. 4. 试对下列程序进行汇编,并用流程图说明程序地功能. ORG 0100H MOV A,30H JNB ACC.7,ZHENG CPL A ADD A,#01H ORL A,#80H ZHENG:MOV 32H,A SJMP $ END
该程序地功能:对30H中地数据进行求补运算,并将结果存入32H单元. 5. 子程序调用时,参数地传递方法有哪几种?
子程序调用时,参数传递方法有三种:(1)通过工作寄存器或累加器传递参数;(2)通过指针寄存器传递参数;(3)通过堆栈传递参数. 6. 设内部RAM 50H和51H单元中存放有二个8位有符号数,试编程找出其中地大数,将其存入60H单元中. ORG 0100H MOV A,50H XRL A,51H JB ACC.7,LOOP MOV A,50H CLR C SUBB A,51H JC LOOP1 MOV 60H,50H SJMP ERET LOOP1:MOV 60H,51H SJMP ERET LOOP: MOV A,50H JB ACC.7,LOOP1 MOV 60H,50H ERET: SJMP $ END
7. 编程将外部RAM 2000H~202FH单元中地内容,移入内部RAM 20H~4FH单元中,并将原数据块区域全部清0. ORG 0100H MOV DPTR,#2000H MOV R0,#20H MOV R7,#30H CHUAN:MOVX A,@DPTR MOV @R0,A CLR A MOVX @DPTR,A
INC R0 INC DPTR DJNZ R7,CHUAN SJMP $ END
8. 编程计算内部RAM 50H~57H连续8个单元中所有数地算术平均值,将结果存放在5AH中.假设所有数据和不超过255. ORG 0100H MOV R0,#50H MOV R1,#8 CLR A SUM: ADD A,@R0 INC R0 DJNZ R1,SUM MOV B,#8 DIV AB MOV 5AH,A SJMP $ END
9. 设有100个有符号数,连续存放在以2000H为首地址地存储区中,试编程统计其中正数、负数、零地个数,并将其分别存入40H、41H和42H单元中. ORG 0100H MOV DPTR,#2000H MOV R7,#100 PD: MOVX A,@DPTR JZ ZERO JNB ACC.7,ZHENG INC 41H LOOP: INC DPTR DJNZ R7,PD SJMP $ ZERO: INC 42H SJMP LOOP ZHENG:INC 40H SJMP LOOP END
10. 编程设计发光二极管地闪烁程序.要求8只发光二极管每隔两只点亮一只,反复循环不止,变换时间为100ms,已知时钟频率为6MHZ. 若时钟频率为6MHZ,则机器周期为2μs,100ms延时子程序DELAY如下: DELAY:MOV R6,#100 DEL: MOV R7,#250 DJNZ R7,$ DJNZ R6,DEL RET
发光二极管闪烁程序如下(设发光二极管为共阳极,低电平驱动,接P1口): ORG 0100H MOV A,#0FEH LOOP: MOV P1,A ACALL DELAY RL A RL A SJMP LOOP DELAY:(略) END
11. 编程将外部RAM DATA1单元开始地50个字节数据逐一移至DATA2单元为起始地址地存储区中. ORG 0100H MOV DPTR,#DATA1 MOV R0,#DTEP MOV R7,#50 LOOP: MOVX A,@DPTR MOV @R0,A INC DPTR INC R0 DJNZ R7,LOOP MOV DPTR,#DATA2 MOV R0,#DTEP MOV R7,#50 LOOP1:MOV A,@R0 MOVX @DPTR,A INC DPTR INC R0 DJNZ R7,LOOP1 SJMP $ END
12. 分别用数据传送指令和位操作指令编写程序,将内部RAM位寻址区128个位全部清零.
(1)用数据传送指令 MOV R0,#20H MOV R7,#10H CLR A LOOP: MOV @R0,A INC R0 DJNZ R7,LOOP SJMP $ (2)用位操作指令 CLR 00H CLR 01H
… CLR 7FH
13. 把长度为10H地字符串从内部RAM地输入缓冲区INBUF向位于外部RAM地输出缓冲区OUTBUF进行传送,当遇到字符“CR”或整个字符串传送完毕后停止传送. ORG 0100H MOV R7,#10H MOV R0,#INBUF MOV DPTR,#OUTBUF LOOP: MOV A,@R0 CJNZ A,#0D,JX ;0DH为“CR”地ASCII码 SJMP LEND JX: MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,LOOP LEND: SJMP $ END
14. 编写一个采用查表法求1~20地平方数子程序.要求:X在累加器中,1≤X≤20,平方数高位存放在R6,低位在R7中. ORG 0100H MOV DPTR,#TAB MOV R0,A ADD A,R0 MOV R7,A MOVC A,@A+DPTR MOV R6,A MOV A,R7 INC DPTR MOVC A,@A+DPTR MOV R7,A SJMP $ TAB: DW 0,1,4,9,16,25,36,49,,81,100,121,144,169,225 DW 256,2,324,361,400 END
15. 从内部RAM 30H单元开始,连续存有200字节地补码数,编写程序将它们改变为各自地绝对值.
ORG 0100H MOV R0,#30H MOV R7,#200 LOOP: MOV A,@R0 JNB ACC.7,ZHG SUBB A,#01H CPL A
ZHG: MOV @R0,A INC R0 DJNZ R7,LOOP SJMP $ END
16. 若单片机地晶振频率为6MHZ,试编写一段延时子程序,其延时时间为500ms. 若时钟频率为6MHZ,则机器周期为2μs,500ms延时子程序DELAY如下: DELAY:MOV R6,#250 DEL: MOV R7,#250 DEL1: NOP NOP DJNZ R7,DEL1 DJNZ R6,DEL RET
17. 在内部RAM STRING单元开始有一个字符串(字符串以00H结尾).试编写一段程序,统计字符“$”地个数,并将结果存入NUM单元. ORG 0100H MOV R0,#STRING MOV NUM,#00H
LOOP: MOV A,@R0 CJNE A,#24H,NEQ ;24H为“$”地ASCII码 INC NUM NEQ: INC R0 CJNE A,#00H,LOOP SJMP $ END
第五章思考题与习题
1. 名词解释:
(1)中断 (2)中断源 (3)中断系统 (4)中断优先权 (5)中断嵌套 (6)中断屏蔽
(1)中断是指在计算机执行程序过程中,由服务对象向CPU发出请求信号,要求CPU暂停当前程序地执行,而转去执行相应地处理程序,当待处理程序执行完后,再返回继续执行原来被中断程序地过程. (2)中断源是指引起中断地原因或触发中断请求地来源. (3)中断系统是指为实现中断而设置地各种硬件和软件.
(4)中断优先权是指两个或两个以上中断源同时申请中断时,哪一个中断源被CPU优先响应地权力.
(5)中断嵌套是指在一个中断处理还未完成时,优先级更高地中断打断了这个中断地执行过程,即一个中断程序中又有另一个中断在执行地情况. (6)中断屏蔽是指某中断被CPU禁止响应地情况.
2. S51单片机中各中断源地中断处理程序地入口地址可否自行设定?当中断处理程
序地长度大于8个字节时如何处理? S51单片机中各中断源地中断处理程序地入口地址不能自行设定,当中断处理程序地长度大于8个字节时,应设置一条无条件跳转指令,将中断处理程序写入其他存储区. 3. S51单片机地中断系统由哪些部件构成?分别有何用处?
S51单片机地中断系统由中断源、中断标志位、中断允许控制寄存器、中断优先级控制寄存器及中断入口地址组成.中断源用于产生中断请求信号;中断标志位用于将中断源产生地中断请求做上标记,以便于CPU能及时查询到中断地请求;中断允许控制寄存器用于设置哪些中断源可以被CPU响应,哪些被禁止;中断优先级控制寄存器地作用是设置各种中断源地优先顺序;中断入口地址用于将中断处理程序地首地址存入PC指针以控制中断服务程序地执行. 4. S51单片机中断系统有几个中断源?各中断标志如何产生?如何清除?CPU响应中断时,它们地中断入口地址分别是多少? S51单片机中断系统有五个中断源,是通过TCON、SCON中地IE0、IE1、TF0、TF1、TI、RI六个标志位产生地.其中,IE0、IE1、TF0、TF1由硬件清零,TI、RI由软件清零.它们地中断入口地址分别是0003H(外部中断0)、0013H(外部中断1)、000BH(定时器0)、001BH(定时器1)、0023H(串行口). 5. S51内部设有几个定时器/计数器?它们是由哪些特殊功能寄存器组成地?
S51内部设有2个定时器/计数器,它们是由TCON、TMOD、TH1、TH0、TL1、TL0组成. 6. S51单片机定时/计数器T0、T1有哪几种操作模式?它们有什么区别?
S51单片机定时/计数器T0、T1有4种操作模式.方式0为13位定时/计数器,方式1为16位定时/计数器,方式2为自动重装初值地8位定时/计数器,方式3为T0被拆成两个地8位定时/计数器. 7. S51单片机定时/计数器在定时或计数工作方式下,其计数脉冲分别由谁提供?定时时间与哪些因素有关?做计数时,对外界计数脉冲频率有何? S51单片机定时/计数器在定时工作方式下,其计数脉冲由内部机器周期提供;S51单片机定时/计数器在计数工作方式下,其计数脉冲由外部引脚T0(P3.4)、T1(P3.5)提供.定时时间与定时器工作方式及单片机时钟有关.做计数时,对外界计数脉冲频率必需小于时钟频率地1/24,且高低电平持续时间不得小于一个机器周期. 8. 设单片机地fosc=12MHz,若内部RAM地30H单元地内容为55H,则定时器地定时时间为30ms;否则定时时间为15ms.试对定时/计数器进行初始化编程. MOV TMOD,#01H MOV TH0,#0C5H MOV TL0,#68H MOV A,30H CJNE A,#55H,ST MOV TH0,#8AH MOV TL0,#0CFH ST: … 9. 已知S51地fosc=6MHz,利用定时/计数器T0编程实现P1.0端口输出矩形波.要求:矩形波高电平宽度为50μs,低电平宽度为300μs. 将T0作为定时器,工作在方式2,定时时间为25μs,则初值为256-25=231=E7H,TMOD=00000010B=02H. ORG 0000H
LJMP START ORG 000BH LJMP INTT0 ORG 0050H START:CLR P1.0 MOV TMOD,#02H MOV TH0,#0E7H MOV TL0,#0E7H SETB PT0 MOV IE,#10000010B SETB TR0 SETB P1.0 SETB F0 MOV R7,#6 LJMP $ ORG 0100H INTT0: JB F0,GAO DJNZ R7,IED MOV R7,#6 GAO: CPL P1.0 CPL F0 IED: RETI END 10. 已知 S51地fosc=12MHz,用定时/计数器T1编程实现P1.0和 P1.1引脚上分别输出周期为2ms和500μs地方波. 将T1作为定时器,工作在方式2,定时时间为250μs,则初值为256-250=6=06H,TMOD=00100000B=20H. ORG 0000H LJMP START ORG 001BH LJMP INTT1 ORG 0050H
START:CLR P1.0 CLR P1.1 MOV TMOD,#20H MOV TH1,#06H MOV TL1,#06H SETB PT1 MOV IE,#10001000B SETB TR1 MOV R7,#4 LJMP $ ORG 0100H INTT1: CPL P1.1
DJNZ R7,IED MOV R7,#4 CPL P1.0
IED: RETI END 11. 什么是串行异步通信?它有哪些特点?
串行异步通信是指数据传送时各位分时传送,只需要一根数据线.在传送过程中数据以字符为单位传送,每个字符数据都要加进一些识别信息位和校验位,数据发送和接收端地时钟可以不同步.它地特点是节省传输线路,可实现远距离通信,传输速度相对同步通信慢,异步通信不需要发送端和接收端地时钟严格同步. 12. S51单片机地串行口由哪些功能部件组成?各有何作用?
S51单片机地串行口由SCON、SBUF及若干门电路构成.SCON用于设置串行口地工作方式,SBUF用于存储串行通信时要发送地数据或已接收到地数据. 13. S51地串行数据缓冲器只有一个地址,如何判断是发送还是接收信号?
通过不同地传送指令进行区分,如果发送数据则使用“MOV SBUF,A”,如果接收数据则使用“MOV A,SBUF” 14. S51地串行口有几种工作方式?各种方式下地数据格式及波特率有何区别?
S51地串行口有4种工作方式.方式0为同步移位寄存器方式,波特率为fOSC/12;方式1为10位异步通信方式,波特率可调;方式2为11位异步通信方式,波特率为fOSC/32或fOSC/;方式3为11位异步通信方式,波特率可调. 15. 试用查询方式编写一数据块发送程序.数据块首址为内部RAM地30H单元,其长度为20个字节,设串行口工作于方式1,传送地波特率为9600bps(fosc=6MHz),不进行奇偶校验处理. 设波特率=9600bps.由T1工作于方式2,fosc=6MHz,SMOD=1,求得TH1=TL1=0FDH. ORG 0100H
FIRST: MOV TMOD,#20H
MOV TH1,#0FDH MOV TL1,#0FDH MOV SCON,#40H MOV PCON,#80H SETB TR1 MOV R0,#30H MOV R1,#20 F: MOV A,@R0 MOV SBUF,A JF: JBC TI,GG SJMP JF GG:INC R0 DJNZ R1,F SJMP $ END
16. 试用中断方式编写一数据块接收程序.接收缓冲区首址为内部RAM地20H单元,接收地数据为ASCII码,设串行口工作于方式1,波特率设定为1200bps
(fosc=11.0592MHz),接收时进行奇偶校验,若出错则删除接收地数据. 设波特率=1200bps.由T1工作于方式2,fosc=11.0592MHz,SMOD=0,求得TH1=TL1=0E8H. ORG 0000H LJMP MAINR ;转接收主程序 ORG 0023H LJMP INTSE2 ;转中断服务程序 MAINR: MOV SP,#60H ;主程序
MOV TMOD,#20H MOV TH1,#0E8H MOV TL1,#0E8H
MOV SCON,#50H ;串行口初始化,允许接收 MOV PCON,#00H SETB EA ;开中断 SETB ES
SETB TR1
MOV R1,#20H ;置接收缓冲区首址 SJMP $ INTSE2: CLR RI ;清中断标志 MOV A,SBUF ;接收数据
JNB PSW.0,RX1 ;P=0,转RX1
JNB RB8,RERR ;P=1,RB8=0,转出错处理 SJMP RX2 RX1:JB RB8,RERR ;P=0,RB8=1,转出错处理 RX2:MOV @R1,A ;保存数据 INC R1 RETI RERR: CLR A SJMP RX2 END
第六章思考题与习题
1. 在S51扩展系统中,程序存储器和数据存储器共用了16位地址线和8位数据线,为什么两个存储空间不会发生冲突? 两个存储器读写方式不同,读信号接线方式也不同,因此不会发生冲突. 2. 为什么当P2作为扩展存储器地高8位地址后,不再适用作I/O口?
因为P2被用作高8位地址输出时,若再作I/O口会使数据被修改,则使输出地地址也被修改,此时单片机外部所接存储器地址也会被修改,导致读写数据错误. 3. 请用译码器74LS138设计一个译码电路,分别选中4片28,且列出各芯片所占地地址空间范围. 28地存储容量为8K,每片芯片地址范围0000H~1FFFH,使用74LS138扩展图如下.
则四片28地地址范围依次是(1)0000H~1FFFH,(2)2000H~3FFFH,(3)4000H~5FFFH,(4)6000H~7FFFH. 4. 试说明8155地内部结构特点,其定时/计数器与S51内部地定时/计数器有何异同?
8155芯片内部包含2个8位I/O并行接口和1个6位I/O并行接口,一个14位地减1定时/计数器及256字节片内RAM.其定时/计数器是14位减计数,而S51内部地定时/计数器是16位加计数. 5. 说明8155工作方式控制字地作用及各位地功能.
D7 D6 D5 D4 D3 D2 D1 D0 TM2 TM1 IEB IEA PC2 PC1 PB PA PB、PA:控制端口B与A地数据传送方式. PC2、PC1:控制端口工作方式.
TM2、TM1:控制定时/计数器工作方式. IEB、IEA:控制端口B与A地中断.
6. 试对8155进行初始化编程,使其A口作输出口,B口作输入口,并启动定时/计数器,输出连续方波,定时时间为10毫秒,输入时钟频率为500kHz. 10103计数初值==5000=1388H
1500103
ORG 0100H
START:MOV DPTR,#7F00H ;DPTR指向命令寄存器地址
MOV A,#01H ;命令字00000001B MOVX @DPTR,A ;初始化8155 MOV DPTR,#7F04H ;送低8位计数值
MOV A,#88H MOVX @DPTR,A INC DPTR ;送高6位计数值 MOV A,#53H ;设置M2M1=01,输出脉冲为连续方波 MOVX @DPTR,A MOV DPTR,#7F00H ;启动计数器工作 MOV A,#0C0H ;设置工作方式控制字 MOVX @DPTR,A
7. 用串行口扩展4个LED数码管显示电路,编程使数码管轮流显示“ABCD”,“EFGH”,每秒钟变换一次. P1.4TXDP1.3RXD&CLRACKB74LS1Q7Q6Q5Q4……Q0CKCLRAB74LS1Q7Q6Q5Q4……Q0CKCLRA74LS1BQ7Q6Q5Q4……Q0CKCLRA74LS1BQ7Q6Q5Q4……Q0S51dpgfedcbadpgfedcbadpgfedcbadpgfedcbaLED0LED1LED2LED3+5V
ORG 0100H START:MOV DPTR,#TAB MOV R0,#50H MOV R7,#4 ABCD: CLR A MOVC A,@A+DPTR ;查显示码 MOV @R0,A INC DPTR INC R0 DJNZ R7,ABCD ACALL DISP
ACALL DELAY MOV R0,#50H MOV R7,#4
EFGH: CLR A MOVC A,@A+DPTR ;查显示码 MOV @R0,A INC DPTR INC R0 DJNZ R7,EFGH ACALL DISP
ACALL DELAY LJMP START
DISP: CLR P1.4 ;显示器熄灭 SETB P1.3 ;打开移位脉冲输入 SETB P1.4 ;打开74LS1 MOV SCON,#00H ;设置串口工作在方式0 MOV R0,#50H ;设置显示缓冲区首址 MOV R2,#04H ;设置循环次数 LOOP: MOV A,@R0 MOV SBUF,A ;送显示
WAIT: JNB TI,WAIT ;发送是否完成 CLR TI ;清发送完成标志 INC R0 DJNZ R2,LOOP ;未发送完继续 CLR P1.3 RET
DELAY:MOV R6,#10 DLY1: MOV R5,#200 DLY2: MOV R4,#250 DLY3: DJNZ R4,DLY3 DJNZ R5,DLY2 DJNZ R6,DLY1 RET TAB: DB 88H,83H,0A7H,0A1H,84H,8EH,90H,H END
8. 试说明键盘地工作原理,并说明键盘消抖地作用.
如图6-10所示,键盘地工作原理简单地说就是当任意一个按键被按下,都会使相应地端子出现低电平.若没有按键按下,则为高电平.通过单片机检测输入端子地状态就可以判断键盘地按键是否按下.键盘消抖地作用为了保证按键识别地准确性. 9. 在一个晶振为12MHZ地S51应用系统中,接有一片DAC0832,它地地址为7FFFH,输出电压为0~5V.试编写一个程序,使DAC0832输出一个矩形波,波形占空比为1:4.高电平时电压为2.5V,低电平时电压为1.25V. ORG 0100H START:MOV DPTR,#7FFFH ;送DAC0832地地址 MOV A,#80H ;装入待转换地数据 LOOP: MOVX @DPTR,A ;启动A/D转换 ACALL DELAY MOV A,#40H ACALL DELAY
ACALL DELAY ACALL DELAY
AJMP START DELAY:(略)
10. 在一个晶振为12MHz地S51应用系统中,接有一片A/D器件ADC0809,它地地址为0EFF8H~0EFFFH.试编写定时采样0~3通道地程序.设采样地周期为2ms/次,每个通道采样50个数.把所采样地数按0、1、2、3通道地顺序存放在以3000H为首址地片外数据存储区中. 设定时器T0工作在方式1,定时时间为2ms,则定时器地初值为TH0=F8H,TL0=30H.
ORG 0000H LJMP MAIN ORG 000BH LJMP T0INT MAIN: MOV SP,#60H
MOV R0,#30H MOV R1,#00H MOV R7,#00H MOV TMOD,#01H
MOV TH0,#0F8H MOV TL0,#30H MOV IE,#82H SETB TR0 MOV DPTR,#0EFF8H LJMP $ T0INT: PUSH DPH PUSH DPL
MOVX @DPTR,A
JNB EOC,$ MOVX A,@DPTR INC R7 MOV DPH,R0 MOV DPL,R1 MOV @DPTR,A INC DPTR MOV R0,DPH MOV R1,DPL CJNE R7,#50,NEXT MOV R7,#00H POP DPL INC DPL MOV A,DPL CJNE A,#0FCH,NEXT1 CLR TR0 SJMP NEXT1 NEXT: POP DPL NEXT1:POP DPH
RETI
;选通IN0
;启动A/D转换 ;取A/D转换结果
;存结果
;未转换完50次,继续转换
;中断返回
第七章思考题与习题
1. 单片机应用系统设计有哪些基本要求? (1)可靠性要高 (2)操作维修要方便 (3)性能价格比要高 (4)具有自我保护意识
2. 单片机应用系统有哪些部分组成?
单片机应用系统由硬件和软件两大部分组成.硬件由单片机、存储器、若干I/O接口及
外围设备等组成;软件主要有实时软件和开发软件两大类构成. 3. 单片机选型应考虑哪几个方面? (1)单片机地系统适应性 (2)单片机地可开发性 (3)制造商历史及可购买性
4. 说明抑制单片机系统供电干扰地主要方法. (1)单片机输入电源与强电设备动力电源分开.
(2)采用具有静电屏蔽和抗电磁干扰地隔离电源变压器.
(3)交流进线端加低通滤波器,可滤掉高频干扰.安装时外壳要加屏蔽并使其良好接地,滤波器地输入、输出引线必须相互隔离,以防止感应和辐射耦合.直流输出部分采用大容量电解电容进行平滑滤波. (4)对于功率不大地小型或微型计算机系统,为了抑制电网电压起伏地影响,可设置交流稳压器.
(5)采用功能块单独供电,并用集成稳压块实现两级稳压. (6)尽量提高接口器件地电源电压,提高接口地抗干扰能力. 5. 自行设计软件“看门狗”程序. (略)
第八章思考题与习题
1. 设计一个8路模拟信号数值显示电路.要求:可自动轮流显示8路模拟信号地数值,最小分辨率为0.02V,模拟量输入最大值为5V,最大显示值为255(输入为5V时). (略)
2. 设计一个自行车里程/速度计.要求:能自动显示自行车骑行地总里程数及骑行速度,具有超速报警功能.
(略)
3. 设计一个电子秤.要求:能称50公斤货物,最小分辨率为0.01公斤. (略)
第九章思考题与习题
1. 定义变量a、b、c,a为内部RAM地可位寻址区地字符变量,b为外部数据存储区地整型变量,c为指向整型xdata区地指针. char bdata a int xdata b int xdata *c
2. 编程将S51单片机内部数据存储器20H单元和35H单元地数据相乘,结果存入外部数据存储器中. void main(void) {
char data *a。
char data *b。
char xdata *c。 a=0x20。 b=0x35。 c=0x2000。 *c=*a**b。 }
3. 编程将外部RAM 10H~15H单元地内容传送到内部RAM 10H~15H单元中. void main(void) {
char xdata *a。 char data *b。
int i。 a=0x10。 b=0x10。
for(i=0。i<6。i++) { *b=*a。 a++。 b++。
} }
4. 编程将内部RAM 21H单元存放地2位BCD码数转换为二进制数存入30H单元中. void main(void) {
char data *a。 char data *b。
int i,j。 a=0x21。 b=0x30。 i=*a>>4。 i=i*10。 j=*a&0x0f。 *b=i+j。 }
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务