📄 serial.lst
字号:
C51 COMPILER V7.06 SERIAL 12/21/2004 15:11:26 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN .\output\SERIAL.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SERIAL.C OPTIMIZE(6,SPEED) BROWSE ORDER DEBUG OBJECTEXTEND PRINT(.\output\S
-ERIAL.lst) OBJECT(.\output\SERIAL.obj)
stmt level source
1 /*********************************************************************************************************
2 **--------------文件信息--------------------------------------------------------------------------------
3 **文 件 名: serial.c
4 **创 建 人: 刘宝贵
5 **最后修改日期: 2004年4月20日
6 **描 述: 串行口驱动
7 **
8 **--------------历史版本信息----------------------------------------------------------------------------
9 ** 创建人: 刘宝贵
10 ** 版 本: V1.00
11 ** 日 期: 2004年4月20日
12 ** 描 述: 原始版本
13 **
14 **------------------------------------------------------------------------------------------------------
15 ** 修改人:
16 ** 版 本:
17 ** 日 期:
18 ** 描 述:
19 **
20 **------------------------------------------------------------------------------------------------------
21 **--------------当前版本修订------------------------------------------------------------------------------
22 ** 修改人: 刘宝贵
23 ** 日 期: 2004年4月20日
24 ** 描 述:
25 **
26 **------------------------------------------------------------------------------------------------------
27 ********************************************************************************************************/
28
29 #include "config.h"
30
31 uint8 OS_Q_MEM_SEL NotUse _at_ 0x0000; //指针的NULL为0,这个变量占用0地质避免出现有效的NULL指针
32 uint8 OS_Q_MEM_SEL SerialInData[100]; //给读串口消息队列分配的队列空间
33 uint8 OS_Q_MEM_SEL SerialOutData[200]; //给写串口消息队列分配的队列空间
34 void PutChar(uint8 Data); //发送一个字节
35 void Send(uint8 Data); //发送一个数据包
36 uint8 GetCharWithCheck(void); //从读串口消息队列取一字节,并且对该字节校验
37
38 bit SerialCanSend = 1;
39 bit CommSending = 0;
40 //uint8 data test;
41 uint8 data inchk; //校验和
42 uint8 data outchk; //校验和
43 uint8 data cid; //命令码
44 uint8 data rtn; //返回码 RTN值 表示意义
45 uint8 xdata buf[100]; // 缓冲串口数据
46 #define RIGHT 1 // 01H 正常
47 #define CHKSUM_ERROR 2 // 02H CHKSUM 错
48 #define LENGTH_ERROR 3 // 03H LENGTH 错
49 #define CID_ERROR 4 // 04H CID 无效
50 #define TYPE_ERROR 5 // 05H 命令格式错
51 #define DATA_ERROR 6 // 06H 无效数据
52 #define LOGIC_ERROR 7 // 07H 逻辑错
53
54 #define OTHER_ERROR 0XE0 // E0H~EFH 其他错误
C51 COMPILER V7.06 SERIAL 12/21/2004 15:11:26 PAGE 2
55
56 /*********************************************************************************************************
57 ** 函数名称: PutChar
58 ** 功能描述: 发送一个字节
59 ** 输 入: Data:发送的数据
60 ** 输 出: 无
61 ** 全局变量: 无
62 ** 调用模块: 无
63 **
64 ** 作 者: 陈明计
65 ** 日 期: 2002年12月4日
66 **-------------------------------------------------------------------------------------------------------
67 ** 修改人:
68 ** 日 期:
69 **------------------------------------------------------------------------------------------------------
70 ********************************************************************************************************/
71 void PutChar(uint8 Data)
72 {
73 1 OS_ENTER_CRITICAL();
74 1 if (SerialCanSend == 1)
75 1 {
76 2 SerialCanSend = 0;
77 2 SBUF0 = Data;
78 2 }
79 1 else
80 1 {
81 2 OSQIntPost(SerialOutData,Data);
82 2 }
83 1 OS_EXIT_CRITICAL();
84 1 }
85
86 /*********************************************************************************************************
87 ** 函数名称: PutCharWithcheck
88 ** 功能描述: 发送一个字节同时校验
89 ** 输 入: Data:发送的数据
90 ** 输 出: 无
91 ** 全局变量: chk
92 ** 调用模块: PutChar
93 **
94 ** 作 者: 刘宝贵
95 ** 日 期: 2004年4月21日
96 **-------------------------------------------------------------------------------------------------------
97 ** 修改人:
98 ** 日 期:
99 **------------------------------------------------------------------------------------------------------
100 ********************************************************************************************************/
101 void PutCharWithCheck(uint8 Data)
102 {
103 1 outchk ^= Data ;
104 1 PutChar (Data);
105 1 }
106
107 /*********************************************************************************************************
108 ** 函数名称: CommSendInfo
109 ** 功能描述: 发送一个报文
110 ** 输 入: 无
111 ** 输 出: 无
112 ** 全局变量: address cid rtn chk
113 ** 调用模块: OSQCreate PutCharWithCheck PutChar
114 **
115 ** 作 者: 刘宝贵
116 ** 日 期: 2004年4月25日
C51 COMPILER V7.06 SERIAL 12/21/2004 15:11:26 PAGE 3
117 **-------------------------------------------------------------------------------------------------------
118 ** 修改人:
119 ** 日 期:
120 **------------------------------------------------------------------------------------------------------
121 ********************************************************************************************************/
122 void CommSendInfo(void)
123 {
124 1 OSQCreate(SerialOutData,200);
125 1 outchk = 0;
126 1 PutCharWithCheck(0xeb);
127 1 PutCharWithCheck(0x90);
128 1 PutCharWithCheck(0xeb);
129 1 PutCharWithCheck(0x90);
130 1 PutCharWithCheck(Address);
131 1 PutCharWithCheck(cid);
132 1 PutCharWithCheck(1);
133 1 PutCharWithCheck(rtn);
134 1 PutChar(outchk);
135 1 PutChar(0x0d);
136 1 }
137 /*********************************************************************************************************
138 ** 函数名称: GetCharWithCheck
139 ** 功能描述: 从读串口消息队列取一字节,并且对该字节校验
140 ** 输 入: 无
141 ** 输 出: temp:从串口消息队列取的字节
142 ** 全局变量: inchk:校验和
143 ** 调用模块: OSQPend
144 **
145 ** 作 者: 刘宝贵
146 ** 日 期: 2004年4月21日
147 **-------------------------------------------------------------------------------------------------------
148 ** 修改人:
149 ** 日 期:
150 **------------------------------------------------------------------------------------------------------
151 ********************************************************************************************************/
152 uint8 GetCharWithCheck(void)
153 {
154 1 uint8 data temp;
155 1 OSQPend(&temp,SerialInData,0); /* 接收一个字节 */
156 1 inchk^=temp;
157 1 return(temp);
158 1 }
159
160 /*********************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -