📄 serial_port.lst
字号:
C51 COMPILER V7.06 SERIAL_PORT 11/18/2006 22:47:03 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SERIAL_PORT
OBJECT MODULE PLACED IN serial_port.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial_port.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*---------------------------------------------------
2 serial_port.c file
3 Creat by Computer-lov Date: 2005.7.19
4 Last edit date:2005.11.17
5 Copyright(C) 2005-2015 Computer-lov
6 All rights reserved
7 Welcome to my Blog: Http://computer00.21ic.org
8 -----------------------------------------------------*/
9
10 #include <serial_port.h>
11 #include <hardware.h>
12
13
14 unsigned char Sending;
15
16
17 //**************************************************************************************
18 void InitComport(void) //串口初始化函数,使用11.0592M晶体
19 {
20 1 EA=0;
21 1 TMOD=0x21; //定时器0工作在模式1,定时器1工作在模式2
22 1 SCON=0x50; //串口工作在模式1
23 1 TCON=0x05;
24 1 TH1=0xFF; //57600bps
25 1 TL1=0xFF;
26 1 // TH1=0xE8;
27 1 // TL1=0xE8;
28 1 PCON=0x80; //串口波特率加倍
29 1 ES=1; //串行中断允许
30 1 TR1=1; //启动定时器1
31 1 REN=1; //允许接收
32 1 EA=1; //允许中断
33 1 }
34 //****************************************************************************************
35
36
37 unsigned char Buffer[10];
38 unsigned char OK;
39 unsigned char Cancel;
40
41
42 //******************************* 串口中断处理 ***********************************
43 void SerialPort(void) interrupt 4
44 {
45 1 unsigned char i;
46 1 if(RI) //收到数据
47 1 {
48 2 RI=0; //清中断请求
49 2 if(SBUF=='T') //收到请求连接的命令
50 2 {
51 3 TI=0;
52 3 SBUF='A'; //则返回A应答
53 3 while(!TI); //等待发送完毕
54 3 TI=0;
55 3 }
C51 COMPILER V7.06 SERIAL_PORT 11/18/2006 22:47:03 PAGE 2
56 2 if(SBUF=='C') //接收到取消命令
57 2 {
58 3 TI=0;
59 3 Cancel=1; //取消置1
60 3 }
61 2 if(SBUF==0xAA) //0xAA、0x55表示参数开始
62 2 {
63 3 while(!RI); //等待下一个数据
64 3 RI=0;
65 3 if(SBUF==0x55) //要连续收到0xAA和0x55后才能开始接收参数
66 3 {
67 4 for(i=0;i<10;i++) //连续接收10个参数
68 4 {
69 5 while(!RI);
70 5 RI=0;
71 5 Buffer[i]=SBUF; //数据保存在Buffer中
72 5 }
73 4 while(!RI);
74 4 RI=0;
75 4 if(SBUF==0x55) //参数包以0x55结束,如果是,则表示参数接收正确
76 4 {
77 5 OK=1; //则OK置1
78 5 Cancel=0;
79 5 return;
80 5 }
81 4 else //若包尾错误,则OK置0
82 4 {
83 5 OK=0;
84 5 return;
85 5 }
86 4 }
87 3 else
88 3 {
89 4 return;
90 4 }
91 3 }
92 2 return;
93 2 }
94 1 else //发送完一字节数据
95 1 {
96 2 TI=0;
97 2 Sending=0; //清正在发送标志
98 2 }
99 1 }
100 //*****************************************************************************************
101
102 //*****************************************************************************************
103 void SendToComport(unsigned char d) //往串口发送一字节数据
104 {
105 1 Sending=1;
106 1 SBUF=d;
107 1 while(Sending);
108 1 }
109 //*****************************************************************************************
110
111 //*****************************************************************************************
112 //发送一个字符串
113 /*
114 void prints(unsigned char * pd,unsigned char line_feed)
115 {
116 while((*pd)!='\0')
117 {
C51 COMPILER V7.06 SERIAL_PORT 11/18/2006 22:47:03 PAGE 3
118 SendToComport(*pd);
119 pd++;
120 }
121 if(line_feed)
122 {
123 SendToComport(13);
124 SendToComport(10);
125 }
126 }
127 */
128 //****************************************************************************************
129
130 //****************************************************************************************
131 //将16bit的数分成4个4bit的发送
132 void PrintHex(unsigned int x)
133 {
134 1 SendToComport((x>>12)&0x0F);
135 1 SendToComport((x>>8)&0x0F);
136 1 SendToComport(((unsigned char)x>>4)&0x0F);
137 1 SendToComport((unsigned char)x&0x0F);
138 1 }
139 //*****************************************************************************************
140
141
142 //*****************************************************************************************
143 /*
144 void PrintLongInt(unsigned long int x) //将整数转按十进制字符串发送
145 {
146 signed char i;
147 unsigned char display_buffer[10];
148 display_buffer[10]=0;
149 for(i=9;i>=0;i--)
150 {
151 display_buffer[i]='0'+x%10;
152 x/=10;
153 }
154 for(i=0;i<9;i++)
155 {
156 if(display_buffer[i]!='0')break;
157 }
158 for(;i<10;i++)SendToComport(display_buffer[i]);
159 }
160 */
161 //*****************************************************************************************
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 182 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -