第七、八、九章 综合
一、 简单小程序编制:
注:所有多字节数的低字节都在低地址;R0或R1均指向内部RAM的最低字节。 1、 将30H、31H单元内容与T0计数器的TL0、TH0交换。保持其它R和M不变。 2、将30H、31H单元内容与5C30H、5C31H交换。保持其它R和M不变。
3、将30H、31H单元内容与R0指向的两字节单元交换。保持其它R和M不变。 4、将30H、31H单元内容与DPTR指向的两字节单元交换。保持其它R和M不变。 5、将30H、31H单元内容存入5C30H、5C31H单元。保持其它R和M不变。 6、将30H、31H单元内容加上数03C4H后存入5C30H、5C31H单元。 7、将30H、31H单元内容减去数03C4H后存入5C30H、5C31H单元。 8、将30H、31H单元内容除以2后存入5C30H、5C31H单元。 9、将30H、31H单元内容乘以2后存入5C30H、5C31H单元。 10、将30H、31H单元内容减1。保持其它R和M不变。 11、将30H、31H单元内容加1。保持其它R和M不变。
12、将外部RAM中的5C30H、5C31H单元内容乘以2。保持其它R和M不变。 13、将外部RAM中的5C30H、5C31H单元内容除以2。保持其它R和M不变。 14、将30H的低半字节和31H单元的高半字节交换。 15、将30H的高半字节和31H单元的高半字节交换。
16、将30H、31H单元的4位16进制数的中间两位数交换。
17、如果INT0为低,则,位30H改为它的值与P0口最低位的“反”相“与”后的值;否则,清30H位。
18、如果INT0为低,则,位30H改为它的值与P0口最高位的“反”相“或”后的值;否则,清30H位。
19、如果INT0为高,则,位30H改为它的值与P0口最低位相“或”后的值;否则,取反30H位。
20、如果INT0为低,则,A的最低位与A的最高位对调;否则,清除A。
21、如果INT1为高,则,A的最低位改为它的值与A的最高位的“反”相“与”后的值;否则,取反A。
22、改变30H单元为加上数0F7H后的值,如果产生进位,则,设置F0标志;否则,清除F0标志。
23、改变30H单元为减去数0F7H后的值,如果产生进位,则,设置F0标志;否则,清除F0标志。
24、如果30H内容等于数80H,则,P1.0置位;否则,P1.0清零。保持其它R和M不变。 25、改变30H、31H单元内容为乘以2后的值,如果产生进位,则,工作寄存器换用寄存器组1。
26、改变30H、31H单元内容为除以2后的值,如果余数为1,则,工作寄存器换用寄存器组3。
27、已知晶振频率为8MHZ,编一个子程序,延时150微秒。保持其它R和M不变。
20
28、已知晶振频率为6MHZ,编一个子程序,延时30微秒。保持其它R和M不变。 29、将从10H开始的64单元内容异或数5AH。保持其它R和M不变。 30、将由R0寻址的32个单元内容清为零。保持其它R和M不变。
31、将由R0寻址的32个单元内容移到R1寻址的单元中。保持其它R和M不变。
32、将由R0寻址的16个单元内容改为与R1寻址的单元相“异或”后的值。保持其它R和M不变。
33、将由R0寻址的32个单元内容改为与R1寻址的单元相“或”后的值。保持其它R和M不变。
33、将由DPTR寻址的100个单元中找出第一个内容为00H的单元,其地址存入30H、31H。 35、将从5C00H开始的100个单元内容移到5E00H开始的单元中。
36、将从5C00H开始的100个单元内容改为与5E00H开始的单元相“或”后的值。 37、将从5C00H开始的100个单元内容改为与5E00H开始的单元相“异或”后的值。 38、将从5C00H开始的100个单元中找出第一个内容为00H的单元,其地址存入30H、31H。 39、将从5C00H开始的100个单元中找出第一个内容不为00H的单元,其地址存入30H、31H。
40、将从5C00H开始的100个单元中找出最大的数和存该数的单元,数存入40H,地址存入30H,31H。
41、将从5C00H开始的100个单元中找出最小的数和存该数的单元,数存入40H,地址存入30H,31H。
42、将从5C00H开始的100个单元中找出第一个偶数和存该数的单元,数存入40H,地址存入30H,31H。
43、将从5C00H开始的100个单元中找出第一个奇数和存该数的单元,数存入40H,地址存入30H,31H。
44、编查表子程序,按40H中的索引数查出存在5C00H中的100个三字节数,存入30H,31H,32H。
45、编多分支转移程序段,按40H中的索引数,取转移地址表中的两字节地址,进行跳转。 46、将R0指向的三字节带符号数取负后存回。 47、将R0指向的三字节数取R2R3乘以R4的积。
48、将R0指向的二字节带符号数乘以2,校验是否溢出。 49、将R0指向的二字节带符号数除以2。 50、一字节带符号数R2R3=R4乘以R5。 51、将R0指向的二字节数乘以10。 52、将R0指向的2n字节的单字节BCD码转换成压缩BCD码,放于(R1)指向的n字节中。 53、将R0指向的n字节的压缩BCD码转换成单字节BCD码,放于(R1)指向的2n字节中。
二、优化编制小程序
A、用最少的机器周期编制以下各程序。
1、将R0所指的二字节数除以16,保持R0不变。
2、将R0所指的n字节(n存于A中)乘以16,保持R0不变。
21
3、不用乘法指令实现将R0所指的1字节数乘以10。 4、将二字节单元正整数(存于W1W0)整除以3。 B、用最短的程序长度编制以下各程序:
5、对由R0寻址的n字节数(n<127,R0指在最低字节上)乘以2k(k?8)的子程序,出口时R0不变。
6、全程范围(64k)的查常数表程序,入口常数指针存于W0(低),W1(高)中。 7、(R2)2=(R0)2+(R1)2,保持R0、R1、R2不变。
8、在从1000H开始的外部RAM中找出周期大于等于10H小于20H的第一组数据长度,找不到时长度取为0。
*三、综合程序编制:
1、编制一个能进行加、减运算的计算器,包括监控部分。 2、编制能让数码管以各种花样表演显示的监控及显示程序。 3、编制一个时钟程序,包含监控系统工程。 4、编制一个系统能做到:
按下MOV键时能将此之前的数字以输入时的速度再自动重现出来。
5、编一个监控,能输入数字及小数点,并将有小数点的数码管以约每秒3~4次闪烁,其余数码管保持不变的方式显示。
6、编制一个复位后能继续原有工作的监控程序。例如保持原有花样显示表演或计算器工作的系统。
22