#include char MST_Data = 0xAA,SLV_Data = 0xff; unsigned char a[12]; unsigned char b[12]; #define SPI_ENABLE P2OUT &=~0x08; #define SPI_DISABLE P2OUT |=0x08; unsigned char regdata[11]={0x02,0XaB,0x10,0x05,0x05,0x00,0x00,0x40,0xc3,0x01,0x03};//二通道心电测试信号,无呼吸0x02,0xeb,0x18,0x00,0x00,0x30,0x0f,0x40,0x02,0x01,0x03fCLK = 512 kHz void Delay_ms(unsigned int n) { unsigned int l,m; for(l=0;l 0; i--); // Time for flag to set } while ((IFG1 & OFIFG)); // OSCFault flag still set? BCSCTL2 |= SELM_2 + SELS; // MCLK = SMCLK = XT2 (safe) U1CTL = CHAR + SYNC + MM + SWRST; // 8-bit, SPI, Master U1TCTL = CKPL + SSEL1 + STC; // Polarity, SMCLK, 3-wire U1BR0 = 0x00; // SPICLK = SMCLK/2 U1BR1 = 0x03; U1MCTL = 0x00; ME2 |= USPIE1; // Module enable U1CTL &= ~SWRST; // SPI enable IE2 |= URXIE1 ; // RX and TX interrupt enable } void intUART0() { P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD UCTL0 |= CHAR; // 8-bit character UTCTL0 |= SSEL0; // UCLK = ACLK UBR00 = 0x03; // 32k/9600 - 3.41 UBR10 = 0x00; // UMCTL0 = 0x4A; // Modulation UCTL0 &= ~SWRST; // Initialize USART state machine IE1 |= URXIE0; // Enable USART0 RX interrupt } void main( void ) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 P1OUT = 0x00; P1IES |= 0x00; //上升沿触发 P1IFG = 0x00; //中断标志位清零 P1IE |=0xff; //P1模块中断允许 P2DIR |= 0x00f; //0,1,2,3输出 P2OUT |=0x01; //START,RST高电平 // P2OUT |=0x02; //START,RST高电平 P5SEL = 0x020; //设置P3端口为SPI模式 intSPI1(); intUART0(); Delay_ms(5); //SPI_RegRead(0x00,a,12); //读取初始寄存器,检验电路连接是否正确 Delay_ms(5); SPI_Regwrite(0x01,regdata,11); //写入配置寄存器, Delay_ms(5); SPI_RegRead(0x00,b,12); // 再次读出寄存器 检验是否写入正确 SPI_ENABLE; Delay_ms(5); P2OUT &=~0x02; Delay_ms(5); _EINT(); while(1) { }; //LPM0; //关CPU,进入低功耗模式 } #pragma vector=UART0RX_VECTOR __interrupt void usart0_rx (void) { while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready? // RXBUF0 to TXBUF0 _BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR) } #pragma vector = PORT1_VECTOR //P1中断服务子程序 __interrupt void P1_Interrupt(void) { unsigned char i=0; P2OUT |=0x02; //START,RST高电平 if(P1IFG==0x01) { P1IFG=0; //清除标志位 for(i=0;i<9;i++) { while (!(IFG2&UTXIFG1)); // Wait for TXBUF ready TXBUF1 = 0x00; //Initiate next data RX, meanwhile.. Delay_ms(2); while (!(IFG2&URXIFG1)); // Wait for TXBUF ready TXBUF0 = RXBUF1; ; Delay_ms(2); } } else P1IFG=0; //清除标志位 }