📄 serial.lst
字号:
C51 COMPILER V7.06 SERIAL 06/20/2005 15:36:06 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN .\out\serial.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial.c OPTIMIZE(6,SIZE) DEBUG OBJECTEXTEND PRINT(.\out\serial.lst) OBJECT
-(.\out\serial.obj)
stmt level source
1 /*********************************************************************************************************
2 ** Small RTOS(51)
3 ** The Real-Time Kernel(For Keil c51)
4 **
5 ** (c) Copyright 2002-2002, chenmingji
6 ** All Rights Reserved
7 **
8 ** V1.20.0
9 **
10 **
11 **--------------文件信息--------------------------------------------------------------------------------
12 **文 件 名: serial.c
13 **创 建 人: 陈明计
14 **最后修改日期: 2003年8月31日
15 **描 述: 在DP-51上实现闹钟的例子的串行口驱动程序
16 **
17 **--------------历史版本信息----------------------------------------------------------------------------
18 ** 创建人: 陈明计
19 ** 版 本: V1.00
20 ** 日 期: 2003年3月25日
21 ** 描 述: 原始版本
22 **
23 **------------------------------------------------------------------------------------------------------
24 ** 修改人: 陈明计
25 ** 版 本: V1.20.0
26 ** 日 期: 2003年8月31日
27 ** 描 述: 根据新版本要求修改
28 **
29 **--------------当前版本修订------------------------------------------------------------------------------
30 ** 修改人:
31 ** 日 期:
32 ** 描 述:
33 **
34 **------------------------------------------------------------------------------------------------------
35 ********************************************************************************************************/
36 #define IN_SERIAL
37
38 #include "config.h"
39 /* 声明使用的外部变量 */
40 extern uint8 OS_Q_MEM_SEL NotUse _at_ 0x0100;
41 extern uint8 OS_Q_MEM_SEL SerialInData[20]; /*给读串囗消息队列分配的队列空间*/
42 extern uint8 OS_Q_MEM_SEL SerialOutData[20];/*给写串囗消息队列分配的队列空间*/
43 //extern uint8 OS_Q_MEM_SEL Alarm[];
44
45 void PutChar(uint8 Data);
46
47 bit SerialCanSend = 1; /* 正在发送标志,0:正在发送 */
48
49 /*********************************************************************************************************
50 ** 函数名称: SerialInit
51 ** 功能描述: 初始化串行口
52 ** 输 入: 无
53 ** 输 出: 无
54 ** 全局变量: 无
C51 COMPILER V7.06 SERIAL 06/20/2005 15:36:06 PAGE 2
55 ** 调用模块: 无
56 **
57 ** 作 者: 曾银玲
58 ** 日 期: 2004年11月25日
59 **-------------------------------------------------------------------------------------------------------
60 ** 修改人:
61 ** 日 期:
62 **------------------------------------------------------------------------------------------------------
63 ********************************************************************************************************/
64 void SerialInit(void)
65 {
66 1 TMOD=0x21;// 16 bit timer and bound = mode 2
67 1 PCON=0x00;//0x80 bound double
68 1 SCON=0xd0;//50 8,n,1 parity:odd or even
69 1 TH1=0xfd;//tab[0];
70 1 TL1=0xfd;//tab[0];
71 1 TR1 = 1;
72 1 ES = 1;
73 1 }
74
75 /*********************************************************************************************************
76 ** 函数名称: Send
77 ** 功能描述: 发送一个数据包
78 ** 输 入: Data:指向要发送的数据指针
79 ** 输 出: 无
80 ** 全局变量: 无
81 ** 调用模块: 无
82 **
83 ** 作 者: 陈明计
84 ** 日 期: 2003年3月25日
85 **-------------------------------------------------------------------------------------------------------
86 ** 修改人:
87 ** 日 期:
88 **------------------------------------------------------------------------------------------------------
89 ********************************************************************************************************/
90 /* void Send(uint8 OS_Q_MEM_SEL *Data)
91 {
92 uint8 Sem;
93
94 PutChar(STARTBYTE1);
95 PutChar(STARTBYTE2);
96 Sem = STARTBYTE1 + STARTBYTE2;
97
98 PutChar(*Data);
99 Sem += *Data++;
100 PutChar(*Data);
101 Sem += *Data++;
102 PutChar(*Data);
103 Sem += *Data++;
104 PutChar(*Data);
105 Sem += *Data++;
106 PutChar(*Data);
107 Sem += *Data++;
108
109 PutChar(-Sem);
110 }
111 */
112 /*********************************************************************************************************
113 ** 函数名称: PutChar
114 ** 功能描述: 发送一个字节
115 ** 输 入: Data:发送的数据
116 ** 输 出: 无
C51 COMPILER V7.06 SERIAL 06/20/2005 15:36:06 PAGE 3
117 ** 全局变量: 无
118 ** 调用模块: 无
119 **
120 ** 作 者: 陈明计
121 ** 日 期: 2003年3月25日
122 **-------------------------------------------------------------------------------------------------------
123 ** 修改人:
124 ** 日 期:
125 **------------------------------------------------------------------------------------------------------
126 ********************************************************************************************************/
127 void PutChar(uint8 Data)
128 {
129 1 OS_ENTER_CRITICAL();
130 1 if (SerialCanSend == 1)
131 1 {
132 2 SerialCanSend = 0;
133 2 SBUF = Data; /* 串口空闲,直接发送 */
134 2 }
135 1 else
136 1 {
137 2 OSQIntPost(SerialOutData,Data); /* 数据入队 */
138 2 }
139 1 OS_EXIT_CRITICAL();
140 1 }
141
142 /*********************************************************************************************************
143 ** 函数名称: TaskReceive
144 ** 功能描述: 串口接收处理任务
145 ** 输 入: 无
146 ** 输 出: 无
147 ** 全局变量: 无
148 ** 调用模块: 无
149 **
150 ** 作 者: 曾银玲
151 ** 日 期: 2004年11月25日
152 **-------------------------------------------------------------------------------------------------------
153 ** 修改人:
154 ** 日 期:
155 **------------------------------------------------------------------------------------------------------
156 ********************************************************************************************************/
157 void TaskReceive(void)
158 {
159 1 //uint8 temp,temp1;
160 1 uint8 k;
161 1 /* 建立所需要的消息队列 */
162 1 // OSQCreate(CommandData, 16);
163 1 OSQCreate(SerialInData, 16);
164 1 OSQCreate(SerialOutData, 16);
165 1 SerialInit(); /* 初始化串行口 */
166 1
167 1 while (1)
168 1 {
169 2 if(rcv_inf01==0x07){rcv_inf01=0;rcv_flag=1;
170 3 out_6k();}
171 2
172 2 if((rcv_inf11==1)||(rcv_inf01==1)){//修改时间
173 3 write_12887();rcv_inf11=0;rcv_inf01=0;}
174 2 if((rcv_inf10==0x02)||(rcv_inf00==0x02)){//发送时间
175 3 send_y_h();re_start=1;}//rcv_inf10=0;
176 2 if((rcv_inf11==0x02)||(rcv_inf01==0x02)){//发送信息
177 3 send_inf();}//rcv_inf11=0;
178 2 if(rcv_inf01==0x03){ //修改页码
C51 COMPILER V7.06 SERIAL 06/20/2005 15:36:06 PAGE 4
179 3 rcv_inf01=0;
180 3 mon=date[0];
181 3 pa=mon;
182 3 *(&pa+1)=mon>>8;
183 3 sp=&pa;
184 3 buffer1write(2,260);
185 3 delay(400);
186 3 buffer1topageprogerase(0); //pageaddr
187 3 delay(400);
188 3 }
189 2 if(rcv_inf00==0x05){ //发送页码
190 3 while(!trans_over){}
191 3 SBUF=0xfc;trans_over=0;
192 3 while(!trans_over){}
193 3 SBUF=0x05;trans_over=0;
194 3 while(!trans_over){}
195 3 SBUF=mon;trans_over=0;
196 3 // while((UARTLSR&0x60)==0){}
197 3 //UARTTHR=0xfc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -