一:根底实验
功能:控制IO口实现流水灯的一次点亮并循环下去
#include\"msp430x14x.h\" void delay(unsigned int a) {
unsigned int i,j; for(j=a;j>0;j--) for(i=80;i>0;i--); }
void main(void) {
WDTCTL=WDTPW+WDTHOLD;
P2DIR|=0XF0; //1111-0000 1表示输出,0表示输入 P2OUT&=0X0F; //0000-1111 输出存放器 while(1) {
P2OUT|=BIT4; delay(800); P2OUT|=BIT5; delay(800); P2OUT|=BIT6; delay(800); P2OUT|=BIT7; delay(800);
P2OUT&=0X0F; delay(800); } }
二:IO口控制〔IO口中断〕实验
功能:利用IO口中断实现按键中断,当按键按下时对应LED等亮
#include #pragma vector=PORT2_VECTOR //声明中断源 是IO口2 的中断 __interrupt void port2(void); void main(void) { WDTCTL=WDTPW+WDTHOLD; _EINT(); P2DIR|=BIT4; 实用文档. . P2DIR&=~BIT0; P2IE|=BIT0 ; P2IES|=BIT0 ; _BIS_SR(LPM3_bits + GIE); //开总中断 并使CPU进入低功耗模式 while(1); } __interrupt void port2(void) { if((P2IN&BIT0)==BIT0) P2OUT&=~BIT4; else P2OUT|=BIT4; } 三:数码管实验 功能:编程实现6个数码管依次显示1到6 /****************************************************************************** ____ ____ ____ ____ ____ ____ f| a |b | | | | | | | | | | |____| |____| |____| |____| |____| |____| e| g |c | | | | | | | | | | |____| |____| |____| |____| |____| |____| d LED6 | LED5 | LED4 | LED3 | LED2 | LED1 | | | | | | .--P4.7 段码1选通 P5.2--P5.7 位码0导通 // 跳线P14 P15 P5 P6 P7 P8 *******************************************************************************/ #include\"msp430x14x.h\" #define uchar unsigned char unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char seg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb}; 实用文档. . void display(uchar i,uchar j) { P5OUT=seg[i]; P4OUT=table[j]; } void main() { WDTCTL=WDTPW+WDTHOLD; P5DIR|=(BIT2+BIT3+BIT4+BIT5+BIT6+BIT7); P4DIR|=(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7); while(1) { display(0,1); display(1,2); display(2,3); display(3,4); display(4,5); display(5,6); } } 四:按键综合实验 //*************************************************************** // 描述: // 有按键中断时,LED5,LED6,LED7,LED8亮与灭; // // 跳线:P9 P10 P17 *************************************************************** #include #define led5_pout P2DIR|=BIT4 //通讯状态指示灯 设置为输出口 #define led5_high P2OUT|=BIT4 //通讯状态指示灯 输出高 点亮指示灯 #define led5_low P2OUT&=~BIT4 //通讯状态指示灯 输出低 关闭指示灯 #define led6_pout P2DIR|=BIT5 //通讯状态指示灯 设 实用文档. . 置为输出口 #define led6_high P2OUT|=BIT5 //通讯状态指示灯 输 出高 点亮指示灯 #define led6_low P2OUT&=~BIT5 //通讯状态指示灯 输出低 关闭指示灯 #define led7_pout P2DIR|=BIT6 //通讯状态指示灯 设置为输出口 #define led7_high P2OUT|=BIT6 //通讯状态指示灯 输出高 点亮指示灯 #define led7_low P2OUT&=~BIT6 输出低 关闭指示灯 #define led8_pout P2DIR|=BIT7 置为输出口 #define led8_high P2OUT|=BIT7 出高 点亮指示灯 #define led8_low P2OUT&=~BIT7 输出低 关闭指示灯 unsigned char led5,led6,led7,led8,flag; void delay(unsigned int i) { while(i--); } void IOinit(void) { led5_pout; led6_pout; led7_pout; led8_pout; led5_low; led6_low; led7_low; led8_low; P2IE|=BIT0+BIT1+BIT2+BIT3; P2IES|=BIT0+BIT1+BIT2+BIT3; } void main(void) { WDTCTL=WDTPW+WDTHOLD; 实用文档. //通讯状态指示灯 //通讯状态指示灯 设//通讯状态指示灯 输 //通讯状态指示灯 . IOinit(); _EINT(); while(1) { switch(flag) { case 1: if(led5%2) led5_high; else led5_low; flag=0; break; case 2: if(led6%2)led6_high; else led6_low; flag=0; break; case 3: if(led7%2)led7_high; else led7_low; flag=0; break; case 4: if(led8%2)led8_high; else led8_low; flag=0; break; default: break; } _BIS_SR(LPM3_bits+GIE); } } #pragma vector=PORT2_VECTOR __interrupt void port2 (void) { delay(40000);//去抖; if((P2IFG&BIT0)==BIT0) { led5++; flag=1; } if((P2IFG&BIT1)==BIT1) { led6++; flag=2; } 实用文档. . if((P2IFG&BIT2)==BIT2) { led7++; flag=3; } if((P2IFG&BIT3)==BIT3) { led8++; flag=4; } P2IFG=0; _BIC_SR_IRQ(LPM3_bits); } 五:行列式键盘实验 /**************************************************************** // P6.7 P6.6 P6.5 +3V // | | | | // P6.1------ /---- /----- /----R--| // | | | | // P6.2------ /---- /----- /----R--| // | | | | // P6.3------ /---- /----- /----R--| // | | | | // P6.4------ /---- /----- /----R--| // 跳线 P2 P3 ****************************************************************/ #include\"msp430x14x.h\" #include\"key.h\" void delay(unsigned int i) { while(i--); } unsigned char key(void) { unsigned char x=0XFF; P6DIR=0XE0; P6OUT=0X7F;// //扫描第一列 if((P6IN&0X02)==0X00) 实用文档. . x=12; //x=0; else if((P6IN&0X04)==0) x=11;//x=1; else if((P6IN&0X08)==0) x=10;//x=2; else if((P6IN&0X10)==0) x=9; else { P6OUT=0XBF;// //扫描第二列 if((P6IN&0X02)==0X00) x=8; //x=0; else if((P6IN&0X04)==0) x=7;//x=1; else if((P6IN&0X08)==0) x=6;//x=2; else if((P6IN&0X10)==0) x=5; else { P6OUT=0XDF; //扫描第三列 if((P6IN&0X02)==0X00) x=4; //x=0; else if((P6IN&0X04)==0) x=3;//x=1; else if((P6IN&0X08)==0) x=2;//x=2; else if((P6IN&0X10)==0) x=1; } } return(x); } unsigned char get_key(void) 实用文档. . { unsigned char x,y; if((P6IN&0X1F)!=0X1F) { delay(20); if((P6IN&0X1F)!=0X1F) { x=key(); if(x!=0xFF) y=x; } } return y; } 六:看门狗程序 //**************************************************************** // MSP430F149 // ----------------- // /|\\| XIN|- // | | | // --|RST XOUT|- // | | // | P1.1|-->LED //**************************************************************** #include void main(void) { WDTCTL = WDT_MDLY_0_0; // Set Watchdog Timer interval to ~30ms IE1 |= WDTIE; // Enable WDT interrupt P1DIR |= 0x02; // Set P1.1 to output direction _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt } // Watchdog Timer interrupt service routine #pragma vector=WDT_VECTOR __interrupt void watchdog_timer(void) 实用文档. . { P1OUT ^= 0x02; // Toggle P1.1 using exclusive-OR } 七:TimerA 定时/计数器 //****************************************************************// MSP-FET430P140 Demo - Timer_A, Toggle P1.1/TA0, Up Mode, 32kHz ACLK // // Description: Toggle P1.1 using hardware TA0 output. Timer_A is configured // for up mode with CCR0 defining period, TA0 also output on P1.1. In this // example, CCR0 is loaded with 1000-1 and TA0 will toggle P1.1 at TACLK/1000. // Thus the output frequency on P1.1 will be the TACLK/2000. No CPU or software // resources required. Normal operating mode is LPM3. // As coded with TACLK = ACLK, P1.1 output frequency = 32768/2000 = 16.384Hz. // ACLK = TACLK = 32kHz, MCLK = default DCO ~800kHz // //* External watch crystal installed on XIN XOUT is required for ACLK *// // // MSP430F149 // ----------------- // /|\\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P1.1/TA0|--> ACLK/2000 // // 跳线:J10 Timer_A P0 //**************************************************************** #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1SEL |= 0x02; // P1.1 option select外围模块 CCTL0 = OUTMOD_4; // CCR0 toggle mode 输出为反转模式 CCR0 = 1000-1; 实用文档. . TACTL = TASSEL_1 + MC_1; // ACLK, upmode _BIS_SR(LPM3_bits); // Enter LPM3 w/interrupt } //#include //typedef unsigned char uchar; //typedef unsigned int uint; //uchar flag=0; //void main(void) //{ // WDTCTL=WDTPW+WDTHOLD; // BCSCTL1 &= ~XT2OFF; // BCSCTL2 |=SELS+DIVS_3; // P3DIR |= BIT4; // TACTL=TASSEL_2+MC_2+TAIE; //_BIS_SR(LPW0_bits+GIE); //} //Timer_A3 Interrupt Vector( TATV) handler //#pragma vector=TIMERA1_VECTOR //__interrupt void Timer_A(void) //{ // switch(TAIV) // { // case 2: break; // case 4: break; // case 10: P4OUT ^=BIT5; // break; // } //} //Timer A0 interrupt service routine //#pragma vector=TIMERA0_VECTOR //__interrupt void Timer_A (void) //{ // P4OUT ^= BIT5; //} 八:TimerB 定时/计数器 //***************************************************************/ // MSP-FET430P140 Demo - Timer_B, Toggle P1.1, CCR0 Up Mode ISR, 实用文档. . 32kHz ACLK // Description: Toggle P1.1 using software and the TB_0 ISR. Timer_B is // configured for up mode, thus the timer overflows when TBR counts // to CCR0. In this example, CCR0 is loaded with 1000-1. // ACLK = TBCLK = 32kHz, MCLK = SMCLK = default DCO ~800kHz // //* An external watch crystal on XIN XOUT is required for ACLK *// // // MSP430F149 // --------------- // /|\\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P1.1|-->LED // // 跳线:J10 Timer_A P0 //**************************************************************** #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR |= 0x02; // Set P1.1 to output direction TBCTL = TBSSEL_1 + TBCLR; // ACLK, clear TBR TBCCTL0 = CCIE; // TRCCR0 interrupt enabled TBCCR0 = 1000-1; TBCTL = TBSSEL_1 + MC_1; // ACLK, upmode _BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt } // Timer B0 interrupt service routine #pragma vector=TIMERB0_VECTOR __interrupt void Timer_B (void) { P1OUT ^= 0x02; // Toggle P1.1 using exclusive-OR } 实用文档. . 九:串口通信实验一 /**************************************************************** // MSP-FET430P140 Demo - USART0, // // Description: USART0 RX interrupt triggers TX Echo. Though not required, // Baud rate divider with 3.2768Mhz XTAL @9600 = 3.2768MHz/9600 = 0003h; // MSP430F149 // ----------------- // /|\\| XIN|- // --|RST XOUT|- // | | // | P3.4|------------> // | | 9600 // | P3.5|<------------ // // 跳线 串行( P8 P9) 数码管( P14 P15 P5 P6 P7 P8) ***************************************************************** #include #define uchar unsigned char extern unsigned char num[11]; extern unsigned char wei[7]; extern void display(uchar W,uchar sz); uchar aa; /*****************串口初试化设置********************/ void uart_org(void) { ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD //使能串口 UCTL0 |= CHAR; // 8-bit character //数据格式为8位 UTCTL0 |= SSEL0; // UCLK = ACLK //选择时钟来源 UBR00= 0x03; // 32768/9600 //波特率存放器低字节 实用文档. . UBR10= 0x00; //波特率存放器高字节 UMCTL0= 0x4a; //由于波特率计数有余数,填写波特率调整存放器 P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD 定义串口功能引脚 P3DIR |= 0x10; //P3.4口为输出,其余为输人口 UCTL0 &= ~SWRST; // Initialize USART state machine IE1 |= URXIE0; // Enable USART0 RX interrupt 接受数据能中断 } /*****************串口发送字符串程序*****************/ void UartStr(unsigned char *p) { *p=0x02; //unsigned char str unsigned char i; for (i=0;*p!=0;i++) //准备要发送的数据 { //下句UTXIFG0=1那么正在发送数据,即不再发送其它数据 while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?判断缓冲区是否为空 TXBUF0 =*p++; // RXBUF0 to TXBUF0 //发送数据到串口 while ((UTCTL0 & TXEPT) == 0); //判断数据是否发送完毕 } _NOP(); } void main() { WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 uart_org( ); //串口初始化 _EINT(); //总中断开启 UartStr(\"请输入abcdef之一!\\r\\\n\"); UartStr(\"a--1,b--2,c--3,d--4,e--5,f--6\\r\\\n\"); while(1) { switch (aa) { case 97:display(0,1); break; case 98:display(1,2);break; case 99:display(2,3);break; 实用文档. . case 100:display(3,4);break; case 101:display(4,5);break; case 102:display(5,6);break; default:break; } _BIS_SR(LPM3_bits+GIE); //初始化完毕,进入睡眠状态 } } #pragma vector=UART0RX_VECTOR __interrupt void usart0_rx (void) { aa=RXBUF0; //接收的数据赋值给 aa _BIC_SR_IRQ(LPM3_bits); //停止休眠 } 十:串口通信实验二 /**************************************************************** // MSP-FET430P140 Demo - USART1, // // Description: USART0 RX interrupt triggers TX Echo. Though not required, // Baud rate divider with 3.2768Mhz XTAL @9600 = 3.2768MHz/9600 = 0003h; // MSP430F149 // ----------------- // /|\\| XIN|- // --|RST XOUT|- // | | // | P3.6|------------> // | | 9600 // | P3.7|<------------ // // 跳线 串行( P8 ) *****************************************************************#include unsigned char send,NR,zs; unsigned char tx_buf[20]; //***************延时********************************** 实用文档. . void delay( char i) { unsigned char aa=10; while(aa--) while(i--); } //**************串口初试化设置************************/ void uart_org(void) { ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD UCTL1 |= CHAR; // 8-bit character UTCTL1 |= SSEL0; // UCLK = ACLK UBR01 = 0x03; // 32768/9600 UBR11 = 0x00; // UMCTL1 = 0x4a; // modulation P3SEL |= 0xC0; UCTL1 &= ~SWRST; // Initialize USART state machine IE2 |= URXIE1; // Enable USART1 RX interrupt } //********************发送数据**************************** void Uart_Str(unsigned char number,unsigned char *p) { unsigned char i; for (i=0;i //********************发送数据**************************** void UartStr(unsigned char *p) { unsigned char i; 实用文档. . for (i=0;*p!=0;i++)//准备要发送的数据 { while (!(IFG2 & UTXIFG1));// USART0 TX buffer ready? TXBUF1 =*p++; // RXBUF0 to TXBUF0 while ((UTCTL1 & TXEPT) == 0); } _NOP(); } //***************接收串行数据***************************// void AddUsData(unsigned char sq0) { if(NR<20) { tx_buf[NR]=sq0; NR++; } } void main(void) { WDTCTL=WDTPW+WDTHOLD; uart_org(); //UartStr(\"unsigned char *p\"); while(1) { delay(50); UartStr(tx_buf); // Uart_Str(zs,tx_buf); for(unsigned char i=zs;i>0;i--) tx_buf[i]=0; zs=0; NR=0; _BIS_SR(LPM3_bits+GIE); } } #pragma vector=UART1RX_VECTOR __interrupt void usart1_rx (void) { zs++; AddUsData(RXBUF1); _BIC_SR_IRQ(LPM3_bits); } 实用文档. . 十一:AD转换实验 //****************************************************************// MSP-FET430P140 Demo - ADC12, Sample A0, Set P1.0 if A0 > 0.5*AVcc // // Description: A single sample is made on A0 with reference to AVcc. // Software sets ADC10SC to start sample and conversion - ADC12SC // automatically cleared at EOC. ADC12 internal oscillator times sample (16x) // and conversion. In Mainloop MSP430 waits in LPM0 to save power until ADC12 // conversion complete, ADC12_ISR will force exit from LPM0 in Mainloop on // reti. If A0 > 0.5*AVcc, P1.0 set, else reset. // // MSP430F149 // ----------------- // /|\\| XIN|- // | | | // --|RST XOUT|- // | | // Vin-->|P6.7/A7 P2 |--> LED // //**************************************************************** #include #define led5_pout P2DIR|=BIT4 //通讯状态指示灯 设置为输出口 #define led5_high P2OUT|=BIT4 //通讯状态指示灯 输出高 点亮指示灯 #define led5_low P2OUT&=~BIT4 //通讯状态指示灯 输出低 关闭指示灯 #define led6_pout P2DIR|=BIT5 //通讯状态指示灯 设置为输出口 #define led6_high P2OUT|=BIT5 //通讯状态指示灯 输出高 点亮指示灯 #define led6_low P2OUT&=~BIT5 //通讯状态指示灯 输出低 关闭指示灯 #define led7_pout P2DIR|=BIT6 //通讯状态指示灯 设置为输出口 #define led7_high P2OUT|=BIT6 //通讯状态指示灯 输出高 点亮指示灯 实用文档. . #define led7_low P2OUT&=~BIT6 //通讯状态指示灯 输出低 关闭指示灯 #define led8_pout P2DIR|=BIT7 //通讯状态指示灯 设置为输出口 #define led8_high P2OUT|=BIT7 //通讯状态指示灯 输出高 点亮指示灯 #define led8_low P2OUT&=~BIT7 //通讯状态指示灯 输出低 关闭指示灯 void delay(unsigned int a) { unsigned int i,j; for(j=a;j>0;j--) for(i=8;i>0;i--); } void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT _EINT(); ADC12CTL0 = SHT0_2 + ADC12ON; // Set sampling time, turn on ADC12 //上面语句是翻开ADC12电源,并设置采样时间=2^2*(4*clk)=16clk即为16个时钟 ADC12CTL1 = CSTARTADD_7 + SHP; // Use sampling timer ADC12MCTL7|=INCH_7; ADC12IE = 0x0080; // Enable interrupt 使能中断 ADC12IFG.0 对应于 ADC12MEM0 ADC12CTL0 |= ENC; // Conversion enabled 使能转换 led5_pout; led6_pout; led7_pout; led8_pout; led5_low; led6_low; led7_low; led8_low; for (;;) { ADC12CTL0 |= ADC12SC; // Sampling open 开始启动转换 _NOP(); 实用文档. . // _BIS_SR(CPUOFF + GIE); // LPM0, ADC12_ISR will force exit } } // ADC12 interrupt service routine #pragma vector=ADC_VECTOR __interrupt void ADC12_ISR (void) { if (ADC12MEM7 < 0x3FF) led5_low; // Clear P2.4 LED off else led5_high; // Set P2.4 LED on if (ADC12MEM7 < 0x6FF) led6_low; // Clear P2.5 LED off else led6_high; if (ADC12MEM7 < 0x9FF) led7_low; // Clear P2.6 LED off else led7_high; if (ADC12MEM7 < 0xCFF) led8_low; // Clear P2.7 LED off else led8_high; // _BIC_SR_IRQ(CPUOFF); // Clear CPUOFF bit from 0(SR) } 十二:IIC总线 与24c16综合实验 主程序 //*************************************************************** // 描述: // 开机发送数给24C16,然后将数据读出,并通过串口工具显示; // // 跳线: P6 P8 P9 //*************************************************************** #include \"msp430x14x.h\" #include \"Uart.h\" #include \"24c16.h\" 实用文档. . #define uchar unsigned char unsigned char *D,*M,add,ACK_FLAG,flag; unsigned char MPM[32]; //unsigned char DDT[32]= // { // 0xf3,0x16,0x69,0x21,0xd3,0x15,0xc5,0x23, // 0xb6,0x28,0x85,0x25,0xc3,0x24,0xd7,0x16, // 0xf3,0x16,0x69,0x21,0xd3,0x15,0xc5,0x23, // 0xb6,0x28,0x85,0x25,0xc3,0x24,0xd7,0x16 // }; unsigned char DDT[32]= { 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,//0 1 2 3 4 5 6 7 0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46,//8 9 A B C D E F 0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E, //G H I J K L M N 0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56, //O P Q R S T U V }; void main(void) { unsigned int i; WDTCTL=WDTPW+WDTHOLD; uart_org(); UartStr(\"开机测试成功!\\r\\\n\"); D=(unsigned char*)DDT; add=0; //24C01内数据读写首地址 M=(unsigned char*)MPM; delay(100); for(i=0;i<4;i++) { send_word(); delay(1000); add+=8; } add=10; for(i=0;i<32;i++) receive_word(i); Uart_Str(32,&MPM[0]); TXBUF0 = MPM[7]; 实用文档. . } 子程序 24C16 #include #define uchar unsigned char extern uchar ACK_FLAG,add,*D,MPM[32]; void delay(unsigned int i) { while(i-- > 0); } void start(void) { SDA_OUT; SCL_OUT; SDA_0; SCL_0; delay(2); SDA_1; SCL_1; delay(2); SDA_0; delay(2); SCL_0; delay(3); SDA_1; } void stop(void) { SDA_OUT; SCL_OUT; SDA_0; SCL_1; delay(2); SDA_1; } 实用文档. . void send_byte(uchar data) { uchar bi,i; bi=0x80; SDA_OUT; SCL_OUT; for(i=0;i<8;i++) { if((data&bi)==bi) SDA_1; else SDA_0; SCL_1; delay(50); SCL_0; bi>>=1; } } uchar receive_byte(void) { uchar i,temp=0x80,tempdata; tempdata=0; SDA_IN; SCL_OUT; for(i=0;i<8;i++) { SCL_1; if((P5IN&BIT1)==BIT1) tempdata|=temp; temp>>=1; SCL_0; } return(tempdata); } void ack(void) { SCL_OUT; SDA_IN; SCL_1; ACK_FLAG=0; if((P5IN&BIT1)) ACK_FLAG=1; SCL_0; delay(10); } 实用文档. . void i2c_ack(uchar tm) { SDA_OUT; SCL_OUT; if(tm==0) SDA_1; else SDA_0; delay(10); SCL_1; delay(10); SCL_0; delay(10); } void send_word(void) { uchar i=0; while(1) { start(); delay(20); send_byte(0xa0); ack(); if(ACK_FLAG) continue; send_byte(add); ack(); if(ACK_FLAG) continue; for(i=0;i<8;i++) { send_byte(*D++); ack(); if(ACK_FLAG)continue; } if(!ACK_FLAG) break; } stop(); } void receive_word(uchar add) { uchar i; while(1) { start(); 实用文档. . send_byte(0xa0); ack(); if(ACK_FLAG) continue; send_byte(add); ack(); if(ACK_FLAG) continue; start(); send_byte(0xa1); ack(); if(ACK_FLAG) continue; MPM[i++]=receive_byte(); delay(5); i2c_ack(1); if(!ACK_FLAG) break; } stop(); } 子程序:uart #include #include \"Uart.h\" /*****************串口初试化设置********************/ void uart_org(void) { ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD UCTL0 |= CHAR; // 8-bit character UTCTL0 |= SSEL0; // UCLK = ACLK UBR00= 0x03; // 32768/9600 UBR10= 0x00; UMCTL0= 0x4a; P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD P3DIR |= 0x10; UCTL0 &= ~SWRST; // Initialize USART state machine IE1 |= URXIE0; // Enable USART0 RX interrupt } /*****************串口发送字符串程序*****************/ void UartStr(unsigned char *p) 实用文档. . { unsigned char i; for (i=0;*p!=0;i++)//准备要发送的数据 { while (!(IFG1 & UTXIFG0));// USART0 TX buffer ready? TXBUF0 =*p++; // RXBUF0 to TXBUF0 while ((UTCTL0 & TXEPT) == 0); } _NOP(); } /*****************串口发送字符串程序*****************/ void Uart_Str(unsigned char number,unsigned char *p) { unsigned char i; for (i=0;i 实用文档.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务