搜索
bottom↓
回复: 13

PIC单片机如何查表

[复制链接]

出0入0汤圆

发表于 2008-6-23 14:33:24 | 显示全部楼层 |阅读模式
刚学PIC单片机,想要用16F886在LCD上显示汉字,不知道怎么查表,高手能不能给点提示

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2008-6-23 15:42:49 | 显示全部楼层
没人知道?

出0入22汤圆

发表于 2008-6-23 15:58:11 | 显示全部楼层
应该跟avr一样的。

出0入0汤圆

 楼主| 发表于 2008-6-23 16:12:14 | 显示全部楼层
还没研究到AVR,PIC没有查表指令,不知道AVR有没有.

出0入0汤圆

发表于 2008-6-23 21:18:28 | 显示全部楼层
很久没用PIC的汇编了,都忘的差不多了,利用查表指令只能查最大256个地址范围,利用间接寻址方式,直接操作PC指针可以完成任意位置的跳转,当时建了一个2K的表就是用此方法的(PIC16F877芯片)。

建议用PICC写吧,呵呵,现在没有用过汇编了。

出0入0汤圆

 楼主| 发表于 2008-6-24 09:05:59 | 显示全部楼层
MAIN
  MOVLW 0X05
  MOVWF OFFSET
  PAGESEL LOOK_UP
  CALL LOOK_UP
  MOVWF VALUE
  GOTO $
LOOK_UP
  MOVLW HIGH(TABLE)
  MOVWF PCLATH
  MOVLW LOW(TABLE)
  ADDWF OFFSET,W
  BTFSC STATUS,C
  INCF PCLATH,F
  MOVF OFFSET,W
TABLE
  ADDWF PCL,F
dt 0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x0a,0x0b,0x0c,0x0D,0x0E,0x0F ……
我在网上找到了这个,当运行到  ADDWF PCL,F  那里的时候就不知道CPU怎么执行了,什么指令都不运行了,我用PICC看看

出0入0汤圆

发表于 2008-6-24 10:32:07 | 显示全部楼层
表格后面的数据用,RETLW 0X32 隔行再写这种方式试一下
QQ:185932251
电子攻城师群:64485187

出0入0汤圆

发表于 2008-6-24 10:45:54 | 显示全部楼层
一般的书上都有介绍的.
TABLE 是个子程序,所以一点要加返回指令,因为是查表,所以要带返回值
retlw k 表示从子程序返回后W寄存器里的值是k
PCL就是程序指针,修改它可以相对跳转.

出0入0汤圆

 楼主| 发表于 2008-6-24 13:40:03 | 显示全部楼层
我加 RETLW 试了下,不行,我只给一个数据就可以在LCD上显示,加上表部分不可以显示了,弄的头都大了

出0入0汤圆

发表于 2008-6-25 12:10:45 | 显示全部楼层
movlw        HIGH Decode
        movwf        PCLATH
        movf         DisplayValue,W
        call        Decode
        movwf        PORTB
        goto        Continue
Decode
        addwf        PCL,F       
        retlw        B’00111111’ ;decode 0
        retlw        B’00000110’ ;decode 1
        retlw        B’01011011’ ;decode 2
        retlw        B’01001111’ ;decode 3
        retlw        B’01100110’ ;decode 4
        retlw        B’01101101’ ;decode 5
        retlw        B’01111101’ ;decode 6
        retlw        B’00000111’ ;decode 7
        retlw        B’01111111’ ;decode 8
        retlw        B’01101111’ ;decode 9

出0入0汤圆

发表于 2008-6-25 16:54:58 | 显示全部楼层
;************************************查表
BMA
   MOVWF    R6
   MOVLW    LOW BMA1
   ADDWF    R6,1
   MOVLW    HIGH BMA1
   BTFSC    STATUS,C
   ADDLW    1
   MOVWF    PCLATH
   MOVF     R6,0  
   MOVWF    PCL  ;考察偏移量
BMA1      
   RETLW 0XA0    ;"0"编码
   RETLW 0XED    ;"1"编码
   RETLW 0X8A    ;"2"编码
   RETLW 0X8C    ;"3"编码
   RETLW 0XC5    ;"4"编码
   RETLW 0X94    ;"5"编码
   RETLW 0X90    ;"6"编码
   RETLW 0XEC    ;"7"编码
   RETLW 0X80    ;"8"编码
   RETLW 0X84    ;"9"编码
   RETLW 0XC0    ;'a'编码
   RETLW 0X89    ;'b'编码
   RETLW 0XB2    ;'c'编码
   RETLW 0X89    ;'d'编码
   RETLW 0X92    ;'e'编码
   RETLW 0XD2    ;'f'编码
   RETLW 0XC1    ;'X'编码
   RETLW 0X85    ;'y'编码
   RETLW 0XA9    ;'J'显示
   RETLW 0XFF    ;关闭显示

出0入0汤圆

 楼主| 发表于 2008-6-26 08:36:15 | 显示全部楼层
LCD 的字码也这样?有没有其他的办法?不用RETLW的

出0入0汤圆

发表于 2008-6-28 13:55:48 | 显示全部楼层
用指针
   MOVLW TABLE
   MOVWF FSR,F
   
   MOVF  INDF,W
   INCF  FSR,F
   ...
FSR是地址INDF中是内容.

出0入0汤圆

 楼主| 发表于 2008-6-28 14:53:11 | 显示全部楼层
MOVLW TABLE
MOVWF FSR,1
MOVLW COUNT   ;地址增加
ADDWF RSR,1
MOVLW  INDF,0
MOVWF PORTB   ;数据放RB显示
这样会不会与你的不同,我用MOVF->MOVLW,F->1,W->0,但是都是读到0X00....
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 16:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表