📄 485.lst
字号:
C51 COMPILER V7.50 485 05/04/2009 16:50:31 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 485
OBJECT MODULE PLACED IN 485.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 485.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*************************************************************************************************
2 * 文 件 名:485.c
3 * 功 能:485主机通信模块
4 * 硬件条件: 1.CPU型号:ATMEL2051
5 * 2.晶振:11.0592
6 * 作 者:zwb
7 * 日 期:2009年04月24号
8 *************************************************************************************************/
9 //-----------------------函数声明,变量定义--------------------------------------------------------
10 #include <reg51.h>
11 #include <lcd1602.h>
12 #include <string.h>
13 #define unchar unsigned char
14 #define COUNT 10 // 定义接收缓冲区大小
15 unchar Receive_buffer[COUNT]; //定义接收缓冲区
16 unchar Memory_buff[COUNT];//定义存储区
17 unchar Dis_horse[3];
18 unchar point,ask=0; //定义接收数据个数指示变量
19 unchar FIFO;
20 unchar COM_dzdata[2]={0x41,0x42};//定义主机发送地址和命令
21 sbit L0 = P3^5;
22 sbit L1 = P3^7;
23 //========================================================================================
24 //函数名称:delay()
25 //输入函数:无
26 //输出函数:无
27 //函数功能:延时子函数
28 //=======================================================================================
29 void delay(void)
30 {
31 1 unchar i=30;
32 1 while(i--);
33 1 }
34 //--------------------------------------------------------------------------------------------------
35 // 函数名称: UART_init()串口初始化函数
36 // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
37 // 串口接收中断允许,发送中断禁止
38 //--------------------------------------------------------------------------------------------------
39 void UART_init()//初始化串行口和波特率发生器
40 {
41 1 SCON =0xd0; //选择串口工作方式3,打开接收允许
42 1 TMOD =0x20; //定时器1工作在方式2
43 1 PCON = 0x80; //波特率加倍
44 1 TH1 =0xf4; //实现波特率4800(系统时钟11.0592MHZ)
45 1 TL1 =0xf4;
46 1 TR1 =1; //启动定时器T1
47 1 ET1 =1;
48 1 EA = 1;
49 1 PS = 1;
50 1 ES=0;
51 1 }
52
53 //--------------------------------------------------------------------------------------------------
54 // 函数名称: serial()串口接收中断处理函数
55 // 函数功能: 接收十位数据到数据缓冲区
C51 COMPILER V7.50 485 05/04/2009 16:50:31 PAGE 2
56 //--------------------------------------------------------------------------------------------------
57 void SerialInt(void) interrupt 4
58 {
59 1 unchar RECEIVR_buffer;
60 1
61 1 if(TI)TI=0;
62 1 /*
63 1 if(RI) //处理接收中断
64 1 {
65 1 RI=0; //清除中断标志位
66 1 RECEIVR_buffer=SBUF; //接收串口数据
67 1 if(point>=0&&point<10) //判断是否接收够十位数据
68 1 {
69 1 Receive_buffer[point++]=RECEIVR_buffer;//不够,把接收到的数据放入接收缓存区
70 1
71 1 else point=0; //缓冲区已满,清除缓存区内数据重新接收
72 1
73 1 }
74 1 }
75 1 */
76 1 if(RI) //处理接收中断
77 1 {
78 2 RI=0; //清除中断标志位
79 2 RECEIVR_buffer=SBUF; //接收串口数据
80 2 if((ask>=0)&&(ask<3)) //判断是否接收够十位数据
81 2 {
82 3 Receive_buffer[ask++]=RECEIVR_buffer;//不够,把接收到的数据放入接收缓存区
83 3 }
84 2 else ask=0;
85 2 }
86 1 }
87 //--------------------------------------------------------------------------------------------------
88 // 函数名称: CLU_checkdata()计算校验位函数
89 // 输入变量: 无
90 // 输出变量: checkdata,包括六位数据的校验和
91 // 函数功能: 计算校验和
92 //--------------------------------------------------------------------------------------------------
93
94 unsigned char CLU_checkdata()
95 { //计算校验位
96 1 unchar i,checkdata=0;
97 1 for(i=2;i<7;i++)
98 1 {
99 2 checkdata=checkdata^Receive_buffer[i];
100 2 }
101 1 return(checkdata);
102 1 }
103
104 //====================================================================
105 //函数名称:SurveyData(void)
106 //输入变量:测量数据
107 //输出变量:无
108 //函数功能:存放从机发来的测量数据
109 //====================================================================
110
111 void SurveyData(void)
112 {
113 1 strcpy(Memory_buff,Receive_buffer);//把缓冲区的数据拷贝到指定区域
114 1 }
115 //=====================================================================
116 //函数名称:Senddata(void)
117 //输入变量:data
C51 COMPILER V7.50 485 05/04/2009 16:50:31 PAGE 3
118 //输出变量:data
119 //函数功能:发送数据
120 //=====================================================================
121 void Senddata(unchar date)
122 {
123 1 SBUF=date;
124 1 while(TI==0);
125 1 TI=0;
126 1 }
127
128 //- - - - - - - - - - - - - - ------------------------------------------------------------------ --------
129 //函数名称:发送命令
130 //函数功能:主机发送通信命令
131 // --------------------------------------------------------------------------------------------------
132 void send_COM(void)
133 {
134 1 TB8=1;
135 1 Senddata(COM_dzdata[0]);
136 1 TB8=0;
137 1 delay();
138 1 Senddata(COM_dzdata[1]);
139 1 ES=1; //允许串行口中断
140 1 L0=1;
141 1 }
142 //--------------------------------------------------------------------------------------------------
143 // 函数名称: 主函数
144 // 函数功能: 调度函数,完成通信过程
145 //--------------------------------------------------------------------------------------------------
146 void main(void)
147 {
148 1 unchar checkdata;
149 1 L0=0;
150 1 L1=0;
151 1 UART_init(); //初始化串口
152 1 LCD_initial();
153 1 send_COM();
154 1 point=0;
155 1 do
156 1 {
157 2 if(ask==3) //判断数据是否接收完成
158 2 { SurveyData();
159 3 L1=1;
160 3 LCD_set_position(0x00);
161 3 LCD_prints(Memory_buff);
162 3
163 3 //checkdata=CLU_checkdata(); //调用求校验和函数
164 3 // if(checkdata==Receive_buffer[8]) //判断校验和是否正确
165 3 {SurveyData();}
166 3
167 3 //point=0;
168 3 ask=0;
169 3 }
170 2 } while(1);
171 1 }
*** WARNING C280 IN LINE 148 OF 485.C: 'checkdata': unreferenced local variable
172
173
174
175
176
177
178
C51 COMPILER V7.50 485 05/04/2009 16:50:31 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 453 ----
CONSTANT SIZE = 6 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 28 11
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -