| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 764 人关注过本帖, 1 人收藏
标题:求助 汇编翻译成C语言
只看楼主 加入收藏
云月
Rank: 1
等 级:新手上路
帖 子:17
专家分:7
注 册:2010-3-30
结帖率:50%
收藏(1)
已结贴  问题点数:0 回复次数:2 
求助 汇编翻译成C语言
下面是关于DS18B20的汇编语言,我想把它翻译成C语言,哪位大侠能帮帮忙,在此先行谢过。
    命令                              功能描述                    命令代码
    CONVERT                       开始温度转换                    44H
    READ SCRATCHPAD             读温度寄存器(共9字节)              BEH
        READ ROM                    读DS18B20序列号                  33H
    WRITE SCRATCHPAD        将警报温度值写如暂存器第2、3字节         4EH
       MATCH ROM                        匹配ROM                       55H
      SEARCH ROM                        搜索ROM                       F0H
     ALARM SEARCH                       警报搜索                      ECH
    SKIP ROM                    跳过读序列号的操作                 CCH
READ POWER SUPPLY     读电源供电方式:0为寄生电源,1为外电源      B4H

    主要程序如下:
   
    MAIN:                        ;初始化
    LCALL RST_DS18B20
    LCALL GET_TEMPER
    MOV A,20H
    MOV C,08H
    RRC A
    MOV C,09H
    RRC A
    MOV C,10H
    RRC A
    MOV C,11H
    RRC A
    MOV 20H,A
    LCALL DISPLAY
    AJMPMAIN
    RST_DS18B20:
    SETB P3. 7
    NOP
    CLR P3. 7
    MOV R1, #3
    RST1:MOV R0, #110
    DJNZ R0, $
    DJNZ R1,RST1
    SETB P3. 7
    NOP
    NOP
    MOV R0, #25H
    RST2:JNB P3. 7,RST3
    DJNZ R0,RST2
    LJMP RST4
    RST3: SETB FLAG
    LJMP RST5
    RST4:CLR FLAG
    LJMP RST7
    RST5:MOV R0, #115
    RST6:DJNZ R0, $
    RST7: SETB P3. 7
    RET
    WR_DS18B20:                ;写数据子程序
    MOV R2, #8
    CLR C
    WR1: CLR P3. 7
    MOV R3, #6
    DJNZ R3, $
    RRC A
    MOV P3. 7,C
    MOV R3, #25
    DJNZ R3, $
    SETB P3. 7
    NOP
    DJNZ R2,WR1
    SETB P3. 7
    RET
    RD_DS18B20:            ;读数据子程序
    MOV R4, #2
    MOV R1, #20H
    READ1:
    MOV R2, #8
    READ2:
    CLR C
    SETB P3. 7
    NOP
    NOP
    CLR P3. 7
    NOP
    NOP
    NOP
    SETB P3. 7
    MOV R3, #9
    READ3:
    DJNZ R3,READ3
    MOV C, P3. 7
    MOV R3, #23
    READ4:
    DJNZ R3,READ4
    RRC A
    DJNZ R2,READ2
    MOV @R1,A
    INC R1
    DJNZ R4,READ1
RET
下面是关于单片机外部中断INT0的汇编程序
ORG    0003H
INTD0:
PUSH    ACC
PUSH    PSW
PUSH    DPH
PUSH    DPL
SETB    24H.0
MOV        A,    5FH
JZ         TING1
DEC        A
MOV        5FH,A
LJMP    FAN2
TING1: …
FAN2:
MOV        A,        5BH
JZ         TING2
DEC        A
MOV        5BH,    A
LJMP    ZONG
TING2:…
ZONG:
MOV        A,        59H
JZ         KAI
DEC        A
MOV        59H,    A
LJMP    EXIT
KAI:
CLR        24H.0
JB        26H.0,    KAI2
KAI2:
MOV        A,    66H
JZ         EXIT1
EXIT1:
MOV        5FH,5AH
MOV        5BH,66H
MOV        59H,#100
EXIT:
POP        DPL
POP        DPH
POP        PSW
POP        ACC
RETI
搜索更多相关主题的帖子: C语言 汇编 翻译 
2010-11-20 14:39
humin_qin
Rank: 2
等 级:论坛游民
帖 子:22
专家分:37
注 册:2010-11-20
收藏
得分:20 
//==============18B20初始化=====================================

