精品文档---下载后可任意编辑在单片机开发过程中.一些非线性的控制过程.最适合做一个表格来.时时改变系统的参数.达到控制的目的.最常的如产生正弦的的程.就是建一个大的数组时时改变输出的 8 位字节送给外部 DA.由 DA 生成一个完整的正弦波.当然了.LED 显示也是一个例子.通过建一个数组来实现段码的点亮点灭.下面就是一个 LED表---digits[0]#define SEG_a 0x01#define SEG_b 0x02#define SEG_c 0x04#define SEG_d 0x08#define SEG_e 0x10#define SEG_f 0x20#define SEG_g 0x40#define SEG_dot 0x80unsigned char digits[10] = { (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f), 过 MCS-51 指令系统中有专用的查表指令:MOVC A,@A+DPTR 和 MOV A,@A+PC. MOVC A,@A+DPTR 指令,DPTR 作为基址寄存器时,其值为 16 位而且可根据需要设计,故可用于在64KROM 范围内查表。编写查表程序时,首先把表的首址送入 DPTR 中,再将要查找的数据序号(或下表值)送入 A 中,然后就可以使用该指令进行查表操作,并将结果送累加器 A 中。 MOVC A,@A+PC 指令,PC 作为基址寄存器时,其值由指令的位置确定,它只能设在查表指令操作码下的256 个字节范围内。编写查表程序时,首先把查表数据的序号送入 A 中,再把从查表指令到表的首地址间的偏移量与 A 值相加,然后使用该指令进行查表操作,并把结果送累加器 A 中。 下面是把内部 RAM 30H-37H 单元中的十六进制数依次转换为 ASCII 码,并存入内部 RAM 60H-6FH 单元之中。用查表法编写程序。 分析:由于十六进制数是从 0~F,对应的 ASCII 码为 30H~46H,每一个单元存放的 16 进制数,转换为ASCII 码后分别存入 2 个单元,低位存低地址,高位存高地址。用 ANL A ,#0FH 分别取高 4 位和低 4 位。 进行查表转换成相应的 ASCII 码。 MOVC A , @A+DPTR 程序如下: ORG 0000H 精品文档---下载后可任意编辑AJMP MAININITIAL ORG 0050H MAININITIAL: ;给 30H-37H 赋初值 MOV R0,#30H ;设置存数指针 R0 初值 MOV R1,#00H ;设置赋值变量个数计数寄存器 R1(循环计数器)初值 MOV DPTR,#initialtab NEXTINITIAL: MOV A,R1 MOVC A,@A+DPTR ;查表数据送累加器 A MOV @R0,A INC R0 ;指针增一 INC R1 ;循环计数器增一 CJNE R1,#8,NEXTINITIAL ;判给 30H-3FH 赋初值完否 MAIN: MOV R0,#30H ;设...