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

📄 temperasm.asm

📁 DSP开发的DS18B20汇编程序
💻 ASM
字号:
             .global _xx
date_size    .set     0ah
_xx           .usect   ".out", date_size
             .text 
PARMS: 
dsadd0      .word 0c00000h
dsaddr1     .word 0c00001h 
destaddr2   .word _xx
     
             .text
             .global _temper
;测温程序
_temper:
        ;ldp   PARMS
        ;ldi   @dsaddr1,  ar1 ;定时入口
        ;call  set
        call  rsreset;   复位传感器
        ldi   0fh,     r3
        subi  r2,      r3;检测有无传感器
        bnz   tss2       ;有传感器
        br    tss20      ;无传感器
tss2:   ldi   0cch,    r7;跳过rom匹配
        call  tswrite
        ldi   044h,    r7;转换命令
        call  tswrite
        ldi   8235h,   r1;延时1s 
        and   0ffffh,   r1
        call  delay15
        ldi   8235h,   r1;延时1s
        and   0ffffh,   r1
        call  delay15
        call  rsreset
        ldi   0fh,     r3
        subi  r2,      r3;检测有无传感器
        bnz   tss1       ;有传感器
        br    tss20      ;无传感器
tss1:   ldi   0cch,    r7;跳过rom匹配
        call  tswrite
        ldi   0beh,    r7;读命令
        call  tswrite
        call  tsread     ;读温度值
        
tss20:
        rets             ;定时返回
;复位         
rsreset:
        ldi   @dsaddr1,  ar1
        call  logic1        ;write
        call  set
        call  clear      ;发复位脉冲
        ldi   28h,     r1;延时600us
        call  delay15
       
        call   logic2; 释放总线
 	    ldi   3h,       r1 ;延时45us等待
        call  delay15
	
		ldi   *ar1,    ar0
        and   1,       ar0
        ldi   1,       r3
        cmpi  ar0,     r3
        bnz   tsr2     
        br    tsr3
        
tsr2:   ldi   00h,     r2;有传感器
        br    tsr4
tsr3:   ldi   0fh,     r2;无传感器       r2为标志    
        br    tsr5
tsr4:   ldi   28h,     r1;延时600us 
        ;ldi   1dh,     r1;延时435us
        call  delay15
tsr5:   ;call  set
        rets


;写入子程序
tswrite:ldi   @dsaddr1,  ar1
        ldi   r7,      r3                  ;  R7?
        ldi   08h,     r6;循环8次,写1个字节
tsw1:   call  set
        call  delay2     ;高电平延时2us


        call  clear     ;产生写信?        ;ldi   1,      r1
        ;call  delay15     
        call  delay2	;  延时2us
        
        ldi   r3,      r4
        and   1,       r4;取最低位数
        sti   r4,      *ar1;命令字按位依次送给ds18b20  
        ;ldi   1,       r1;延时15us,  ds18b20read 
        
        ldi   3,       r1;延时45us,  ds18b20read
        call  delay15
        
        ;call  set
        ;ldi   3,       r1;延时约45us保证持续写>60us     ???
        ;call  delay15
        ror   r3         ;rotate right
        subi  1,       r6;判断是否传完1个字节
        bnz   tsw1  
        call  set        ;发送完毕,置1
        rets


;读出子程序
tsread:;ldp    PARMS
       ldi    @destaddr2,  ar2;存储从ds18b20收到的9个字节到806000h开始的单元
       ldi    09h,     r5;读9个寄存器 
       
tsrd1: ldi    08h,     r6;循环8次,读1个字节 
       ldi    0,       r3
tsrd2: ldi    @dsaddr1,  ar1
       call   set
       call   delay2     ;高电平延时2us
       
       call   clear       ;产生读信号
       call   delay2      ;低电平延时2us
       
       call   logic2      ;释放总线               
       
       ;ldi    1,       r1;延时15us  ,(maybe too long)
       ;call   delay15
       call   delay2
       call   delay2
       ;call   delay2  
       ;call   delay2
       ldi    *ar1,    r4
       and    1,       r4    
       or     r4,      r3
       ror    r3   
       
       ldi    4,       r1;延时约45ns保证持续读>60ns,delay60 seconds
       call   delay15
       subi   1,       r6;判断是否读完1个字节
       bnz    tsrd2  
       call  set        ;发送完毕,置1
        ldi		24,		r2
tsrd3:  ror		r3
		subi    1,		r2
	    bnz		tsrd3
		
      ; ldi    -24,     r4;放在r3低8位  
      ; ash    r4,      r3
        sti    r3,      *ar2++(1)
          
       subi   1,       r5;判断是否读完9个寄存器
       bnz    tsrd1
       rets



;延时子程序(15us)
delay15:  push   r0
          push   r1
delay151: ldi   1b9h,    r0 ;15us
del15:   subi  1,       r0
         bnz   del15
         subi  1,       r1  ;delay R1*15us
         bnz   delay151  
         
          pop    r1
          pop    r0   
         rets


;延时2us
delay2:  push   r0
         ldi   3Ah,    r0 ;延时2us
del2:    subi  1,    r0
         bnz   del2   
         pop   r0          
         rets




; logical control
logic1: ldi    @dsadd0,  ar3;select74l244,write data
        ldi    0h,        r0
        sti    r0,       *ar3
        rets                        
                                
logic2: ldi    @dsadd0,  ar3;close74l244,read data
        ldi    7h,        r0
        sti    r0,       *ar3
        rets


;set/clear dsadd1   
set:    call  logic1
        ldi   1,       r0
        sti   r0,      *ar1
        rets
        
clear:  call  logic1
        ldi   0,       r0
        sti   r0,      *ar1
        rets










⌨️ 快捷键说明

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