📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 05/04/2009 16:50:02 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*************************************************************************************************
2 * 文 件 名:485c.c
3 * 功 能:485从机通信模块
4 * 硬件条件: 1.CPU型号:ATMEL2051
5 * 2.晶振:11.0592
6 * 作 者:zwb
7 * 日 期:2009年04月27号
8 *************************************************************************************************/
9 //-----------------------函数声明,变量定义--------------------------------------------------------
10 #include <reg51.h>
11 //#include <INTRINS.H>
12 #include <lcd1602.h>
13 #include <string.h>
14 #define unchar unsigned char
15 #define COUNT 10 // 定义发送缓冲区大小
16 unchar send_buffer[COUNT]={0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a}; //定义发送缓冲区
17 unchar COM_dzdata[2]={0x41,0x42};//定义从机地址和命令
18 unchar receive_buffer[2];//定义接受缓冲区
19 unchar Dis_horse[3];
20 unchar point=0; //定义接收数据个数指示变量
21 unchar FIFO; //定义从机通信缓冲区1字节
22 bit flag,lab=0;
23 sbit L0 = P3^5;
24 sbit L1 = P3^7;
25 //========================================================================================
26 //函数名称:delay()
27 //输入函数:无
28 //输出函数:无
29 //函数功能:延时子函数
30 //=======================================================================================
31 void delay(void)
32 {
33 1 unchar i=124;
34 1 while(i--);
35 1 }
36
37 //--------------------------------------------------------------------------------------------------
38 // 函数名称: UART_init()串口初始化函数
39 // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
40 // 串口接收中断允许,发送中断禁止
41 //--------------------------------------------------------------------------------------------------
42 void UART_init()
43 {
44 1 //初始化串行口和波特率发生器
45 1 SCON =0xf0; //选择串口工作方式3,打开接收允许
46 1 TMOD =0x20; //定时器1工作在方式2
47 1 PCON = 0x80; //波特率加倍
48 1 TH1 =0xf4; //实现波特率4800(系统时钟11.0592MHZ)
49 1 TL1 =0xf4;
50 1 TR1 =1; //启动定时器T1
51 1 ET1 =1;
52 1 EA = 1;
53 1 }
54
55
C51 COMPILER V7.50 MAIN 05/04/2009 16:50:02 PAGE 2
56 //--------------------------------------------------------------------------------------------------
57 // 函数名称: COM_send()串口发送函数
58 // 函数功能: 把数据缓冲区的十位数据发送出去
59 //--------------------------------------------------------------------------------------------------
60 void COM_send(void)
61 {
62 1 if(flag==1)//从机发送数据判断位
63 1
64 1 {
65 2 for(point=0;point<10;point++) //连续发送十位数据
66 2 {
67 3 SBUF=send_buffer[point];
68 3 while(TI==0);
69 3 TI=0;
70 3 }
71 2 flag=0;//发送完数据后从机重新处于多机通信状态(即只能接收地址)
72 2 lab=0;
73 2 SM2=1;
74 2 L1=1;
75 2 }
76 1 }
77
78 //==================================================================================
79 //函数名称:Send_display()
80 //输入变量:
81 //输出变量:
82 //函数功能:发送从机自加数列值给主机
83 //===================================================================================
84 void Send_display(void)
85 {
86 1 for(point=0;point<3;point++)
87 1 {
88 2 SBUF=Dis_horse[point];
89 2 while(TI==0);
90 2 TI=0;
91 2 }
92 1 }
93 //===================================================================
94 //函数名称:Receive_COM ()
95 //输入变量:无
96 //输出变量:Receive_COM 接受主机发来的地址和命令,
97 //函数功能:核对是否为本机地址和命令,并置SM2=0;允许从机接受数据
98 //===================================================================
99 void Receive_COM(void)
100 {
101 1 if((RI==1)&&(lab==0))
102 1 {
103 2 RI=0;
104 2 FIFO=SBUF;
105 2 receive_buffer[0]=FIFO;
106 2 lab=1;
107 2 // if(strcmp(receive_buffer,COM_dzdata)==0)//核对主机发来的地址是否为从机地址
108 2 if(FIFO==0x41)
109 2 {
110 3 SM2=0;//是从机地址则允许从机接受数据
111 3 lab=1;
112 3 }
113 2 }
114 1 if(SM2==0)
115 1 {
116 2 L0=1;
117 2 if(RI==1)
C51 COMPILER V7.50 MAIN 05/04/2009 16:50:02 PAGE 3
118 2 {
119 3 FIFO=SBUF;
120 3 receive_buffer[1]=FIFO;
121 3 flag=1;
122 3 LCD_set_position(0x08); //显示接受到得主机命令
123 3 LCD_prints(receive_buffer);
124 3
125 3 }
126 2 delay();
127 2 COM_send();//正确则调用发送程序
128 2 }
129 1
130 1
131 1
132 1 }
133
134 void delay_1s(void)
135 {
136 1 unchar j;
137 1 for(j=0;j<255;j++)
138 1 {delay();}
139 1
140 1 }
141 //--------------------------------------------------------------------------------------------------
142 // 函数名称: 主函数
143 // 函数功能: 调度个子函数,完成通信过程
144 //--------------------------------------------------------------------------------------------------
145 void main(void)
146 {
147 1 unsigned int i=0;
148 1 L0=0;
149 1 L1=0;
150 1 flag=0;
151 1 lab=0;
152 1 UART_init();//初始化串口
153 1 LCD_initial();
154 1 DispStrPosi("RFID:",0,0);
155 1
156 1 do
157 1 {
158 2 Receive_COM();//接受命令和地址
159 2
160 2 Dis_horse[0]= i/100%10 + '0';
161 2 Dis_horse[1]= i/10%10 + '0';
162 2 Dis_horse[2] = i%10 + '0';
163 2 delay_1s();
164 2 i++;
165 2 if(i==999)
166 2 {i=0;}
167 2 Send_display();
168 2 LCD_set_yposition(0x06);
169 2 LCD_prints(Dis_horse);
170 2
171 2 }while(1);
172 1 }
173
174
175
176
177
178
179
C51 COMPILER V7.50 MAIN 05/04/2009 16:50:02 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 546 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 12
IDATA SIZE = ---- ----
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 + -