像您这样的查表方式还复杂么?您说的在后面标注是指什么?? 中颖的查表方法有2种: 中颖4位单片机有2种查表方法:普通查表(TJMP)方法和RDT(ROM DATA TABLE)查表方法。
一.普通查表方法(TJMP) 在中颖4位单片机中都可采用此方法来进行查表。
1. 普通查表原理 查表时,执行CALL指令后,下一条指令的地址被自动压入堆栈中,然后跳转到数据表处,执行TJMP指令,PC指针跳转到PC11~PC8,TBR(TABLE BRANCH REGISTER),AC(累加器)所指向的地址,该地址的数据通过RTNW指令返回,其中,高4位数据保存到TBR寄存器中,低4位数据保存到累加器AC中。返回时PC指针会自动被堆栈中保存的PC数据覆盖。
2. 实例 ;******************************* ; 调用部分 ;******************************* LDI TBR ,00H ;设置TBR的值为0 LDI TEMP,02H ;设置累加器AC的值为2 CALL DATA_TABLE ;查数据表 STA TEMP1,00H ;把低4位数据(1101B)保存到临时寄存器中 LDA TBR,00H ;读入高4位数据 STA TEMP2,00H ;把高4位数据(0010B)保存到临时寄存器中
;******************************* ; 数据表部分 ;******************************* ORG 300H ;设置PC地址 DATA_TABLE: TJMP ;跳转到由PC11~PC8,TBR,AC所指向的12位PC地址,此处 ;为跳转到302H RTNW 0001B,1000B ;301H RTNW 0010B,1101B ;302H RTNW 0011B,1100B ;303H 说明:TEMP,TEMP1,TEMP2为自定义的临时寄存器
3. 注意事项 通过观察可以发现,在查表时,TJMP指令跳转地址的最高4位是读取表格所在位置的PC指针的高4位,而用户在程序中只需要赋值低8位,这样,当数据表较大时(如大于等于256行)时,需要对TJMP指令跳转地址的高4位进行进位时,因程序中无法直接对PC值进行赋值,就会出现错误。所以在数据表较大时,如大于等于256行,应该把此表格分为几个小的表格,防止在查表时出现以上所说的错误。
二.RDT查表 为了提高对ROM空间的利用效率,在中颖一些新近推出的4位单片机中,推出了一种叫做RDT的查表方式,可以利用16位的ROM空间。
1. RDT查表原理 在具有RDT查表方式功能的单片机中,会有4个系统寄存器,共16位(RDT.15~RDT.0),在查表时,把表格数据所在的地址赋值给这4个系统寄存器,然后延时一条指令的时间,相应位置中的数据就被自动放到RDT的这4个系统寄存器中,读取这4个系统寄存器就可以得到相应位置上的数据了。
2. 实例 ;******************************* ; 调用部分 ;******************************* LDI TEMP,00H ; STA RDT_H ;赋值RDT最高4位数据 LDI TEMP,03H ; STA RDT_MH ;赋值RDT中高4位数据 LDI TEMP,00H ; STA RDT_ML ;赋值RDT中低4位数据 LDI TEMP,01H ; STA RDT_L ;赋值RDT低4位数据 NOP ;延时一条指令的时间 LDA RDT_L ;读入低4位数据 STA TEMP1,00H ;把低4位数据(00H)保存到临时寄存器中 LDA RDT_ML ;读入中低4位数据 STA TEMP2,00H ;把中低4位数据(03H)保存到临时寄存器中 LDA RDT_MH ;读入中高4位数据 STA TEMP3,00H ;把中高4位数据(02H)保存到临时寄存器中 LDA RDT_H ;读入高4位数据 STA TEMP4,00H ;把高4位数据(01H)保存到临时寄存器中 ;******************************* ; 数据表部分 ;******************************* ORG 300H ;设置PC地址 DATA_TABLE: DW 0123H ;300H DW 1230H ;301H DW 2301H ;302H
说明:RDT_H,RDT_MH,RDT_ML,RDT_L为RDT的四个系统寄存器,TEMP,TEMP1~TEMP4为自定义的临时寄存器。 3. 注意事项 在RDT查表时,IC内部要进行一些复杂的操作,所以不要进行单步访真,以免造成错误。 在对RDT的4个系统寄存器赋值时要注意赋值的顺序。 |