打印

看不懂汇编啊,求高人把这段TLV2543的程序翻译成C ,急用啊

[复制链接]
2302|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
69575zyxsw|  楼主 | 2010-5-13 07:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CS        BIT       P1.0
          SDO       BIT       P1.1
          SDI       BIT       P1.2
          CLOCK     BIT       P1.3
          EOC       BIT       P1.4
          AD_DATA_H EQU       78H
          AD_DATA_L EQU       79H
          R8        EQU       7AH
          ORG       0000H
          LJMP      MAIN
          ORG       0030H
;*****************************************
;系统初始化
;*****************************************
MAIN:     MOV       30H,#00H
          MOV       31H,#00H
          MOV       32H,#00H
          MOV       33H,#00H
MAIN_2:   ACALL     TLC2543      ;调用TLC2543AD转换子程序
          ACALL     CHULI        ;调用数据处理子程序,将AD转换结果乘以122,结果放入40H~42H单元
          MOV       R5,40H
          MOV       R6,41H
          MOV       R7,42H
          ACALL     H3B4         ;调用三字节二进制转四字节BCD码,结果放入43H~46H单元
          ACALL     CHAIFEN      ;调用拆分子程序
          MOV       R8,#25
MAIN_1:   ACALL     DISPLAY      ;调用显示子程序
          DJNZ      R8,MAIN_1
          AJMP      MAIN_2
;*****************************************
;TLC2543AD转换子程序
;*****************************************
TLC2543:  CLR       CLOCK          ;清时钟
          SETB      CS             ;设置片选为高
          CLR       CS             ;设置片选为低
          MOV       R4,#4          ;先读高4位数据
          MOV       A,#00H         ;选择通道0
TLC2543_1:MOV       C,SDO
          RLC       A
          MOV       SDI,C
          SETB      CLOCK
          CLR       CLOCK
          DJNZ      R4,TLC2543_1
          MOV       AD_DATA_H,A    ;保存高4位数据
          MOV       A,#00H
          MOV       R4,#8          ;再读低8位数据
TLC2543_2:MOV       C,SDO
          RLC       A
          SETB      CLOCK
          CLR       CLOCK
          DJNZ      R4,TLC2543_2
          MOV       AD_DATA_L,A     ;保存低8位数据
          SETB      CS              ;设置片选为高
          RET
;*****************************************
;数据处理子程序,将AD转换结果乘以122,结果放入40H~42H单元
;*****************************************
CHULI:    MOV       A,AD_DATA_L
          MOV       B,#122
          MUL       AB
          MOV       42H,A
          MOV       41H,B
          MOV       A,AD_DATA_H
          MOV       B,#122
          MUL       AB
          ADD       A,41H
          MOV       41H,A
          MOV       A,B
          ADDC      A,#00H
          MOV       40H,A
          RET
;*****************************************
;入口条件:待转换的三字节十六进制整数在R5(高)、R6、R7中。
;出口信息:转换后的四字节BCD码整数在R1(高)、R2、R3、R4中。
;影响资源:PSW、A、R0~R7 堆栈需求: 2字节
;*****************************************
H3B4:     CLR       A ;BCD码初始化
          MOV       R1,A
          MOV       R2,A
          MOV       R3,A
          MOV       R4,A
          MOV       R0,#24 ;转换三字节十六进制整数
H3B4_1:   MOV       A,R7 ;从高端移出待转换数的一位到CY中
          RLC       A
          MOV       R7,A
          MOV       A,R6
          RLC       A
          MOV       R6,A
          MOV       A,R5
          RLC       A
          MOV       R5,A
          MOV       A,R4 ;BCD码带进位自身相加,相当于乘2
          ADDC      A,R4
          DA        A;十进制调整
          MOV       R4,A
          MOV       A,R3
          ADDC      A,R3
          DA        A
          MOV       R3,A
          MOV       A,R2
          ADDC      A,R2
          DA        A
          MOV       R2,A
          MOV       A,R1
          ADDC      A,R1
          DA        A
          MOV       R1,A
          DJNZ      R0,H3B4_1 ;处理完24bit
          MOV       43H,R1
          MOV       44H,R2
          MOV       45H,R3
          MOV       46H,R4
          RET
;*****************************************
;拆分子程序,结果放入30H~33H
;*****************************************
CHAIFEN:  MOV       A,44H
          ANL       A,#0F0H
          SWAP      A
          MOV       30H,A
          MOV       A,44H
          ANL       A,#0FH
          MOV       31H,A
          MOV       A,45H
          ANL       A,#0F0H
          SWAP      A
          MOV       32H,A
          MOV       A,45H
          ANL       A,#0FH
          MOV       33H,A
          RET

相关帖子

沙发
eleqq| | 2010-5-13 10:23 | 只看该作者
帮你顶起来

使用特权

评论回复
板凳
ygzjyh| | 2010-5-14 22:25 | 只看该作者
楼主这段程序从哪下的啊,怎么和我写的一模一样啊,而且还少了一段吧。源程序应该如下:
CS        BIT       P1.0
          SDO       BIT       P1.1
          SDI       BIT       P1.2
          CLOCK     BIT       P1.3
          EOC       BIT       P1.4
          AD_DATA_H EQU       78H
          AD_DATA_L EQU       79H
          R8        EQU       7AH
          ORG       0000H
          LJMP      MAIN
          ORG       0030H
;*****************************************
;系统初始化
;*****************************************
MAIN:     MOV       30H,#00H
          MOV       31H,#00H
          MOV       32H,#00H
          MOV       33H,#00H
