?? control.lst
字號:
C51 COMPILER V7.02b CONTROL 01/18/2005 21:45:44 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE CONTROL
OBJECT MODULE PLACED IN CONTROL.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE CONTROL.c DEBUG OBJECTEXTEND
stmt level source
1 /****************************************/
2 /* Copyright (c) 2004, 63研究所 苗龍 */
3 /* All rights reserved. */
4 /* 作 者:苗龍 */
5 /****************************************/
6
7 #include <reg52.h> /* special function registers 8052 */
8 //#include "SST89x5x4.H"
9 #include <rtx51tny.h> /* RTX-51 tiny functions & defines */
10
11 sbit lrun=P3^5;
12 sbit lctrl=P3^4;
13
14 sbit state0=P1^0;
15 sbit state1=P1^1;
16 sbit state2=P1^2;
17 sbit state3=P1^3;
18 sbit state4=P1^4;
19 sbit state5=P1^5;
20 sbit state6=P1^6;
21 sbit state7=P1^7;
22
23 //注意On='0'
24 sbit config1=P0^0;
25 sbit config2=P0^1;
26 sbit config3=P0^2;
27 sbit config4=P0^3;
28 sbit config5=P0^4;
29 sbit config6=P0^5;
30 sbit config7=P0^6;
31 sbit config8=P0^7;
32 sbit config9=P2^0;
33 sbit config10=P2^1;
34
35 //定義功能碼
36 #define FUN_GetState_M2S 0x3
37 #define FUN_GetAnalog_M2S 0x4
38
39 #define FUN_GetState_S2M 0x3
40 #define FUN_GetAnalog_S2M 0x4
41 #define FUN_Error_S2M 0x5
42 /*
43 "01H"表示"功能碼錯誤","02H"表示"非法數據寄存器地址",
44 "03H"表示"數據非法", "04H"表示"設備地址錯誤",
45 "05H"表示"查詢幀正確,但設備未準備好","06H"表示"設備忙",
46 "07H"表示"編程錯誤","08H"表示"奇偶校驗錯誤"。
47 */
48 //定義錯誤代碼
49 #define ERR_FunCode 0x01
50 #define ERR_RegAddr 0x02
51 #define ERR_Data 0x03
52 #define ERR_EquAddr 0x04
53 #define ERR_Ready 0x05
54 #define ERR_Busy 0x06
55 #define ERR_Prog 0x07
C51 COMPILER V7.02b CONTROL 01/18/2005 21:45:44 PAGE 2
56 #define ERR_Check 0x08
57 //定時參數
58 #define INTEVAL_TICK 10 //2.4k
59 #define INTEVAL_GETSTATE 500//5000 tick 5 s
60 #define INTEVAL_GETANALOG 100//1000 tick 1 s
61
62 #define SEND485 1
63 #define RECV485 0
64
65 unsigned char Address;
66 unsigned short RegStart;
67 unsigned short RegNum;
68 unsigned char SysFun;
69
70 //狀態變量存儲區
71 #define LEN_STATE_AREA 8
72 unsigned char AreaState[LEN_STATE_AREA];
73
74
75 #define INIT 0 /* task number of task: init */
76 #define CLOCK 1 /* task number of task: command */
77 #define POLLED 2 /* task number of task: clock */
78 #define WAITFRAME 3 /* task number of task: keyread */
79
80 unsigned char frameRecv[16];
81 unsigned char frameSend[16];
82
83
84 extern char putchar (char c);
85 extern char _getkey (void);
86 extern unsigned char istart;
87 extern unsigned char iend;
88
89 extern unsigned char code auchCRCLo[]; //CRC校驗表
90 extern unsigned char code auchCRCHi[];
91
92 void config(void)
93 {
94 1 unsigned char i,j;
95 1 //取地址
96 1 i=0;
97 1 j=!config7;//高7位
98 1 i+=j<<6;
99 1 j=!config6;
100 1 i+=j<<5;
101 1 j=!config5;
102 1 i+=j<<4;
103 1 j=!config4;
104 1 i+=j<<3;
105 1 j=!config3;
106 1 i+=j<<2;
107 1 j=!config2;
108 1 i+=j<<1;
109 1 j=!config1;
110 1 i+=j;
111 1
112 1 Address=i;
113 1
114 1 //配置串口參數
115 1 if((!config10)==0)//OFF 2.4k
116 1 {
117 2 SCON = 0x50; // mode 1: 8-bit UART, enable receiver
C51 COMPILER V7.02b CONTROL 01/18/2005 21:45:44 PAGE 3
118 2 TMOD |= 0x20; // timer 1 mode 2: 8-Bit reload
119 2 TH1 = 0xf4; // reload value 2400 baud
120 2 TR1 = 1; // timer 1 run
121 2 ES = 1; // enable serial port interrupt
122 2 }
123 1 else//9.6k
124 1 {
125 2 SCON = 0x50; // mode 1: 8-bit UART, enable receiver
126 2 TMOD |= 0x20; // timer 1 mode 2: 8-Bit reload
127 2 TH1 = 0xfd; // reload value 2400 baud
128 2 TR1 = 1; // timer 1 run
129 2 ES = 1; // enable serial port interrupt
130 2 }
131 1 //系統參數
132 1 lrun=1;
133 1 lctrl=RECV485;
134 1 }
135 void Send485()
136 {
137 1 os_wait (K_TMO, 1, 0);
138 1 lctrl=SEND485;
139 1 os_wait (K_TMO, 1, 0);
140 1 }
141 void Recv485()
142 {
143 1 os_wait (K_TMO, 1, 0);
144 1 lctrl=RECV485;
145 1 os_wait (K_TMO, 1, 0);
146 1 }
147 //CRC循環校驗
148 unsigned short crc(unsigned char pchar[],unsigned char len)
149 {
150 1 unsigned char i=0;
151 1 unsigned char uchCRCHi = 0xFF ; /* 高CRC字節初始化 */
152 1 unsigned char uchCRCLo = 0xFF ; /* 低CRC 字節初始化 */
153 1 unsigned char uIndex ; /* CRC循環中的??*/
154 1
155 1 while (len--) /* 傳輸消息緩沖? ?*/
156 1 {
157 2 //uIndex = uchCRCHi ^ *pchar++ ; /* 計算CRC */
158 2 uIndex = uchCRCHi ^ pchar[i] ; /* 計算CRC */
159 2 uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
160 2 uchCRCLo = auchCRCLo[uIndex] ;
161 2 i=i+1;
162 2 }
163 1 return (uchCRCHi << 8 | uchCRCLo) ;
164 1 }
165 //unsigned char crct[]={1,2,3,4,5,6,7,8,9,0x0e,0xb3};
166 //unsigned short crcttt;
167 // crcttt=crc(crct,11);
168 //{0,3,0,0,0,0};{0,3,0,0,0,0,0x45,0xdd};
169 //
170 /******************************************************************************/
171 /* Task 0 'init': Initialize */
172 /******************************************************************************/
173 void init (void) _task_ INIT { /* program execution starts here */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -