下面是汇编语言实现楼宇对讲功能的查表实例:
当单片机外部系统发来不同的指令时,便启动查表功能,实现不同的操作,如单片机接收到的指令保存在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
汇编table指令什么意思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
;=====================================

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。