📄 rs485m.lst
字号:
C51 COMPILER V7.50 RS485M 03/17/2007 10:53:10 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE RS485M
OBJECT MODULE PLACED IN RS485M.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE RS485M.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <C8051f020.h>
2 #include "main.h"
3
4 sbit DE_RE=P2^5;
5
6 void UART0_TX(unsigned char send[],unsigned char ii)
7 {
8 1 unsigned char i;
9 1 DE_RE = 1;//设置RS485处于发送状态
10 1 IE &= ~0x10;//关闭UART0中断用查询方式发送
11 1 for(i=0;i<ii;i++)
12 1 {
13 2 if(i==0)//发送从机地址,实现多机通信
14 2 {
15 3 TI0=0;
16 3 TB80=1;
17 3 SBUF0=send[i];
18 3 while(TI0==0);
19 3 TI0=0;
20 3 TB80=0;
21 3 }
22 2 else
23 2 {
24 3 SBUF0=send[i];
25 3 while(TI0==0);
26 3 TI0=0;
27 3 }
28 2 }
29 1 IE |= 0x10;//开启UART0中断
30 1 DE_RE = 0;//设置RS485处于接收状态
31 1 }
32
33 void UART0_ISR (void) interrupt 4 //URAT0中断处理
34 {
35 1 static unsigned char point=0,time=0;
36 1 if(RI0==1) //接受中断处理
37 1 {
38 2 RI0=0;
39 2 if(point==0&&SM20==1&&RB80==1) //广播地址识别
40 2 {
41 3 SM20=0; //以后收到为数据
42 3 RX[point++]=SBUF0;
43 3 }
44 2 else
45 2 {
46 3 if(point>=1)
47 3 {
48 4 RX[point++]=SBUF0;
49 4 if(point==3)
50 4 {
51 5 time=RX[2];//取报文长度
52 5 }
53 4 if(point>=3)
54 4 {
55 5 if(time==0)//全部接收完成
C51 COMPILER V7.50 RS485M 03/17/2007 10:53:10 PAGE 2
56 5 {
57 6 REN0=0;//禁止接收使能
58 6 SM20=1;
59 6 ReceiveBit=1;//置接收完成标志
60 6 point=0;
61 6 }
62 5 else
63 5 time--;
64 5 }
65 4
66 4 }
67 3 else
68 3 point=0;//等待下一次开始
69 3 }
70 2 }
71 1 else //发送中断处理
72 1 TI0=0;
73 1 }
74
75
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 185 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 3
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 + -