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

📄 user.lst

📁 PIC单片机的操作系统。picc18编译过
💻 LST
字号:
     1: //user.c
     2: #include "pic18.h"
     3: #include "os\os.h"
     4: #include "user\user.h"
     5: #include "user\pcb.h"
     6: 
     7: static unsigned char CommRxCnt,CommRxOld;
     8: static union 
     9: {
    10: unsigned char Buff[32];
    11: struct
    12:         {
    13:         unsigned int MyAddr;
    14:         unsigned int SourceAddr;
    15:         unsigned int FuctCode;
    16:         unsigned char dLen;
    17:         unsigned char Data [];
    18:         unsigned char Sum;
    19:         }Frame;
    20: }Comm;
    21: 
    22: unsigned char LockState; //锁状态,0=闭锁,1=开锁
    23: unsigned char DoorState; //门状态,0=关门,1=开门
    24: unsigned char DoorOldState; //门上次的状态,0=关门,1=开门
    25: unsigned char OpenSwState; //出门按钮的状态,0=按下,1=放开
    26: unsigned char OpenSwOldState; //出门按钮上次的状态,1=按下
    27: unsigned char DoorSw; //安装门磁的端口
    28: unsigned char TmrUnLock[PORTS]; //开锁保持时间
    29: unsigned char DoorOpenTime[PORTS]; //门开计时   
    30: void userinit(void)
    31: {
    32: 
    33: }
    34: 
    35: void WgReader(void)
    36: {
    37:         
    38: }
    39: 
    40: void CommCmd(unsigned int cmd) //命令解释
    41: {
    42:         switch (cmd)
    43:         {               
    44:                 case 0x0101:
    45:                 {
    46:                         break;
    47:                 }
    48:                 case 0x0102:
    49:                 {
    50:                         break;  
    51:                 }
    52:         }       
    53: }
    54: 
    55: void CommRxProtocol(void) // 通信接收协议解释任务
    56: {
    57: unsigned char rx;
    58:   while(1)
    59:  {
    60:     while (!osGetCommBuff(1,&rx))
    61:     {
    62:         DelayOsTicks(1);
    63:     }
    64:     if (rx==0x7e)
    65:     {
    66:             if ((CommRxCnt>8)&&(Comm.Frame.Sum==Comm.Buff[CommRxCnt]))
    67:             {
    68:                         CommCmd(Comm.Frame.FuctCode); 
    69:             }
    70:             CommRxCnt=0;
    71:             Comm.Frame.Sum=0;
    72:             osQuit();
    73:         } 
    74:     else if (CommRxOld==0x7f)
    75:     {
    76:             if (rx==0x01)
    77:             {
    78:                         rx=0x7e;
    79:                         CommRxOld=0x01;
    80:                 }
    81:                 else if (rx==0x02)
    82:                 {
    83:                         rx=0x7f;
    84:                         CommRxOld=0x02;
    85:                 }
    86:                 else //错误
    87:                 {
    88:                 CommRxCnt=0;
    89:                 Comm.Frame.Sum=0;
    90:                 osQuit();
    91:                 }                               
    92:         }
    93:         else
    94:         {
    95:                 CommRxOld=rx;
    96:         }
    97:         Comm.Buff[CommRxCnt]=rx;
    98:         CommRxCnt ++;   
    99:         if (CommRxCnt<Comm.Frame.dLen+8)
   100:         {
   101:                 Comm.Frame.Sum += rx;
   102:         }
   103:   }
   104: }
   105: 
   106: void CardTask(void)
   107: {
   108:         
   109:     osQuit();   
   110: }
   111: 
   112: void UnLock(unsigned char port)//开锁功能
   113: {
   114:         // 从存储器读取开锁保持时间     
   115:         
   116:         LockState |= 1<<port ;// 开锁
   117: }
   118: 
   119: void CloseLockTask(void)//闭锁任务
   120: {
   121: unsigned char port;
   122: 
   123:         while (1)
   124:         {
   125:                 DelayOsTicks(100); //延时1秒
   126: 
   127:                 for (port=0;port<PORTS;port++)
   128:                 {
   129:                         if (TmrUnLock[port])
   130:                         {
   131:                                 TmrUnLock[port] --;
   132:                                 if (TmrUnLock[port]==0) 
   133:                                 {
   134:                                         
   135:                                         ;// 如果不在禁止闭锁时间段,则闭锁
   136:                                 }
   137:                         } 
   138:                 } //for ()
   139:                 
   140:                         ;//刷新继电器状态               
   141:                 
   142:         } // while (1)
   143: }
   144: 
   145: void ChkOpenSw(void)//检测出门按钮开关
   146: {
   147: unsigned char port;
   148:         while (1)
   149:         {
   150:                 OpenSwOldState=0;
   151:                 for (port=0;port<PORTS;port++)
   152:                 {
   153:                         if (OpenSwState&1<<port)
   154:                         {
   155:                                 OpenSwOldState |= 1<<port;
   156:                         }
   157:                 }
   158:         DelayOsTicks(10); //0.1s
   159:                 for (port=0;port<PORTS;port++)
   160:                 {
   161:                         if ((OpenSwState&1<<port)&&(OpenSwOldState&1<<port))
   162:                         {
   163:                                 UnLock(port);// 开门
   164:                         }
   165:                 }
   166:     }
   167: }
   168: 
   169: 
   170: void ChkDoorSw(void) //门状态检测
   171: {
   172: unsigned char port;
   173: 
   174:         while (1)
   175:         {
   176:                 DelayOsTicks(20); //0.2s
   177: 
   178:                 for (port=0;port<PORTS;port++)
   179:                 {
   180:                         if (DoorSw&1<<port) //如果安装门磁
   181:                         {
   182:                                 if (DoorState & (1<<port)) //门开
   183:                                 {
   184:                                         if ((DoorOldState &= 1<<port)&&(LockState | !(1<<port))) // 如果不是开锁状态
   185:                                         {
   186:                                                 ;//破门报警     
   187:                                         }
   188:                                         DoorOldState |= 1<<port;
   189:                                         
   190:                                         if (DoorOpenTime[port])
   191:                                         {
   192:                                                  DoorOpenTime[port]--;
   193:                                                  if (DoorOpenTime[port]==0)
   194:                                                  {
   195:                                                         ; //关门提醒
   196:                                                  }
   197:                                         }
   198:                                 }
   199:                                 else
   200:                                 {
   201:                                         DoorOpenTime[port]=200; //0.2*200=40s
   202:                                         DoorOldState &= ~(1<<port);
   203:                                 }
   204:                         }
   205:                 }
   206:         }
   207: }
   208: 
   209: void LEDTask(void)
   210: {
   211:         
   212: }
   213: 
   214: void BeepTask(void)
   215: {
   216: 
   217: }

⌨️ 快捷键说明

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