📄 asm.s43
字号:
#include "msp430x22x4.h"
;此程序是用ADC10来测片内温度两极管的电压
;执行程序来查看ADC10MEM寄存器的值,
;并用V(temp)=0.00355*TempC+0.986公式来计算片子温度=>Tc~(0D34h*AD_value-0457h*800h)>>13
;最后温度值存在R6中,设置断点查看各个计数值
; MSP430F2274
; -----------------
; /|\| XIN|-
; | | |
; --|RST XOUT|-
; | |
; | P1.0|-->LED
NAME main
PUBLIC main
;-----------------------------------------------------------------------------
; MSP430F22x中断向量表
;-----------------------------------------------------------------------------
ORG 0FFFEh
DC16 main
ORG 0FFEAh ;ADC10中断向量
DC16 adc_isr
;------------------------------------------------------------------------------
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
MOV.W #INCH_10,&ADC10CTL1 ;选择第10通道,为片内温度传感器
MOV.W #REFON+SREF_1,&ADC10CTL0 ;打开1.5V正参考,地为负参考
BIS.W #ADC10ON+ADC10SHT_3+ADC10IE,&ADC10CTL0;打开ADC10内核,设定采样保持时间为64个ADC10CLK,使能ADC10中断
BIS.W #ENC+ADC10SC,&ADC10CTL0 ;启动AD转换
EINT ;使能总中断
BIS.W #CPUOFF,SR ;进入低功耗0
;0D34*AD_value
MOV.W #0D34h,R5
MOV.W #0,R6 ;R6保存乘法结果低位
MOV.W #0,R7 ;R7保存乘法结果高位
add_loop
ADD.W R4,R6
JNC next
INC.W R7
next DEC.W R5
JNZ add_loop
;0457*800h
MOV.W #0457h,R8
MOV.W #0,R9
MOV.B #11,R10
left_mov
RLA.W R8 ;R8保存移位低位
RLC.W R9 ;R9保存移位高位
DEC.B R10
JNZ left_mov
;0D34h*AD_value-0457h*800h
SUB.W R8,R6
SUBC.W R9,R7
;(0D34h*AD_value-0457h*800h)>>13
MOV.B #13,R10
rig_mov
RRA.W R7
RRC.W R6
DEC.B R10
JNZ rig_mov ;最后温度值存在R6中
mainloop
BIS.W #CPUOFF,SR ;进入低功耗0
NOP
;------------------------------------------------------------------------------
adc_isr;
;------------------------------------------------------------------------------
MOV.W &ADC10MEM,R4 ;将AD转换结果存入R4
NOP
BIC.W #CPUOFF,0(SP)
RETI
END main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -