1、福建农林大学微机原理7/8/9章综合编程一、简单小程序编制:注:所有多字节数的低字节都在低地址;R0或R1均指向内部RAM的最低字节。1、将30H、31H单元内容与T0计数器的TL0、TH0交换。保持其它R和M不变。解:MOV A,R0XCH A,30HMOV TL0,AMOV A,TH0XCH A,31HMOV TH0,A2、将30H、31H单元内容与5C30H、5C31H交换。保持其它R和M不变。解:MOV DPTR,#5C30HMOVX A,DPTRXCH A,30HMOVX DPTR,AINC DPTRMOVX A,DPTRXCH A,31HMOVX DPTR,A3、将30H、31H单
2、元内容与R0指向的两字节单元交换。保持其它R和M不变。解:MOV A,R0XCH A,30HMOV R0,AINC R0MOV A,R0XCH A,31HMOV R0,A4、将30H、31H单元内容与DPTR指向的两字节单元交换。保持其它R和M不变。解:MOVX A,DPTRXCH A,30HMOVX DPTR,AINC DPTRMOVX A,DPTRXCH A,31HMOVX DPTR,A5、将30H、31H单元内容存入5C30H、5C31H单元。保持其它R和M不变。解:MOV A,30HMOV DPTR,#5C30HMOVX DPTR,AMOV A,31HINC DPTRMOVX DPTR
3、,A6、将30H、31H单元内容加上数03C4H后存入5C30H、5C31H单元。解:MOV A,30HADD A,#0C4HMOV DPTR,#5C30HMOVX DPTR,AMOV A,31HADDC A,#03HINC DPTRMOVX DPTR,A7、将30H、31H单元内容减去数03C4H后存入5C30H、5C31H单元。解:CLR CMOV A,30HSUBB A,#0C4HMOV DPTR,#5C30HMOVX DPTR,AMOV A,31HSUBB A,#03HINC DPTRMOVX DPTR,A8、将30H、31H单元内容除以2后存入5C30H、5C31H单元。解:MOV
4、A,31HCLR CRRC AMOV DPTR,#5C31HMOVX DPTR,AMOV A,30HRRC AMOV DPTR,#5C30HMOVX DPTR,A9、将30H、31H单元内容乘以2后存入5C30H、5C31H单元。解:MOV A,30HCLR CRLC AMOV DPTR,#5C30HMOVX DPTR,AMOV A,31HRLC AINC DPTRMOVX DPTR,A10、将30H、31H单元内容减1。保持其它R和M不变。解: MOV A,30HJNZ L0DEC 31HSJMP $L0: DEC 30H11、将30H、31H单元内容加1。保持其它R和M不变。解:INC 3
5、0HMOV A,30HJNZ OKINC 31HOK:.12、将外部RAM中的5C30H、5C31H单元内容乘以2。保持其它R和M不变。解:MOV DPTR,#5C30HCLR CMOVX A,DPTRRLC AMOVX DPTR,AINC DPTRMOVX A,DPTRRLC AMOVX DPTR,A13、将外部RAM中的5C30H、5C31H单元内容除以2。保持其它R和M不变。解:MOV DPTR,#5C31HCLR CMOVX A,DPTRRRC AMOVX DPTR,ADEC DPLMOVX A,DPTRRRC AMOVX DPTR,A14、将30H的低半字节和31H单元的高半字节交换
6、。解:MOV A,31HSWAP AMOV R0,#30HXCHD A,R0SWAP AMOV 31H,A15、将30H的高半字节和31H单元的高半字节交换。解:MOV A,30HXCH A,31HMOV R0,#31HXCHD A,R0MOV 30H,A16、将30H、31H单元的4位16进制数的中间两位数交换。解:MOV A,30HSWAP AMOV R0,#31HXCHD A,R0SWAP AMOV 30H,AMOV A, R0MOV 31H, A17、如果INT0为低,则位30H改为它的值与P0口最低位的“反”相“与”后的值;否则,清30H位。解:JB P3.2,L0MOV C,30H
7、ANL C,/P0.0MOV 30H,CSJMP $L0:CLR 30H18、如果INT0为低,则位30H改为它的值与P0口最高位的“反”相“或”后的值;否则,清30H位。解:JB P3.2,L0MOV C,30HOPL C,/P0.7MOV 30H,CSJMP $L0:CLR 30H19、如果INT0为高,则,位30H改为它的值与P0口最低位相“或”后的值;否则,取反30H位。解:JNB 30H, L0MOV C,30HORL C,P0.0MOV 30H,CSJMP $L0:CPL 30H20、如果INT0为低,则A的最低位与A的最高位对调;否则,清除A。解:JB P3.2,L0MOV C,
8、ACC.0MOV 0,CMOV C,ACC.7MOV ACC.0,CMOV C,0MOV ACC.7,CSJMP $L0:CLR,A21、如果INT1为高,则A的最低位改为它的值与A的最高位的“反”相“与”后的值;否则,取反A。解:JNB P3.3,L0MOV C,ACC.0ANL C,/ACC.7MOV ACC.0,CSJMP $L0:CPL A22、改变30H单元为加上数0F7H后的值,如果产生进位,则设置F0标志;否则,清除F0标志。解:MOV A,30HADD A,#0F7HMOV 30H,AJC L0CLR F0SJMP L0:SETB F0 23、改变30H单元为减去数0F7H后的
9、值,如果产生进位,则设置F0标志;否则,清除F0标志。解:CLR C MOV A.30HSUBB A,#0F7HMOV 30H,AJC L0SETB F0SJMP $L0:CLR F0 24、如果30H内容等于数80H,则,P1.0置位;否则,P1.0清零。保持其它R和M不变。解:MOV A,30HCJNE A,80H, L0SETB P1.0SJMP $L0:CLR P1.025、改变30H、31H单元内容为乘以2后的值,如果产生进位,则,工作寄存器换用寄存器组1。解:CLR CMOV A,30HRLC AMOV 30H,AMOV A,31HRLC AMOV 31H,AJNC CONCLR
10、RS1SETB RS0CON:.26、改变30H、31H单元内容为除以2后的值,如果余数为1,则工作寄存器换用寄存器组3。解:MOV A,31HCLR CRRC AMOV 31H,AMOV A,30HRRC AMOV 30H,AJNC L0SETB RS1SETB RS0L0:.27、已知晶振频率为8MHZ,编一个子程序,延时150微秒。保持其它R和M不变。解:DELAY:MOV R7,#16HNOPL1:NOPNOPNOPNOPDJNZ R7,L1RET28、已知晶振频率为6MHZ,编一个子程序,延时30微秒。保持其它R和M不变。解:DELAY:MOV R7,#07HL1: DJNZ R7,
11、L1RET29、将从10H开始的64单元内容异或数5AH。保持其它R和M不变。解: MOV R2,#64HMOV R0,#10HMOV A,#5AHL00P: XPL A,R0MOV R0,AINC R0DJNZ R2,LOOP30、将由R0寻址的32个单元内容清为零。保持其它R和M不变。解: CLR AMOV R2,#32HLOOP: MOV R0,AINC R0DJNZ R2,LOOP31、将由R0寻址的32个单元内容移到R1寻址的单元中。保持其它R和M不变。解: MOV R2,#32HLOOP:MOV A,R0MOV R1,AINC R0INC R1DJNZ R2,LOOP32、将由R0
12、寻址的16个单元内容改为与R1寻址的单元相“异或”后的值。保持其它R和M不变。解: MOV R2,#16HLOOP:MOV A, R0XPL A,R1MOV R0,AINC R0INC R1DJNZ R2,LOOP33、将由R0寻址的32个单元内容改为与R1寻址的单元相“或”后的值。保持其它R和M不变。解:和32是一样的。34、将由DPTR寻址的100个单元中找出第一个内容为00H的单元,其地址存入30H、31H。解: MOV R7,#100LOOP:MOVX A,DPTRJN FINDZINC DPTRDJNZ R7,LOOPSJMP FINDZ: MOV 30H,DPLMOV 31H,DP
13、H35、将从5C00H开始的100个单元内容移到5E00H开始的单元中。解: MOV R7,#100HMOV DPTR,#5C00HMOV P2,#5EHMOV R0,#00HLOOP:MOVX A,DPTRMOVX R0,AINC DPTRDJNZ R7,LOOP36、将从5C00H开始的100个单元内容改为与5E00H开始的单元相“或”后的值。解: MOV R7,#100MOV DPTR,#5C00HMOV P2,#5EHMOV R0,#00HLOOP: MOVX A,DPTRORL A, R0 MOVX DPTR,AINC R0INC DPTRDJNZ R7,LOOP37、将从5C00H
14、开始的100个单元内容改为与5E00H开始的单元相“异或”后的值。解:和36一样,只需改为XRL38、将从5C00H开始的100个单元中找出第一个内容为00H的单元,其地址存入30H、31H。解: MOV R2,#100MOV DPTR,#5C00HL1:MOVX A,DPTRJZ L0INC DPTRDJNZ R2,L1SJMP L0: MOV 30H,DPLMOV 31H,DPH39、将从5C00H开始的100个单元中找出第一个内容不为00H的单元,其地址存入30H、31H。解:和38换成JNZ即可40、将从5C00H开始的100个单元中找出最大的数和存该数的单元,数存入40H,地址存入3
15、0H,31H。解: MOV R7,#100MOV DPTR,#5C00HMOV 40H,#0LOOP: MOVX A,DPTRCJNE A,40H,LIL1: JC L2MOV 40H,AMOV 30H,DPLMOV 31H,DPHL2: INC DPTRDJNZ R7,LOOPSJMP 41、将从5C00H开始的100个单元中找出最小的数和存该数的单元,数存入40H,地址存入30H,31H。解: MOV R7,#100MOV DPTR,#5C00HMOV 40H,#0FFHLOOP: MOVX A,DPTRCJNE A,40H,LIL1: JNC L2MOV 40H,AMOV 30H,DPL
16、MOV 31H,DPHL2: INC DPTRDJNZ R7,LOOPSJMP 42、将从5C00H开始的100个单元中找出第一个偶数和存该数的单元,数存入40H,地址存入30H,31H。解: MOV R7,#64HMOV DPTR, #5C00HLOOP: MOVX A,DPTRJNB ACC.0, L0INC DPTRDJNZ R7,L1SJMP L0: MOV 40H,AMOV 30H,DPLMOV 31H,DPH43、将从5C00H开始的100个单元中找出第一个奇数和存该数的单元,数存入40H,地址存入30H,31H。解:和42是一样的,改为JB44、编查表子程序,按40H中的索引数查
17、出存在5C00H中的100个三字节数,存入30H,31H,32H。45、编多分支转移程序段,按40H中的索引数,取转移地址表中的两字节地址,进行跳转。46、将R0指向的三字节带符号数取负后存回。解:MOV A,R0CPL AADD A,#01HMOV R0,AINC R0MOV A,R0ADDC A,#00HMOV R0,AINC R0MOV A,R0ADDC A,#00HMOV R0,A47、将R0指向的三字节数取R2R3乘以R4的积。48、将R0指向的二字节带符号数乘以2,校验是否溢出。解:CLR CMOV A,R0RLC AMOV R0,AINC R0MOV A,R0RLC AMOV R
18、0,AXRL C,ACC.7JC OVERFLAW实验编程1.将20H位单元送给B的最高位。解: CLR CMOV C,20HMOV B.7,C2.将程序存储器2000H单元内容送往片外RAM 1000H单元。解: CLR AMOV DPTR,#2000HMOVC A,A+DPTRMOV P2,#10HMOV R0,#00HMOVX R0,A3. R1与上 P2和 R0所指出的外部RAM单元内容,结果仍放入R1中。解: MOV A,R1ANL A,P24. 比较30H、31H、32H三个单元的内容,将最大的数给B。解:5. 将外部RAM 5C30H开始的99个单元内容清零。解: MOV R2,#99MOV DPTR,#5C30HLOOP: MOV A,#00HMOVX DPTR,AINC DPTRDJNZ R2,LOOP答案错误的题目:1、利用堆栈将A、B值传给R2、R3解: CLR PSW.3CLR PSW.4 PUSH AccPUSH BPOP 03HPOP 02H2.将30H开始的16个数中大于等于80H的单元内容放入50H以后的相应单元中解: MOV R0,30HMOV R1,50HMOV R6,#16HLOOP: MOV A,R0JNB ACC7,NPUTMOV R1,ANPUT: INC R0INC R1DJNZ R6,LOOPRET
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1