第4章 应用程序设计1.ppt
汇编语言与汇编语言与 简单程序设计简单程序设计v多字节加法多字节加法v多字节减法多字节减法v多字节多字节BCDBCD码加法码加法 (43H)(42H)(41H)(40H)+(53H)(52H)(51H)(50H)(43H)(42H)(41H)(40H)(43H)(42H)(41H)(40H)(53H)(52H)(51H)(50H)(43H)(42H)(41H)(40H)4.1 运算程序运算程序例例 4 4字节无符号数相加。字节无符号数相加。被加数:被加数:内部内部RAM 43H,42H,41H,40HRAM 43H,42H,41H,40H单元;单元;加数:加数:内部内部RAM 53H,52H,51H,50H53H,52H,51H,50H单元。单元。计算两数的和,放在计算两数的和,放在43H,42H,41H,40H43H,42H,41H,40H单元单元中。中。多字节加法多字节加法 (43H)(42H)(41H)(40H)+(53H)(52H)(51H)(50H)(43H)(42H)(41H)(40H)多字节加法多字节加法采用主子程序结构:采用主子程序结构:采用主子程序结构:采用主子程序结构:主程序功能:设置子程序入口参数主程序功能:设置子程序入口参数主程序功能:设置子程序入口参数主程序功能:设置子程序入口参数 子程序功能:两个多字节数相加子程序功能:两个多字节数相加子程序功能:两个多字节数相加子程序功能:两个多字节数相加子程序入口参数:子程序入口参数:子程序入口参数:子程序入口参数:加数最低位的起始地址加数最低位的起始地址加数最低位的起始地址加数最低位的起始地址50H50H;被加数最低位的起始地址被加数最低位的起始地址被加数最低位的起始地址被加数最低位的起始地址40H40H;加数和被加数的长度加数和被加数的长度加数和被加数的长度加数和被加数的长度44字节;字节;字节;字节;子程序出口参数:子程序出口参数:子程序出口参数:子程序出口参数:和的最低位的起始地址和的最低位的起始地址和的最低位的起始地址和的最低位的起始地址40H40H (43H)(42H)(41H)(40H)+(53H)(52H)(51H)(50H)(43H)(42H)(41H)(40H)主程序主程序主程序主程序MOV RMOV R0 0,#40H#40H;被加数与和的地址指针被加数与和的地址指针被加数与和的地址指针被加数与和的地址指针 MOV RMOV R1 1,#50H#50H;加数地址指针加数地址指针加数地址指针加数地址指针 MOV RMOV R2 2,#04H#04H ;加数的字节数;加数的字节数;加数的字节数;加数的字节数ACALL JASUBACALL JASUB多字节加法程序多字节加法程序加法子程序加法子程序加法子程序加法子程序JASUBJASUB:CLCCLC C CJASUB1JASUB1:MOVMOVA,A,R R0 0 ADDC AADDC A,R R1 1 ;MOVMOV R R0 0,A AINCINC R R0 0INCINC R R1 1DJNZDJNZ R R2 2,JASUB1JASUB1RETRET (43H)(42H)(41H)(40H)(43H)(42H)(41H)(40H)(53H)(52H)(51H)(50H)(53H)(52H)(51H)(50H)(43H)(42H)(41H)(40H)(43H)(42H)(41H)(40H)采用主子程序结构:采用主子程序结构:采用主子程序结构:采用主子程序结构:主程序功能:设置子程序入口参数主程序功能:设置子程序入口参数主程序功能:设置子程序入口参数主程序功能:设置子程序入口参数 子程序功能:两个多字节数相减子程序功能:两个多字节数相减子程序功能:两个多字节数相减子程序功能:两个多字节数相减子程序入口参数:子程序入口参数:子程序入口参数:子程序入口参数:减数最低位的起始地址减数最低位的起始地址减数最低位的起始地址减数最低位的起始地址50H50H;被减数最低位的起始地址被减数最低位的起始地址被减数最低位的起始地址被减数最低位的起始地址40H40H;减数的长度减数的长度减数的长度减数的长度44字节;字节;字节;字节;子程序出口参数:子程序出口参数:子程序出口参数:子程序出口参数:差的最低位的起始地址差的最低位的起始地址差的最低位的起始地址差的最低位的起始地址40H40H例例例例 4 4字字字字节节节节无无无无符符符符号号号号数数数数相相相相减减减减,被被被被减减减减数数数数放放放放在在在在内内内内部部部部RAM RAM 43H43H,42H42H,41H41H,40H40H单单单单元元元元,减减减减数数数数放放放放在在在在内内内内部部部部53H53H,52H52H,51H51H,50H50H单单单单元元元元。计计计计算算算算两数的差,放在两数的差,放在两数的差,放在两数的差,放在43H43H,42H42H,41H41H,40H40H单元中。单元中。单元中。单元中。多字节减法程序多字节减法程序主程序主程序主程序主程序MOV RMOV R0 0,#40H#40H;被减数与差的地址指针被减数与差的地址指针被减数与差的地址指针被减数与差的地址指针 MOV RMOV R1 1,#50H#50H;减数的地址指针减数的地址指针减数的地址指针减数的地址指针 MOV MOV R R2 2,#04H#04H ;减数的字节数减数的字节数减数的字节数减数的字节数ACALL JIANSBACALL JIANSB (43H)(42H)(41H)(40H)(43H)(42H)(41H)(40H)(53H)(52H)(51H)(50H)(53H)(52H)(51H)(50H)(43H)(42H)(41H)(40H)(43H)(42H)(41H)(40H)多字节减法程序多字节减法程序减法子程序减法子程序减法子程序减法子程序JIANSB JIANSB:CLCCLCC CJIAN1JIAN1:MOVMOV A,A,R R0 0 SUBB ASUBB A,R R1 1 ;MOVMOV R R0 0,A AINCINC R R0 0INCINC R R1 1DJNZDJNZ R R2 2,JIAN1JIAN1RETRET主程序主程序主程序主程序MOV RMOV R0 0,40H40H;被加数与和的地址指针被加数与和的地址指针被加数与和的地址指针被加数与和的地址指针 MOV RMOV R1 1,50H50H;加数地址指针加数地址指针加数地址指针加数地址指针 MOV MOV R R2 2,#04H#04H ;加数的字节数加数的字节数加数的字节数加数的字节数ACALL JASUBACALL JASUB多字节多字节BCD码加法程序码加法程序加法子程序加法子程序加法子程序加法子程序JASUBJASUB:CLCCLCC CJASUB1JASUB1:MOVMOV A,A,R R0 0 ADDC AADDC A,R R1 1 ;DADAA A MOVMOV R R0 0,A AINCINC R R0 0INCINC R R1 1DJNZDJNZ R R2 2,JASUB1JASUB1RETRETv数据的拼拆数据的拼拆v数据的转换数据的转换4.2 数据的拼拆和转换数据的拼拆和转换一、数据的拼拆一、数据的拼拆例:设例:设例:设例:设20H20H,21H21H单元中各有一个单元中各有一个单元中各有一个单元中各有一个8 8位数据:位数据:位数据:位数据:(20H20H)=X=X7 7 X X6 6 X X5 5 X X4 4 X X3 3 X X2 2 X X1 1 X X0 0 (21H21H)=Y=Y7 7 Y Y6 6 Y Y5 5 Y Y4 4 Y Y3 3 Y Y2 2 Y Y1 1 Y Y0 0目的目的:(30H30H)=Y Y2 2 Y Y1 1 Y Y0 0 X X4 4 X X3 3 X X2 2 X X1 1 X X0 0MOVMOV 30H 30H,20H20HANLANL 30H 30H,#00011111B#00011111BMOVMOV A A,21H21HSWAPSWAPA A RLRLA A,ANLANL A A,#11100000B#11100000BORLORL 30H 30H,A A(30H30H)=X X7 7 X X6 6 X X5 5 X X4 4 X X3 3 X X2 2 X X1 1 X X0 0(30H30H)=0 0 0 =0 0 0 X X4 4 X X3 3 X X2 2 X X1 1 X X0 0(ACCACC)=Y Y7 7 Y Y6 6 Y Y5 5 Y Y4 4 Y Y3 3 Y Y2 2 Y Y1 1 Y Y0 0 (ACCACC)=Y Y3 3 Y Y2 2 Y Y1 1 Y Y0 0Y Y7 7 Y Y6 6 Y Y5 5 Y Y4 4(ACCACC)=Y Y2 2 Y Y1 1 Y Y0 0Y Y7 7 Y Y6 6 Y Y5 5 Y Y4 4 Y Y3 3 (ACCACC)=Y Y2 2 Y Y1 1 Y Y0 0 0 0 0 0 00 0 0 0 0 (30H30H)=Y Y2 2 Y Y1 1 Y Y0 0 X X4 4 X X3 3 X X2 2 X X1 1 X X0 0数据的拼拆(续)数据的拼拆(续)例:设例:设例:设例:设7CH7CH单元中各有单元中各有单元中各有单元中各有2 2个个个个BCDBCD码:码:码:码:(20H20H)=X=X7 7 X X6 6 X X5 5 X X4 4 X X3 3 X X2 2 X X1 1 X X0 0目的目的目的目的:(21H21H)=0 0 0 0 =0 0 0 0 X X0 0 X X1 1 X X2 2 X X3 3 CyCyACCACCX X0 0 a a7 7 a a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0a a7 7 a a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 X X0 0 X X1 1 a a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 X X0 0 a a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 X X0 0 X X1 1 X X2 2 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 X X0 0 X X1 1 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 X X0 0 X X1 1 X X2 2 X X3 3 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 X X0 0 X X1 1 X X2 2 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 X X0 0 X X1 1 X X2 2 X X3 3 0 0 0 00 0 0 0 X X0 0 X X1 1 X X2 2 X X3 3 MOVMOV C C,00H00HRLCRLCA AMOVMOV C C,01H01H RLC RLC A A MOVMOV C C,02H02H RLC RLC A A MOVMOV C C,03H03H RLC RLC A A ANLANLA A,#00001111B#00001111BMOVMOV 21H 21H,A A 数据的拼拆(续)数据的拼拆(续)例:设例:设例:设例:设7CH7CH单元中各有一个单元中各有一个单元中各有一个单元中各有一个8 8位数据:位数据:位数据:位数据:(7C7C)=X=X1 1 X X0 0HH目的目的目的目的:(R6R6)=0X=0X1 1HH,(,(,(,(R5R5)=0X=0X0 0HHMOVMOV R1 R1,#7CH#7CHMOVMOV A A,#00H#00HXCHDXCHD A A,R1R1MOVMOV R5 R5,A AMOVMOV A A,7CH7CHSWAPSWAPA A MOVMOV R6 R6,A AR1R1 ACC ACC 7CH 7CH 7CH7CH X X1 1 X X0 0HH7CH7CH 00H00H X X1 1 X X0 0HH7CH7CH 0 0X X0 0HH X X1 1 0 0 HH7CH7CH X X1 10H0H X X1 1 0 0 HH7CH7CH 0 0X X1 1HH X X1 1 0 0 HH二、数据的转换二、数据的转换1 1、二进制数与二进制数与ASCIIASCII的相互转换的相互转换二进制数转换为二进制数转换为ASCIIASCII码码ASCIIASCII码转换为二进制数码转换为二进制数1.二进制数与二进制数与ASCII的相互转换的相互转换 例例例例将将将将R R2 2中中中中存存存存放放放放的的的的十十十十六六六六进进进进制制制制数数数数(0 0F F)的的的的ASCIIASCII码码码码转化为十六进制数,并存放到转化为十六进制数,并存放到转化为十六进制数,并存放到转化为十六进制数,并存放到R R2 2中。中。中。中。解解解解分析:将程序设计为一个子程序,分析:将程序设计为一个子程序,分析:将程序设计为一个子程序,分析:将程序设计为一个子程序,入口参数:入口参数:入口参数:入口参数:R R2 2=30H39H=30H39H,41H46H41H46H出口参数:出口参数:出口参数:出口参数:R R2 2=09=09,AFAF(R R2 2)=30H39H =30H39H (R R2 2)=41H46H=41H46H(A A)=00H09H =00H09H (A A)=11H16H=11H16H(R R2 2)=00H09H=00H09H(R R2 2)=11H16H=11H16H(CyCy)=1=1 (CyCy)=0=0 顺序执行顺序执行顺序执行顺序执行 直接退出直接退出直接退出直接退出 (A A)=11H16H=11H16H (A A)=0AH0FH=0AH0FH (R (R2 2)=0AH0FH)=0AH0FH(R R2 2)=00H09H=00H09HASCII:ASCII:MOV A MOV A,R R2 2 CLR CLR C C SUBB A SUBB A,#30H#30H;MOVMOV R R2 2,A A;SUBB ASUBB A,#0AH#0AH;JC JC SBIO SBIO;XCHXCH A A,R R2 2;SUBB ASUBB A,#07H#07H;MOVMOV R R2 2 ,A ASBIO:SBIO:RET RET1.二进制数与二进制数与ASCII的相互转换的相互转换 ASCII:MOVASCII:MOVA A,R R2 2 CLR CLR C C SUBBSUBBA A,#30H#30H MOV MOV R R2 2,A A SUBBSUBBA A,#0AH#0AH JC JC SBIOSBIO XCH XCHA A,R R2 2 SUBBSUBBA A,#07H#07H MOV MOV R R2 2 ,A ASBIO:RETSBIO:RET 三次用到了三次用到了三次用到了三次用到了SUBBSUBB指令,指令,指令,指令,都需要提前对都需要提前对都需要提前对都需要提前对CyCy清零,清零,清零,清零,为什么只有第一条指令为什么只有第一条指令为什么只有第一条指令为什么只有第一条指令之前有之前有之前有之前有CLRCLRC C指令?指令?指令?指令?第一条指令第一条指令第一条指令第一条指令SUBBSUBB A A,#30H#30H执行之后执行之后执行之后执行之后CyCy一定为一定为一定为一定为0 0,因此第二,因此第二,因此第二,因此第二条指令条指令条指令条指令SUBBSUBB A A,#0AH#0AH 之前不需要对之前不需要对之前不需要对之前不需要对CyCy清零;清零;清零;清零;指令指令指令指令JC SBIOJC SBIO根据根据根据根据CyCy产生两个分支,第三条指令产生两个分支,第三条指令产生两个分支,第三条指令产生两个分支,第三条指令SUBB ASUBB A,#07H#07H处在处在处在处在Cy=0Cy=0的分支,因此第三条指令的分支,因此第三条指令的分支,因此第三条指令的分支,因此第三条指令SUBBSUBB A A,#07H#07H 之之之之前不需要对前不需要对前不需要对前不需要对CyCy清零;清零;清零;清零;SUBB ASUBB A,#0AH#0AH中的立即中的立即中的立即中的立即数数数数#0AH#0AH可以改为可以改为可以改为可以改为#09H#09H吗吗吗吗?为什么?为什么?为什么?为什么?当(当(当(当(R2R2)=09H=09H时,第二条指令时,第二条指令时,第二条指令时,第二条指令SUBBSUBB A A,#09H#09H 会做出错误判断:会做出错误判断:会做出错误判断:会做出错误判断:(CyCy)=0=0,程序顺序执行,造成程序顺序执行,造成程序顺序执行,造成程序顺序执行,造成(R2R2)=09H-07H=02H=09H-07H=02H1.二进制数与二进制数与ASCII的相互转换的相互转换(R R2 2)=30H39H =30H39H (R R2 2)=41H46H=41H46H(A A)=00H09H =00H09H (A A)=11H16H=11H16H(R R2 2)=00H09H=00H09H(R R2 2)=11H16H=11H16H(CyCy)=1=1 (CyCy)=0=0 顺序执行顺序执行顺序执行顺序执行 直接退出直接退出直接退出直接退出 (A A)=11H16H=11H16H (A A)=0AH0FH=0AH0FH (R (R2 2)=0AH0FH)=0AH0FH(R R2 2)=00H09H=00H09HASCII:ASCII:MOV A MOV A,R R2 2 CLR CLR C C SUBB A SUBB A,#30H#30H;MOVMOV R R2 2,A A;SUBB ASUBB A,#0AH#0AH;JC JC SBIO SBIO;XCHXCH A A,R R2 2;SUBB ASUBB A,#07H#07H;MOVMOV R R2 2 ,A ASBIO:SBIO:RET RET4.3 查表程序查表程序复杂代码转换显示复杂代码转换显示数据补偿:传感器补偿数据补偿:传感器补偿复杂函数计算:复杂函数计算:Y=SIN(X)查表指令:查表指令:在在51中有两条查表指令中有两条查表指令:MOVC A,A+DPTRMOVC A,A+PCyny2y1Y=SIN(X)xnx2x1X应用场合:应用场合:查表程序举例查表程序举例例:例:例:例:设一巡回报警系统设一巡回报警系统设一巡回报警系统设一巡回报警系统,对对对对16161616路输入进行控制路输入进行控制路输入进行控制路输入进行控制,现根据测量现根据测量现根据测量现根据测量路数路数路数路数,找出每路的最大允许值找出每路的最大允许值找出每路的最大允许值找出每路的最大允许值.若大于允许值就报警若大于允许值就报警若大于允许值就报警若大于允许值就报警.TB3:TB3:MOV A,R2MOV A,R2;(;(;(;(R2R2)=015=015ADD A,R2ADD A,R2MOV R3,AMOV R3,AADD A,#ADD A,#补偿值?补偿值?补偿值?补偿值?MOVC A,A+PCMOVC A,A+PC1 1XCH A,R3XCH A,R32 2ADD A,#ADD A,#补偿值补偿值补偿值补偿值+1=+1=?1 1MOVC A,A+PCMOVC A,A+PC1 1MOV R4,AMOV R4,A1 1RETRETTAB3:DW 1520H;TAB3:DW 1520H;第第第第0 0路报警阈值路报警阈值路报警阈值路报警阈值DW 3721H;DW 3721H;第第第第1 1路报警阈值路报警阈值路报警阈值路报警阈值DW DW#06H#06H#06H#06H#03H#03H#03H#03H表格最大长度的计算:表格最大长度的计算:表格最大长度的计算:表格最大长度的计算:按照第一条按照第一条按照第一条按照第一条MOVCMOVCMOVCMOVC指令:指令:指令:指令:2562562562566=250Byte6=250Byte6=250Byte6=250Byte;按照第二条按照第二条按照第二条按照第二条MOVCMOVCMOVCMOVC指令:指令:指令:指令:2562562562563=253Byte3=253Byte3=253Byte3=253Byte;表格最大长度表格最大长度表格最大长度表格最大长度=250Byte=250Byte=250Byte=250Byte可以同时监测可以同时监测可以同时监测可以同时监测信号路数信号路数250/2=125250/2=125250/2=125250/2=125路信号路信号路信号路信号查表程序举例查表程序举例例:例:例:例:将上例改为使用将上例改为使用将上例改为使用将上例改为使用DPTRDPTR作基址。作基址。作基址。作基址。TB3:TB3:MOV A,R2MOV A,R2ADD A,R2ADD A,R2MOV R3,AMOV R3,AMOV DPTR,#TAB1MOV DPTR,#TAB1MOVC A,A+DPTRMOVC A,A+DPTRXCH A,R3XCH A,R3INC DPTRINC DPTRMOVC A,A+DPTRMOVC A,A+DPTRMOV R4,AMOV R4,ARETRETTAB3:DW 1520H;TAB3:DW 1520H;DW 3721H;DW 3721H;DW DW 如果监测点超过如果监测点超过如果监测点超过如果监测点超过128128128128个或个或个或个或者数据表超过者数据表超过者数据表超过者数据表超过256Byte256Byte256Byte256Byte,怎怎怎怎么办?么办?么办?么办?表格最大长度表格最大长度表格最大长度表格最大长度=256Byte256Byte256Byte256Byte可以同时监测信号路数可以同时监测信号路数可以同时监测信号路数可以同时监测信号路数256/2=128256/2=128256/2=128256/2=128数据表格超过数据表格超过256Byte解决办法解决办法 如果数据表超过如果数据表超过256Byte,怎么办?怎么办?解决办法解决办法解决办法解决办法1 1:1)表中偏移量(表中偏移量(表中偏移量(表中偏移量(A A)*22(R2R2)()()()(R3R3)2)表头地址表头地址表头地址表头地址#TAB#TAB(DPTRDPTR)3 3)求待查数据的偏移量求待查数据的偏移量求待查数据的偏移量求待查数据的偏移量 (DPH)(DPL)(DPH)(DPL)+(R2)(R3)+(R2)(R3)(DPH)(DPL)(DPH)(DPL)4)4)给累加器清零:给累加器清零:给累加器清零:给累加器清零:(A A)0 05)5)执行查表指令:执行查表指令:执行查表指令:执行查表指令:MOVC A,A+DPTRMOVC A,A+DPTR一步完成待查数据的偏移一步完成待查数据的偏移一步完成待查数据的偏移一步完成待查数据的偏移量的计算量的计算量的计算量的计算数据表格超过数据表格超过256Byte解决办法解决办法 如果数据表超过如果数据表超过256Byte,怎么办?怎么办?解决办法解决办法解决办法解决办法2 2:1)1)表中偏移量(表中偏移量(表中偏移量(表中偏移量(A A)*22(R2R2)()()()(R3R3)2)2)表头地址表头地址表头地址表头地址#TAB#TAB(DPTRDPTR)3)求待查数据的偏移量的高字节求待查数据的偏移量的高字节求待查数据的偏移量的高字节求待查数据的偏移量的高字节 (DPH)(DPH)+(R2)+(R2)(DPH)(DPH)4)4)给累加器赋值:给累加器赋值:给累加器赋值:给累加器赋值:(A A)(R3R3)5)5)执行查表指令:执行查表指令:执行查表指令:执行查表指令:MOVC A,A+DPTRMOVC A,A+DPTR两步完成待查数据两步完成待查数据两步完成待查数据两步完成待查数据的偏移量的计算的偏移量的计算的偏移量的计算的偏移量的计算 (DPH)(DPL)(DPH)(DPL)+(R2)+(R2)(DPH)(DPL)(DPH)(DPL)+(R3)+(R3)(DPH)(DPL)(DPH)(DPL)数据表格超过数据表格超过256Byte查表程序举例查表程序举例例:例:例:例:在一个以在一个以在一个以在一个以MCS-51MCS-51为核心的温度控制器中,温度传感器输出的为核心的温度控制器中,温度传感器输出的为核心的温度控制器中,温度传感器输出的为核心的温度控制器中,温度传感器输出的电压与温度为非线性关系。电压与温度为非线性关系。电压与温度为非线性关系。电压与温度为非线性关系。传感器输出电压:传感器输出电压:传感器输出电压:传感器输出电压:X XH H X XL L (两个字节)两个字节)两个字节)两个字节)(20H)(21H)(20H)(21H)电压值的取值范围:电压值的取值范围:电压值的取值范围:电压值的取值范围:1010位二进制数位二进制数位二进制数位二进制数00X XH H X XL L10231023温度值的取值精度:温度值的取值精度:温度值的取值精度:温度值的取值精度:两个字节两个字节两个字节两个字节Y YH H Y YL L温度表长度:温度表长度:温度表长度:温度表长度:1024*2=2K Byte1024*2=2K Byte温度表首地址温度表首地址温度表首地址温度表首地址:#TAB#TAB本例的本例的本例的本例的x x和和和和y y均为双字节无符号数。均为双字节无符号数。均为双字节无符号数。均为双字节无符号数。YnH YnLXnH XnLY1H Y1LX1H X1LY0H Y0L温度温度(22H)(23H)X0H X0L测量电压测量电压(20H)(21H)数据表格超过数据表格超过256Byte查表程序举例查表程序举例传感器输出电压:传感器输出电压:传感器输出电压:传感器输出电压:X X X XH H H H X X X XL L L L (两个字节)两个字节)两个字节)两个字节)(20H)(21H)(20H)(21H)(20H)(21H)(20H)(21H)电压值的取值范围:电压值的取值范围:电压值的取值范围:电压值的取值范围:0000(20H)(21H)=X(20H)(21H)=X(20H)(21H)=X(20H)(21H)=XH H H H X X X XL L L L1023102310231023电压值电压值电压值电压值X X X XiHiHiHiH X X X XiLiLiLiL对应的温度值在表中的偏移量:对应的温度值在表中的偏移量:对应的温度值在表中的偏移量:对应的温度值在表中的偏移量:(20H)(21H)*2(20H)(21H)*2(20H)(21H)*2(20H)(21H)*2 (20H)(21H)*2+1 (20H)(21H)*2+1 (20H)(21H)*2+1 (20H)(21H)*2+1(20H)(21H)*2+1(20H)(21H)*2YiHXiYiHY1LX1Y1HY0LX0Y0H#TAB.查表操作步骤查表操作步骤数据表长度数据表长度数据表长度数据表长度=2KByte=2KByte,超过了超过了超过了超过了256Byte256Byte,解决方法为:解决方法为:解决方法为:解决方法为:1)1)表中偏移量表中偏移量表中偏移量表中偏移量(20H)(21H)*2(20H)(21H)(20H)(21H)*2(20H)(21H)2)2)表头地址表头地址表头地址表头地址#TAB#TAB(DPTRDPTR)3)求待查数据的偏移量求待查数据的偏移量求待查数据的偏移量求待查数据的偏移量 (DPH)(DPL)(DPH)(DPL)(DPH)(DPL)(DPH)(DPL)+(20H)(21H)+(20H)(21H)+(20H)(21H)+(20H)(21H)(DPH)(DPL)(DPH)(DPL)(DPH)(DPL)(DPH)(DPL)4)4)给累加器清零:给累加器清零:给累加器清零:给累加器清零:(A A)0 05)5)查出温度值高字节查出温度值高字节查出温度值高字节查出温度值高字节Y YiHiH:MOVC A,A+DPTRMOVC A,A+DPTR6)6)给累加器清零:给累加器清零:给累加器清零:给累加器清零:(A A)0 07)7)数据指针加数据指针加数据指针加数据指针加1 1:(DPTRDPTR)(DPTRDPTR)+1+18)8)查出温度值低字节查出温度值低字节查出温度值低字节查出温度值低字节Y YiLiL:MOVC A,A+DPTRMOVC A,A+DPTR一步完成待查一步完成待查一步完成待查一步完成待查数据的偏移量数据的偏移量数据的偏移量数据的偏移量的计算的计算的计算的计算查表操作的几个问题查表操作的几个问题如何实现如何实现如何实现如何实现2 2 2 2字节电压值乘以字节电压值乘以字节电压值乘以字节电压值乘以2 2 2 2?单独使用单独使用单独使用单独使用RL A RL A RL A RL A 已经不能解决问题:已经不能解决问题:已经不能解决问题:已经不能解决问题:RL A RL A RL A RL A;(;(;(;(A A A A)(A A A A)*2 2 2 2,前提是前提是前提是前提是(A A A A)7FH7FH7FH7FH解决办法:解决办法:解决办法:解决办法:21H21H20H20H查表操作的几个问题查表操作的几个问题如何实现如何实现如何实现如何实现2 2 2 2字节电压值乘以字节电压值乘以字节电压值乘以字节电压值乘以2 2 2 2?设:设:设:设:(20H20H20H20H)=b b b b7 7 7 7b b b b6 6 6 6b b b b5 5 5 5b b b b4 4 4 4b b b b3 3 3 3b b b b2 2 2 2b b b b1 1 1 1b b b b0 0 0 0(21H21H21H21H)=a a a a7 7 7 7a a a a6 6 6 6a a a a5 5 5 5a a a a4 4 4 4a a a a3 3 3 3a a a a2 2 2 2a a a a1 1 1 1a a a a0 0 0 0 目的:目的:目的:目的:(20H20H20H20H)=b b b b6 6 6 6b b b b5 5 5 5b b b b4 4 4 4b b b b3 3 3 3b b b b2 2 2 2b b b b1 1 1 1b b b b0 0 0 0a a a a7 7 7 7(21H21H21H21H)=a a a a6 6 6 6a a a a5 5 5 5a a a a4 4 4 4a a a a3 3 3 3a a a a2 2 2 2a a a a1 1 1 1a a a a0 0 0 00 0 0 0 两次使用两次使用两次使用两次使用RLC ARLC ARLC ARLC A分步解决问题:分步解决问题:分步解决问题:分步解决问题:MOVMOVA A,21H21HCLRCLR C CRLCRLC A AMOVMOV21H21H,A AMOVMOVA A,20H20HRLCRLC A AMOVMOV20H20H,A ACy ACy A0 0 a a7 7 a a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0a a7 7 a a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 0 0 (21H21H)=a=a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 0 0a a7 7 b b7 7 b b6 6 b b5 5 b b4 4 b b3 3 b b2 2 b b1 1 b b0 0b b7 7 b b6 6 b b5 5 b b4 4 b b3 3 b b2 2 b b1 1 b b0 0 a a7 7 (20H20H)=b=b6 6 b b5 5 b b4 4 b b3 3 b b2 2 b b1 1 b b0 0 a a7 7 查表操作的几个问题查表操作的几个问题高字节电压值(高字节电压值(高字节电压值(高字节电压值(20H20H)乘以乘以乘以乘以2 2过程中最高位过程中最高位过程中最高位过程中最高位b b7 7数据丢失是否影响查表结果?数据丢失是否影响查表结果?数据丢失是否影响查表结果?数据丢失是否影响查表结果?设:设:设:设:(20H20H)=b b7 7b b6 6b b5 5b b4 4b b3 3b b2 2b b1 1b b0 0(21H21H)=a=a7 7a a6 6a a5 5a a4 4a a3 3a a2 2a a1 1a a0 0 目的:目的:目的:目的:(20H20H)=b=b6 6b b5 5b b4 4b b3 3b b2 2b b1 1b b0 0a a7 7(21H21H)=a=a6 6a a5 5a a4 4a a3 3a a2 2a a1 1a a0 00 0 答:答:答:答:不会。不会。不会。不会。2 2字节电压值取值范围:字节电压值取值范围:字节电压值取值范围:字节电压值取值范围:00(20H)(21H)=X(20H)(21H)=XH H X XL L1023 1023 乘乘乘乘2 2之前之前之前之前(20H)(21H)=(20H)(21H)=000000b000000b3 3b b2 2b b1 1b b0 0 a a7 7a a6 6a a5 5a a4 4a a3 3a a2 2a a1 1a a0 0 即即即即最高的最高的最高的最高的6 bite6 bite都为都为都为都为0 0 高字节电压值(高字节电压值(高字节电压值(高字节电压值(20H20H)乘以乘以乘以乘以2 2过程中最高位过程中最高位过程中最高位过程中最高位b b7 7数据数据数据数据 丢失不会影响查表结果。丢失不会影响查表结果。丢失不会影响查表结果。丢失不会影响查表结果。数据表格超过数据表格超过256Byte查表查表 例程清单例程清单LTB2:MOV DPTR,#TAB2 MOV A,21H CLR C RLC A MOV 21H,A XCH A,20H RLC A MOV 20H,A数据表格超过数据表格超过256Byte256Byte查表查表 例程清单(续)例程清单(续)MOV MOV A A,21H21H;ADD ADD A,DPL A,DPL;MOV DPL,AMOV DPL,A MOV A,20H MOV A,20H ADDC A,DPH ADDC A,DPH MOV DPH,A MOV DPH,A CLR A CLR A MOVC A,A+DPTR MOVC A,A+DPTR MOV 22H,A MOV 22H,A INC DPTR INC DPTR CLR A CLR A MOVC A,A+DPTR MOVC A,A+DPTR MOV 23H,A MOV 23H,A RET RETTAB2:DWTAB2:DW;(20H)(21H)+(DPTR)(DPTR);(20H)(21H)+(DPTR)(DPTR);查第一字节查第一字节查第一字节查第一字节;第一字节存入第一字节存入第一字节存入第一字节存入22H22H中中中中;查第二字节查第二字节查第二字节查第二字节;第二字节存入;第二字节存入;第二字节存入;第二字节存入23H23H中中中中;温度值表温度值表温度值表温度值表查表操作的几个问题查表操作的几个问题数据表长度数据表长度数据表长度数据表长度=2KByte=2