MAIN_2:   ACALL     TLC2543      ;调用TLC2543AD转换子程序
          ACALL     CHULI        ;调用数据处理子程序,将AD转换结果乘以122,结果放入40H~42H单元
          MOV       R5,40H
          MOV       R6,41H
          MOV       R7,42H
          ACALL     H3B4         ;调用三字节二进制转四字节BCD码,结果放入43H~46H单元
          ACALL     CHAIFEN      ;调用拆分子程序
          MOV       R8,#25
MAIN_1:   ACALL     DISPLAY      ;调用显示子程序
          DJNZ      R8,MAIN_1
          AJMP      MAIN_2
;*****************************************
;TLC2543AD转换子程序
;*****************************************
TLC2543:  CLR       CLOCK          ;清时钟
          SETB      CS             ;设置片选为高
          CLR       CS             ;设置片选为低
          MOV       R4,#4          ;先读高4位数据
          MOV       A,#00H         ;选择通道0
TLC2543_1:MOV       C,SDO
          RLC       A
          MOV       SDI,C
          SETB      CLOCK
          CLR       CLOCK
          DJNZ      R4,TLC2543_1
          MOV       AD_DATA_H,A    ;保存高4位数据
          MOV       A,#00H
          MOV       R4,#8          ;再读低8位数据
TLC2543_2:MOV       C,SDO
          RLC       A
          SETB      CLOCK
          CLR       CLOCK
          DJNZ      R4,TLC2543_2
          MOV       AD_DATA_L,A     ;保存低8位数据
          SETB      CS              ;设置片选为高
          RET
;*****************************************
;数据处理子程序,将AD转换结果乘以122,结果放入40H~42H单元
;*****************************************
CHULI:    MOV       A,AD_DATA_L
          MOV       B,#122
          MUL       AB
          MOV       42H,A
          MOV       41H,B
          MOV       A,AD_DATA_H
          MOV       B,#122
          MUL       AB
          ADD       A,41H
          MOV       41H,A
          MOV       A,B
          ADDC      A,#00H
          MOV       40H,A
          RET
;*****************************************
;入口条件:待转换的三字节十六进制整数在R5(高)、R6、R7中。
;出口信息:转换后的四字节BCD码整数在R1(高)、R2、R3、R4中。
;影响资源:PSW、A、R0~R7 堆栈需求: 2字节
;*****************************************
H3B4:     CLR       A ;BCD码初始化
          MOV       R1,A
          MOV       R2,A
          MOV       R3,A
          MOV       R4,A
          MOV       R0,#24 ;转换三字节十六进制整数
H3B4_1:   MOV       A,R7 ;从高端移出待转换数的一位到CY中
          RLC       A
          MOV       R7,A
          MOV       A,R6
          RLC       A
          MOV       R6,A
          MOV       A,R5
          RLC       A
          MOV       R5,A
          MOV       A,R4 ;BCD码带进位自身相加,相当于乘2
          ADDC      A,R4
          DA        A;十进制调整
          MOV       R4,A
          MOV       A,R3
          ADDC      A,R3
          DA        A
          MOV       R3,A
          MOV       A,R2
          ADDC      A,R2
          DA        A
          MOV       R2,A
          MOV       A,R1
          ADDC      A,R1
          DA        A
          MOV       R1,A
          DJNZ      R0,H3B4_1 ;处理完24bit
          MOV       43H,R1
          MOV       44H,R2
          MOV       45H,R3
          MOV       46H,R4
          RET
;*****************************************
;拆分子程序,结果放入30H~33H
;*****************************************
CHAIFEN:  MOV       A,44H
          ANL       A,#0F0H
          SWAP      A
          MOV       30H,A
          MOV       A,44H
          ANL       A,#0FH
          MOV       31H,A
          MOV       A,45H
          ANL       A,#0F0H
          SWAP      A
          MOV       32H,A
          MOV       A,45H
          ANL       A,#0FH
          MOV       33H,A
          RET
;*******************
;显示子程序
;*******************
DISPLAY:  MOV       DPTR,#TAB1
          MOV       P2,#0FEH
          MOV       A,30H
          MOVC      A,@A+DPTR
          ORL       A,#80H
          MOV       P0,A
          ACALL     DS1MS
          MOV       P2,#0FDH
          MOV       A,31H
          MOVC      A,@A+DPTR
          MOV       P0,A
          ACALL     DS1MS
          MOV       P2,#0FBH
          MOV       A,32H
          MOVC      A,@A+DPTR
          MOV       P0,A
          ACALL     DS1MS
          MOV       P2,#0F7H
          MOV       A,33H
          MOVC      A,@A+DPTR
          MOV       P0,A
          ACALL     DS1MS
          RET
DS1MS:    MOV       TH1,#0FCH
          MOV       TL1,#18H
          SETB      TR1
DS1MS_1:  JBC       TF1,DS1MS_2
          SJMP      DS1MS_1
DS1MS_2:  CLR       TR1
          RET
TAB1:     DB   03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH
          END

使用特权

评论回复
地板
xushouxue999| | 2010-5-15 15:34 | 只看该作者
看来现在的人都确实是在研究“高科技”了,汇编这样的“低智商”的东西都不用了!
劝你一句:玩单片机,最好熟练应用汇编!

使用特权

评论回复
5
xwj| | 2010-5-15 15:50 | 只看该作者
汇编程序看不懂的话建议你先调整下缩进,理清结构和跳转,然后就能看懂了。

使用特权

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

本版积分规则

0

主题

20

帖子

1

粉丝