




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、51 单片微型机原理和接口教程( 周思跃 _著)课后习题答案_化学工业出版社第一章习题答案1-1请说明CPU的功能以及CPU是如何执行指令和程序的。 答:CPU的功能是执行程序和统筹处理计算机系统中各类事务。CPU执行指令分为3步:取指令、分析指令、执行指令;计算机程序是由一条条 指令按一定的顺序排列组成的,CPU执行程序的过程就是一条条指令累计执行的 过程,其方式分为串行作业方式和流水线作业方式。1-2 请说明单片机内部主要是由哪些部件组成的,并说明各部件的作用。答:CPU由控制器和运算器构成,控制器的作用是执行指令和协调系统各部件 的工作;运算器的作用是进行逻辑运算和算术运算。存储器:存储
2、计算机工作时使用的信息,即指令代码和数据代码。I/O 接口电路:具有数据缓冲、数据隔离及数据转换的功能。1-3 请问对于容量位8K 的存储器芯片,它的地址线是多少根?答:8K=8192=23,故地址线为13根。另附:存储器的数据线由存储器的字长决定,例如一块32Kx 16(存储器容量显示格式:存储单元数X存储单元的字长)的存储器,其地址线为 15根,数据线 为 16 根。1-4将十进制数78, 134,分别用二进制数、十六进制数和 8421BCD吗表示。答: (78)D=(1001110)B=(4E)H=(01111000)8421BCD(134)D=(10000110)B=(86)H=(00
3、0100110100)8421BCD注:8421BCD码为4位表示一个十进制数符,本质是符号不是数值,所以不可省 略 0。1-5 将下列真值分别转化为用 8 位和 16 位二进制数表示的原码、补码和反码。X=1000100;X8位 原=X8位 反=X8位 补=01000100 ;X16位 原=X16 位 反=X16 位 补=0000000001000100x= -1000100X8 位原=11000100, X8 位反=10111011, X8 位补=10111100;X16 位 原 =1000000001000100 , X16 位 反 =1111111110111011 , X16 位 补
4、=1111111110111100;x= -0111111X8 位原=10111111, X8 位反=11000000, X8 位补=11000001;X16 位 原 =1000000000111111 , X16 位 反 =1111111111000000 , X16 位 补=1111111111000001;1-6 将下列补码转化成二进制数的真值。凶补=00101100;X=101100凶补=11111111;x= -1凶补=10000000;X= -100000001-7已知下列补码X补和Y补,分别求X+Y卜、X-Y卜。并判断运算结果是否出现 溢出。凶补=10011001, Y下卜=00
5、101100;-Y补=11010100, X+Y卜=凶补+丫卜卜=11000101不溢出;X-Y卜卜=凶补+-丫补=凶补-Y补=01101101 溢出;凶补=11111111, Y1 卜=10000000;-Y9位补=010000000, X+Yf卜=凶补+Y补=01111111溢出;XY卜卜=凶补+-Y卜尸凶补-Y补=01111111不溢出;凶补=00110111, Y1 卜=11100000;-Y补=00100000, X+YJ卜=凶补+Yp卜=00010111 不溢出;XY# =凶补+-Y期=凶补-Y补=01010111 不溢出;X#=10000111, YJ 卜=11000000;-Y
6、补=01000000, X+丫耳=凶补+Y补=01000111 溢出;X-丫卜卜=凶补+-丫卜卜=凶补-Y补 =11000111 不溢出;方法提示:由于补码是按序列排列的,所以可以直接进行加和减,即X+Y尸X补+Y#; X-Y卜卜=凶补-Y补另补码减法也可用加法实现X-Y卜卜=凶补+-Y补。上题的第2小题,由于Y8位补=10000000=28, Y=-28,所以(-Y尸28,已不能用8位补码表示,可以先扩补位 9位补码,然后进行运算,或直接用X-Y#=凶补-Y补进行计算。判断结果是否溢出,可按下列方法:加法时,如果正负数相加(即两数的符号位不同),则结果肯定不溢出; 如果同号数相加, 结果与被
7、加数和加数异号的则溢出 (即正正相加结果为负或负负相加结果为正时) 。 减法时, 如果同号数相减(即两数的符号位相同), 则结果肯定不溢出; 如果异号数相减, 结果与被加数异号的则溢出 (即正负相减结果为负或负正相减结果为正时) 。此法比用变形补码直观,加和减都适用。第二章习题答案2-1 请说明单片机89C52 内部有哪些资源。答:1个8位CPU 8KB的FLASH®序存储器、256B的SRAM数据存储器、4个 8位的并行 I/O 口( P0,P1,P2,P3)、 1 个全双工串行口、中断系统( 5个中断源、 2 个中断优先级)、3个16位的定时/计数器(T0,T1,T2、时钟电路(
8、时钟频率6 24MHZ) 。2-2 为什么 51 系列单片机的存储器系统采用哈佛结构。答: 哈佛结构指的是指令代码和数据分别存放在程序存储器和数据存储器中, 两 部分存储器分别采用不同的地址总线系统。 单片机在工作时一般执行固定不变的 应用程序代码, 而作为嵌入式控制系统的核心, 受限于体积要求, 单片机系统一 般不会带有辅助存储器 (例如硬盘等) , 为了在断电时也能保存用户的应用程序, 故需将程序固化在只读存储器中, 而单片机工作时程序运行过程中的数据是变化的,所以需要放在随机访问存储器中。2-3 51 单片机中的工作寄存器分布在存储器的哪个区域?答:分布在内部数据存储器的00H1FH区域
9、。2-4 在 51 系列单片机中,工作寄存器分几个区?如何改变工作寄存器区?答:分为0、1、2、3四个区。修改特殊功能寄存器 PSW的RS1和RS0位可改变 当前工作寄存器区。2-5 特殊功能寄存器和工作寄存器在存放信息方面有和区别?答:特殊功能寄存器(SFR中存放的是一些专用信息,这些信息与下列内容有关:计算机指令的执行条件及状态标志,定时/ 计数器的使用控制、中断系统的使用、并行I/O 及串行 I/O 接口的使用。工作寄存器只是用于暂时存放指令执行过程中一般的被操作数据。2-6 特殊功能寄存器的地址空间如何?答:特殊功能寄存器(SFR的地址为8为二进制编码,地址范围为80H0FFH但各特殊
10、功能寄存器的地址并非连续分布的。 指令通过直接寻址的方式才能访问到。2-7 51 单片机中的位寻址区在哪里?它们的地址空间如何?答: 51 单片机的位寻址区分布在两个地方。一部分位于内部数据存储器中字节地址为20H2FH的16个单元中,这部分包括128个位,位地址空间为00H7FH;另一部分位于字节地址能被8整除的特殊功能寄存器中,位地址空间为80H0FFH。2-8请指出下列位地址所在的内部数据存储器单元的字节地址或SF*称。答: 00H 内部 RAM 的 20H 单元; (20H).020H 内部 RAM 的 24H 单元; (24H).00A0H P2; P2.00B0H P3; P3.0
11、64H内部 RAM 的 2CH单元;(2CH).4E6H累加器 ACC; ACC.6。提示:1)内部数据存储器内的可寻址位,其位地址(00H7FH内所在单元的字节地址(20H2FH)间的关系如下:位地址=(字节地址20H) X8+DX, DR该位在字节单元中的位置(D0D7) 位地址+ 8,商+20H=字节地址,余数=DX2) SFR中的可位寻址(位地址80H0FFH)l勺寄存器,其最低位的位地址与其字节地址相同。关系如下:位地址+ 8,商*8 =SFR勺字节地址,余数=DX, DX该位在SFR中的位置(D0D7) 2-9若某51单片机应用系统将F000HFFFF地址空间分配给它外部的I/O接
12、口,那么该单片机应用系统最多给外部数据存储器分配多少单元?地址空间如何?答: 51 单片机的外部 I/O 接口和外部数据存储器是统一编制的, 占用同一个地址空间,地址空间的容量为64KB,地址范围为0000HFFFFH据题意,系统已将F000HFFFFHfe址空间分配给它外部的I/O接口,则只剩下0000HEFFFHM分配给外部数据存储器,容量为60KB。2-10在图2-9中的电容C,如果它取值太小,对复位电路有何影响?答:51单片机上电复位,需要在 RST弓唧上保持10ms以上的高电平。如果 C 太小,则其充电时间变短,上电后,RST5I脚上高电平保持的时间太短,则单片 机内部复位将不能完全
13、完成,有些寄存器内容将变得不确定。2-11 上电复位和人工按钮复位后对内部数据存储器具有什么不同的影响?答:上电复位后,内部数据存储器中的内容为不确定的状态。人工按钮复位后,内部数据存储器中的内容不变(因为没有断电) 。2-12 51应用系统中,为何要对堆栈指针 SP重新设置?答:复位后(SP)=07H则堆栈是从08H开始存放数据的。而内部数据存储器中00H1FH单元为工作寄存器区,而 20H2FH单元为位寻址区,在实际的应用系统中,这些区域都可能使用到。故一般将堆栈设置在地址30H 以后的单元中,所以需要对堆栈指针SP重新设置。2-13 51 单片机中的 I/O 接口中, 那个接口在作为准双
14、向口时需要外接电阻?若对某一接口进行读引脚的操作,必须事先对该接口做什么操作?答:P0 口需外接上拉电阻(因为P0是集电极开路结构)。若需对某个接口读引脚(即读取外部输入信号的状态) ,需要对该接口的口锁存器写入1(例如:若需要读取P1.0、 P1.1、 P1.2、 P1.3 的引脚状态时,需要先执行 MOV P1, #0FH 这也是为彳f 么复位后(P0)= (P1)=(P2)=(P3)=0FFH道理。)第三章习题答案3-1 指令的格式是由哪些部分组成的?每部分的含义是什么?答:指令由操作码和操作数组成。 在形式上操作码和操作数都是二进制代码。操作码用来表示指令的种类和功能, 经由控制器中的
15、指令译码器译码后产生控制信号。操作数是指令的操作对象,表示被操作数据或数据所在的存储单元地址。3-2 什么是寻址方式? 51 系列指令系统有哪些寻址方式?答: 指令中给出操作数的方式叫做寻址方式。 51 系列机给出的寻址方式一般有7中: 立即寻址、 直接寻址、 寄存器寻址、 寄存器间接寻址、 变址寻址、 相对寻址、位寻址(直接寻址的一个特例一一地址指向位单元)。3-3 对于内部数据存储器00H1FH 区域的访问有哪些寻址方式?对于外部数据存储器的访问有哪些寻址方式?对于特殊功能寄存器的访问有哪些寻址方式?答:对于内部数据存储器00H1FH 区域的访问有直接寻址、寄存器寻址、寄存器间接寻址三种方
16、式。对于外部数据存储器的访问只有寄存器间接寻址一种方式(以 DPTR或RR R1 为指针) 。对于特殊功能寄存器的访问只有直接寻址一种方式。 同时对于内部数据存储器80H0FFH的128个单元的访问只有寄存器间接寻址一种方式(以 R0、R1或SP 为指针);借助于两种不同的寻址方式,可以将在地址上重合(80H0FFH)的SFRffi内部RAM高128字节单元的两部分空间加以区分。3-4 51 系列单片机有哪些标志位?这些标志位存放在哪里?答: 51 单片机在程序运行时通常需要一下标志位:Cy, AC, OV, P, RS1, RS0它们都存放在特殊功能寄存器 PSW (程序状态字寄存器)中3-
17、5分析下列各指令的操作数,指出它们的寻址方式。MOV R4, 38H;寄存器寻址,直接寻址ADD A, R1MOVC A, A+DPTR 址寄存器间接寻址);寄存器寻址,寄存器间接寻址;寄存器寻址,变址寻址(又称基址寄存器加变MOVX A, DPTRDEC B SETB 24H 位地址);寄存器寻址,寄存器间接寻址;直接寻址;位寻址(直接寻址的一种,只是给出的直接地址是CJNE A, #100, NEXTANL 30H, #00H PUSH P1 省略了),直接寻址;寄存器寻址,立即寻址,相对寻址;直接寻址,立即寻址;寄存器间接寻址(指针为SP只是在堆栈操作指令中堆栈操作除了用PUSH和POP
18、指令,完全可以用其它指令来完成,举例如下:PUSH P1可用下列程序段完成INC SPMOV R0, SPMOV R0, P1 POP P1 可用下列程序段完成MOV R0, SPMOV P1, R0 DEC SP提示:上题答案中按操作数先后顺序给出其对应的寻址方式内部数据存储器和特殊 功能寄存器外部数据存程序存储器寄存 器名内 容单元 地址内 容单元 地址内 容单元 地址内 容程序计数器内 容B64H73Hr 10H900BH12H1206H35H(PC)=1200H 1ACC03H72H11H900AH83H1205H34HPSW80H71H00H9009HD1H1204H33H标号及标号
19、值DPL05H70H180H9008H79H1203H32HNEXT1=0800HDPH90H9007H0CH1201H31HNEXT2=0900HSP71H36HF8H9006H23H1200H30HNEXT3=1280HR000H35H;2BH9005H13HLOOP=1148HR136H34H36H9004H4DH3-6下列各指令或指令组执行前有关寄存器和存储器的状态如下表,要求分析各指令或指令组执行后有关寄存器、存储器和标志位的状态。R235H33H74H9003H2EHR3B7H32H59H9002H7FHR403H9001H54HR5F6H26H166H9000H38HR6E4H2
20、5H55HR721H24H44HP07CHP290H? MOVR0,#32;(R0)=32=20H? MOV25H,R1;(25H)= 0F8H? MOVXA,DPTR;(A)=13HP=1? MOVXA,R0;(A)=38HP=1? MOVCA,A+PC;(A)=33HP=0? MOVA,04H;(A)=03HP=0? XCHA,34H;(A)=36H(34H)= 03H? XCHDA,R1;(A)=08H(36H)=0F3H? PUSHDPL; (SP)=72H (72H)=05H? POPDPH;(DPH)=00H (SP)=70H? SUBB A,R1;OV=0(A)=0CCH Cy=
21、1? ADDA,R6;(A)=0E7H Cy=0标号往往出现在程序转移指令中,P=0P=0P=0OV=0? ADDC A,36H;OV=0指出转移指令的目标地址。AC=1AC=0AC=0? MUL AB;(A)=2CH(B)=01H? INC R0;(R0)= 01H? DEC A;(A)=02HP=1? ADD A,#49H;DA A;(A)=52H Cy=0? ANL A, R1;(A)=02H(R1)=36H? ORL A,32H;(A)=5BHP=1? ORL 26H,#35H;(26H)=77H P=0? XRL A,R0;(A)=03HP=0? XRL A, ACC;(A)=0P=
22、0? XRL A,#0FFH;(A)=0FCH P=0? CPL A;(A)=0FCH P=0? RL A;(A)=06H Cy=1(A)=0FCH Cy=0P=1P=1提示:在上表中需注意几点:(PSW)二80H即Cy=1, AC=0, RS1=RS0=0出前工作 寄存器区为0区)。工作寄存器区为 0区时,R0R7指向内部数据存储器的 00H07H,所以当指令中出现直接地址 00H07H中的某个时,其初始条件即为 R0R7中某个对应 的寄存器的值。另, 因为(DPH)=90H, (DPL)=05H,所以 (DPTR)=9005H标号值实质上是代表标号所在处的指令在程序存储器中的地址,? RR
23、C A;(A)=81H Cy=1? MOV C,(25H).2; Cy=1? MOV F0,C; (PSW)=0A0H? SETB RS0; (PSW)=88H? CLR C;(PSW)=0? ANL C,(24H).0 Cy=0? JZ NEXT1; (PC)=1202H? JC NEXT2; (PC)= 0900H? CJNE A, 25H, NEXT3; (PC)= 1280H Cy=1? DJNZ R7,LOOP; (PC)= 1148H(R7)=20H? LCALL 1800H; (PC)=1800H(SP)=73H (72H)=03H(73H)=12H? RET;(PC)=0080
24、H(SP)=6FH? ANL C, /32H; Cy=0(32H)=1 ,提示此处32H 为位存储器? STOP: JBC P0.3, STOP; (PC)=1200H(P0)=74H? JNB P0.4, NEXT1;(PC)=1203H? 分析下列程序段的功能。? MOV A, R3 MOV R4, A 功能:将R3中的内容送入 R4,即(R3户R4? MOV A, R5 CPL A MOV R5, A 功能: R5 中的数据按位取反后送回 R5? MOV A, R4 MOV B, R5 DIV AB MOV R4, B MOV R5, A功能:R4中的数除以R5中的数,结果商送入 R5,
25、余数送入R4? MOV C, P1.1 ANL C, P1.2 ANL C, /P1.3 MOV P1.6, C 功能:P1.1P1.2P1.6? MOV C, 0 ORL C, 1 MOV F0, C MOV C, 2 ORL C, 3 ANL C, F0 MOV P1.7, C功能:(20H).0V (20H).1) A (20H).2V (20H).3) -P1.7? CLR CMOV A, R4RLC AMOV R4, AMOV A, R3 RLC A MOV R3, A功能:R3、R4中的内容左移一位,R4最低位移入0, R4最高位移入R3最低 位,R3最高位移出至Cy。? CLR
26、CMOV A, R5 RLC A ADD A, R5 MOV R5, A 功能: ? CLR A MOV R0, A MOV R7, A LOOP: MOV R0, A INC R0DJNZ R7, LOOPSTOP: SJMP STOP功能:将内部数据存储器00H0FFH 256个单元全部清零。? PUSH ACCPUSH BPOP ACC POP B 功能:利用堆栈将ACCf B中的内容互换,即(ACC)(B) ? MOV R0, #30HXCHD A, R0SWAP AINC R0XCHD A, R0SWAP AMOV 40H , A功能:将ACC的低四位送入30H单元低四位,ACC的高
27、四位送入31H的低四位,而原先 30H 单元的低四位送入40H 单元的低四位, 原 31H 单元的低四位送入 40H单元的高四位。举例说明如下,设程序段运行前有(ACC)=12H,(30H)=34H,(31H)=56;H则程序段运行后有(30H)=32H,(31H)=51H, (ACC)= (40H)=64H亥程序段可用 来将单字节BCD转压缩BCD.3-8 指出下列指令中哪些是合法指令,哪些是非法指令。MOV P1, R4;合法MOV R2,R4;非法CLR R3;非法RLC R5;非法MOV 30H, 31H;合法MOV 00H, P;非法ORL 40H, R7;非法PUSH R6;非法P
28、OP R0;非法INC DPTR;合法注: 常见的错误还有类似: MOV R0, C; ADD 30H,31H; MOV A, R5; DEC DPTR 等,编程时切记勿错!3-9 按要求编制下列各程序段。将内部数据存储器30H 和 31H 单元的内容互换。MOV A, 30HXCH A ,31HMOV 30H, A 法二:XCH A, 30HXCH A ,31HXCH A, 30H比较法一、法二的优缺点,你认为哪个方法更好?将寄存器 R7 的内容向右循环移位一次。XCH A, R7 RR AXCH A, R7将寄存器R3的内容乘以4 (结果不超出8为二进制数的范围) 法一:MOV A, R3
29、MOV B, #4MUL ABMOV R3, A 法二:XCH A, R3 RL A RL AXCH A, R3将寄存器DPTR的内容减1法一:判断DPL=0否?如是,DPL减1后,DPH也减1;否则,DPH不变。XCH A, DPLJNZ NOBDEC DPHNBO: XCH A, DPLDEC DPL法二:(DPH)(DPL) -4DPH,DPL|P DPTR)CLR CXCH A, DPLSUBB A, #1XCH A, DPLXCH A, DPHSUBB A, #0XCH A, DPH法三:(DPH)(DPL)+0FFFFHDPTRXCH A, DPLADD A, #0FFHXCH A
30、, DPLXCH A, DPHADDC A, #0FFHXCH A, DPH比较以上各方法,其中法三利用了 -1的补码是0FFFFHB原理,将减法改为了加 法。将寄存器R6的内容压入堆栈(设寄存器工作在3区)PUSH 1EH将R4, R5寄存器连接起来循环右移一位。(设R4为高8位,R5为低8位; 执行完后R4R5中的内容右移一位,R4的最低位移入R5的最高位,同时R5的最 低位移入R4的最高位)XCH A, R4 R4中的内容送入ACC同时将ACC的内容放入R4中暂存。RRC A ;ACC中原先R4的内容右移一位,同时Cy移入最高位,而原先R4 的最低位移入Cy位XCH A, R5 ;R5中
31、的内容送入ACG上一步中产生的ACC的内容送入R5暂RRC A;ACC中原先R5的内容右移一位,Cy(UP原R4的最低位)移入最高位,而原R5的最低位移入Cy位XCH A, R5;将结果送入R5 (R5移位已完成),同时将第三步暂存在R5中的内容取出。MOV ACC.7, C;将Cy位中存放的原R5的最低位送入ACC的最高位(即送入R4 的最高位)XCH A, R4 ; 将结果送入R4,同时取出ACC原来的值第四章习题答案4-1 用伪指令将下列常数依次定义在1600H 为首地址的程序存储器中。0, 1, 4, 9, 16, 25, 36, 49, 64, 81答: ORG 1600HDB 0,
32、 1, 4, 9, 16, 25, 36, 49, 64, 814-2 用伪指令将下列常数依次定义在1700H 为首地址的程序存储器中, 要求数据类型一致。0, 1, 8, 27, 64, 125, 216, 343, 512, 729答:提示:因为 343, 512, 729 为双字节数据(>255),所以所有数据均应以双字节存入。ORG 1700HDW 0, 1, 8, 27, 64, 125, 216, 343, 512, 7294-3 用伪指令将字节型变量X1、 X2 定义在内部数据存储器30H、 31H 单元中,将字节型变量Y1、Y2定义在外部数据存储器2000H、2001H单
33、元中。答: X1 DATA 30HX2 DATA 31HY1 XDATA 2000HY2 XDATA 2001H 4-4用伪指令将ASCII码字符用“ Beijing,tjjtds!定义在1200H为首地址的程序存储器中。答: ORG 1200HDB Beijing,tjjtds! 4-5用伪指令将逻辑变量 A1、A2定义在00H、01H位单元中答: A1 BIT 00HA2 BIT 01H4-6 编一程序段, 将 1400H 为首地址的外部数据存储器中 200 个单字节数据转移 至 1500H 为首地址的外部数据存储器中。MOV MOV MOV MOVLOOP: MOVXMOVXINC IN
34、CDPTR, #1400HP2, #15HR0, #00HR7, #200A, DPTR R0, A DPTRR0;用DRTR旨向源数据块单元地址;用P2,R0指向目标地址;数据个数送入R7;修改源数据块指针;修改目标单元地址指针DJNZ R7, LOOPSJMP 4-7 编一程序段,将30H为首地址的内部数据存储器中20个单字节补码数据中的负数传送至2400H 为首地址的外部数据存储器中。MOVR0, #30H;用R0指向源数据块首地址MOV DPTR, #2400H ;用DRTR旨向目标区首地址MOV R7, #20;数据个数送入R7LOOP: MOV A, R0;取出源数据JNB ACC
35、.7, NEXT ;若源数据最高位=0,则表示数据为非负数,无需传送,可直接取下个数据MOVX DPTR, A;若取出的数据为负数,则传送到外部RAM,同时修改DPTRINC DPTRNEXT: INC R0DJNZ R7, LOOPSJMP 4-8 编一程序段,将40H 为首地址的内部数据存储器中 25 个单字节数据,依次下移一个单元。提示:根据题意即将40H58H中的数据依次送入41H59H中XCH A, 40H;ACC内容送入40H暂存保护,同时取出40H单元中内容MOV R0, #41H;R0指向目标单元首地址MOV R7, #25;数据长度送R7LOOP: XCH A, R0;前一个
36、单元数送后一个单元,同时取出后一个单元原先的数据暂存入 ACCINC R0;恢复ACC原来的内容DJNZ R7, LOOPMOV A, 40H STOP: SJMP STOP 4-9编一程序段,完成函数y=x2+5x+6的计算。设0&xw 10提示:据题意6<y<156,即结果为单字节数据。X DATA 30HY DATA 31HMOV A, XMOV B, XMUL ABMOV Y, A;X2-YMOV A, XMOV B, #5MUL ABADD A, Y; X2+5X - ACCADD A, #6 ; X2+5X+6 - ACCMOV Y, A; X2+5X+6 -
37、YSTOP: SJMP STOP讨论:有时仔细分析问题,可以将程序变得更简单,如上题中y=x2+5x+6=(x+2)(x+3则程序为X DATA 30HY DATA 31HMOV A, XADD A, #2MOVINCMULMOVSTOP: SJMPB, AAABY, ASTOP; (x+2); (x+3);X2+5X+6 - Y4-10 编一程序段,完成逻辑函数L= 的计算。提示:此程序按照 51 汇编程序标准格式编写,整个程序构成一个完整结构,单片机运行时将反复执行该程序, 即当输入变量发生变化时, 输出逻辑函数L 将立刻发生相应的变化。Y BIT P1.1Z BIT P1.2 输入L B
38、IT P1.7ORG 0 中X BIT P1.0;分别定义变量 X,Y,Zfe P1 口的低三位(P1.0,P1.1,P1.2淀义函数L由P1.7输出;用户程序第一条指令必须放在程序存储器0000H 单元LJMP MAIN ;此处安排一条长调换指令,跳到主程序处,目的:避开03H 开始的中断入口ORG 200H ;主程序安排在程序存储器200H 单元开始MAIN: MOVC, XANLC, /YANLC, ZCPLCMOV L, CSJMP MAIN ;真正的实用程序必须构成一个死循环结构,使得单片机可以反 复地执行;用户设定的功能讨论一:若上列函数改为L=XY+XZ+Y如何编程,给两个答案,
39、自己比较体会!MOV C, XANL C, YMOV F0, CMOV C, X ANL C, Z ORL C, F0 MOV F0, C MOV C, Y ANL C, Z ORL C, F0 MOV L, CMOV C, XANL C, Y JC OUT MOV C, X ANL C, Z JC OUT MOV C, Y ANL C, Z OUT: MOV L, C讨论二:若上列函数改为L=(X+Y)(X+Z)(Y+Z)何编程,给两个答案,结合讨论一 自己比较体会! MOV C, X ORL C, Y MOV F0, C MOV C, X ORL C, Z ANL C, F0 MOV F0
40、, C MOV C, Y ORL C, Z ANL C, F0 MOV L, CMOV C, XORL C, Y JNC OUT MOV C, X ORL C, Z JNC OUT MOV C, Y ORL C, Z OUT: MOV L, C4-11 阅读下列各程序段,并说明其功能。START:MOV DPTR, #1000HMOV R7, #10MOVX A,DPTRMOV B, A;取出外部RAM单元1000H单元中的数送入BLOOP: INC DPTR;每次循环逐个取出外部 RAM单元1001H开始的单元中的内容MOVX A, DPTRCJNE A, B, COMP比较(A)和(B),
41、无论是否相等,均转向下条指令, 判断 Cy 位COMP: JC NEXT;Cy=1则(A)<(B),不作处理,直接进下个循环,取下个数据判断MOV B, A若 Cy=0则(A)> (B),将(A)- BNEXT: DJNZ R7, LOOPSTOP: SJMP STOP功能:判断外部数据寄存器1000H 开始的 11 个单元中的最大值,将最大值送入寄存器 B。START:MOV R2, #0MOV R7, #8MOV A, R3 ;(R3) -ACCLOOP: RLC A;8次循环,每次循环,将R3 中的内容由最低位开始,逐位移入 CyJNC NEXT;Cy=0则不做任何操作,直接
42、进入下个循环INC R2;若上旬条件不成立,即R3中移出的位=1,则(R2)+1-R2NEXT: DJNZ R7, LOOPSTOP: SJMP STOP功能:统计R3 中 1 的个数,并将统计结果送入R2。START:MOV 30H, #0MOV R0, #50HLOOP: MOV A, R0CJNE A, #0FFH, NEXTSJMP STOPNEXT: INC 30HINC R0SJMP LOOPSTOP: SJMP STOP功能:统计存放在内部数据存储器50H 开始的数据块的长度(即数据块占多少个字节),数据块以0FFH为结束标志。4-12编一子程序,将一个非压缩8421BCD码(即
43、单字节BCD码)转换成七段显 示码。设09的BCD码对应的七段显示码分别为 3FH、06H、6BH、4FH、66H、 6DH、7DH、07H、7FH 6FH。进子程序前,BCD码被放在累力口器 ACC中;子程 序运行后,相应的七段码也放在 ACC中。(即入口参数和出口参数均在 ACC中)。;BCD码转换成显示码;入口参数:子程序名CHSEG单字节BCD码放在累加器ACC中;出口参数:七段显示码放在 ACC中CHSEG:ADD A, #1;加上偏移量,偏移量为MOVC A, A+PC旨令与数据表首间的字节数MOVC A, A+PCRET;单字节指令DB 3FH, 06H, 6BH, 4FH, 6
44、6H, 6DH, 7DH, 07H, 7FH, 6网表一般紧跟着 RET 指 令 有另一法,不需计算偏移量CHSEG:ADD A, #SEGTB-SSG ;用标号表达式,让编译程序计算偏移量MOVC A, A+PCSSG: RETSEGTB: DB 3FH, 06H, 6BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH 4-13编一子程序,将一个 09的七段显示码转换成对应的格雷码。09的格雷码请参阅本书表1-2。设进子程序前,七段显示码被放在内部数据存储器40H50H 中。 (即入口参数为40H,出口参数为50H)。算法一提示:根据09的序号依次查出对应的显示码,然
45、后与 40H中的内容比 较,如果相等,则根据当前序号查表得到对应的格雷码。; 显示码转换成格雷码;入口参数:子程序名CHGRY七段显示码被放在内部数据存储器 40H中,影响 ACC B, Cy位;出口参数:格雷码放在内部数据存储器50H 中CHGRY:PUSH ACC;保护现场PUSH B PUSH PSWMOV B, #0 NEXT: MOV A, B;用B记录09的序号;ADDA, #SEGTB-SSG;用标号表达式,让编译程序计算偏移量根据当前序号,查取对应的显示码 比较取得的显示码与源单元中的显示码 如果相等,则根据当前序号,查取对应的格雷MOVCSSG: CJNEMOV码A, A+P
46、CA, 40H, NEQA, B;将查取的格雷码送入目标单元;恢复现场;如果不想等, 则将序号增1, 查取下个显示码作ADD A, #GRYTB-SGRMOVC A, A+PCSGR: MOV 50H, A POP PSWPOP BPOP ACCRET;返回NEQ: INC B比较 SJMP NEXTSEGTB: DB 3FH, 06H, 6BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6ffiS 码表GRYTB:DB 00H, 01H, 03H, 02H, 04H, 05H, 07H, 06H, 08H, 09H& 雷码表算法二提示:直接将显示码转化成格雷码,程
47、序烦了些,但方法很简单。; 显示码转换成格雷码;入口参数:子程序名CHGRY七段显示码被放在内部数据存储器ACC Cy位;出口参数:格雷码放在内部数据存储器50H 中CHGRY:PUSH ACC;保护现场PUSH PSWMOVCJNEMOV码送入 50HNEQ0: CJNEMOV码送入 50HA, 40HA, #3FH, NEQ0 50H, #00HA, #06H, NEQ1 50H, #01H;40H 单元中的内容=0 的显示码,则将;40H 单元中的内容=1 的显示码,则将NEQ1: CJNEMOV码送入 50HNEQ2: CJNEMOV码送入 50HNEQ3: CJNEMOV码送入 50
48、HNEQ4: CJNEMOV码送入 50HNEQ5: CJNEMOV码送入 50HNEQ6: CJNEMOV码送入 50HNEQ7: CJNEMOV码送入 50HNEQ8: CJNEMOV码送入 50HQUIT: POPA, #6BH, NEQ2 50H, #03HA, #4FH, NEQ3 50H, #02HA, #66H, NEQ450H, #04HA, #6DH, NEQ5 50H, #05HA, #7DH, NEQ6 50H, #07HA, #07H, NEQ7 50H, #06HA, #7FH, NEQ8 50H, #08HA, #6FH, QUIT50H, #09HPSW;40H
49、单元中的内容=2的显示码,则将;40H 单元中的内容=3的显示码,则将;40H 单元中的内容=4的显示码,则将;40H 单元中的内容=5的显示码,则将;40H 单元中的内容=6的显示码,则将;40H 单元中的内容=7的显示码,则将;40H 单元中的内容=8的显示码,则将;40H 单元中的内容=9的显示码,则将;恢复现场40H 中,影响0 的格雷1 的格雷2 的格雷3 的格雷4 的格雷5 的格雷6 的格雷7 的格雷8 的格雷9 的格雷POP ACCRET 4-14 编一子程序,完成两双字节无符号数相加。设加数和被加数分别放在 0 区 寄存器R2、R3和R4 R5中,运算结果存放在0区寄存器R&a
50、mp; R7中。若运算结 果发生进位,使00H位单元=1;反之,使00H位单元=0。;双字节无符号数相加;入口参数:子程序名NADD,加数和被加数分别放在0区寄存器R2 R3和R4、R5中,影响ACC,位Cy ;出口参数:运算结果存放在0区寄存器R6、R7中,00H位单元存放双字节相加 的进位标志NADD: PUSH ACC ;保护现场PUSH PSWMOV A, R2ADD A, R4MOV R6, AMOV A, R3ADDC A, R5;(R2)+(R4 户 R6;(R3)+(R5 户 R7DELAY: PUSH PSW MOV PSW, #18H MOV R0, #40DL:MOV R
51、1, #248DL1:DJNZ R1, DL1NOP DJNZ R0, DL POP PSW RET 差6T=3 us相当准了MOV R7, AMOV 00H, C ;C600HPOP PSWPOPACC;恢复现场RET4-15 编制一子程序,完成10ms 较精确延时功能。设系统时钟频率为24MHz。提示:时钟频率为24MHz,则每个机器周期T= 0.5us, 10ms延时即需要10000us/0.5us =20000=500 X 40b机器周期T。软件延时子程序,就是用循环结构反复执行一些指令, 而指令执行时都需要时间, 所以执行完该子程序后, 即完成了延时 功能。软件延时 10ms入口参数
52、:子程序名 DELAY影响2区寄存器R0, R1出口参数:无1T1T1T1T*402T*248*40=19840T1T*402T*401T2总延时 3T+40T+19840T+40T+80T+3T=20006T,4-16编制一子程序,将10个非压缩BCD码转换成5个压缩BCD码。设进子程序前,非压缩BCD码被放在40H为首地址的内部数据存储器中;子程序运行后, 压缩BCD码放在50H为首地址的内部数据存储器中。功能说明:若进子程序前 40H49H单元中的内容为 01H,02H,03H,04H,05H,06H,07H,08H,09H,00H则子程序运行后 50H54H中的内容 为 12H,34H,56H,78H,90H ;BCD码压缩;入口参数:子程序名BCDCH非压缩BCD码被放在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药剂学模拟练习题(含参考答案解析)
- 数字疾控智慧公卫信息化建设方案
- 陕西省榆林市府谷县府谷中学2024-2025学年高一上学期9月月考生物试卷(有答案)
- 河南省洛阳市嵩县2024-2025学年八年级下学期期末考试英语试卷(含答案无听力原文及音频)
- 工业生产中传导热处理工艺规范
- 部编版三年级语文上册期末专项训练-拼音与字词(含答案)
- 2024-2025学年海南省郑州市航空港区人教PEP版(2012)五年级下册期末测试英语试卷(含答案)
- 2025秋初中数学九年级上册人教版教案设计 21.1一元二次方程-教案
- 技术供需对接活动后如何利用 AI+数智应用延续服务保持长效合作
- 山东省百师联考2024-2025学年高二年级上学期期中考试语文试题(解析版)
- 辐射工作设备操作规程
- 口腔种植技术管理规范
- 陕09J09 室外工程标准图集
- 河北省专业技术职务任职资格申报评审条件摘编(2003年版)
- 2023年诸城市人民医院康复医学与技术岗位招聘考试历年高频考点试题含答案解析
- GB/T 28648-2012化学品急性吸入毒性试验急性毒性分类法
- GB/T 15166.4-2021高压交流熔断器第4部分:并联电容器外保护用熔断器
- 一年级数学50以内加减法练习题
- 阿片类药物不良反应防治1副本
- 四川滑雪场商业综合体设计方案文本含个方案 知名设计院
- 日立电梯常用零配件价格清单
评论
0/150
提交评论