📄 modbusfunc.lst
字号:
C51 COMPILER V7.50 MODBUSFUNC 07/12/2005 11:40:45 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MODBUSFUNC
OBJECT MODULE PLACED IN MODBUSFUNC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MODBUSFUNC.c COMPACT ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "STC89C58.h"
2 #include "TG01R.h"
3 #include "Modbus.h"
4 #include "ErrCheck.c"
5 #include "HexAsc.c"
6 #include "Serial.c"
7 #include <stdio.h>
8
9 void Delay_50us(uint _time); //延时函数,非中断方式,延时时间基准50us
10 void TimeOut_Start(uint _time50us); //开始时间溢出,中断方式,时间基准50us
11 void TimeOut_ReStart(uint _time); //
12 void TimeOut_Stop(void); //停止时间溢出定时
13
14 bit T0IR;
15
16 uchar ModeFlag;
17 /*------------------------------------------------------------------------------------------*
18 * 定义Modbus的模式关键字 *
19 *------------------------------------------------------------------------------------------*/
20 #define ASCII 0 /*ASCII 模式关键字 */
21 #define RTU 1 /*RTU 模式关键字 */
22
23 /*-------------------------------------------------------------------------------------------*
24 * 定义波特率关键字@ 24M (24.01065M) *
25 *-------------------------------------------------------------------------------------------*/
26 #define ByteRate_4800k 0x00 //波特率4800kbps
27 #define ByteRate_9600k 0x01 //波特率9600kbps
28
29 uchar code BTR_CODETAB[]={
30 0xf3, //;4800KBPS的预设值
31 0xf5 //;9600KBPS的预设值
32 };
33
34 /*-------------------------------------------------------------------------------------------
35 *函数原型: void ModbusInit(uchar Modbus_mode,uchar ByteRate) *
36 *参数说明: Modbus_mode:modbus的运行模式,可选模式为ASCII_MODE或RTU_MODE; *
37 * ByteRate:串口的波特率,可选的参数为ByteRate_4800k或ByteRate_9600k; *
-
38 *返回值: 无 *
39 *说明: 用于初始化串口 *
40 -------------------------------------------------------------------------------------------*/
41 void ModbusInit(uchar Modbus_mode,uchar ByteRate) {
42 1 ModeFlag=Modbus_mode;
43 1 if(ModeFlag==ASCII) { //ASCII_MODE
44 2 SCON = 0x50; //串口工作方式1,REN=1(Receive Enable),无TB8、RB8
45 2 }
46 1
47 1 else if(ModeFlag==RTU) { //RTU_MODE
48 2 SCON = 0xD0; //串口工作方式3,REN=1(Receive Enable),有TB8、RB8
49 2 }
50 1
51 1 TMOD|= 0x20; //T1,初值自动重装
52 1 TH1 = BTR_CODETAB[ByteRate];
53 1 TL1 = BTR_CODETAB[ByteRate];
54 1 TR1 = 1; //开始计数
C51 COMPILER V7.50 MODBUSFUNC 07/12/2005 11:40:45 PAGE 2
55 1 IE |= 0x80;
56 1
57 1 // IE |= 0x90; //开放串口中断
58 1 /********************************************************************************************
59 1 if(Modbus_mode==ASCII_MODE) {
60 1 SCON = 0x50; //串口工作方式1,REN=1(Receive Enable),无TB8、RB8
61 1 TMOD|= 0x20; //T1,初值自动重装
62 1 TH1 = BTR_CODETAB[ByteRate];
63 1 TL1 = BTR_CODETAB[ByteRate];
64 1 TR1 = 1; //开始计数
65 1 IE |= 0x90; //开放串口中断
66 1 }
67 1 else {
68 1 SCON = 0x50; //串口工作方式1,REN=1(Receive Enable),无TB8、RB8
69 1 TMOD|= 0x20; //T1,初值自动重装
70 1 TH1 = BTR_CODETAB[ByteRate];
71 1 TL1 = BTR_CODETAB[ByteRate];
72 1 TR1 = 1; //开始计数
73 1 IE |= 0x90; //开放串口中断
74 1 }
75 1 *********************************************************************************************/
76 1 }
77
78
79
80 ModbusFrame QueryFrame, //查询消息暂存器
81 RespFrame; //回应消息暂存器
82
83
84
85
86
87 Frame_Style_A Rd_Coil_St;
88
89
90
91 uchar Rcv_Str_intime(uchar *RcvDataBuf) {
92 1 uchar counter,oyetempData;
93 1 counter=0;
94 1 while(RI==0);
95 1 RI=0;
96 1 oyetempData=SBUF;
97 1 *(RcvDataBuf+counter)=SBUF;
98 1 counter++;
99 1 TimeOut_Start(10);
100 1 while(1) {
101 2 while((RI==0)&&(T0IR==0));
102 2 if(T0IR==1) {
103 3 return(counter);
104 3 }
105 2 if(RI==1) {
106 3 RI=0;
107 3 *(RcvDataBuf+counter)=SBUF;
108 3 counter++;
109 3 TimeOut_ReStart(2);
110 3 }
111 2 }
112 1 }
113
114
115
116 /*
C51 COMPILER V7.50 MODBUSFUNC 07/12/2005 11:40:45 PAGE 3
117 main() {
118 uchar tempData,i;
119 uchar xdata DataBuf[0x10];
120
121 ModbusInit(RTU,ByteRate_4800k);
122 printf("Start=%c",tempData);
123 for(i=0;i<16;i++) {
124 DataBuf[i]=0x03;
125 }
126 i=Rcv_Str_intime(DataBuf);
127 // Uart_Send_Str(DataBuf);
128 Uart_Send_Char(i);
129 while(1);
130 }
131 */
132
133 uchar idata trdata[10]={'M','C','S','-','5','1',0x0d,0x0a,0x00};
134 main() {
135 1 uchar i;
136 1 TMOD=0x20;
137 1 TL1=0xf3;TH1=0xf3;
138 1 SCON=0xd3;PCON=0x00;
139 1 TR1=1;
140 1 while(1) {
141 2 i=0;
142 2 while(trdata[i]!=0x00) {
143 3 // while(SBUF!=trdata[i]) {
144 3 SBUF=trdata[i];
145 3 // };
146 3 while(TI==0);
147 3 TI=0;
148 3 i++;
149 3 }
150 2 Delay_50us(10000);
151 2 }
152 1 }
153
154
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 650 ----
CONSTANT SIZE = 553 ----
XDATA SIZE = 2 ----
PDATA SIZE = 75 21
DATA SIZE = ---- ----
IDATA SIZE = 10 3
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -