8051汇编查表程序
debug_trig MACRO CPL P1_0 ENDM //宏定义PID采样值,NZRI编码之后,LSB PID_ACK EQU 02h PID_SETUP EQU 08h PID_OUT EQU 0Ah PID_IN EQU 0Bh PID_DATA1 EQU 0Ch PID_DATA0 EQU 0Dh SAMPLE_PIN BIT P0_0 // r0里面存正在接收的数据, r7为接收数据长度, r6为接收buffer指针, r5采样总线 CSEG AT 00003H sjmp pid_sample PID_TABLE: DB \ PID_SETUP, LOW(setup_preprocess), HIGH(setup_preprocess), \ PID_DATA0, LOW(data0_preprocess), HIGH(data0_preprocess), \ PID_DATA1, LOW(data_process), HIGH(data_process), \ PID_IN, LOW(in_process), HIGH(in_process), \ PID_ACK, LOW(ack_process), HIGH(ack_process), \ PID_OUT, LOW(out_procsee), HIGH(out_procsee) ack_process: ret setup_preprocess: ret out_procsee: ret in_process: ret data_process: ret data0_preprocess: mov r2, #08h //采集Byte数,采集8byte标准请求 mov r1, #07h //每个byte采样次数 setup采7次 nop pid_sample: mov a, r0 //数据暂存到A debug_trig mov c, SAMPLE_PIN //采样总线 rlc a //数据位右移 mov r0, a djnz r1, pid_sample get_pid_process_start: mov DPTR, #PID_TABLE check_pid: clr a MOVC A, @A+DPTR xrl a, r0 jnz next_pid //如果PID不匹配,取下一个比较 inc DPTR MOVC A, @A+DPTR mov r0, a inc DPTR clr a MOVC A, @A+DPTR mov DPH, a mov DPL, r0 CLR A JMP @A+DPTR next_pid: //此处有可能需要处理无法识别的PID inc DPTR inc DPTR inc DPTR sjmp check_pid //不认识的PID类型 avlid_pid: sjmp avlid_pid
posted on 2017-01-13 16:47 crazy_code1990 阅读(463) 评论(0) 编辑 收藏 举报