Init_1820(void)
{
    uint i,j;
    dq=0;     //将总线拉低
    i=88;
    while(i>0) i--;    //延时700微秒---8US*X
    dq=1;      //释放总线
    i=4;
    while(i>0) i--;    //延时40微秒
    //检测总线上是否有器件应答(是否有存在信号)
    j=170;   
    while(dq&&j>0)j--;     //在480us内,18B20会拉低总线,否则要做超时处理:判断无该元件或该元件坏。

    if(j==0)DS1820_OK=1;//DS1820_OK=1,判断无该元件或该元件坏
    else DS1820_OK=0;
    j=130;
    while(!dq&&j>0)j--; //检测高电平的存在。否则一直循环。
    i=8;
    while(i>0) i--;     //延时32us
}


//=============从18B20上面读一个字节=======================
uchar ReadOneChar(void)
    {
        uchar i,dat=0;
        uint k=0;

                //ET1=0;//这里要求时间太严,一定要关了中断
                    for(i=0;i<8;i++)
                    {
                        dq=1;
                        k=1;
                        while(k>0) k--;     //延时8us
                        dq=0;
                        k++;//延时1us
                        
                        dq=1;
                        k++;
                        k++;//延时2us
                        if(dq)
                        {            
                        dat=dat>>1;
                        dat=dat|0x80;
                        }
                        else dat=dat>>1;
                        k=6;
                        while(k>0) k--;     //延时48us
                    }
            //    ET1=1;//开中断
                dq=1;

    return(dat);
    }

//================向DS18B20写入一个字节数据===================================================
WriteOneChar(uchar datt)
{
    uchar i;
    uint k=0;
//    ET1=0;//这里要求时间太严,一定要关了中断
    for(i=0;i<8;i++)
    {
        dq=1;
        k=1;while(k>0) k--;     //延时8us
        dq=0;
        dq=datt&0x01;
        k=6;
        while(k>0)k--;//延时48us
        dq=1;
        datt=datt>>1;
    }
//    ET1=1;//开中断
    k=1;
    while(k>0)k--;//延时48us

}

//=================向DS18B20读出温度=========================
ReadTempeature(void)
{
        uchar tempL,tempH;

        Init_1820();

        if(DS1820_OK==0)//如果18B20已坏,就不进行下面了
        {
                WriteOneChar(0xcc);//跳过序列号
                WriteOneChar(0xbe);
                tempL=ReadOneChar();
                tempH=ReadOneChar();
            
                if((tempH&0xf0)==0)//说明是正温度
                {
                    TE=0;//这是一个标志位,=0表示正温度,=1负温度
                    TEMP=(tempH*256)+tempL;
                    TEMP=(uint)((ulong)TEMP*625/1000);
                }
                else//说明是负温度
                {
                    TE=1;
                    TEMP=(tempH*256)+tempL;
                    TEMP=~TEMP;
                    TEMP+=1;//如果是负温度,就要进行取反加一的操作
                    TEMP=(uint)((ulong)TEMP*625/1000);
                }


        
            //    ff=((tempH*256)+tempL)*625;//本来是*0.0625的,我们在这里是625,放大1000倍
            //    TEMP=ff/1000;             //再缩小1000倍
            
                delay_ms(1);
            
                Init_1820();
                WriteOneChar(0xcc);//跳过序列号
                WriteOneChar(0x44);//启动温度转换
        }

}
2010-11-20 20:58
freedgun
Rank: 5Rank: 5
等 级:职业侠客
帖 子:147
专家分:302
注 册:2010-11-11
收藏
得分:0 
勇往直前的顶上去

有什么样的付出,就有什么样的收获!!
2010-11-25 15:37
快速回复:求助 汇编翻译成C语言
数据加载中...
 
   



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

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