📄 uart.lst
字号:
C51 COMPILER V8.08 UART 11/20/2011 00:11:38 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN UART.OBJ
COMPILER INVOKED BY: D:\Program Files\keil_51\C51\BIN\C51.EXE UART.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************************************************
2 ** 功能描述: 串口中断,
3 ** 日 期:
4 ********************************************************************************************************/
5 #include"stc89c51rc.h"
6 #include " uart.h"
7 #include <intrins.h>
8
9 int rCOMM_TOTAL1 ; //有效接收数据个数
10
11 uchar ucUart_buffer[BUFFER_NUM][16];
12 xdata uchar ucUart_buffer_data[16];
13 uchar ucDatabuf[3]; //接收缓冲
14 idata uchar ucUart_rd = 0;
15 uchar ucUart_wr = 0;
16 uchar ucUart_buffer_pv = 0;
17 uchar ucState=0; //接收状态
18 uchar ucReceDataNum=0; //有效接收个数
19 uchar ucReceVeryfy; //校验累加和变量
20 uchar ucSendVeryfy;
21 uchar ucReceData[16]; //read data
22 uchar ucSendData[16]; //send data
23
24 uchar ucSendDataNum=0; //已发送字节数
25
26 //uchar STATE=0; //接收状态
27 bit uart_sBIT; //发送完成标志
28 bit uart_rBIT; //接收标志
29
30 //-------------------------------------------------------
31 //-------------------串口,跟6410通信--------------------
32
33 void MAIN_RS_INT(void) interrupt 4
34 {
35 1 uchar DataTemp;
36 1 if(RI) // 接收
37 1 {
38 2 RI = 0;
39 2 if( ucUart_buffer_pv >= BUFFER_NUM ) return;
40 2 DataTemp = SBUF;
41 2 switch(ucState)
42 2 {
43 3
44 3 case ucState_START: //开始位 0
45 3 {
46 4 if(START == DataTemp)
47 4 {
48 5
49 5 ucReceDataNum = 0;
50 5 ucReceVeryfy = 0;
51 5 ucState = ucState_DATA1;
52 5
53 5 }
54 4 break;
55 4 }
C51 COMPILER V8.08 UART 11/20/2011 00:11:38 PAGE 2
56 3
57 3 case ucState_DATA1: //数据长度位
58 3 {
59 4 ucDatabuf[ucReceDataNum++] = DataTemp;
60 4
61 4 if(ucReceDataNum == 3)
62 4 {
63 5 if(ucDatabuf[2] == ucReceVeryfy)
64 5 {
65 6
66 6 ucState = ucState_DATA2;
67 6 ucReceVeryfy = 0;
68 6 ucReceDataNum = 0;
69 6 rCOMM_TOTAL1 = ucDatabuf[ 0 ];
70 6 rCOMM_TOTAL1 = (rCOMM_TOTAL1<<8) + ucDatabuf[1] ;
71 6
72 6 }
73 5 else
74 5 {
75 6 ucState = ucState_START;
76 6 ucReceDataNum = 0;
77 6 ucReceVeryfy =0;
78 6 }
79 5 }
80 4 else
81 4 {
82 5 ucReceVeryfy += DataTemp;
83 5 }
84 4 break;
85 4
86 4 }
87 3 case ucState_DATA2: //数据位 2
88 3 {
89 4
90 4 ucUart_buffer_data[ucReceDataNum++] = DataTemp;
91 4
92 4 if( ucReceDataNum == rCOMM_TOTAL1+1 )
93 4 {
94 5 if( ucUart_buffer_data[ ucDatabuf[2] ] == ucReceVeryfy ) //判断校检和
95 5 {
96 6 ucState = ucState_END;
97 6
98 6 }
99 5 else
100 5 {
101 6 ucState = ucState_START;
102 6 ucReceDataNum = 0;
103 6 ucReceVeryfy =0;
104 6 }
105 5 }
106 4 else if( ucReceDataNum > rCOMM_TOTAL1+1 )
107 4 {
108 5 ucState = ucState_END;
109 5 }
110 4 else
111 4 {
112 5 ucReceVeryfy += DataTemp; //计算校检和
113 5 }
114 4
115 4
116 4 break;
117 4 }
C51 COMPILER V8.08 UART 11/20/2011 00:11:38 PAGE 3
118 3 case ucState_END: //结束位 3
119 3 {
120 4 if(END == DataTemp)
121 4 {
122 5 uchar i;
123 5
124 5 for( i=0; i< rCOMM_TOTAL1; i++ )
125 5 {
126 6 ucUart_buffer[ucUart_wr][i] = ucUart_buffer_data[i];
127 6 }
128 5 ucUart_wr ++;
129 5 if( ucUart_wr >= BUFFER_NUM ) ucUart_wr = 0;
130 5 ucUart_buffer_pv ++;
131 5
132 5 }
133 4 ucState = ucState_START;
134 4 break;
135 4 }
136 3
137 3 default:
138 3 {
139 4 ucState = ucState_START;
140 4 break;
141 4 }
142 3 }
143 2
144 2 }
145 1 if(TI)
146 1 {
147 2 TI = 0;
148 2 ucSendDataNum++;
149 2 if(ucSendDataNum < ucSendData[3]+6)
150 2 {
151 3 SBUF = ucSendData[ucSendDataNum];
152 3 }
153 2
154 2 else
155 2 {
156 3 uart_sBIT = 1;
157 3 }
158 2 }
159 1 }
160 /*********************************************************************************************************
161 ** 功能描述:
162 ** 日 期:
163 *********************************************************************************************************/
164
165 bit send_dis_data(uchar Data1,uchar Data2,uchar *SendDeatBuf3) //转发可变协议
166 {
167 1 uchar i;
168 1 uint Data3;
169 1
170 1 ucSendData[0]=START;
171 1 ucSendData[1]=Data1;
172 1 ucSendData[2]=Data2;
173 1 ucSendData[3]= ucSendData[1] + ucSendData[2];
174 1
175 1 Data3 = Data1;
176 1 Data3 = (Data3<<8) + Data2;
177 1
178 1 ucSendVeryfy = 0;
179 1 for( i=0;i< Data3 ;i++)
C51 COMPILER V8.08 UART 11/20/2011 00:11:38 PAGE 4
180 1 {
181 2 ucSendVeryfy += *(SendDeatBuf3);
182 2 ucSendData[4 + i] = *(SendDeatBuf3++);
183 2 }
184 1 ucSendData[ 4 + Data3 ]= ucSendVeryfy ;
185 1 ucSendData[ 5 + Data3 ]= END;
186 1 uart_sBIT = 0;
187 1 ucSendDataNum = 0;
188 1 EX1 = 0;
189 1 SBUF = ucSendData[0];
190 1 while(!uart_sBIT);
191 1 EX1 = 1;
192 1 return 0;
193 1
194 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 490 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 16 ----
PDATA SIZE = ---- ----
DATA SIZE = 60 6
IDATA SIZE = 1 ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -