⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1990a.asm

📁 8051读maxim的ibutton的代码
💻 ASM
字号:
    ORG 0000H
    SJMP MAIN;读入DS1990A注册码
    ORG 0030H
MAIN:
    SETB P1.4;打开三态门
NK: CLR P1.5;主程序先在总线上产生高电平
    CLR C;
    LCALL RESET;进入复位与应答时隙
    JNC WAIT;若C为0则再去发复位脉冲
    MOV A,#0F0H;READROM指令
    LCALL BYTE;发送READROM指令
    MOV  B,#08H;读入字节数
READ:MOV A,#00H;发送00H在读入数据时释放总线
    LCALL BYTE;读入数据
    PUSH ACC;保存读入的数据
    DJNZ B,READ;循环读入
    MOV R0,#047H;RAM地址
    MOV B,#08H;需存储的字节数
PO: POP ACC;
    MOV @R0,A;将读入的数据存入RAM
    DEC R0
    DJNZ B,PO
WAIT:SJMP NK
RESET: PUSH B 
    PUSH ACC
    SETB P1.5;发送复位下降沿
    MOV B,#0FAH;设置复位脉冲保持时间
    DJNZ B,$;复位脉冲至少保持480uS
    CLR P1.5;释放总线产生上升沿
    MOV B,#08H;设置DS的等待时间
    CLR C;设置软件标志位
WAITLOW: JNB P2.2,WH;
    DJNZ B,WAITLOW;监测是否有应答脉冲
    SJMP SHORT;没有应答则再去发复位脉冲
WH: MOV B,#01EH;要求应答脉冲保持一段时间
HL: ORL C,P2.2;若C为0则不响应此下降沿
    DJNZ B,HL;要求检验到DS释放总线
SHORT:POP ACC
    POP B
    RET
BYTE: PUSH B;发送读入子程序
    MOV B,#08H;指令和数据的8位
BITLOOP:RRC A;右移指令一位
    LCALL TOUCHBIT;发出又读入
    DJNZ B,BITLOOP;循环右移
    RRC A;再循环一次
    POP B;
    RET
TOUCHBIT:SETB P1.5;发送接收结合子程序先给下降沿
    NOP
    MOV P1.5,C;发送一位
    SETB P2.2;输入先写1
    MOV C,P2.2;读入一位
    PUSH B
    MOV B,#12H
    DJNZ B,$;延时到tSOLT
    POP B
    CLR P1.5;发送读入结束后释放总线
    RET
    END





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -