这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 各位老师帮我看看这段汇编改C这么写对吗?

共2条 1/1 1 跳转至

各位老师帮我看看这段汇编改C这么写对吗?

院士
2006-09-17 18:14:16     打赏
各位老师帮我看看这段汇编改C这么写对吗?



关键词: 各位     老师     帮我     看看     这段     汇编     这么     对吗    

院士
2006-12-22 22:43:00     打赏
2楼
问 TCL549:      MOV R3,#08H            

             CLR CS                
                        

READ:        CLR DCLK              
           NOP         
             MOV C,DIN
             SETB DCLK
             RLC A    
             DJNZ R3,READ
             RET
             END
用C改完我是这么写的我是菜鸟见笑啊。

for(i=8;i>0;i--)
{
  cs=0;
  if(addr&0x80)
  {din=1;}
  else
  {din=0;}
  dclk=0;
  _nop_();
  addr=(addr<<1)+1;
  dclk=1;
}
}
如果不正确怎么写才正确呀,那位老师帮我写个正确的行吗? 1: 那为帮忙看看对不谢谢啦 2: 晕难道没人会吗!!!哎 3: 按找你给的汇编代码,应该是这样的:void read_tlc549(void)
{
unsigned char i,result;
cs=0;
for(i=8;i>0;i--)
  {
   dclk=0;
   dclk=0;  //代替nop指令
   if(din)
    {
     result++;
    }
   dclk=1;
   result<<=1;
  }
return result;
}


但是常规的读串行数据的操作,最后一位是不移的,应该像下面这样:
void read_tlc549(void)
{
unsigned char i,result;
cs=0;
for(i=8;i>0;i--)
  {
   dclk=0;
   result<<=1;  //代替nop指令
   if(din)
    {
     result++;
    }
   dclk=1;
  }
return result;
}


你的数据格式具体是什么,我也不清楚,或许是你汇编中写的那样也难说。 4: 谢谢您非常感谢呵呵就是一个A/D转换的程序,通过A/D的I/O口向MCU发送数据然后MCU处理后用数码显示,汇编我写好了可是用C写就蒙了。感谢 5: 汇编全程序CS          BIT      P1.5
LOAD        BIT      P1.2
DIN         BIT      P1.0
DCLK        BIT      P1.1
DOUT        BIT      P3.3
;**********************************
AD_DATA     EQU      036H     ;采集数据缓冲区
TIMER       DATA     030H
TIMER1      DATA     031H
TIMER2      DATA     032H
TIMER3      DATA     033H
;***********************************    
             ORG 0000H
             JMP MAIN
             ORG 0030H
MAIN:        MOV P1,#61H            ;禁用其它芯片  
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
TCL549:      MOV R3,#08H            ;计数器          

             CLR CS                 ;开启芯片
             ACALL DELAY            ;延时

READ:        CLR DCLK               ;读549芯片数据
             NOP         
             MOV C,DIN
             SETB DCLK

             RLC A    
             DJNZ R3,READ
             MOV AD_DATA,A
         LCALL DELAY_1S        ;延时
             SJMP START            ;调数码管显示程序
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
;*********************************************
;延时子程序
;**********************************************
DELAY:MOV R5,#01H
H0:  MOV R7,#0FFH
H1:  DJNZ R7,H1
      DJNZ R5,H0
      RET
;***********************************
;数码管显示程序   
;***********************************  
START:
             SETB CS                  ;禁用549芯片
         NOP
             mov     p1,#60h          ;禁止其它芯片
             CLR     DIN              ;初始化CH451
         SETB    DCLK              
         SETB    DIN              
         SETB    LOAD
         SETB    DOUT
             NOP
             MOV     B,#04H          ;设置CH451
         MOV     A,#03H          ;关看门狗开显示键盘
             nop
               LCALL   WRITE
         NOP
         LCALL   DELAY
             MOV     B,#09H          ;显示位置

START1:      MOV     R5,#00H         ;加载字数据1
TT1:         LCALL   ZHUAN             
             LCALL   WRITE          ;将数据送入数码管显示
         LCALL   DELAY_1S
         INC     R5
             INC B                  ;显示位置加一
         CJNE    R5,#02H,TT1
         LCALL   DELAY_1S
         JMP     MAIN          ;返回显示采集的数据

         
TAB:
             DB      03FH           ;0
         DB      006H           ;1
         DB      05BH           ;2
             DB      04FH           ;3
         DB      066H           ;4
         DB      06DH           ;5
             DB      07DH           ;6
         DB      07H            ;7
         DB      07FH           ;8
             DB      06FH           ;9
         DB      77H            ;A
         DB      07CH           ;B
             DB      039H           ;C
         DB      5EH            ;D
         DB      079H           ;E
         DB      071H           ;F
;*****************************************
;写数据到 ch451
;******************************************
WRITE:
            PUSH      ACC
            CLR       EX0
        CLR       LOAD
        MOV       R7,#08H
WRITE_1:
            RRC       A
        CLR       DCLK
        MOV       DIN,C
        SETB      DCLK
        DJNZ      R7,WRITE_1
        MOV       A,B
        MOV       R7,#004H
WRITE_2:
            RRC       A
        CLR       DCLK
        MOV       DIN,C
        SETB      DCLK
        DJNZ      R7,WRITE_2
        SETB      LOAD
        SETB      EX1
        POP       ACC
        RET

;**********************************
DELAY_1S:
             MOV      TIMER1,#1
TEST_DYA:    MOV      TIMER2,#255
TEST_DYA1:   MOV      TIMER3,#255
TEST_DYA2:   NOP
         NOP
         DJNZ     TIMER3,TEST_DYA2
             DJNZ     TIMER2,TEST_DYA1
         DJNZ     TIMER1,TEST_DYA
         RET
;*************************************
;将采集数据拆为为半字节
;**************************************
ZHUAN: MOV A,AD_DATA
       SWAP A
       MOV AD_DATA,A
       ANL A,#0FH   ;屏蔽高四位
       MOV     DPTR,#TAB     
       MOVC    A,@A+DPTR
       RET
       END

请问用a表示的那段用汇编怎么写啊,那位高手指点一下。
6: 用A表示的那段汇编用C怎么写啊 7: 什么叫做“用A表示的那段”? 8: 你好就是在程序里面有一段
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
TCL549:
要改成C语言的部分
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

我在学习C51所以想在用C一边着段程序

谢谢帮帮忙

9: 有人会不?谢谢啦 10: ? 11: 还是你自己改吧。估计没人会那么有空去帮你改的除非他自己想学习一下。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]