TimerCLR bis.w #TACLR,&TACTL
MOV .w #36,&CCR1 ; Delay for transducer to settle
MOV .w #CCIE,&CCTL1 ; 比较模式中断
bis.w #LPM0,SR ; 等待CCR1中断
bis.b #CAON,&CACTL1 ; 比较器A 开
bic.b #CAIFG,&CACTL1 ; 使能比较器A中断标志
MOV .w #CM0+CCIS0+SCS+CAP+CCIE,&CCTL1
; 正边沿, CCIB,Cap,中断
push &TAR ; TOS = TAR 在测量的开始
bis.w #LPM0,SR ; 等待CCR1中断(Echo)
clr.w &CCTL1 ; 不使用CCTL1
bic.b #BIT0,&P1OUT ; LED关闭
bit.b #CAIFG,&CACTL1 ; 检查回声波不接收
jz Next ; '超出范围'条件
MOV .w &CCR1,Result ; Result = TAR (CCR1) at EOC
sub.w @SP+,Result ; Result = time taken
add.w #48,Result ; 补偿爆发12个时钟
; 传递时间 + 36个时钟延时
;****************** 测量完成 **************************************************
call #Math_calc ; 调用数学子程序
swpb DIGITS ; Shift left by two digits for /100
jmp Mainloop ; 下一次测量周期
Next MOV .w #0beh,DIGITS ; 不回声接收显示'E' 表示错误
jmp Mainloop
;******************************************************************************
Init_Device ; 初始化MSP430x41x
;******************************************************************************
MOV .w #WDTPW+WDTHOLD,&WDTCTL ; 停止WDT
bis.b #030h,&FLL_CTL0 ; 开启负载电容器对于XTAL振荡器开始振荡
;
call #Delay ; 延时对于振荡器到稳定为止
MOV .b #03fh,&SCFQCTL ; MCLK = 40KhzX64 = 2.56Mhz
call #Delay ; 延时对于FLL到稳定为止
SetupP1 MOV .b #000h,&P1OUT ; 清除P1 输出寄存器
bis.b #0bfh,&P1DIR ; 不用的PIN设置为输出
bis.b #040h,&P1SEL ; 比较器A输入功能
SetupP2 MOV .b #000h,&P2OUT ; 清除P2输出寄存器
bis.b #0ffh,&P2DIR ; 不用的Pin设置为输出
SetupP6 MOV .b #000h,&P6OUT ; 清除P6输出寄存器
bis.b #0ffh,&P6DIR ; 不用的Pin设置为输出
SetupBT MOV .b #BTFRFQ0+BTFRFQ1+BTIP2+BTDIV,&BTCTL
; Enable BT with 150Hz LCD freq.
; and 205 milli-second interrupt
SetupCA MOV .b #CAPD6,&CAPD ; o/p buffer dISAble for comp i/p
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页
本文关键字:超声波 MSP430单片机,单片机-工控设备 - MSP430单片机