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

📄 asm.s43

📁 基于MSP430F2274单片机的测温程序
💻 S43
字号:
//基于MSP430 DEMO板的测温程序,使用DS18B20温度传感器,平台是IAR Embedded Workbench IDE
#include "msp430x22x4.h"        
        NAME    main
        
        PUBLIC  main
        
        ORG     0FFFEh
        DC16    main
        
        RSEG    CODE

main    MOV.W   #0600H,SP                     ;设置堆栈指针
stopWDT MOV.W	#WDTPW+WDTHOLD,&WDTCTL        ;关看门狗
	MOV.B	&CALBC1_1MHZ,&BCSCTL1         ;设定DCO为1MHZ
	MOV.B	&CALDCO_1MHZ,&DCOCTL          ;

        call    #get_temp
mainloop
        nop     
        jmp     mainloop
;----------------------------------------------------------
get_temp
        dint                                   ;禁止一切中断
        call      #int
	mov.b     #0cch,r15                    ;跳过ROM
        call      #write_byte
        mov.b     #044h,r15                    
        call      #write_byte              

        call      #int                          ;温度转换完全,再次初始化
        mov.b     #0cch,r15                      ;跳过ROM
        call      #write_byte                    
        mov.b     #0beh,r15                     ;送入温度暂存器
        call      #write_byte    
        call      #read_word                    ;读字,数据存于r12
        eint
        ret
        
;-----------------------------------------------------------------        
int     mov.b   #01h,&P2DIR                    ;通信数据线设为P2.0
        bic.b   #01h,&P2OUT
        mov     #150,r4
delay   dec     r4                             ;>480us,  t=600us
        nop
        jnz     delay
        bis.b   #01h,&P2OUT   
        nop
              
        mov     #15,r4
delay1  dec     r4                             ;上升沿后15~60us DS18B20响应,等待60us
        nop
        jnz     delay1                                                                             
        bic.b   #01h,&P2DIR                     ;释放总线并进入接收状态                                      
        bit.b   #01h,&P2IN                      ;ds18b20回复存在脉冲60~240us
        jnz     delay
        mov     #48,r4                          ;480us
delay2  bit.b   #01h,&P2IN
        jz      int_end
        dec     r4
        nop
        jnz     delay2
        jmp     delay
int_end mov     #120,r4                         ;480us
delay3  dec     r4
        nop
        jnz     delay3
        ret
;--------------------------------------------
write_byte mov     #8,r5                        ;循环计数
        
wr      bis.b   #01h,&P2DIR
        bis.b   #01h,&P2OUT
        mov     #2,r4       
        bic.b   #01h,&P2OUT
delay4  dec     r4
        nop
        jnz     delay4                    ;复位保持8us<15us
        mov.b   r15,&P2OUT
        rrc     r15
        mov     #10,r4
delay5  dec     r4
        nop                               ;40us
        jnz     delay5
        dec     r5
        jnz     wr
        bis.b   #01h,&P2DIR
        bis.b   #01h,&P2OUT
        ret
;-------------------------------------------------
read_word    mov     #16,r5                 ;16bit

rd      bis.b   #01h,&P2DIR
        bic.b   #01h,&P2OUT
        mov     #2,r4
        
delay6  dec     r4
        nop
        jnz     delay6                     ;>1us,  t=8us
        bis.b   #01h,&P2OUT
        nop
        bic.b   #01h,&P2DIR                ;输入
        nop
        mov.b   &P2IN,r14
        rra     r14
        rrc     r12
        mov     #15,r4
delay7  dec     r4
        nop
        jnz     delay7                    ;60us
        dec     r5
        jnz     rd
        bis.b   #01h,&P2DIR
        bis.b   #01h,&P2OUT                   ;释放总线
        ret
        END     main

⌨️ 快捷键说明

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