打印

汇编语言转化为C语言,求助!!!

[复制链接]
2901|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yygkqzh|  楼主 | 2012-10-19 17:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yygkqzh 于 2012-10-19 17:41 编辑

以下是程序,这是一个交通灯的程序。
  ORG 0000H
   AJMP START
      ORG  0003H
     LJMP  INT00
     ORG  0013H
     LJMP INT10
START: MOV SP,#60H
       SETB  EX0
       SETB  EX1
       SETB  EA
       ;LCALL ST00
MAIN: LCALL ST10
       LCALL ST20
       LCALL ST30
       LCALL ST40
     LJMP  MAIN
ST00: MOV A,#00
       MOV P2,A
ST10:MOV R7,#30
ST11:MOV R0,#0DEH
      MOV P2,R0
      LCALL  DELAY1S
        RET
ST20:MOV R4,#05
ST21:MOV R0,#0DDH
      MOV  P2,R0
      MOV R5,#05
  L22:lCALL DELAY01S    ;延时0.5S
      DJNZ R5,L22
      MOV R0,#0DFH
      MOV P2,R0
      MOV R5,#05
  L23:lCALL DELAY01S     ;延时0.5S
      DJNZ R5,L23
      DJNZ R4,ST21
          RET
ST30:MOV R7,#30
      MOV R0,#0F3H
      MOV P2,R0
      LCALL DELAY1S
        RET
ST40:MOV R4,#05
ST41:MOV R0,#0EBH
      MOV P2,R0
      MOV R5,#05
  L42:lCALL DELAY01S    ;延时0.5S
      DJNZ R5,L42
      MOV R0,#0FBH
      MOV P2,R0
      MOV R5,#05
  L43:lCALL DELAY01S    ;延时0.5S
      DJNZ R5,L43
      DJNZ R4,ST41
      ; JMP  ST10
         RET
DELAY1S: MOV R3,#50        ;           R3存循环20ms的次数(50次)
          CLR A
    DIS0: MOV A,R7
        LCALL X0
        DJNZ  R3,DIS0
        DJNZ R7,DELAY1S
           RET
DELAY01S: MOV R7,#05        ;           R2存循环20ms的次数(5次)
           CLR A
     DIS1:  MOV A,R4
            LCALL X0
           DJNZ  R7,DIS1
            RET
DELAY10MS: MOV R2,#20    ;键扫描10ms子程序
   DEL1:    MOV R6,#248
            DJNZ R6,$
            DJNZ R2,DEL1
            MOV R6,#00
            MOV R2,#00
              RET
  TAB: DB 3FH,06H,5BH,4FH
      DB 66H,6DH,7DH,07H
      DB 7FH,6FH,77H,7CH
      DB 39H,5EH,79H,71H
      DB 40H,00H
X0:   MOV R6,A                           
        MOV R1,#40H                    
        MOV A,R6                           
        MOV B,#10
        DIV AB
       MOV @R1,A
        INC R1
       MOV @R1,B
       MOV DPTR,#TAB
       MOV A,@R1
       MOVC A,@A+DPTR
       MOV P0,A
       CLR P3.7
       LCALL  DELAY10MS
         SETB P3.7
         DEC R1
      MOV DPTR,#TAB
       MOV A,@R1
       MOVC A,@A+DPTR
       MOV P0,A
       CLR P3.6
      LCALL DELAY10MS
        SETB    P3.6
         RET
INT00: MOV 36H,R7
         PUSH 36H
        MOV 37H,R0
         PUSH 37H
        MOV 39H,R3
         PUSH 39H
        MOV R7,#10    ;紧急情况按钮,南北停止通行,均为红灯,持续10秒。
        MOV P2,#0DBH
       LCALL  DELAY1S
        POP 39H
        POP 37H
        POP 36H
        MOV R7,36H
        MOV R0,37H
        MOV P2,R0
        MOV R3,39H
         RETI
INT10:  MOV 36H,R7         ;R7----XIANSHIMIAOSHU
         PUSH 36H            ;R0----p2 显示灯的状态
         MOV 37H,R0            ;
         PUSH 37H
         MOV 38H,R6
         PUSH 38H
         MOV 39H,R3
         PUSH 39H               
         ;JNB P3.4,SV1
         ;JNB P3.5,SV2
         ; RET
