- //===========================================================================//
- //北京理工大学珠海学院徐方鑫//
- //280599580@qq.com//
- //2011.3.31//
- //===========================================================================//
- #include<msp430x14x.h>
- #defineucharunsignedchar
- #defineuintunsignedint
- uchardN[6];//要显示的6位温度数字
- ucharscandata[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管七段码;0--f
- ucharcnt=0;//数码管位选变量
- ucharThermometer[1];//温度全局变量
- intThermometer_1;
- voidinit_clock(void);//时钟模块初始化
- voidinit_watchdog(void);//看门狗初始化
- voidinit_codeDisplay(void);//数码管初始化
- voidinit_sci(void);//串口初始化
- /*******************************************
- 函数名称:init_all
- 功能:总初始化
- 参数:无
- 返回值:无
- ********************************************/
- voidinit_all(void)
- {
- WDTCTL=WDTPW+WDTHOLD;//禁止看门狗
- init_clock();//总线时钟初始化-MSP430为锁频环
- init_watchdog();//看门狗模块初始化
- init_sci();//串口初始化
- init_codeDisplay();//数码管初始化
- }
- /****************主函数****************/
- voidmain(void)
- {
- init_all();//主初始化程序
- while(1);//后台等待
- }
- /*******************************************
- 函数名称:init_clock
- 功能:系统时钟初始化
- 参数:无
- 返回值:无
- ********************************************/
- voidinit_clock(void)
- {
- uchari;
- /*------选择系统主时钟为8MHz-------*/
- BCSCTL1&=~XT2OFF;//打开XT2高频晶体振荡器
- do
- {
- IFG1&=~OFIFG;//清除晶振失败标志
- for(i=0xFF;i>0;i--);//等待8MHz晶体起振
- }
- while((IFG1&OFIFG));//晶振失效标志仍然存在?
- BCSCTL2|=SELM_2+SELS;//MCLK和SMCLK选择高频晶振
- }
- /*******************************************
- 函数名称:init_watchdog
- 功能:看门狗初始化
- 参数:无
- 返回值:无
- ********************************************/
- voidinit_watchdog(void)
- {
- //设置看门狗定时器,初始化控制数码管的IO
- WDTCTL=WDT_ADLY_1_9;
- IE1|=WDTIE;
- //计数时钟选择SMLK=8MHz,1/8分频后为1MHz
- TACTL|=TASSEL_2+ID_3;
- //打开全局中断
- _EINT();
- }
- /*******************************************
- 函数名称:init_sci
- 功能:串口初始化
- 参数:无
- 返回值:无
- ********************************************/
- voidinit_sci(void)
- {
- P3SEL|=0x30;//P3.4,5=USART0TXD/RXD
- ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD
- UCTL0|=CHAR;//8-bitcharacter
- UTCTL0|=SSEL1;//UCLK=SMCLK
- /*8M/9600=833833=0x03410.000*8=0*/
- UBR00=0x41;
- UBR10=0x03;
- UMCTL0=0x00;
- /*UBR00=0x45;//8MHz115200
- UBR10=0x00;//8MHz115200
- UMCTL0=0x00;*///8MHz115200modulation
- UCTL0&=~SWRST;//InitializeUSARTstatemachine
- IE1|=URXIE0;//EnableUSART0RXinterrupt
- _BIS_SR(GIE);//EnterLPM0w/interrupt
- }
- /*******************************************
- 函数名称:init_codeDisplay
- 功能:数码管显示初始化
- 参数:无
- 返回值:无
- ********************************************/
- voidinit_codeDisplay(void)
- {
- P4DIR=0xff;
- P5DIR=0xff;
- P4OUT=0x00;
- P5OUT=0xff;
- }
- /*******************************************
- 函数名称:watchdog_timer
- 功能:看门狗定时器中断服务函数,进行数码
- 管动态扫描
- 参数:无
- 返回值:无
- ********************************************/
- #pragmavector=WDT_VECTOR
- __interruptvoidwatchdog_timer(void)
- {
- P5OUT=0xff;
- Thermometer_1=Thermometer[0]*3;
- switch(cnt)
- {
- case0:P5OUT&=~BIT1;P4OUT=~scandata[Thermometer_1/100];break;
- case1:P5OUT&=~BIT2;P4OUT=~scandata[Thermometer_1%100/10];P4OUT&=~0x80;break;
- case2:P5OUT&=~BIT3;P4OUT=~scandata[Thermometer_1%10];break;
- }
- cnt++;
- if(cnt==5)cnt=0;
- }
- #pragmavector=USART0RX_VECTOR
- __interruptvoidusart0_rx(void)
- {
- while(!(IFG1&UTXIFG0));//USART0TXbufferready?
- Thermometer[0]=RXBUF0;//RXBUF0toTXBUF0
- TXBUF0=Thermometer[0];
- //TXBUF0=Thermometer[i];
- //Send_data(Thermometer);
- //if(i==5)i=0;
- }