首页
基础教程 | 单片机设计实例 | 常用芯片 | 电子基础
当前位置:单片机教程 >> 单片机设计实例 >> 浏览文章 今天是:
单片机设计实例

1-wire总线汇编程序

作者:    来源:本站原创    点击数:   更新时间:2007年08月25日   
 

;**************1-wire总线汇编程**************************
;文件:1-wire.asm
;功能:1-wire总线接口程序
;器件:AT90S2313,DS1821
;时钟:4.0MHz
;作者:Lindong
;日期:2003年7月23日
;****************************************

;过程名:w1_init
;功能:初始化1_wire总线
;入口参数:无
;出口参数:R30 1:有器件应答 0:无器件应答
;影响资源:R24,R25
;***************1-wire总线汇编程**************************
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
;****************1-wire总线汇编程*************************
;过程名:w1_write
;功能:写入一个字节数据
;入口参数:R23
;出口参数:无
;影响资源:R22,R24,R25
;*****************1-wire总线汇编程************************
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
;***************1-wire总线汇编程**************************
;过程名: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
;****************1-wire总线汇编程*************************
;This is the end




 
发表评论】【告诉好友】【打印此文】【收藏此文】【关闭窗口
网友评论(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
 >> 推荐文章
单片机USB-ISP下载线制作
自制单片机实验板
单片机一键多功能按键识别设
 >> 阅读排行
keil教程
单片机电子时钟设计
单片机DS18B20水温控制系统
单片机交通灯设计
单片机课程设计
单片机时钟设计
单片机数字钟设计
单片机键盘程序(4×4矩阵式
单片机串口通讯
单片机秒表设计
 >> 相关文章
  • 暂无相关链接
  • 站长:刘兴国 站长信箱:372xcom1@21cn.com
    单片机教程 @ www.51hei.com 2007-2008