?? user.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; //鎖狀態(tài),0=閉鎖,1=開鎖
23: unsigned char DoorState; //門狀態(tài),0=關(guān)門,1=開門
24: unsigned char DoorOldState; //門上次的狀態(tài),0=關(guān)門,1=開門
25: unsigned char OpenSwState; //出門按鈕的狀態(tài),0=按下,1=放開
26: unsigned char OpenSwOldState; //出門按鈕上次的狀態(tài),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) // 通信接收協(xié)議解釋任務(wù)
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)//閉鎖任務(wù)
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: ;//刷新繼電器狀態(tài)
141:
142: } // while (1)
143: }
144:
145: void ChkOpenSw(void)//檢測出門按鈕開關(guān)
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) //門狀態(tài)檢測
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))) // 如果不是開鎖狀態(tài)
185: {
186: ;//破門報警
187: }
188: DoorOldState |= 1<<port;
189:
190: if (DoorOpenTime[port])
191: {
192: DoorOpenTime[port]--;
193: if (DoorOpenTime[port]==0)
194: {
195: ; //關(guān)門提醒
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 + -