标题:C语言正确,我想把它转变成汇编的形式,但没转换成,出错了,求赐教
只看楼主
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
结帖率:86%
已结贴  问题点数:20 回复次数:10 
C语言正确,我想把它转变成汇编的形式,但没转换成,出错了,求赐教
程序代码:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar shi,ge,aa,keycount=0,temp;
sbit anjian=P1^7;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void display(shi,ge);
void key ();
void init();
void delay(uint z);
/*-----主程序-----*/
void main()
{
    init();        //初始化
    while(1)
    {    
        key ();
        if(keycount==1)
         TR0=1;        //开中断
          if(keycount==2)
           TR0=0;
         if(keycount==3)
        {    
            temp=0;
            keycount=0;
        }
        if(aa==10){aa=0;
         if(temp<=99)
            {
                
                temp++;display(shi,ge);
            }
            else
            temp=0;}
        
    }
}


/*------初始化程序-------*/
void init()
{    
    keycount=0;
    temp=0;
    TMOD=0x01;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    EA=1;
    ET0=1;
    //TR0=0;        
}

/*-----定时器中断-----*/
void timer0() interrupt 1
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    aa++;    
}

/*-----显示子程序-----*/
void display(shi,ge)
{    
    shi=temp/10;
    ge=temp%10;
    P0=table[shi];;delay(70);
    P2=table[ge]; ;delay(70);
}

/*-----按键检测子程序-----*/
void key ()
{
    if(anjian==0)
    {
        delay(5);        //消抖
        if(anjian==0)
        keycount++;
    }
     //while(anjian==0);    
//display(shi,ge);        //等待按键弹起
}

/*-----延时子程序-----*/
void delay(uint z)        //延时约1ms
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=100;y>0;y--);
}        


程序代码:
     ORG 0000H
     ajmp START
     org 000bh
     ajmp timer0                
anjian        equ         P1.7     
keycount     equ      40h
shi             equ         41h
gewei         equ         42h
aa             equ         43h
temp        equ         44h
tab:     db         3fh,6h,5bh,4fh,66h
        db         6dh,7dh,7h,7fh,6fh 

     
       acall init
START:
         
       //位为1转移 key 按键判断
        
        acall key                //加1指令       
   
            JNB keycount,F1   //
            SETB TR0
         
F1:       
      mov r0,keycount
      cjne r0,#2,F2
      clr TR0
F2:
       mov r0,keycount
      cjne r0,#3,F3
      mov temp,#0
      mov keycount,#0
F3:
        mov r0,aa
        cjne r0,#10,F4
         mov aa,#0
        
        mov r0,temp
          cjne r0,#100,F5
        AJMP F4
F5:        inc temp
        acall display
          
  
F4:            
            mov temp,#0
key:
        jb anjian,F6
          ACALL delay5
         jb anjian,F6
         inc keycount
    
F6:         ret
init:
     mov keycount,#0
     mov temp,#1
     mov tmod,#01h
     mov TH0,#60
    mov TL0,#176
     setb EA
     setb ET0
     ret
display:        
     mov a,temp
     mov b,#10
     div ab 
     mov r2,A         //r2  十位 r3 个位    查表
     mov r3,B
     mov dptr,#tab
     mov a,r2
     movc a,@a+dptr
     mov P0,a
     acall delay70
     nop
     nop
     mov a,r3
     movc a,@a+dptr
     mov P2,a
     nop
     nop
     acall delay70
         
     reti

  
                   


delay70: 
    mov r6,#70
D2:    mov R7,#248    
d1:    djnz R7,d1
    djnz R6,D2
    ret
        
delay5:    
        mov r6,#5
F7:    mov R7,#248
F8:        djnz r7,F8
        djnz r6,F7
        ret

 

timer0:

    mov TH0,#60
    mov TL0,#176
    cpl p1.0
    inc aa            //中断函数
    ret
    
    end





就是这样子,
搜索更多相关主题的帖子: display include C语言 主程序 
2016-12-23 01:55
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
得分:0 
根据上述C语言改的汇编代码
程序代码:
     ORG 0000H
     ajmp START
     org 000bh
     ajmp timer0                
anjian        equ         P1.7     
keycount     equ      40h
shi             equ         41h
gewei         equ         42h
aa             equ         43h
temp        equ         44h
tab:     db         3fh,6h,5bh,4fh,66h
        db         6dh,7dh,7h,7fh,6fh 

     
       acall init
START:
         
       //位为1转移 key 按键判断
        
        acall key                //加1指令       
   
            JNB keycount,F1   //
            SETB TR0
         
F1:       
      mov r0,keycount
      cjne r0,#2,F2
      clr TR0
F2:
       mov r0,keycount
      cjne r0,#3,F3
      mov temp,#0
      mov keycount,#0
F3:
        mov r0,aa
        cjne r0,#10,F4
         mov aa,#0
        
        mov r0,temp
          cjne r0,#100,F5
        AJMP F4
F5:        inc temp
        acall display
          
  
F4:            
            mov temp,#0
key:
        jb anjian,F6
          ACALL delay5
         jb anjian,F6
         inc keycount
    
