单片机的查表程序.doc

单片机的查表程序.doc

ID:55971685

大小:19.00 KB

页数:5页

时间:2020-06-18

单片机的查表程序.doc_第1页
单片机的查表程序.doc_第2页
单片机的查表程序.doc_第3页
单片机的查表程序.doc_第4页
单片机的查表程序.doc_第5页
资源描述:

《单片机的查表程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在单片机开发过程中.一些非线性的控制过程.最适合做一个表格来.时时改变系统的参数.达到控制的目的.最常的如产生正弦的的程.就是建一个大的数组时时改变输出的8位字节送给外部DA.由DA生成一个完整的正弦波.当然了.LED显示也是一个例子.通过建一个数组来实现段码的点亮点灭.下面就是一个LED表---digits[0]#defineSEG_a 0x01#defineSEG_b 0x02#defineSEG_c 0x04#defineSEG_d 0x08#defineSEG_e 0x10#defineSEG_f 0x20#defineSEG_g 0x40#defineSE

2、G_dot 0x80unsignedchardigits[10]={ (SEG_a

3、SEG_b

4、SEG_c

5、SEG_d

6、SEG_e

7、SEG_f),   //0 (SEG_b

8、SEG_c),         //1 (SEG_a

9、SEG_b

10、SEG_d

11、SEG_e

12、SEG_g),    //2 (SEG_a

13、SEG_b

14、SEG_c

15、SEG_d

16、SEG_g),    //3 (SEG_b

17、SEG_c

18、SEG_c

19、SEG_f

20、SEG_g),    //4 (SEG_a

21、SEG_c

22、SEG_d

23、SEG_f

24、SEG_g),    //5 (SEG_a

25、SEG_c

26、SEG_d

27、

28、SEG_e

29、SEG_f

30、SEG_g),   //6 (SEG_a

31、SEG_b

32、SEG_c),            //7 (SEG_a

33、SEG_b

34、SEG_c

35、SEG_d

36、SEG_e

37、SEG_f

38、SEG_g), //8 (SEG_a

39、SEG_b

40、SEG_c

41、SEG_d

42、SEG_f

43、SEG_g)  //9 };C查表就太简单了temp2=digits[show_data[i]];一句搞定,C中还有一个switch语句也是一个很好的用查表语句C51汇编就相对麻烦一点.不过MCS-51指令系统中有专用的查表指令:MOVCA,@A+DPTR和MOVA,@A+PC.MOVC

44、A,@A+DPTR指令,DPTR作为基址寄存器时,其值为16位而且可根据需要设计,故可用于在64KROM范围内查表。编写查表程序时,首先把表的首址送入DPTR中,再将要查找的数据序号(或下表值)送入A中,然后就可以使用该指令进行查表操作,并将结果送累加器A中。MOVCA,@A+PC指令,PC作为基址寄存器时,其值由指令的位置确定,它只能设在查表指令操作码下的256个字节范围内。编写查表程序时,首先把查表数据的序号送入A中,再把从查表指令到表的首地址间的偏移量与A值相加,然后使用该指令进行查表操作,并把结果送累加器A中。下面是把内部RAM30H-37H单元中的十六进制

45、数依次转换为ASCII码,并存入内部RAM60H-6FH单元之中。用查表法编写程序。分析:由于十六进制数是从0~F,对应的ASCII码为30H~46H,每一个单元存放的16进制数,转换为ASCII码后分别存入2个单元,低位存低地址,高位存高地址。用ANLA,#0FH分别取高4位和低4位。进行查表转换成相应的ASCII码。MOVC A,@A+DPTR程序如下:ORG 0000HAJMP MAININITIALORG 0050HMAININITIAL:;给30H-37H赋初值MOVR0,#30H;设置存数指针R0初值MOVR1,#00H;设置赋值变量个数计数寄存器R1(

46、循环计数器)初值MOVDPTR,#initialtabNEXTINITIAL:MOVA,R1MOVCA,@A+DPTR;查表数据送累加器AMOV@R0,AINCR0;指针增一INCR1;循环计数器增一CJNER1,#8,NEXTINITIAL;判给30H-3FH赋初值完否MAIN:MOVR0,#30H;设置十六进制数地址指针MOVR1,#60H;设置ASCII码地址指针MOVR7,#08H;需拼装的十六进制数字节个数MOVDPTR,#ACSIITABABC:MOVA,@R0;取十六进制数MOVB,A;暂存ANLA,#0F0H;取十六进制数的字节高4位RRA;取十六进

47、制数的字节高4位移到字节的低4位RRARRARRAMOVCA,@A+DPTR;查表数据送累加器AMOV@R1,A;保存转换结果INCR1;转换结果指针增一MOVA,BANLA,#0FH;取十六进制数的字节低4位MOVCA,@A+DPTR;查表数据送累加器AMOV@R1,A;保存转换结果INCR1;转换结果指针增一INCR0;转换数据指针增一DJNZR7,ABC;继续SJMP$initialtab:;给30H-37H赋值用初值表DB23H,6DH,09H,7FH,8CH,1EH,4BH,5AHACSIITAB:;0~F,对应的ASCII码表DB"012345678

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。