3章程序设计本科.ppt
《3章程序设计本科.ppt》由会员分享,可在线阅读,更多相关《3章程序设计本科.ppt(29页珍藏版)》请在三一文库上搜索。
1、例3-2:将R4R5双字节符号数求补码程序。,ORG 0000H MOV A,R4 JB ACC.7, CPLL ;判符号位 SJMP $ ;正数的补码原码 CPLL: MOV A,R5 ;取低字节 CPL A ADD A,#1 ;低字节变补 MOV R5,A MOV A,R4 ;取高字节 CPL A ADDC A,#0 ;高字节变补 ORL A, #80H ; 恢复负号 MOV R4,A SJMP $,分析:先判符号,再根据不同情况处理。,例3-3 求 Y=X2 (0X5)。 分析 :变量X放在片内RAM的20H单元,其值为00H05H 之间, Y在片内RAM的21H单元,在程序存储器安排一
2、张平方表,通过查表求 Y=X2 这样比完成 X*X 编程简便多了。表,ORG 0000H MOV DPTR,#TAB MOV A, 20H ;取X MOVC A,A+DPTR ; 查表 MOV 21H,A ; 存于Y SJMP $ TAB: DB 00H,01H,04H,09H,16H,25H END,首地址为TAB,以DPTR指向表首址,利用查表指令MOVC A,A+DPTR,即可求得。 表中数据用BCD码存放合乎人们的习惯.,如果平方值为两个字节,程序应如何编。,例3-4 分解压缩式BCD码,使其成为非压缩式BCD码。 如把 65H06H和05H,见图,ORG 0000H MOV R0,#
3、40H ;设指针 MOV A,R0 ;取一个字节 MOV R2,A ;暂存 ANL A,#0FH ;清0高半字节 INC R0 MOV R0,A ;保存数据个位,MOV A,R2 SWAP A ;十位换到低半字节 ANL A,#0FH INC R0 MOV R0,A ;保存数据十位 SJMP $,05,06,3.4 分支程序的设计 由条件转移指令构成程序判断框部分,形成分支结构,通常转移条件取决标志位。常见的分支见下图:,【例3-5】 在内部RAM的40H和41H地址单元中,有 2个无符号数,试编程比较这两数的大小,将大数存于内部RAM的GR单元,小数存于LE单元,如两数相等,则分别送入GR和
4、LE地址单元。 分析 采用CJNE指令,即可以判断相等与否,还可以通过CY标志判断大小,程序如下:,ORG 0000H MOV A, 40H CJNE A, 41H, NEQ ;两数不等转 NEQ MOV GR, A ;两数相等,GR单元和LE单元均存此数 MOV LE, A SJMP $ NEQ: JC LESS ;A小则转LESS MOV GR, A ;A大,大数存GR单元 MOV LE, 41H ;小数存LE单元 SJNE $ LESS: MOV LE, A ;A小,小数存LE单元 MOV GR, 41H ;大数存GR单元 SJMP $ GR EQU 30H LE EQU 31H END
5、,例 3-6】 设变量X以补码形式存放在片内RAM的30H单元, 函数Y与X有如下关系式: X X0 Y= 20H X=0 X+5 X0 试编制程序,根据X的取值求出Y,并放回原单元。 分析 取出变量后进行取值范围的判断,对符号的判断可用位操作类指令,也可用逻辑运算类指令,本例用逻辑运算指令,程序框图及程序如下:,ORG 0000H MOV A, 30H JZ NEXT ;判断是否为零 ANL A, #80H ;判断符号位 JZ ED ;X0转ED MOV A, #05H ;X0完成X+5 ADD A, #30H MOV 30H, A SJMP ED NEXT: MOV 30H, #20H ;
6、X=0, Y=20H ED: SJNE $,例 用单片机加重力传感器作磅秤,秤出重量后算出行李运费价格,其秤出的重量以10kg为1个计价单位G , G已存入40H单元。 计价方法为50kg以内按3元, 50kg以上分段计价: 50kg按3元计价,超过部分 按2元计价。 由此列出算式:,3G因重复使用,先暂存在R2。流程见左, 程序如下:,ORG 0100H FRT: MOV A,40H ;取行李重量计价单位G MOV R3,A MOV B,#03H ;运费M=G3 MUL AB MOV R2,A ;暂存3G,MOV A,R3 ;取回G CJNE A,#05H,L1 ;G 5 ? SJMP WE
7、TC L1: JC WETC ;是,转至WETC SUBB A,#05H ;否则 M=3G+2(G-5) RLC A ADD A,R2 MOV R2 ,A WETC:MOV 41H,R2 ;存运费 M RET,1. 利用转移地址表实现转移 例3-7 根据R3的内容转向对应的程序,R3的内容为0n,处理程序的入口符号地址分别为PR0PRn (n128)。 分析:将PR0PRn入口地址列在表格中,每一项占两个单元,PRn在表中的偏移量为2n,因此将R3的内容乘2即得PRn在表中的偏移地址,从偏移地址2n和2n+1两个单元分别取出PRn的高八位地址和低八位地址送DPTR寄存器,用JMP A+DPTR
8、指令(A先清零)即转移到PRn入口执行。设PR0PRn入口地址分别为0110H,0220 H, 0330 H, 。程序如下:,ORG 0000H PR0 EQU 0110H PR1 EQU 0220 H PR2 EQU 0330 H ,MOV A,R3 ;R3A ADD A,ACC ;A*2 MOV DPTR,#TAB PUSH ACC MOVC A,A+DPTR ;取地址表中高字节 MOV B,A ;暂存于B INC DPL ;表地址加1 POP ACC MOVC A,A+DPTR ;取地址表中低字节 MOV DPL,A MOV DPH,B ;DPTR为表中地址 CLR A ;A=0 JMP
9、 A+DPTR ;转移 TAB:DW PR0,PR1,PR2,PRn ;转移地址表 END,TAB,TAB+2,DPH DPL,例如 R3=1的操作,02,20,2. 利用转移指令表实现转移 例3-8 设有五个按键 0、1、2、3、4其编码分别为3AH、47H、65H、70H、8BH,要求根据按下的键转向不同的处理程序,分别为PR0 、PR1 、PR2、PR3、PR4,设按键的编码已在B寄存器中,编出程序。,分析: 将键码排成表,将键码表中的值和B中的键编码比对,记下在键码表中和B中的键编码相等的序号,另安排一个转移表,安排AJMP指令(机器码),因每条AJMP指令占二字节,将刚才记下的序号乘
10、2即为转移表的偏移地址,利用JMP A+DPTR执行表内的AJMP指令,从而实现多分支转移,设转移表表头JPT的地址为001AH、PR0,入口地址为0110H、 ,参考2.4.2节,求AJMP PR0的机器码 0110H -0000 0001 0001 0000,a10 a0,机器码2110h,001 00001 0001 0000,AJMP PR0的机器码为2110H, PR1入口地址0220H , AJMP PR2的机器码为4120H, , 转移指令表JPT 的内容及键码表如下图所示,设B=65H, 键值为2 :,转移指令表JPT,键码表TAB,65H,A,B,A2=4,A=1,A=2,A
11、=0,65H,65H,001AH,001CH,DPTR=001AH, A=4,JMP A+DPTR =JMP 001CH, 而001CH单元中是指令JMP PR2,因而执行JMP PR2指令而转到PR2执行。,ORG 0000H MOV DPTR,#TAB ;置键码表首址 MOV A,#0 ;表的起始位的偏移量为0 NEXT: PUSH ACC MOVC A,A+DPTR ;取键码表的编码存于A CJNE A,B,AGAN ;将B中值和A中的键码比较,不等转移 POP ACC ;A=B,查到了B的键码恢复键码表的偏移量(序号) RL A ; 序号乘2得分支表内偏移量 MOV DPTR,#JPT
12、 ;置分支表首址 JMP A+DPTR ;如B=65H,该指令即为JMP 001CH AGAN: POP ACC ;不相等比较下一个 INC A ;序号加1 CJNE A,#5,NEXT SJMP $ ;键码查完还没有B中按键编码程序结束 JPT: AJMP PR0 ;分支转移表 AJMP PR1 AJMP PR2 AJMP PR3 AJMP PR4 TAB: DB 3AH,47H,65H DB 70H,8BH ;键码表,上面程序中如B=65H 执行JMP 001CH 而001CH单元中是指令JMP PR2因而执行JMP PR2指令若按的是其他键,也会自动转到相应的PRn执行。,当程序中的某些
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章程 设计 本科
链接地址:https://www.31doc.com/p-2884787.html