【答】在80C51单片机系统中,专门设置了一个结构完整、功能极强的布尔(位)处理机。这是一个完整的一位微计算机,它具有自己的CPU、寄存器、I/0、存储器和指令集。80C51单片机把8位机和布尔(位)处理机的硬件资源复合在一起,这是80C51系列单片机的突出优点之一,给实际应用带来了极大的方便。 布尔处理机系统包括以下几个功能部件。
·位累加器:借用进位标志位CY。在布尔运算中,cY既是数据源之一,又是运算结果的存放处和位数据传送的中心。根据CY的状态实现程序条件转移:JC rel、JNC reI ·位寻址的RAM:内部RAM位寻址区中的0~127位(20H~2FH)。 ·位寻址的寄存器:特殊功能寄存器SFR中的可位寻址的位。 ·位寻址的I/O口:并行I/O口中可位寻址的位(如P1.0)。
·位操作指令系统:位操作指令可实现对位的置位、清零、取反、位状态判跳、传送、位逻辑运算、位输入/输出等操作。
布尔处理机的程序存储器和ALU与字节处理器合用。利用内部并行I/O口的位操作,提高了测控速度,增强了实时性。利用位逻辑操作功能把逻辑表达式直接变换成软件进行设计和运算,免去了过多的数据往返传送、字节屏蔽和测试分支,大大简化了编程,增强了实时性能。还可实现复杂的组合逻辑处理功能。因此,一位机在开关决策、逻辑电路仿真和实时控制方面非常有效。
可以位寻址的单元包括两部分:一是内部RAM位寻址区中的0~127位(20H~2FH); 二是SFR中字节地址的低位地址为0H或8H的特殊功能寄存器。
【2-16】使80C51单片机复位有哪几种方法?复位后单片机的初始状态,即各寄存器及RAM中的状态如何?
【答】复位操作有上电自动复位、按键电平复位和外部脉冲复位3种方式。上电自动复位是通过外部复位电路的电容充电来实现的;按键电平复位是通过按压键使复位端经电阻与VCC接通而实现的;外部脉冲复位是由外部提供一个宽度大于两个机器周期复位脉冲而实现的。复位操作把Pc初始化为0000H,使单片机从0000H单元开始执行程序。当由于程序运行出错或操作错误使系统处于死锁状态时,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。 除PC之外,复位操作还对其他一些特殊功能寄存器有影响,SFR的复位状态如表2-2所列。复位操作还对单片机的个别引脚信号有影响。例如在复位期间,ALE和PSEN信号变为无效状态,即ALE=1,PSEN=1。复位操作对RAM内容没有影响。
表2-2 SFR的复位状态
┏━━━━━━┳━━━━━━━━┳━━━━━┳━━━━━━━━┓ ┃寄存器┃复位时的内容┃寄存器┃复位时的内容┃
┣━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━━━━┫ ┃ PC ┃ 00H ┃ TCON ┃ 0X000000B ┃ ┣━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━━━━┫ ┃ ACC ┃ 00H ┃ TLO ┃ OOH ┃ ┣━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━━━━┫ ┃ B ┃ 00H ┃THO ┃ OOH ┃ ┣━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━━━━┫ ┃ PSW ┃ 00H ┃TLl┃ 00H ┃
┣━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━━━━┫ ┃ SP ┃ 07H ┃THl┃ 00H ┃
┣━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━━━━┫ ┃ DPTR ┃ 00H ┃SCON ┃ 00H ┃ ┣━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━━━━┫ ┃ PO~P3 ┃ FFH ┃ SBUF ┃不定┃
┣━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━━━━┫ ┃TMOD ┃ XX000000B ┃ PCON ┃ 0XXX0000B ┃ ┗━━━━━━┻━━━━━━━━┻━━━━━┻━━━━━━━━┛
【3—12】试分析以下程序段的执行结果。 【答】结果如下:
MOV SP,#60tt ;(SP)=60H NOV A,#88tt ;(A)=88H
MOV B.#0FFH ;(B)=FFH
PUSH ACC ;(SP)=61H,(61H)=88H PUSH B ;(SP)=62H,(62H)=FFH POP ACC ;(A)=FFH,(SP)=61H POP B ;(B)=88H,(SP)=60H
程序段的执行结果:累加器A和寄存器B的内容通过堆栈进行了交换。 注意:80C51单片机的堆栈是按照先进后出的原则进行管理的。
【3-13】已知(A)=7AH,(RO)=30H,(30H)=A5 H,(PSW)=80H。请填写各条指令单独执行后的结果。
【答】结果如下:
(1) XCH A,R0 ;(A)=30H,(R0):7AH
(2) XCH A,30H ;(A)=A5H,(30H)=7AH,(PSW)=81H (3) XCH A,@R0 ;(A)=R5H,(30H)=7AH,(PSW)=81H (4) XCHD A,@R0 ;(A)=75H,(30H)=AAH,(PSW)=81H (5) SWAP A ;(A)=A7H
(6) ADD A,R0 ;(A)=AAH,(PSW)=04H (7) ADD A,30H ;(A)=1FH,(PSW)=81H (8) ADD A,#30H ;(A)=AAH,(PSW)=04H (9) ADDC A,30H ;(A)=20H,(PSW)=01H (10) SUBB A,30H ;(A)=D4H,(PSW)=84H (11) SUBB A,#30H ;(A)=49H,(PSW)=01H
【3-15】已知(R1)=20 H,(20 H)=AAH,请写出执行完下列程序段后A的内容。 【答】各指令的执n行结果如下: MOV A,#55H ;(A)=55H
ANL A,#0FFH ;(A)=55H ORL 20H,A ;(20H)=FFH XRL A,@R1 ;(A)=AAH CPL A ;(A)=55H
执行完程序段后,A的内容为5 5 H。
【3-20】读下列程序,请:
① 写出程序功能,并以图示意。 ② 对源程序加以注释。 ORG 0000H
MAIN:MOV DPTR,#TAB MOV R1,#06H LP: CLR A MOVC A,@A+DPTR MOV P1,A
LCALL DELAY O.5 s . INC DPTR DJNZ R1,LP AJMP MAIN
TAB:DB 01H,03H,02H,06H,04H,05H DEL AY0.5 s: ······ RET END 【答】 .
① 程序功能:将TAB表中的6个参数依次从P1口中输出(每次输出延时0.5 s),然后
重复输出。P1口输出波形如图3-1所示。这是步进电机三相六拍输出波形。
图3-l Pl口输出波形
② 注释见源程序右边所述。
ORG 0000H
MAIN:MOV DPTR,#TAB ;P1输出参数表首地址 MOV R1,#06H ;P1输出参数有6个 LP: CLR A
MOVC A,@A+DPTR ;查表输出 MOV P1,A
LCALL DELAY 0.5 s ;软件延时0.5 S INC DPTR
DJNZ R1,LP ;输出参数已有6个 ?
AJMP MAIN ;输出参数已有6个,则重复输出 TAB:DB 01H,03H,02H,06H,04H,05H ;参数表
DELAY0.5 s: „„ ;延时0.5 S子程序 RET
【3—21】读下列程序,然后 ① 画出P I.O~P1.3引脚上的波形图,并标出电压V一时
间t坐标。 ② 对源程序加以注释。
ORG 0000H
START: MOV SP,#20H MOV 30H,#01H MOV P1,#01H
MLP0: ACALT, D50ms M07 A,30H
CJNE A,#08H,MLPI MOV A,#01H MOV DPTR,#ITAB MLP2: MOV 30H,A MOVC A,@A+DPTR MOV P1,A
SJMP Mr,p0 MLPl: INC A SJMP MLP2
ITAB:DB 0,1,2,4,8 . DB 8,4,2,1 D50ms: ······ .
【答】
① 程序功能:P1.O~P1.3引脚上的波形图如图3—2所示。 图3—2 P1.O~P1.3引脚上的波形图
② 注释见源程序右边所述。 ORG 0000H
START: MOV SP,#20H MOV 30H,#01H
MOV P1,#01H
MLP0: ACALL ,D50ms ;软件延时50 ms
MOV A,30H
CJNE A,#08H,MLPI ;判断表格中数据是否取完? MOV A,#01H ;取完,从表头开始取 MOV DPTR,#ITAB ;表格首地址 MLP2: MOV 30H,A
MOVC A,@A+DPTR ;取表格中数据 MOV P1,A
SJMP MLP0
MLPI: INC A ;表格中数据未取完,准备取下一个 SJMP MLP2
ITAB:DB 0,1,2,4,8 ;表
DB 8,4,2,1
D50ms: „„ ;软件延时50 ms子程序 RET
【4-11】内部RAM从2OH单元开始存放一个正数表,表中之数为无序排列,并以“-1”作为结束标志。编程实现在表中找出最小正数,存入10H。加上必要的伪指令,并对源程序加以注释。
【答】程序如下: ORG 0000H AJMP MAIN ORG 0030H
MAIN: MOV R0,#20H ;正数表首址 MOV 10H,#7FH ;初始值设为正数最大值 LOOP: MOV A,@R0
CJNE A,“-1’’,CHK ;比较结束标志“-1” SJMP END1 ;是“-l\",结束比较
CHK: CJNE A,10H,CHKI ;比较两个数大小 SJMP LOOP1 ;两个数相等,不交换 CHKI: JNC LOOP1 ;A较大,不交换 MOV 10H,A ;A较小,交换 LOOP1: INC R0
SJMP LOOP ‘
END1: SJMP END1 END
例如:已知(20H)=22 H,(21H)=23H,(22H)=0CH,(23H)=20H,(24H)=16H, (25H)=-1。 执行结果:(10H)=0CH
【4-16】将外部RAM的40 H单元中的一个字节拆成2个ASCII码,分别存入内部数据存储器40 H和41 H单元中。试编写以子程序形式给出的转换程序,说明调用该子程序的入口条件和出口功能。加上必要的伪指令,并对源程序加以注释。 【答】子程序的入口条件、出口功能及源代码如下:
子程序人口条件:准备拆为2个ASCII码的数存入外部RAM的40 H单元中。 子程序出口功能:完成外部RAM单元一个字节拆成2个ASCII码,分别存入内部数据存储器40 H和41 H单元中。 ORG 1 000H
B_TO_A:MOV DPTR,#40H ;外部RAM40H单元 MOV R0,#40H
MOVX A,@DPTR ;取数
PUSH A
ANL A,#0FH ;低4位转换为ASCII码 LCALL. CHANGE MOV @RO,A INC R0
POP A ’ SWAP A
ANL A,#0FH ;高4位转换为ASCII码 LCALL CHANGE MOV @R0,A RET
CHANGE:CJNE A,#0AH,NEXT ;转换子程序 NEXT: JNC NEXT2 ;≥0AH,转移
ADD A,#3 0H ;≤9,数字0-9转化为ASCII码 RET
NEXT2: ADD A,#37H ;字母A~F转化为ASCII码 RET END
设外部(40 H)=12 H。
执行程序B_TO_A后:内部(40 H)=31 H,(41 H)=32 H。 设外部RAM(40 H)=ABH。
执行程序B_TO_A后,内部(40 H)=41 H,(41 H)=42 H。
C
A
D
E
B
F
AB⊥CD
∠CAB=∠BAD=90°
∴BC,BD过两圆圆心;E,F为两圆圆心; ∴BE=EC,BF=FD; ∴EF=1/2CD
因篇幅问题不能全部显示,请点此查看更多更全内容