我的一个信号通道产生两路交替的信号,这两个信号交替通过flag控制产生,但是不重叠,用ADC12采集,串口发送,可是串口没有反应。。一路信号试验的话出来了,现在两路这样写,用串口调试助手,完全没有反应,有没有用过430的前辈指点一二?
#include <msp430x14x.h>
#define uint unsigned int
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
uint high81,low81,high82,low82,flag;//high81,low81,high82,low82//分别存第一路第二路的高低八位
//两路信号由同一个通道产生,由flag控制哪路信号发射,交替发射不重叠
//同一个AD采集
void int1()
{
flag=1;
delay_ms(10); //产生第一路信号,第二路信号不产生
}
void int2()
{
flag=2;
delay_ms(10); //产生第二路信号,第一路信号不产生
}
void int_adc()
{
P6SEL |= BIT1; // P6.1,使能AD转换通道A0
ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 启动ADC12, 设置采样时间
ADC12CTL1 = SHP+CONSEQ_2; // 应用采样定时器
ADC12MCTL0=SREF_0; //参考3.3V
ADC12IE = 0x01; // 使能AD中断
ADC12CTL0 |= ENC; // 使能AD转换
//ADC12CTL0 |= ADC12SC; // 开始AD转换
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
//ADC_CH0 = ADC12MEM0; // 存储转换结果
// ah=ADC12MEM0>>8;
if(flag==1)
{
low81=((ADC12MEM0<<8)>>8);
high81=ADC12MEM0>>8;
}
else if(flag==2)
{
low82=((ADC12MEM0<<8)>>8);
high82=ADC12MEM0>>8;
}
}
void int_usart()
{
UCTL0 |= SWRST;
UTCTL0 = SSEL0; // UCLK = ACLK,选择时钟来源
UBR00 = 0x03; // 32k/9600 - 3.41 波特率寄存器低字节
UBR10 = 0x00; // 32k/9600 波特率寄存器高字节,波特率9600,波特率手册上有相应设置
UMCTL0 = 0x4A; // Modulation,由于波特率计算有余数,填写波特率调整寄存器
UCTL0 &= ~SWRST; // 初始化UART状态机
UCTL0 |= CHAR; // 数据格式为8位数据
ME1 |= UTXE0 + URXE0; // 使能USART0的发送TXD和接受RXD
IE1 |= URXIE0; // 使能USART0的接收中断,让串口接收到数据后能产生中断
P3SEL |= BIT4;
P3SEL |= BIT5; //P3.4 P3.5扩展功能和方向
P3DIR |= BIT4;
}
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
int_adc();
int_usart();
_EINT();
ADC12CTL0 |= ADC12SC; // 开始AD转换
while(1)
{
if(flag==1)
{
while (!(IFG1 & UTXIFG0) );
TXBUF0='a';
while (!(IFG1 & UTXIFG0) );
TXBUF0=low81;
while (!(IFG1 & UTXIFG0) );
TXBUF0=high81;
}
else if(flag==2)
{
while (!(IFG1 & UTXIFG0) )
TXBUF0='b';
while (!(IFG1 & UTXIFG0) )
TXBUF0=low82;
while (!(IFG1 & UTXIFG0) )
TXBUF0=high82;
}
int1();
int2();
}
}