⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 《MSP430单片机常用模块与综合系统实例精讲》整书的源代码有30个
💻 C
📖 第 1 页 / 共 2 页
字号:
            	{
            	    pBuf0[n] = i;
            	}
            	
            	while(1) // 等待缓冲区里的数据发送完毕
            	{
            	    if(nTX0_Flag == 1) break;            	     
            	}
            	nTX0_Len = PackData(UART0_TX_BUF,pBuf0,100);
         	    IFG1 |= UTXIFG0;// 设置中断标志,进入发送中断程序
            }
    	    // 数据已经发送完毕
    	    Delay_ms(100);
    	    // 发送+++命令,从传送数据状态到命令状态
 	        nTX0_Len = DataToCommand(UART0_TX_BUF);
 	
 	        nComm_Command = 2;
 	        nDial = 0; 
 	        IFG1 |= UTXIFG0;		// 设置中断标志,进入发送中断程序
    	
        }//if(nComm == 1 && nDial == 1)
     

        // 发送+++命令,从传送数据状态到命令状态
        if(nComm_Command == 2)
        {
            Delay_ms(1000);
            nTX0_Len = DataToCommand(UART0_TX_BUF);
            IFG1 |= UTXIFG0; // 设置中断标志,进入发送中断程序
            Delay_ms(1000);
        }//if(nComm_Command == 2)
        // 发送挂断命令
        if(nComm_Command == 3)
        {
            Delay_ms(1000);
            nTX0_Len = SetATH0(UART0_TX_BUF);
            IFG1 |= UTXIFG0; // 设置中断标志,进入发送中断程序
            Delay_ms(1000);
        }//if(nComm_Command == 3)
        //处理来自MODEM的响应
        if(nRev_UART0 == 1)
        {
            nRev_UART0 = 0;
    
            for(i = 0;i < nRX0_Len;i++) UART0_RX_Temp[i] = UART0_RX_BUF[i];
            nRes_UART0 = ProcessUART0(UART0_RX_Temp,nRX0_Len);
            nRX0_Len = 0;
    
            switch(nRes_UART0)
            {
    	        case 0:
    	        {
    	    
    	            break;
    	        }
    	        case 1:
    	        {
    	            nDial = 1;
    	            nBusy = 1;
    	            break;
    	        }
    	        case 2:
    	        {    
    	            break;
    	        }
    	        case 3:
    	        {   
    	            if(nComm_Command == 3)
    	            {
    	                nBusy = 0;
    	    	        nDial = 0;
    	    	        nComm_Command = 0;
    	            }
    	            nBusy = 0;
    	            nBusy = 0;
    	            break;
    	        }
    	        case 4:
    	        {
    	            if(nComm_Command == 0) 
    	            {
    	            	// 0表示发送初始化命令,1表示初始化完毕
    	    	        nComm_Command = 1;
    	    	        nBusy = 0;
    	            }
    	            if(nComm_Command == 2) 
    	            {
    	            	// 2表示发送+++,3表示收到+++响应
    	    	        nComm_Command = 3;
    	    	        // 数据已经发送完毕
    		        Delay_ms(1000);
    		        // 发送ATH0命令,挂断线路
    		        nTX0_Len = SetATH0(UART0_TX_BUF);
    		        // 设置中断标志,进入发送中断程序
                        IFG1 |= UTXIFG0;		
 		        Delay_ms(1000);
 		        break;
    	            }
    	            if(nComm_Command == 3) 
    	            {
    	    	        nBusy = 0;
    	    	        nDial = 0;
    	    	        nComm_Command = 0;
    	    	        nComm = 0;
    	    	        // 停止给MODEM供电
    	    	        for(i = 0;i < 5;i++) P2OUT &= ~(BIT0);
    	    	        for(i = 300;i > 0;i--) ;  // 延迟一点时间
    	    	        
    	    	        break;	
    	            }  
    	        }  	   
    	        case 5: // 没有接电话线的情况
    	        {
    	            nBusy = 0;
    	            nDial = 0;
    	            nComm_Command = 1;
    	            break;
    	        }    	
    	        case 6: // 对方挂断的情况
    	        {
    	            nBusy = 0;
    	            nDial = 0;
    	            nComm_Command = 1;
    	            break;
    	        }
    	        case 7:
    	        {
    	            // 2表示发送+++,3表示收到+++响应
    	            nComm_Command = 3; 
    	            // 数据已经发送完毕
    	            Delay_ms(1000);
    	            // 发送ATH0命令,挂断线路
    	            nTX0_Len = SetATH0(UART0_TX_BUF);
    	            // 设置中断标志,进入发送中断程序
                    IFG1 |= UTXIFG0; 
 	            Delay_ms(1000);
 	            break;
    	        }    	    	    	    	    	
    	        case 255:
    	        {
    	            nBusy = 0;
    	            break;
    	        }  
    	        case -1:
    	        {
    	            nBusy = 0;
    	            break;
    	        }  	    	  	    	
    	        default:
    	                break;
             }    	
         }//if(nRev_UART0 == 1) 
    }
}
////////////////////////////////////////
// 处理来自串口 0 的接收中断
#if __VER__ < 200
    interrupt [UART0RX_VECTOR] void UART0_RX_ISR(void)
#else
    #pragma vector=UART0RX_VECTOR
    __interrupt void UART0_RX_ISR(void)
#endif
{
    //接收来自的数据
    UART0_RX_BUF[nRX0_Len_temp] = RXBUF0;	
    
    nRX0_Len_temp += 1;
    if(UART0_RX_BUF[nRX0_Len_temp - 1] == 13)
    {
        nRX0_Len = nRX0_Len_temp;
        nRev_UART0 = 1;
        nRX0_Len_temp = 0;
    }  
}
////////////////////////////////////////
// 处理来自串口 0 的发送中断
#if __VER__ < 200
    interrupt [UART0TX_VECTOR] void UART0_TX_ISR(void)
#else
    #pragma vector=UART0TX_VECTOR
    __interrupt void UART0_TX_ISR(void)
#endif
{
    if(nTX0_Len != 0)
    {
        // 表示缓冲区里的数据没有发送完
    	nTX0_Flag = 0;				
    	
    	TXBUF0 = UART0_TX_BUF[nSend_TX0];
    	nSend_TX0 += 1;
    	Delay_us(5);
    	if(nSend_TX0 >= nTX0_Len)
    	{
    	    nSend_TX0 = 0;
    	    nTX0_Len = 0;
    	    nTX0_Flag = 1;
    	}
    }
}
///////////////////////////////////////
// 处理来自串口 1 的接收中断
#if __VER__ < 200
    interrupt [UART1RX_VECTOR] void UART1_RX_ISR(void)
#else
    #pragma vector=UART1RX_VECTOR
    __interrupt void UART1_RX_ISR(void)
#endif
{
    
    UART1_RX_BUF[nRX1_Len_temp] = RXBUF1;	//接收来自的数据
    
    nRX1_Len_temp += 1;
        
    if(UART1_RX_BUF[nRX1_Len_temp - 1] == 13)
    {
    	nRX1_Len = nRX1_Len_temp;
    	nRev_UART1 = 1;
    	nRX1_Len_temp = 0;
    }
}
///////////////////////////////////////
// 处理来自串口 1 的发送中断
#if __VER__ < 200
    interrupt [UART1TX_VECTOR] void UART1_TX_ISR(void)
#else
    #pragma vector=UART1TX_VECTOR
    __interrupt void UART1_TX_ISR(void)
#endif
{
    if(nTX1_Len != 0)
    {
    	nTX1_Flag = 0;			// 表示缓冲区里的数据没有发送完
    	
    	TXBUF1 = UART1_TX_BUF[nSend_TX1];
    	nSend_TX1 += 1;
    	
    	if(nSend_TX1 >= nTX1_Len)
    	{
    	    nSend_TX1 = 0;
    	    nTX1_Len = 0;
    	    nTX1_Flag = 1;
    	}
    }
}
///////////////////////////////////////
// 处理来自端口 1 的中断
#if __VER__ < 200
    interrupt [PORT1_VECTOR] void COMM_ISR(void)
#else
    #pragma vector=PORT1_VECTOR
    __interrupt void COMM_ISR(void)
#endif
{
    
    if(P1IFG & BIT5)
    {
    	nComm = 1;

    	nComm_Command = 0;
    	P1IFG &= ~(BIT5);	// 清除中断标志位
    	Delay_us(100);
    }
}
//////////////////////////////////////////////
// 定时器中断,完成 ADC 转换
#if __VER__ < 200
    interrupt [TIMERA0_VECTOR] void TimerA_ISR(void)
#else
    #pragma vector=TIMERA0_VECTOR
    __interrupt void TimerA_ISR(void)
#endif
{
    int i;
    
    ADC12CTL0 &= ~ENC;		      // 关闭转换
          	
    ADC_BUF0[nADC_Count] = ADC12MEM0; // 读出转换结果 
    ADC_BUF1[nADC_Count] = ADC12MEM1; // 读出转换结果 
    ADC_BUF2[nADC_Count] = ADC12MEM2; // 读出转换结果 
    ADC_BUF3[nADC_Count] = ADC12MEM3; // 读出转换结果 
    ADC_BUF4[nADC_Count] = ADC12MEM4; // 读出转换结果 
    ADC_BUF5[nADC_Count] = ADC12MEM5; // 读出转换结果 
    ADC_BUF6[nADC_Count] = ADC12MEM6; // 读出转换结果 
    ADC_BUF7[nADC_Count] = ADC12MEM7; // 读出转换结果 
            
    nADC_Count += 1;     
    if(nADC_Count == 30)
    {
         nADC_Flag = 1;            //设置标志
         nADC_Count = 0; 
         // 将数据倒向数据缓冲区
         for(i = 0;i < 30;i++) ADC_BUF_Temp0[i] = ADC_BUF0[i];  
         for(i = 0;i < 30;i++) ADC_BUF_Temp1[i] = ADC_BUF1[i];
         for(i = 0;i < 30;i++) ADC_BUF_Temp2[i] = ADC_BUF2[i];
         for(i = 0;i < 30;i++) ADC_BUF_Temp3[i] = ADC_BUF3[i];
         for(i = 0;i < 30;i++) ADC_BUF_Temp4[i] = ADC_BUF4[i];
         for(i = 0;i < 30;i++) ADC_BUF_Temp5[i] = ADC_BUF5[i];
         for(i = 0;i < 30;i++) ADC_BUF_Temp6[i] = ADC_BUF6[i];
         for(i = 0;i < 30;i++) ADC_BUF_Temp7[i] = ADC_BUF7[i];    
    }
                
    ADC12CTL0 |= ENC + ADC12SC;	   // 开启转换
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -