单片机第三章 51单片机指令系统和汇编语言程序设计.ppt
例题2查表程序。设变量放在片内RAM的20H单元,取值范围0~9,要求编写查表程序,查出变量的平方值,并放入片内RAM21H单元.(注:所查表格为0~9的平方值的BCD码)分析:对程序存储器查表采用MOVCA,@A+DPTR实现表格定义使用DB伪指令MOVDPTR,#TAB2MOVA,20HMOVCA,@A+DPTRMOV21H,ASJMP$TAB2:DB00H,01H,04H,09H,16H,25H,36H,49H,64H,81H例:一个十六进制数放在HEX单元的低四位,将其转换成ASCII码查表程序:解:十六进制0~9的ASCII码为30H~39H,A~F的ASCII码为41H~46H,利用查表指令MOVCA,@A+DPTRMOVCA,@A+PC先用伪指令DB或DW把表格的数据存入ROM来获得数据ASCII码表格的首址为ASCIITABASCTAB:DB30H,31H,32H,33HDB34H,35H,36H,37HDB38H,39H,41H,42HDB43H,44H,45H,46HEND编程1:0123456789ABCDEFORG0200HHEXEQU30HHEXASC:MOVA,HEXMOVDPTR,#ASCTABMOVCA,@A+DPTRMOVHEX,ARETANLA,#0FHDPTR(A)=333H(A)=1546H编程2:ORG0200HHEXEQU30HHEXASC:MOVA,HEXANLA,ADDA,#3MOVCA,@A+PCMOVHEX,ARETASCTAB:DB30H,31H,32H,33HDB34H,35H,36H,37HDB38H,39H,41H,42HDB43H,44H,45H,46HEND;变址调整;2字节;1字节PCPC#3;变址调整*STC51开发板数码管查表显示字符ORG0000HMAIN:MOVP1,#0FFHMOVA,#01MOVDPTR,#DIGTABMOVCA,@A+DPTRMOVP2,ACLRP1.3SJMP$DIGTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H例:在STC51开发板数码管的最低位通过查表分别显示字符0~9.(掌握长查表指令即可)思考:如果将一个字节的二进制数(0~255)转换成3位BCD数,再通过查表方式将对应的数字字符显示到数码管上。将内部RAM的20H单元中的8位无符号二进制数,转换为3位BCD码,并将结果存放在FIRST(百位)和SECOND(十位、个位)两个单元中。例3解:可将被转换数除以100,得百位数;余数除以10得十位数;最后余数即为个位数。(这是一种常用算法)编程如下:例如:255(十进制)除以100,得2(百位数)余数除以10,得5(十位数)最后余数5即为个位数55H程序(设(20H)=0FFH):;取数;除数B;除100;百位BCD;除以10,十位在A,个位在B;除数10→B;十位数送高位;A为十位、个位BCDORG0000HFIRSTDATA21HSECONDDATA22H;存十位、个位数A0FFHB64H02H37H0AH37H05H