文档详情

第4章MCS–51系列单片机的程序设计.ppt

发布:2017-05-04约9.27千字共60页下载文档
文本预览下载声明
AJMP指令的转移范围不超出所在的2KB字节区间,如各小段程序较长,在2KB字节内无法全部容纳,上面的程序应该怎样修改? 分析:可将函数值列成表,采用查表法求y= n! 当n= 9时,y= 362880H,需要三个单元存放结果。设每个n对应的y值都用3个单元来存放,则y值在表格中的首地址的计算公式为: y地址=函数表首址+ n*3 参考程序 ORG 1000H NUM EQU 50H GETY EQU 60H MOV R1,#03H MOV R0,#GETY MOV A ,NUM ; 取n值 MOV B ,#03H MUL AB ; n*3 MOV R2 ,A ; 暂存 MOV DPTR ,#TAB ; 表的首地址送DPTR中 LOOP: MOVC A ,@A+DPTR ;查表 MOV @R0 , A ;存结果 INC R0 ;调整存放结果地址指针 INC DPTR ;修正表地址指针 MOV A , R2 ;恢复n*3 DJNZ R1 , LOOP ;未查完,继续 SJMP $ TAB: DB 01H , 00H , 00H , 01H , 00H , 00H DB 02H , 00H , 00H , 06H , 00H , 00H DB 24H , 00H , 00H , 20H , 01H , 00H DB 20H , 07H , 00H , 40H , 50H , 00H DB 20H , 03H , 04H , 80H , 28H , 36H 编写子程序时应注意: a.子程序的第一条指令之前必须有标号; b.子程序中需要保护现场; c.主程序和子程序之间的参数传递。 4.2.5 子程序设计 1) 数码转换子程序 已知R0的低半个字节为一个四位的二进制数,要求将其转换为ASCAII码后送回R0中。 例4.7 二进制码转换为ASCII码 二进制数与ASCII码的对应关系: 四位二进制 ASCII 0000 (0) 30H 0001 (1) 31H 1001 (9) 39H 1010 (A) 41H 1111 (F) 46H … … … … ORG 1000 BTOASC: PUSH A PUSH PSW MOV A , R0 ANL A , #0FH ;取四位二进制数 MOV R0 , A ;暂存 CLR C SUBB A , #0AH ;与10比较 MOV A , R0 ;恢复四位二进制数 JC LOOP ;小于10转LOOP ADD A , #07H ;大于10先加07H LOOP: ADD A , #30H ;加30H
显示全部
相似文档