F6:         ret
init:
     mov keycount,#0
     mov temp,#1
     mov tmod,#01h
     mov TH0,#60
    mov TL0,#176
     setb EA
     setb ET0
     ret
display:        
     mov a,temp
     mov b,#10
     div ab 
     mov r2,A         //r2  十位 r3 个位    查表
     mov r3,B
     mov dptr,#tab
     mov a,r2
     movc a,@a+dptr
     mov P0,a
     acall delay70
     nop
     nop
     mov a,r3
     movc a,@a+dptr
     mov P2,a
     nop
     nop
     acall delay70
         
     reti

  
                   


delay70: 
    mov r6,#70
D2:    mov R7,#248    
d1:    djnz R7,d1
    djnz R6,D2
    ret
        
delay5:    
        mov r6,#5
F7:    mov R7,#248
F8:        djnz r7,F8
        djnz r6,F7
        ret

 

timer0:

    mov TH0,#60
    mov TL0,#176
    cpl p1.0
    inc aa            //中断函数
    ret
    
    end     ORG 0000H
     ajmp START
     org 000bh
     ajmp timer0                
anjian        equ         P1.7     
keycount     equ      40h
shi             equ         41h
gewei         equ         42h
aa             equ         43h
temp        equ         44h
tab:     db         3fh,6h,5bh,4fh,66h
        db         6dh,7dh,7h,7fh,6fh 

     
       acall init
START:
         
       //位为1转移 key 按键判断
        
        acall key                //加1指令       
   
            JNB keycount,F1   //
            SETB TR0
         
F1:       
      mov r0,keycount
      cjne r0,#2,F2
      clr TR0
F2:
       mov r0,keycount
      cjne r0,#3,F3
      mov temp,#0
      mov keycount,#0
F3:
        mov r0,aa
        cjne r0,#10,F4
         mov aa,#0
        
        mov r0,temp
          cjne r0,#100,F5
        AJMP F4
F5:        inc temp
        acall display
          
  
F4:            
            mov temp,#0
key:
        jb anjian,F6
          ACALL delay5
         jb anjian,F6
         inc keycount
    
F6:         ret
init:
     mov keycount,#0
     mov temp,#1
     mov tmod,#01h
     mov TH0,#60
    mov TL0,#176
     setb EA
     setb ET0
     ret
display:        
     mov a,temp
     mov b,#10
     div ab 
     mov r2,A         //r2  十位 r3 个位    查表
     mov r3,B
     mov dptr,#tab
     mov a,r2
     movc a,@a+dptr
     mov P0,a
     acall delay70
     nop
     nop
     mov a,r3
     movc a,@a+dptr
     mov P2,a
     nop
     nop
     acall delay70
         
     reti

  
                   


delay70: 
    mov r6,#70
D2:    mov R7,#248    
d1:    djnz R7,d1
    djnz R6,D2
    ret
        
delay5:    
        mov r6,#5
F7:    mov R7,#248
F8:        djnz r7,F8
        djnz r6,F7
        ret

 

timer0:

    mov TH0,#60
    mov TL0,#176
    cpl p1.0
    inc aa            //中断函数
    ret
    
    end


做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-12-23 11:44
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:20 
没有转换成功则说明还有bug。汇编的可读性较差,编程效率低,楼主那么长的代码,恐怕没有几个人会有耐心仔细去分析问题所在的。

活到老,学到老! http://www. E-mail:hu-jj@
2016-12-24 06:41
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
得分:0 
昨天我又重新写了一遍,实现了其中一小部分的功能了,剩下的我自己再看看。前辈说的对,这么长的代码,而且是可读性较差的汇编语言,确实不好回答!
谢谢指点!

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-12-24 12:44
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
得分:0 
昨天我又重新写了一遍,实现了其中一小部分的功能了,剩下的我自己再看看。前辈说的对,这么长的代码,而且是可读性较差的汇编语言,确实不好回答!
谢谢指点!

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-12-24 12:44
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
象我们业余的,要从书面上分析出代码中存在的所有问题,是非常困难的,最基本的方法就是上机测试,逐步排错,最终实现预想的结果。当然,简单短小的程序除外。

活到老,学到老! http://www. E-mail:hu-jj@
2016-12-25 08:30
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
得分:0 
http://  这是我根据这次单片机设计写的一篇博文,算是做了一个总结。

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-12-27 12:38
q913794286
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2017-4-27
得分:0 
像我们业余的,从书上抄代码都能抄错。还找不到问题。
2017-07-02 00:11
yehuabao
Rank: 2
等 级:论坛游民
帖 子:45
专家分:87
注 册:2017-8-3
得分:0 
以下是引用q913794286在2017-7-2 00:11:16的发言:

像我们业余的,从书上抄代码都能抄错。还找不到问题。

有同样的感受。
2017-08-06 06:10
云鬼鬼
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2017-8-21
得分:0 
像我们这些业余的,别说从书上抄代码了,就是给我本书,我都不知道翻哪一页
2017-08-21 12:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-472797-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.261120 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved