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

📄 main.c

📁 《μCOS-II微小内核分析与程序设计-基于LPC2300》配套例程第三章 uCOS-II程序设计实例
💻 C
📖 第 1 页 / 共 2 页
字号:
        } else {
   	        OSSemPost(Sem);                                             /*  发送信号量                   */
   	        while ((IO0PIN & Key1) == 0) {                              /*  等待按键释放                 */
   	            OSTimeDly(1);                                           /*  延时1个clk                   */
   	        }
   	    }
	}
}
/**********************************************************************************************************
** Function name:			TaskSamp
** Descriptions:			采样任务,对电压数据进行采集
** input parameters:		无
** output parameters:       无
** Returned value:			无 
**********************************************************************************************************/
void TaskSamp (void *pdata)
{
	INT8U i,err;
    INT32U *pt;
	INT32U Temp[10] = {0};
	INT32U TempAll = 0;
	INT32U TempAve = 0;
	pdata = pdata;
   	Q = OSQCreate(MsgQTbl,Qlength);                                     /*  创建消息队列,长度为10       */
   	PartitionPt = OSMemCreate(Partition,10,4,&err);                     /*  创建内存分区,保存信息       */
   	
   	/*
   	 *  ADC初始化
   	 */
   	PCONP |= 1<<12;                                                     /*  使能ADC模块的功率控制位      */
   	PINSEL3 |= ((unsigned)0x03)<<30;                                    /*  设置P1.31为AIN5功能          */ 
   	AD0CR = (1<<5)                  |                                   /*  SEL = 0X20,选择通道5         */
   	        ((Fpclk/1000000 - 1)<<8)|                                   /*  CLKDIV= Fpclk/1000000-1,转  */
   	                                                                    /*  换时钟为1MHz                 */
   	        (1<<16)                 |                                   /*  BURST = 1,硬件控制转换操作  */
   	        (0<<17)                 |                                   /*  CLKS = 0,使用11clock转换    */
   	        (1<<21)                 |                                   /*  PDN = 1,正常工作模式        */
   	        (0<<24)                 |                                   /*  START = 0,硬件控制转换      */
   	        (0<<27);
   	
   	while (1) {
	    OSSemPend(Sem,0,&err);                                          /*  等待信号量                   */
   	    OS_ENTER_CRITICAL();                                            /*  进入临界区                   */
        SampNum++;                 										/*  采样次数累加                 */
   	    OS_EXIT_CRITICAL();                                             /*  退出临界区                   */
	    if (SampNum <= Qlength) {                                       /*  消息队列未满                 */
	        TempAll = 0;                                                /*  采样值累计和清零             */
	        for (i = 0;i < 10;i++) {
	            while((AD0STAT & (1<<5)) == 0);                         /*  等待AIN5转换结束             */
	            Temp[i] = ADDR5;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
	            Temp[i] = (Temp[i] >> 6) & 0x3ff;
                Temp[i] *= 2500;										/*  参考电压由精密恒压源提供2.5V */
	            Temp[i] /= 1024;
	            TempAll += Temp[i]; 
	        }
	        TempAve = TempAll / 10;                                     /*  取采样平均值                 */
	        pt = OSMemGet(PartitionPt,&err);                            /*  申请一个内存块               */
	       *pt = TempAve;                                               /*  对内存区赋值				 */
	        OSQPost(Q,(void *)pt);                                      /*  发送消息到消息队列中         */
	    }
	    OSTimeDly(OS_TICKS_PER_SEC/10);                                 /*  延时0.1S                     */
	}
}
/**********************************************************************************************************
** Function name:			TaskDisp
** Descriptions:			显示任务,把通过AD采样得到的数据送到PC机上显示
** input parameters:		无
** output parameters:       无
** Returned value:			无 
**********************************************************************************************************/
void TaskDisp (void *pdata)
{
	INT8U i,err;
    char  str[50] = {0};                                                /*  存储送显示数据的数组         */
    INT32U *tp;
    static uint32 SampNumTemp = 0;
	pdata = pdata;  
   	sprintf(str,"系统启动......\r\n");                  
   	UART0_SendStr(str);                                                 /*  系统启动提示信息             */
   	
   	while (1) {
   	    sprintf(str,"延时2s ......\r\n");                               
   	    UART0_SendStr(str);                                             /*  每2S显示一次                 */
	    OSTimeDly(OS_TICKS_PER_SEC*2);                                  /*  延时2S					     */
   	    OS_ENTER_CRITICAL();                                            /*  进入临界区                   */
   	    SampNumTemp =  SampNum;                                         /*  获得采样次数                 */
   	    SampNum = 0;                                                    /*  累加采样次数清零             */
   	    OS_EXIT_CRITICAL();                                             /*  退出临界区                   */
   	    if (SampNumTemp == 0) {                                         /*  没有采样                     */
   	        sprintf(str,"在这2s中,没有发生采样.\r\n\r\n");  
   	        UART0_SendStr(str);                                         /*  显示无采样提示信息           */
	    } else if (SampNumTemp <= Qlength) {
   	        sprintf(str,"在这2s中,共发生了%d次采样.\r\n",SampNumTemp);                    
   	        UART0_SendStr(str);                                         /*  显示采样次数提示信息         */
   	    } else {
   	        sprintf(str,"发生错误,队列溢出!\r\n");                    
   	        UART0_SendStr(str);                                         /*  显示消息队列满提示信息       */
   	        SampNumTemp = Qlength;                                      /*  有效的结果个数与队列长度一致 */
   	        sprintf(str,"有效的%d个采样结果为:\r\n",SampNumTemp);                    
   	        UART0_SendStr(str);                                         /*  显示有效采样值信息           */
   	    }                                         
   	    for (i = 1;i <= SampNumTemp;i++) {
   	        tp = (INT32U *)OSQPend(Q,0,&err);                           /*  获得消息队列中的消息指针     */
   	        sprintf(str,"第%d次ADC采样结果为 %d mv \r\n",i,*tp);   		/*  把送显示数据发送到数组中     */
	        UART0_SendStr(str);                                         /*  通过UART发送到上位机         */
	        OSMemPut(PartitionPt,tp);                                   /*  释放内存块                   */
	        if (i == SampNumTemp) {
   	            sprintf(str,"\r\n");                                    
   	            UART0_SendStr(str);                                     /*  显示最后一条信息后空一行     */
	        }
	    }
	}
}
/**********************************************************************************************************
  END FILE
**********************************************************************************************************/

⌨️ 快捷键说明

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