单片机汇编语言查表实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面是汇编语言实现楼宇对讲功能的查表实例:
当单片机外部系统发来不同的指令时,便启动查表功能,实现不同的操作,如单片机接收到的指令保存在RXD中,RXD+1保存指令终止符号,如要实现某个操作,外部发来0XA0操作符到RXD中,0XFF到RXD+1中,即开启查表,开始执行下列程序:
MOV A,(RXD_Buf+1)
CJNE A,RXD_Buf,Exit_Receive_Msg_Proc如果为退出指令,则退出
MOV B,RXD_Buf
JmpX_By_Ins Division_Instruction,Run_Instr_Addr子程序
;==================================
Division_Instruction:
DB00H,01H,03H,05H,06H,07H,09H,0AH,13H,14H,15H,16H
DB28H,29H,2AH,2CH,2EH,30H,31H,33H,35H,FAH;FLAG OF END
;==================================
Run_Instr_Addr:
LJMP Call_By_Manger;00H;
LJMP Put_Down_Hook;01H;
LJMP Put_Off_Hook;03H;
LJMP Disable_Calling;05H;
LJMP Enable_Get_Msg;06H;
LJMP There_Are_Msg;07H;
LJMP Call_By_Door;09H;
LJMP FeedBack_Alarm;0AH
LJMP Put_Off_Hook_For_Out;13H;
LJMP Set_Up_Fortify_By_GLC;14H;
LJMP Disable_Alarm_By_GLC;15H;
LJMP Reset_Divi_Password;16H;
LJMP Calling_By_T_Main;28H;
LJMP Hook_On_By_Brother;29H;
LJMP Hook_Off_By_Brother;2AH;
LJMP Hook_On_By_T_Main;2CH;
LJMP Calling_By_Brother;2EH;
LJMP Define_Baud_Rate;30H
LJMP GLC_Proced_Alarm;31H
LJMP Graphic_Msg_In_Main;33H
LJMP Rst_Standart_Rate;35H
Return_Main_Body_For_Divi_Ins:
LJMP Exit_Receive_Msg_Proc;FAH
JmpX_By_Ins MACRO I_Table,F_Table
MOV DPTR,#I_Table将指令表首地址赋给DPTR
LCALL DPTR_Comp_B调用
MOV A,R05此时R05表示查找到的位置
MOV B,#03LJMP指令占三个字节
MUL AB
MOV DPTR,#F_Table将功能地址赋给DPTR,加上要跳转的位置
JMP@A+DPTR找到相应的LJMP子程序,开始执行
ENDM
;=============================
DPTR_Comp_B:;INPUT INSTRUCTION CODE,RETURN R7---INSTRUCTION SEQUENCE
MOV R05,#0从头开始查表
Comp_Next_DPTR:
CLR A
MOVC A,@A+DPTR将指令表首地址赋给A
CJNE A,B,Chk_End_Flag此时B为接收的指令,如A0H,不相等,跳转,如果找到,则退出
SJMP Exit_DPTR_Comp
Chk_End_Flag:
CJNE A,#FAH,Comp_INC_DPTR A不是跳出指令,跳转,往下查表
SJMP Exit_DPTR_Comp
Comp_INC_DPTR:
INC DPTR位置加1
INC R05
SJMP Comp_Next_DPTR查找下一个
Exit_DPTR_Comp:
RET
;=====================================