cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1493|回复: 0

1-wire程序,AVR单片机上的能跑[转]

[复制链接]
发表于 2004-12-4 18:27:45 | 显示全部楼层 |阅读模式
;****************************************
;文件:1-wire.asm
;功能:1-wire总线接口程序
;器件:AT90S2313,DS1821
;时钟:4.0MHz
;作者:Lindong
;日期:2003年7月23日
;****************************************

;过程名:w1_init
;功能:初始化1_wire总线
;入口参数:无
;出口参数:R30 1:有器件应答 0:无器件应答
;影响资源:R24,R25
;*****************************************
w1_init:
    clr     R30
    cbi     w1_port, w1_bit     输出清零
    sbi     w1_portd, w1_bit    设置为输出,将总线置为低电平
    ldi     R24, 0xE0           延时480us
    ldi     R25, 0x01
d1:
    sbiw    R24, 0x01   
    brne    d1
    cbi     w1_portd, w1_bit    设置为输入,放开总线
    ldi     R24, 0x5D           延时70us
d2:
    dec     R24
    brne    d2
    sbis    w1_pin, w1_bit      总线为高电平,没有器件应答
    inc     R30                 总线为低电平,有器件应答,置输出R30=1
    ldi     R24, 0xC2           延时450us,等待复位周期完成
    ldi     R25, 0x01
d3:
    sbiw    R24, 0x01
    brne    d3         
    ret
;*****************************************
;过程名:w1_write
;功能:写入一个字节数据
;入口参数:R23
;出口参数:无
;影响资源:R22,R24,R25
;*****************************************
w1_write:
    ldi     R22, 0x08           置计数器
write_next:
    rcall   w1_write_bit        写入一位
    ror     R23                 要写入的数据位移入最低位
    dec     R22
    brne    write_next          8位未完,继续下一位
    ret
;*****************************************
;过程名:w1_read
;功能:读取一个字节数据
;入口参数:无
;出口参数:R30 读取的8位数据存在R30中
;影响资源:R22,R24,R25
;*****************************************
w1_read:
    ldi     R22, 0x08           置计数器
read_next:   
    rcall   w1_read_bit         从总线上读取一位
    dec     R22
    brne    read_next           8位未完,继续读取下一位
    ret
;*****************************************
;过程名:w1_write_bit
;功能:写入一位数据
;入口参数:R23.0
;出口参数:无
;影响资源:R24
;*****************************************
w1_write_bit:
    sbi     w1_portd, w1_bit    设置为输出,将总线置为0
    ldi     R24, 0x11
d4:
    dec     R24                 延时12us
    brne    d4
    sbrc    R23, 0              要输出0,则跳过下一行,总线保持为0
    cbi     w1_portd, w1_bit    设置为输入,释放总线,输出1
    ldi     R24, 0x64
d5:
    dec     R24                 延时75us
    brne    d5
    cbi     w1_portd, w1_bit    写入结束,设置为输入,释放总线
    ldi     R24, 0x03           延时2us
d6:
    dec     R24
    brne    d6
    ret
;*****************************************
;过程名:w1_read_bit
;功能:读取一位数据
;入口参数:无
;出口参数:R30 读取的1位数据存在R30中最高位,同时R30种原有的数据右移1位
;影响资源:C,R24
;*****************************************
w1_read_bit:
    sbi     w1_portd, w1_bit    输出0,把总线拉低
    ldi     R24, 0x03           延时2us
d7:
    dec     R24
    brne    d7
    cbi     w1_portd, w1_bit    设置为输入,释放总线
    ldi     R24, 0x0F           延时10us
d8:
    dec     R24
    brne    d8     
    clc                  
    sbic    w1_pin, w1_bit      总线为低电平,跳过下一行,C保持为0
    sec                         总线为高电平,C置1
    ror     R30                 C移入R30最高位
    ldi     R24, 0x6B           延时80us,等待周期结束
d9:
    dec     R24
    brne    d9
    ret
;*****************************************
;This is the end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-5 13:47 , Processed in 0.486140 second(s), 6 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表