📄 adc12_uart.s43
字号:
;采用单通道单次转换方式,对接口板上的一路模拟信号(0~3.3V可调电压)进行A/D转换,
;并将12位转换结果通过串口发到PC机,由PC机的串口助手显示出来。
;MSP430F169,采用了P1中断来触发AD转换,即按一次P1.0启动一次转换,并且将转换结果通过串口发送出去。
;设置采样时间SHT0_2,设置为软件启动,同时由于采样此电压信号,不需要连续检测,因此采用单通道(通道1)单次转换。
;由于电压范围在0~3.3V,大于内部的参考电压源1.5V和2.5V,因此采用外部参考电压源,采用ACLK默认时钟32768HZ。
#include "msp430.h" ;查询方式
NAME main
PUBLIC main
ORG 0FFFEh
DC16 init
ORG 0FFE0h+PORT1_VECTOR ;用键盘P1.0中断启动AD
DC16 INTP1
RSEG CSTACK
RSEG CODE
init MOV #SFE(CSTACK),SP
main: NOP
MOV.W #WDTPW+WDTHOLD,&WDTCTL
CALL #P1INIT ;P1初始化
CALL #ADINIT ;AD初始化
CALL #UART0_INIT ;串口初始化
MOV #GIE,SR ;开中断
JMP $
P1INIT:
BIS.B #BIT0,&P1IE
BIS.B #BIT0,&P1IES
RET
;CLKINIT:
;BIS.B #XTS,&BCSCTL1;
;BIS.B #SELS+DIVS_3,&BCSCTL2
;RET
ADINIT:
MOV #SHT0_2+ADC12ON,&ADC12CTL0 ; Sampling time, ADC12 on
;MOV #SHT0_0+ADC12ON,&ADC12CTL0
;MOV #SHT0_15+ADC12ON,&ADC12CTL0
;MOV #SHT0_15+SHT1_15+ADC12ON,&ADC12CTL0
MOV #SHP,&ADC12CTL1 ; Use sampling timer
;BIS #ADC12SSEL_2,&ADC12CTL1
BIS.B #BIT0,P6SEL ; select P6.0
BIS.B #SREF_2+INCH_0,&ADC12MCTL0 ;channel 1, external ref
BIS #ENC,&ADC12CTL0 ;AD enable
RET
UART0_INIT:
BIS.B #SWRST,&U0CTL
BIS.B #BIT4+BIT5,&P3SEL
BIS.B #SPB+CHAR,&U0CTL ;2 bits stop, no pena
;BIS.B #PENA+PEV+SPB+CHAR,&U0CTL;even pena
;BIS.B #PENA+SPB+CHAR,&U0CTL;odd pena
MOV.B #0x10,&U0TCTL ;ACLK
BIS.B #URXEIE,&U0RCTL
MOV.B #00H,&U0BR1 ;9600sps
MOV.B #03H,&U0BR0
MOV.B #49H,&U0MCTL
BIS.B #UTXE0+URXE0,&ME1
BIC.B #SWRST,&U0CTL
RET
INTP1:
CALL #DELAY ; 防止键盘抖动
BIC.B #BIT0,&P1IFG
BIS.W #ADC12SC,&ADC12CTL0 ; Start sampling/conversion
CONAD:
BIT #BIT0,&ADC12IFG; check if finish converting
JZ CONAD
MOV &ADC12MEM0,R5
MOV R5,R6
MOV #8, R4
CYCLE:
RRA R5 ;右移8位
DEC R4
JNZ CYCLE
TCHK BIT.B #UTXIFG0,&IFG1 ; send the higher 4 bits
JZ TCHK
MOV.B R5,&U0TXBUF
Tchk2 BIT.B #UTXIFG0,&IFG1 ;send the lower 8 bits
JZ Tchk2
MOV.B R6,&U0TXBUF
RETI
DELAY:
MOV #0x4000,R4
WW: DEC R4
JNZ WW
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -