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

📄 main.c

📁 ucos-ii在msp430f149上的移植
💻 C
字号:
/*
*********************************************************************************************************
*                                               uC/OS-II
*                                         The Real-Time Kernel
*
*                             (c) Copyright 2008, Micrium, Inc., Weston, FL
*                                          All Rights Reserved
*
*
*                                              Sample code
*
* File : APP.C
* By   : Hong Soong
*********************************************************************************************************
*/

#include "includes.h"

/*
*********************************************************************************************************
*                                                 DEFINES
*********************************************************************************************************
*/

#define CPU_F ((double)8000000) 
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
/*******************************my_task1 define*******************************/
  #define RS0	P5OUT &= ~(1 <<5)        //RS置低
  #define RS1	P5OUT |= (1 <<5)         //RS置高
  
  #define RW0	P5OUT &= ~(1 <<6)        //RW置低
  #define RW1	P5OUT |= (1 <<6)         //RW置高
  
  #define EN0	P5OUT &= ~(1 <<7)        //E置低
  #define EN1	P5OUT |= (1 <<7)         //E置高
  
  #define DataPort      P4OUT                 //P4口为数据口
  #define Data_In       P4DIR=0X00
  #define Data_Out      P4DIR=0xff
  #define DataIn        P4IN
/*****************************************************************************/

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  CCTL0 = CCIE;                             // 使能CCR0中断
  CCR0 = 1800;
 OSTimeTick();
}

//*************************************************************************
//                    系统时钟初始化
//*************************************************************************
void Clock_Init()
{
  uchar i;
  BCSCTL1&=~XT2OFF;                 //打开XT振荡器
  BCSCTL2|=SELM1+SELS;              //MCLK为8MHZ,SMCLK为8MHZ
  do{
    IFG1&=~OFIFG;                   //清除震荡标志
    for(i=0;i<100;i++)
       _NOP();                      //延时等待
  }
  while((IFG1&OFIFG)!=0);           //如果标志为1,则继续循环等待
  IFG1&=~OFIFG; 
}


void init_my_task2()
{
  P1SEL=0X00;
  P1DIR=0XFF; 
  P1OUT=0XFF;
  
  P3SEL=0X00;
  P3DIR=0XFF;
  P3OUT=0XFF;

}
void init_my_task1()
{
 
    P4SEL = 0x00;
    P4DIR = 0xFF;
    P5SEL = 0x00;
    P5DIR|= BIT5 + BIT6 + BIT7;   


}
/*************************************************************************
                               1602函数
*************************************************************************/
void write_data(uchar data)            //写数据
{
  RW0;
  RS1;
  EN1;
  delay_us(30);
  DataPort=data;
  delay_us(30);
  EN0;
}
//------------------------------------------------------//
void write_cmd(uchar cmd)             //写命令
{
  RW0;
  RS0;
  EN1;
  delay_us(30);
  DataPort=cmd;
  delay_us(30);
  EN0;
}

//-----------------------------------------------------//
void init_1602()                    //液晶初始化
{
    write_cmd(0x38);	         //显示模式设置     40us
    delay_us(50);
    //write_cmd(0x08);		//显示关闭          40us
    //delay_us(50);
    write_cmd(0x06);		//显示光标移动设置  40us
    delay_us(50);
    write_cmd(0x0c);		//显示开及光标设置  40us
    delay_us(50);
    write_cmd(0x01);		//清屏   1.6ms
    delay_ms(5);
   // write_cmd(0x1c);   //写完后就向右跳一格
    //delay_ms(5);
}
//----------------------------------------------------//
void write_str(uchar x,uchar y,uchar *s_byte)//写字符串
{
  if(y==0)
    write_cmd(0x80|x);    //写要写入的地址
  else
    write_cmd(0xc0|x); 
  
    while(*s_byte!='\0')
    {
      write_data(*s_byte);
      s_byte++; 
    }
}

/*
*********************************************************************************************************
*                                                VARIABLES
*********************************************************************************************************
*/


static  OS_STK      AppTask1Stk[APP_TASK1_STK_SIZE];
static  OS_STK      AppTask2Stk[APP_TASK2_STK_SIZE];



#if (uC_TCPIP_MODULE > 0)
        NET_IP_ADDR     AppNetIP;
        NET_IP_ADDR     AppNetMsk;
        NET_IP_ADDR     AppNetGateway;
#endif

void my_task1 (void *p_arg);
void my_task2 (void *p_arg);
/*
*********************************************************************************************************
*                                            FUNCTION PROTOTYPES
*********************************************************************************************************
*/


/*$PAGE*/
/*
*********************************************************************************************************
*                                                main()
*
* Description : This is the standard entry point for C code.  It is assumed that your code will call
*               main() once you have performed all necessary CPU and C initialization.
*
* Arguments   : none
*********************************************************************************************************
*/

void  main (void)
{
 
    
    WDTCTL=WDTPW+WDTHOLD;
    Clock_Init();
    delay_ms(100);
    //Init_TimerA();
    TACTL = TASSEL_2 + MC_1;                  // 子系统时钟, 增计数模式 
   CCTL0 = CCIE;                             // 使能CCR0中断
  CCR0 = 100;
  
 init_my_task1(); 
 init_my_task2(); 
 init_1602();
           
    OSInit();                                                           /* Initialize "uC/OS-II, The Real-Time Kernel"              */

   
    
   OSTaskCreate(   my_task2,                                                         
                (void *)0,
                &AppTask2Stk[APP_TASK2_STK_SIZE - 1],
                
                APP_START_TASK2_PRIO
                    
             );
    OSTaskCreate(   my_task1,                                       /* Create the start task                                    */
                    (void *)0,
                    &AppTask1Stk[APP_TASK1_STK_SIZE - 1],
                    
                    APP_START_TASK1_PRIO
                    
                    );

   
    OSStart();                                                          /* Start multitasking (i.e. give control to uC/OS-II)       */
}

/******************************************************************************
                                   任务1函数
******************************************************************************/
void   my_task1 (void *p_arg)
 {
    (void)p_arg;

                                                      /* Initialize IO functions                                 */

  #if (OS_TASK_STAT_EN > 0)
    OSStatInit();                                                       /* Determine CPU capacity                                   */
  #endif
                                                /* Initialize the Display layout                            */
    uchar *p;
    p="wu";
                                                     /* Create application tasks                                 */
    
    while (1) 
    {                                               /* Task body, always written as an infinite loop.           */
      write_str(1,1,p);  
      delay_ms(150);
      write_cmd(0x01);
      delay_ms(2);
      OSTimeDly(6);
    }
}
/******************************************************************************/
                               //任务2封装体
/******************************************************************************/


void my_task2(void *p_arg)

{
    (void)p_arg;

     
    uchar i;
    uchar DATA[4]={0x0e,0x0d,0x0b,0x07};
 while (1) 
    {                                               /* Task body, always written as an infinite loop.           */
     
      for(i=0;i<4;i++)
      {
        P3OUT=DATA[i];
        delay_ms(100);
      }
      OSTimeDly(2);
    }


}

⌨️ 快捷键说明

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