坛里有玩单片机的吗,帮我看看这个程序的流程图 | |
【返回本版】 【发表帖子】 【回复帖子】 | 浏览量 560 回帖数 1 |
devilywind 等级 ★ 楼主 发表于 2011/12/19 4:35:06 编 辑 |
||
#include <msp430.h> char str[]="00.0"; long temp; long IntDeg; void ADC10_ISR(void); void ADC10_init(void); void Init_uart0(void); void main() { WDTCTL=WDTPW+WDTHOLD; ADC10_init(); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; Init_uart0(); _EINT(); while(1) { ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start 采样开始, // _bis_SR_register(CPUOFF + GIE); // LPM0 with interrupts enabled __delay_cycles(1000); //-----ADC转换完成中断唤醒CPU后才执行以下代码----- temp = ADC10MEM;//读取AD采样值 IntDeg= temp*4225/1024 - 2777;//转换为摄氏度,并10倍处理 str[0]=IntDeg/100+0X30; str[1]=IntDeg%100/10+0X30; str[3]=IntDeg%100%10+0X30; // IntDeg=-123;//由于难以获得负温,直接给负值以测试LCD显示 } } /****************************************************************************************************** * 名 称:ADC10_init(void) * 功 能:初始化ADC10采集内部温度传感器,单次手动采样 * 入口参数:无 * 出口参数:无 * 说 明:直接从CCS的Example中移植过来 * 范 例:无 ******************************************************************************************************/ void ADC10_init(void) { ADC10CTL0 &= ~ENC; // 关闭AD转换器 ADC10CTL0 = ADC10IE + ADC10ON + REFON + ADC10SHT_3 + SREF_1;//1 允许ADC10中断 1 ADC10开启 ,打开基准源 64个ADC10CLK周期 ADC10CTL1 = CONSEQ_0 + ADC10SSEL_0 + ADC10DIV_3 + SHS_0 + INCH_10;//单通道单次采样模式 ADC10OSC 8分频 ADC10SC位 __delay_cycles(30000); ADC10CTL0 |= ENC; //开启AD转换器 } /****************************************************************************************************** * 名 称:ADC10_ISR_HOOK * 功 能:ADC转换完成后唤醒CPU * 入口参数:无 * 出口参数:无 * 说 明:直接从CCS的Example中移植过来 * 范 例:无 ******************************************************************************************************/ #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR_HOOK(void) { _bic_SR_register_on_exit(LPM4_bits); } /********************************************************************************************************** * 串口初始化 ********************************************************************************************************* */ void Init_uart0() { UCA0CTL1|=UCSWRST; P1SEL|=BIT1+BIT2; //将P1.1 P1.2设为第二功能 P1SEL2|=BIT1+BIT2;//系统组合 P1DIR |= BIT2; //P1.2 UART_TX P1DIR &=~BIT1; //P1.2 UART_RX UCA0CTL0&=~UC7BIT;//字符长度为8 UCA0CTL1|=UCSSEL_2;//选择系统时钟 UCA0BR0=0x68; //波特率为9600 UCA0BR1=0; UCA0MCTL=0X40;//UCA0MCTL=UCBRS0; UCA0CTL1&=~UCSWRST; IE2|=UCA0RXIE;//开接收使能 } void Uart0Sends(char *s) { while(*s!=''\0'') //查找字符。 { UCA0TXBUF=*s; while((IFG2&UCA0TXIFG)==0); //查询发送是否结束,寄存器为空置位,满为复位?? IFG2&=~UCA0TXIFG; //清除发送一标志位,多余的语句,发送完毕 s++; } } #pragma vector=USCIAB0RX_VECTOR __interrupt void usart0_rx(void) { while((IFG2&UCA0RXIFG )==0);//接收一位然后给发送缓存器 再中断再接受 再发送的过程 IFG2&=~UCA0RXIFG ; Uart0Sends("班级 姓名 学号 "); Uart0Sends(str); UCA0TXBUF = UCA0RXBUF; } |
Syd 等级 ★ 2 楼 发表于 2011/12/19 7:22:06 编 辑 |
||
430是个好芯片 |
1 |
您输入的密码有误,请重新输入