打印

求教:用过义隆芯片的哥们告诉俺如何建表

[复制链接]
2177|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szshawn2010|  楼主 | 2010-1-16 03:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 szshawn2010 于 2010-1-18 11:47 编辑

用过义隆芯片的哥们告诉俺如何建表.谢谢!!

如果你心情好,再请你详细解说下
1.该表用于"显示"的思路方法步骤.譬如:用于数码管显示 1,2,3,...
2.与该表用于查找比对"数值"的方法思路步骤.譬如,一个热敏电阻测温度的板子.如何建立了一个 阻值--温度的对应二维表,然后又如何根据芯片测量的阻值,来对应这个表格,查出相对应的温度.


谢过再谢过~`学习至凌晨3点还不曾休息,已经奋战9个小时了,难啊!


********************感下下面的各位兄长的帮助***********************************

按照跟贴的各位兄弟的教导,我写了以下的程序.
我想,程序的思路不会有问题,可能是有些语句有些不妥或矛盾.以致不能按预期的方式工作
在编译时,下面的源代码是可以编译成功的.

再次恳请,心情好的兄弟,用过义隆153的朋友帮我指点一二.

其功能是:有两个按键,两个8字数码管
         按键1按下时,数值会加1( P60按下时,会加1)
             按键1,与2同时按下,数值减1 (P52按下时,会减1)


知道大家都比较忙,也没闲心情看这样的垃圾程序.恳请各位兄长,一人仅看一小段,心情好就看两段.这样一个接着一个的看下去.就能完成整篇检查了.谢谢






ORG 0x00
JMP main

ORG 0x08
JMP INTO_

ORG 0x10
   diSplay:        ; 显示的译码表 从0-9
     add  $,a
     retl @0x7f    ;0
     retl @0x0d    ;1
     retl @0xb7    ;2
     retl @0x9f    ;3
     retl @0xcd    ;4
     retl @0xdb    ;5
     retl @0xfb    ;6
     retl @0x0f    ;7
     retl @0xff    ;8
     retl @0xdf    ;9

ORG 0x30
;**************************
;MAIN 程序,包括 对通用寄存器的清理
;          I/O方向的设置
;          定时器中断功能的开启
;          持续的按键扫描         
;**************************
main:
  NOP
  NOP
  NOP
  CLR 0X10  ;0→0X10  ;通用寄存器0X10作为一个计数器
                      ;按键+,则0X10就+1,按键-,则0X10就-1
                      ;0X10的数值被转换成十进制后,其低四位即是个位数值,高四位即是十位数值
  
  CLR 0X11  ;0→0X11  
  CLR 0X12
  
  CLR 0X13
  CLR 0X14
  CLR 0X15
  
  MOV a,@0x01  
  IOW 6      ;p60设为输入,其余为输出
  MOV A,@0X04
  IOW 5      ;P52,为输入脚,其他为输出
  MOV A,@0X00
  MOV 5,A
  MOV 6,A
     
  BS 6,0     ;P60端口为按键.这里将P60端口设置为高电平
  BS 5,2     ;P53端口为按键.这里将P53端口设置为高电平
     
     
;;--------------------
;;  以下进行定时器中断开启设定
;;--------------------
     
  MOV A,@0X05
  CONTW
  BS 0X0F,0
  ENI           ;定时中断开启
     
     
;;--------------------
;; 主程序中的扫键
;;--------------------

SCAN:
   JBC 6,0
   JMP SCAN
   CALL YANSHI_
   JBC 6,0
   JMP SCAN
   JBC 5,2
   JMP ADD1  ;跳转到 '向上加1子程序'
   JMP SUB1  ;否则跳转到 '向下减1子程序'
   NOP
   NOP
   NOP
   JMP SCAN  ;担心中断返回来之后,程序向下跑,所以这里加了一句,JMP SCAN.
             ;不知这一句是否是多余
   
   
;;---------------------
;;   向上加1子程序
;;---------------------

ADD1:
  MOV A,@0X62   ;98被放入ACC中
  SUB A,0X10   ;R10-98→A.R10是计数累加器
  MOV 0X11,A   ;A→R11
  DJZA 0X11    ;R11-1→A,IF=0则跳转到$+2
  
  INC 0X10     ;不等于0,说明数值未达到99,可以累加
               ;R10+1→R10 ,加完数值后应返回主程序
  NOP
  NOP
  JMP SCAN     ;=0,说明数值已经达到99,不再累加
  

  
;;------------------------------
;;   向下减1子程序
;;------------------------------
SUB1:
  MOV A,0X10   ;R10被放入ACC中
  ADD A,1      
  MOV 0X11,A
  DJZ 0X11     ;R10+1-1→R11,结果=0则跳转
  
  DEC 0X10
  NOP
  NOP
  JMP SCAN
  
  
  
  
;;------中断子程序-----

INTO_:
  INC 0X12
  JBC 0X12,1
  JMP OD           ;跳到个位显示程序
  JMP ODD          ;跳到十位显示程序
  
OD:
  MOV A,0X10       ;0X10记录按键+与按键-,当按键+时,其数值加,按键-时,其数值-
  DAA
  
  AND A,@0B00001111
  CALL DISPLAY
  NOP
  NOP
  NOP
  JMP DISPLAY_1:  
  
  
ODD:
  MOV A,0X10
  DAA  
  AND A,@0B11110000
  MOV 0x11,A
  SWAP 0X11
  MOV A,0X11
  CALL DISPLAY
  NOP
  NOP
  NOP
  JMP DISPLAY_2
  
DISPLAY_1:
  MOV 6,A
  JBC 6,3
  JMP ONE
  JMP TWO
ONE:  
  BC 5,1
  BS 5,3
  BS 5,0
  NOP
  NOP
  JMP RE_FIT
  
TWO:
  BC 5,1
  BC 5,3
  BS 5,0
  NOP
  NOP
  JMP RE_FIT
  
DISPLAY_2:

  MOV 6,A
  JBC 6,3
  JMP ONE1
  JMP TWO1
ONE1:  
  BC 5,0
  BS 5,3
  BS 5,1
  JMP RE_FIT
  
TWO1:
  BC 5,0
  BC 5,3
  BS 5,1
  
RE_FIT:
  BC 0X0F,0
  RETI
  

;;;----------------------
;;   延时子程序
;;-----------------------
YANSHI_:
    MOV A,@0X30
    MOV 0X15,A
DE2:MOV A,@0X03
    MOV 0X14,A
DE1:MOV A,@0X90
    MOV 0X13,A
   
    DJZ 0X13
    JMP $-1
    DJZ 0X14
    JMP DE1
    DJZ 0X15
    JMP DE2
   
    RET
  
  


  
  NOP
  NOP
  END

相关帖子

沙发
zhaoyu2005| | 2010-1-16 08:33 | 只看该作者
好今年没用了,猛然间也说不清,给你个参考的子程序
ORG      0x0013  ;显示数据区
DATADIS:   ADD      PCC,A          ;PASSED
           RETL     @0x7D   ;0
           RETL     @0x28   ;1
           RETL     @0xDC   ;2
           RETL     @0xBC   ;3
           RETL     @0xA9   ;4
           RETL     @0xB5   ;5
           RETL     @0xF5   ;6
           RETL     @0x2C   ;7
           RETL     @0xFD   ;8
           RETL     @0xBD   ;9
这个是就是显示译码,不过引脚不是一一对应的,所以位乱了,数值有点怪,但是原理是这样,调用子程序,返回一个数值,你看下指令说明

使用特权

评论回复
板凳
szshawn2010|  楼主 | 2010-1-16 11:35 | 只看该作者
2# zhaoyu2005

太感谢你了,哥们!!!

我再慢慢琢磨一下

使用特权

评论回复
地板
szshawn2010|  楼主 | 2010-1-16 13:30 | 只看该作者
2# zhaoyu2005

这个兄长,关于调用子程序来查表,我也查了指令了.但是没有详细的说明.

你给的范例,我看了许久还是没想明白.请你帮忙再对程序进行一下解说.

使用特权

评论回复
5
leolle| | 2010-1-16 16:12 | 只看该作者
ORG  0X500
CFTEMP:              ;摄氏温度转换表      
      MOV  A,@0X10
      ADD  faddata,A
      MOV  A,@67
      SUB  faddata,A
      MOV  A,faddata
      MOV  2,A      
      ORG  0X510      
      RETL @50  ;67
      RETL @49  ;68
      RETL @49  ;69
      RETL @48  ;70
      RETL @48  ;71
      RETL @48  ;72
      RETL @47  ;73
      RETL @47  ;74
      RETL @46  ;75
      RETL @46  ;76
      RETL @45  ;77
      RETL @44  ;78
      RETL @44  ;79
      RETL @44  ;80
      RETL @43  ;81
      RETL @43  ;82
      RETL @42  ;83
      RETL @42  ;84
      RETL @42  ;85      
      RETL @41  ;86
      RETL @41  ;87
      RETL @40  ;88
      RETL @40  ;89
      RETL @39  ;90
      RETL @39  ;91
      RETL @38  ;92
      RETL @38  ;93
      RETL @38  ;94
      RETL @37   ;95
      RETL @37   ;96
      RETL @37   ;97
      RETL @36   ;98
      RETL @36   ;99
      RETL @36   ;100
      RETL @35   ;101
      RETL @34   ;102
      RETL @34   ;103
      RETL @34   ;104
      RETL @33   ;105
      RETL @33   ;106
      RETL @33   ;107
      RETL @32   ;108
      RETL @32   ;109
      RETL @32   ;110
      RETL @31   ;111
      RETL @31   ;112
      RETL @31   ;113
      RETL @30   ;114
      RETL @29   ;115
      RETL @29   ;116
      RETL @29   ;117
      RETL @28   ;118
      RETL @28   ;119
      RETL @28   ;120
      RETL @27   ;121
      RETL @27   ;122
      RETL @27   ;123
      RETL @26   ;124
      RETL @26   ;125
      RETL @26   ;126
      RETL @26   ;127
      RETL @25   ;128
      RETL @24   ;129
      RETL @24   ;130
      RETL @24   ;131
      RETL @23   ;132
      RETL @23   ;133
      RETL @23   ;134
      RETL @22   ;135
      RETL @22   ;136
      RETL @22   ;137
      RETL @22   ;138
      RETL @21   ;139
      RETL @21   ;140
      RETL @21   ;141
      RETL @20   ;142
      RETL @19   ;143
      RETL @19   ;144
      RETL @19   ;145
      RETL @19   ;146
      RETL @18   ;147
      RETL @18   ;148
      RETL @18   ;149
      RETL @17   ;150
      RETL @17   ;151
      RETL @17   ;152
      RETL @16   ;153
      RETL @16   ;154
      RETL @16   ;155
      RETL @15   ;156
      RETL @15   ;157
      RETL @14   ;158
      RETL @14   ;159
      RETL @14   ;160
      RETL @13   ;161
      RETL @13   ;162
      RETL @13   ;163
      RETL @12   ;164
      RETL @12   ;165
      RETL @12   ;166
      RETL @11   ;167
      RETL @11   ;168
      RETL @11   ;169
      RETL @10   ;170
      RETL @10   ;171
      RETL @9   ;172
      RETL @9   ;173
      RETL @9   ;174
      RETL @8   ;175
      RETL @8   ;176
      RETL @8   ;177
      RETL @7   ;178
      RETL @7   ;179
      RETL @7   ;180
      RETL @6   ;181
      RETL @6   ;182
      RETL @6   ;183
      RETL @5   ;184
      RETL @4   ;185
      RETL @4   ;186
      RETL @4   ;187
      RETL @3   ;188
      RETL @3   ;189
      RETL @3   ;190
      RETL @2   ;191
      RETL @2   ;192
      RETL @1   ;193
      RETL @1   ;194
      RETL @1   ;195
      RETL @0   ;196

使用特权

评论回复
6
zhaoyu2005| | 2010-1-18 10:07 | 只看该作者
ADD      PCC,A  
这是个关键,虽然好几年没玩了,不过看了我的程序应该是:A是偏移量,pcc是程序计数器或者指针,指向ADD      PCC,A下一指令地址,两者相加,就自动达到某个位置,比如A=0,PCC的值没有增加,那么就是指令 RETL     @0x7D   ;0   A=2;PCC=PCC+2,当然执行RETL     @0xDC   ;2了
仔细看看datasheet,应该有指令解释的

使用特权

评论回复
7
szshawn2010|  楼主 | 2010-1-18 11:18 | 只看该作者
6# zhaoyu2005

在编辑的过程中,我使用过 ADD PCC,A或ADD,PC,A都无法编辑,提示命令有错误,我就改成了 ADD $,A,我想这样也应该是可以的吧!

使用特权

评论回复
8
szshawn2010|  楼主 | 2010-1-18 11:18 | 只看该作者
使用 ADD,$,A  后,编译成功

使用特权

评论回复
9
szshawn2010|  楼主 | 2010-1-18 11:19 | 只看该作者
但是软件运行时,没有达到预期功能!

使用特权

评论回复
10
zhaoyu2005| | 2010-1-19 09:03 | 只看该作者
就忘了加PCC    ==      0X02,你就不回了?都给你指出了是程序计数器或者指针,弄个datasheet看看,R2就是,弄个详细的,有指令讲解的
要是不会自学,不适合干电子的

使用特权

评论回复
11
szshawn2010|  楼主 | 2010-1-19 22:51 | 只看该作者
10# zhaoyu2005

谢谢了兄弟!!!
批评的有道理!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

636

帖子

1

粉丝