原创 读出ds1820序列号应用程序

2010-2-9 00:50 2346 6 6 分类: MCU/ 嵌入式

;|--------------------------------------------------|
;|       读出ds1820序列号应用程序,P1.0接ds1820        |
;|--------------------------------------------------|
         ORG 0000H
         AJMP MAIN
         ORG 0020H
;===========================================================
MAIN:    MOV   SP,#60H
         CLR   EA         ;使用ds1820一定要禁止任何中断产生
         LCALL   INT        ;初始化ds1820
         MOV   A,#33H
         LCALL   WRITE      ;送入读ds1820的ROM命令
         LCALL   READ       ;开始读出当前ds1820序列号
         MOV   40H,A
         LCALL   READ
         MOV   41H,A
         LCALL   READ
         MOV   42H,A
         LCALL   READ
         MOV   43H,A
         LCALL   READ
         MOV   44H,A
         LCALL   READ
         MOV   45H,A
         LCALL READ
         MOV   46H,A
         LCALL   READ
         MOV   47H,A
         LCALL   READ
         MOV   48H,A
         LCALL   READ
         MOV   49H,A
         SETB   EA
         SJMP   $
;===========================================================
INT:     CLR   EA           ;初始化ds1820子程序        
L0:   CLR   P1.0         ;ds1820总线为低复位电平
         MOV   R2,#200
L1:   CLR   P1.0
         DJNZ   R2,L1       ;总线复位电平保持400us
         SETB   P1.0        ;释放ds1820总线
         MOV   R2,#30
L4:   JNZ   R2,L4        ;释放ds1820总线保持60us
         CLR   C            ;清存在信号(存在C=1,不存在c=0)
         ORL   C,P1.0
         JC    L0            ;存在吗?不存在则重新来
         MOV   R6,#80
L5:   ORL   C,P1.0
         JC    L3
         DJNZ   R6,L5      
         SJMP   L0
L3:   MOV   R2,#240
L2:   JNZ   R2,L2
         RET
;===========================================================
WRITE:   CLR   EA           ;向ds1820写操作命令子程序
         MOV   R3,#8        ;写入ds1820的bit数,一个字节8个bit
WT1: SETB   P1.0
         MOV   R4,#8
         RRC   A            ;把一个字节data(A)分成8个bit环移给 C
         CLR   P1.0         ;开始写入ds1820总线要处于复位(低)状态
WT2: JNZ   R4,WT2       ;ds1820总线复位保持16us
         MOV   P1.0,C       ;写入一个bit
         MOV   R4,#20
WT3: JNZ   R4,WT3      ;等待40us
         DJNZ   R3,WT1      ;写入下一个bit
         SETB   P1.0        ;重新释放ds1820总线
         RET
;===========================================================
READ:    CLR   EA
         MOV   R6,#8        ;连续读8个bit
RE1: CLR   P1.0         ;读前总线保持为低
         MOV   R4,#4
         NOP
         SETB   P1.0        ;开始读,总线释放
RE2: JNZ   R4,RE2      ;持续8us
         MOV   C,P1.0       ;从ds1820总线读得一个bit
         RRC   A            ;把读得的位值环移给 A
         MOV   R5,#30
RE3: JNZ   R5,RE3      ;持续60us
         DJNZ   R6,RE1      ;读下一个bit
         SETB   P1.0        ;重新释放ds1820总线
         RET
;===========================================================  
         END

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条