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

📄 main.lst

📁 在C8051F060上实现嵌入式系统ucos
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  03/02/2009 08:07:58 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Output-files\main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main\main.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\List-files\main.lst) OB
                    -JECT(.\Output-files\main.obj)

line level    source

   1          #include "..\ucos-ii\includes.h" 
   2          
   3          
   4          static INT16U   count_t2=2000;  //定时2的1000次 就是1秒/亮
   5          static INT16U   count_prit=20;  //在任务6中用着调试print用的参数。
   6          
   7          sbit LED_GRE=P2^0;
   8          sbit LED_RED=P2^1;
   9          
  10                                                                                  //start/alarm /sec /min /hour /day  /week /month /year
  11          INT8U code      Clock_buf[9]={0x01, 0x00, 0x10,0x40,0x08, 0x1B, 0x05, 0x02,  0x09}; 
  12          
  13          void TaskStart(void* ppdata) reentrant;
  14          void Task_GRE(void* ppdata) reentrant;  
  15          void Task_RED(void* ppdata) reentrant;
  16          
  17          OS_STK TaskStkStart[MaxStkSize];  //MaxStkSize=100
  18          OS_STK TaskStk_GRE[MaxStkSize];
  19          OS_STK TaskStk_RED[MaxStkSize];
  20          
  21          void TMR2_ISR(void) reentrant;
  22          
  23          
  24          /*******************结构体定义************************/
  25          struct real_time
  26          {        
  27               INT8U  year;
  28                   INT8U  month;
  29                   INT8U  day;
  30                   INT8U  hour;
  31                   INT8U  min;
  32                   INT8U  sec;
  33          
  34          }R_time;
  35          
  36          void main(void)
  37          { 
  38   1          
  39   1         config(); //要关看门狗
  40   1          OSInit();   
  41   1      
  42   1        OSTaskCreate(TaskStart, (void *)0, TaskStkStart,5); 
  43   1         EA=1;
  44   1      
  45   1        OSStart();
  46   1      }
  47          
  48          void TaskStart(void* ppdata) reentrant
  49          {
  50   1      //   INT8U k;
  51   1         char SFRPAGE_SAVE;
  52   1         SFRPAGE_SAVE = SFRPAGE; 
  53   1      
  54   1      
C51 COMPILER V8.08   MAIN                                                                  03/02/2009 08:07:58 PAGE 2   

  55   1         ppdata=ppdata;
  56   1      
  57   1         
  58   1         InitTimer0();
  59   1         ET0=1;
  60   1      
  61   1         I2cInit();
  62   1       //  PCF8563_init();
  63   1      
  64   1         
  65   1      
  66   1         OSTaskCreate(Task_GRE, (void *)0,TaskStk_GRE,6); 
  67   1       //  OSTaskCreate(Task_RED, (void *)0, TaskStk_RED,7); 
  68   1         for(;;)
  69   1         {
  70   2              
  71   2              LED_RED=~LED_RED;
  72   2      /*      PCF8563_Read();
  73   2         
  74   2              SFRPAGE = UART0_PAGE;
  75   2      
  76   2               printf("******YEAR:  20%d\n",R_time.year);
  77   2               printf("******MONTH: %d\n",R_time.month);
  78   2               printf("******DAY:   %d\n",R_time.day);
  79   2               printf("******MINITUE:  %d\n",R_time.min);
  80   2               printf("******SECOND:  %d\n",R_time.sec);
  81   2              
  82   2      
  83   2              SFRPAGE =SFRPAGE_SAVE; 
  84   2        */
  85   2          OSTimeDly(OS_TICKS_PER_SEC);
  86   2         }
  87   1      }
  88          
  89          void Task_GRE(void* ppdata) reentrant
  90          { 
  91   1         char SFRPAGE_SAVE;
  92   1         SFRPAGE_SAVE = SFRPAGE;   
  93   1          
  94   1         ppdata=ppdata;
  95   1        
  96   1         for(;;)
  97   1         {
  98   2           //LED_GRE=~LED_GRE;
  99   2                SFRPAGE = UART1_PAGE;
 100   2               count_prit--;
 101   2               printf("******number of task_entering: %d\n",count_prit);
 102   2               if(count_prit==10)
 103   2               {
 104   3              count_prit=20;
 105   3               }
 106   2      
 107   2           
 108   2                SFRPAGE =SFRPAGE_SAVE ;
 109   2               OSTimeDly(OS_TICKS_PER_SEC);
 110   2         }
 111   1         
 112   1         
 113   1      }
 114                  
 115          void Task_RED(void* ppdata) reentrant
 116          {  
C51 COMPILER V8.08   MAIN                                                                  03/02/2009 08:07:58 PAGE 3   

 117   1         ppdata=ppdata;
 118   1         for(;;)
 119   1         {
 120   2           //LED_RED=~LED_RED;
 121   2               OSTimeDly(12);
 122   2         }
 123   1      }
 124          
 125          void TMR2_ISR(void)  reentrant
 126          {
 127   1       char SFRPAGE_SAVE;
 128   1      
 129   1         SFRPAGE_SAVE = SFRPAGE;             // Preserve SFRPAGE
 130   1         SFRPAGE   = TMR2_PAGE;
 131   1        count_t2--;
 132   1        if(count_t2==0)
 133   1        { 
 134   2            count_t2=2000;
 135   2            LED_GRE=~LED_GRE;     
 136   2        }
 137   1      
 138   1        TF2=0;
 139   1        SFRPAGE =SFRPAGE_SAVE ;
 140   1      
 141   1         
 142   1      }
 143          
 144          
 145          /****************************************************************************   
 146          * 功    能:读取PCF8563时钟芯片内寄存器数据
 147          *---------------------------------------------------------------------------*
 148          * 入口参数:nil
 149          * 出口参数:nil
 150          ****************************************************************************/
 151          
 152          void PCF8563_Read(void) reentrant
 153          {        
 154   1                                              
 155   1                      R_time.year=I2C_ReadData(0x08,0xff);  //读取year,屏蔽高7~5位(7~5无效)                     
 156   1      
 157   1                      R_time.month=I2C_ReadData(0x07,0x1f);   //读取month,屏蔽高7~5位(7~5无效)        
 158   1      
 159   1                      R_time.day=I2C_ReadData(0x05,0x3f);       //读取day,屏蔽高7-6位(7-6无效)                
 160   1                      
 161   1                  R_time.hour=I2C_ReadData(0x04,0x3f);  //读取小时,屏蔽高7-6位(7-6无效)               
 162   1                      
 163   1                      R_time.min=I2C_ReadData(0x03,0x7f);       //读取分钟,屏蔽高7位(7无效)                   
 164   1      
 165   1                      R_time.sec=I2C_ReadData(0x02,0x7f);      //读取秒,屏蔽高7位(7无效)      
 166   1      
 167   1      }
 168          
 169          INT8U I2C_ReadData(INT8U reg,INT8U mark) reentrant
 170          {
 171   1               INT8U cur_tmr; 
 172   1              
 173   1               cur_tmr=SM_Receive(PCF_R_ADD, reg,SINGLE_ADD) &mark;
 174   1               cur_tmr=Bcd2Decimal(cur_tmr);//转换为十进制
 175   1      
 176   1               return cur_tmr;
 177   1      
 178   1      }
C51 COMPILER V8.08   MAIN                                                                  03/02/2009 08:07:58 PAGE 4   

 179          
 180          INT8U Bcd2Decimal(INT8U bcd_dat)  reentrant
 181          {
 182   1               INT8U num1,num2;
 183   1      
 184   1               num1=bcd_dat/16;
 185   1               num2=bcd_dat%16;
 186   1      
 187   1               return (num1*10+num2); 
 188   1      }
 189          
 190          void PCF8563_init(void) reentrant
 191          {
 192   1        INT8U  i=0;    
 193   1      
 194   1        i=SM_Receive(PCF_R_ADD, 0x00,SINGLE_ADD);     
 195   1      
 196   1              if(i!=0x01)     //没有初始化
 197   1               {              
 198   2                              //start/alarm /sec /min /hour /day  /week /month /year
 199   2                                      
 200   2                              for(i=0;i<9;i++)
 201   2                              {
 202   3                                      SM_Send(PCF_W_ADD, i,SINGLE_ADD, Clock_buf[i]);  //启动时钟
 203   3                                      OSTimeDly(3);//delay 30ms
 204   3                              }
 205   2                                              //设置报警及定时器中断,定时器中断为脉冲形

⌨️ 快捷键说明

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