SV1:   MOV R7,#10     ;南北车流量多,切换成南北方向上运行
        MOV R0,#0DEH
        MOV P2,R0
      LCALL  DELAY1S
          AJMP RETN
SV2:    MOV R7,#10      ;东西车流量多,切换成东西方向上运行
         MOV R0,#0F3H
         MOV P2,R0
      LCALL DELAY1S
          AJMP  RETN
RETN:      POP 39H
            MOV R3,39H
            POP 38H
            MOV R6,38H
            POP 37H
            MOV R0,37H
            POP 36H
            MOV R7,36H
              RETI

END

相关帖子

沙发
john_lee| | 2012-10-19 18:28 | 只看该作者
楼主等着天上掉馅饼?

使用特权

评论回复
板凳
阿南| | 2012-10-19 18:51 | 只看该作者
楼主把汇编的功能吃透,然后再重新用C写,应该问题不大的。

使用特权

评论回复
地板
yygkqzh|  楼主 | 2012-10-19 19:07 | 只看该作者
就是急着用,要不也不会求助大家。

使用特权

评论回复
5
yygkqzh|  楼主 | 2012-10-19 19:07 | 只看该作者
3# 阿南 就是急着用,要不也不会求助大家。

使用特权

评论回复
6
yygkqzh|  楼主 | 2012-10-19 19:07 | 只看该作者
2# john_lee 就是急着用,要不也不会求助大家。

使用特权

评论回复
7
aihe| | 2012-10-19 21:03 | 只看该作者
临时抱佛脚吧

使用特权

评论回复
8
aihe| | 2012-10-19 21:03 | 只看该作者
临时抱佛脚吧

使用特权

评论回复
9
kk8346| | 2012-10-19 21:26 | 只看该作者
呵呵,具体的问题还是要自己动手的,旁人可以给思路提建议,但不能包揽。

使用特权

评论回复
10
john_lee| | 2012-10-19 21:35 | 只看该作者
看程序本身应该就是汇编写的,而不是C编译生成的,不能直接逆向,楼主还是把程序吃透了,用C来写一个吧。

使用特权

评论回复
11
john_lee| | 2012-10-19 21:39 | 只看该作者
帮你逆向了4个函数,其它的不行了。
void st10()
{
        P2 = 0xde;
        delay1s(30);
}

void st20()
{
        u8 r4 = 5;
        do {
                u8 r5 = 5;
                P2 = 0xdd;
                do
                        delay01s();
                while (--r5);
                P2 = 0xdf;
                r5 = 5;
                do
                        delay01s();
                while (--r5);
        } while (--r4);
}

void st30()
{
        P2 = 0xf3;
        delay1s(30);
}

void st40()
{
        u8 r4 = 5;
        do {
                u8 r5 = 5;
                P2 = 0xeb;
                do
                        delay01s();
                while (--r5);
                P2 = 0xfb;
                r5 = 5;
                do
                        delay01s();
                while (--r5);
        } while (--r4);
}

使用特权

评论回复
12
asd21338| | 2012-10-19 23:56 | 只看该作者
进来,学习下

使用特权

评论回复
13
lpf336| | 2012-10-20 09:41 | 只看该作者
自己写多省事

使用特权

评论回复
14
szseo668| | 2012-10-20 10:15 | 只看该作者
一个交通灯用C语言来编写、我也是进来学习的。

使用特权

评论回复
15
mcu5i51| | 2012-10-20 12:01 | 只看该作者
懂些C的话,能写出汇编来也一定可以写出C来

使用特权

评论回复
16
651927693| | 2012-10-20 19:39 | 只看该作者
建议多给些资料,比如你的这个交通灯的原理,或者关于这个程序的任何信息。大家现在甚至不能了解你的那些16进制数据到底是干什么的。建议多给一些直观的东西

使用特权

评论回复
17
yygkqzh|  楼主 | 2012-10-21 17:09 | 只看该作者
11# john_lee 多谢您了

使用特权

评论回复
18
yygkqzh|  楼主 | 2012-10-21 17:15 | 只看该作者
其他的差不多就是有一个功能比较棘手,“按下紧急按钮时,南北向全部变成绿灯,东西向全部变为红灯;松开紧急按钮时,红黄绿灯与数码管的显示状态分别回到原来的状态。”

使用特权

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

本版积分规则

1

主题

28

帖子

0

粉丝