📄 fun.lst
字号:
C51 COMPILER V7.50 FUN 05/27/2007 09:12:24 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE FUN
OBJECT MODULE PLACED IN fun.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fun.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 标题: student2000单片机开发系统演示程序 *
3 * 文件: fun.C *
4 * 日期: 2007-5-4 *
5 * 版本: 1.0 *
6
7 ********************************************************************************
8 * 描述: *
9 * 大部分通用函数集合 *
10 * RS232,RS485,延时函数,协议框架演示等 */
11 #include <reg52.h>
12 #include <intrins.h>
13 #include <string.h>
14 #include <absacc.h>
15 #include <stdio.h>
16 #include "sybxt1.h"
17 xdata unsigned char ucRxBuf[RXBUFSIZE];
18 xdata unsigned char ucRxBuf1[RXBUFSIZE];
19 xdata sprotocol spro;
20 sbit P3_6= P3^6;
21 sbit P3_7= P3^7;
22 //rs485的方向控制端;
23 sbit SRSEL=P1^7;
24 unsigned int uiOffset=0;
25 unsigned int uiRxCount=0;
26 uchar i;
27 sbit adclk = P1^1; // 输入输出时钟I/O CLK
28 sbit addata = P1^0; // 数据输出DATA OUT
29 sbit adcs = P1^5; // 片选信号
30 sbit SPI_CLK=P1^1;
31 sbit SPI_DATA=P1^0;
32 sbit CS_DA= P1^4;
33 //IIC,spi片选信号
34 sbit pds12302=P1^3;
35 sbit px5045=P1^6;
36 sbit ptlc549=P1^5;
37 sbit ptlc5615=P1^4;
38
39 void op_jdq(uchar value)
40 {
41 1 bit xx;
42 1 xx=value&0x01;
43 1 P3_6=xx;
44 1 }
45 void op_bell(uchar value)
46 {
47 1 bit xx;
48 1 xx=value&0x01;
49 1 P3_7=xx;
50 1 }
51 void ComInit(void) /*串行口初始化*/
52 {
53 1 SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
54 1 TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
55 1 PCON |= 0x00; //SMOD=0;
C51 COMPILER V7.50 FUN 05/27/2007 09:12:24 PAGE 2
56 1 TH1 = 0xFd; //Baud:4800 fosc=11.0592MHz
57 1 TL1 = 0xFd; //Baud:4800 fosc=11.0592MHz
58 1
59 1 IE |= 0x90; //Enable Serial Interrupt
60 1 TR1 = 1; // timer 1 run
61 1 }
62 /*********************************
63 串口 0 中断函数
64 *********************************/
65 void serial_0(void) interrupt 4
66 {
67 1
68 1 unsigned char a;
69 1 if(RI)
70 1 {
71 2 a=SBUF;
72 2 ucRxBuf[uiRxCount]=a;
73 2 RI=0;
74 2 //send_byte(ucRxBuf[uiRxCount]);
75 2 uiRxCount++;
76 2 uiRxCount%=RXBUFSIZE;
77 2 uccmd=a;
78 2
79 2 }
80 1
81 1 }
82
83 void assignprotocol()
84 {
85 1 //xdata uchar cmdstr[]={0x00,0x05,0x05,0x01 ,0x01 ,0x01 ,0x0d ,0x08 };
86 1 xdata uchar cmdstr[28];
87 1 xdata uchar responsestr[10];
88 1 xdata uchar responselen;
89 1 bit bdo=0;
90 1 xdata uchar j;
91 1 // uchar xx;
92 1 //memcpy(ucRxBuf,cmdstr,8); //调试用
93 1 //uiRxCount=8;
94 1 while(uiOffset!=uiRxCount )
95 1 {
96 2 if(uiOffset<uiRxCount)
97 2 { if(uiRxCount-uiOffset>=7)
98 3 bdo=1;
99 3 else bdo=0;
100 3
101 3 }
102 2 else
103 2 {
104 3 if(uiRxCount+RXBUFSIZE-uiOffset>=7)
105 3 bdo=1;
106 3 else bdo=0;
107 3 }
108 2 if(!bdo)
109 2 return ;
110 2 j=0;
111 2 while(j<6 )
112 2 {
113 3 cmdstr[j]=ucRxBuf[(uiOffset+j)%RXBUFSIZE];
114 3 //send_byte(cmdstr[j]);
115 3 j++;
116 3 }
117 2 memcpy(&spro,cmdstr,6);
C51 COMPILER V7.50 FUN 05/27/2007 09:12:24 PAGE 3
118 2
119 2 if( spro.stx[0]==0x05 && spro.stx[1]==0x05 )
120 2 {
121 3 if(uiOffset<uiRxCount)
122 3 {
123 4 if(uiRxCount-uiOffset>=6+spro.len)
124 4 bdo=1;
125 4 else bdo=0;
126 4
127 4 }else
128 3 {
129 4 if(uiRxCount+RXBUFSIZE-uiOffset>=6+spro.len)
130 4 bdo=1;
131 4 else bdo=0;
132 4 }
133 3 if(!bdo)
134 3 return ;
135 3 while(j<(6+spro.len) )
136 3 {
137 4 cmdstr[j]=ucRxBuf[(uiOffset+j)%RXBUFSIZE];
138 4 //send_byte(cmdstr[j]);
139 4 j++;
140 4 }
141 3
142 3 if(dosprocmd(cmdstr,responsestr,&responselen) )
143 3 {
144 4 // if(bdatavaild)
145 4 // send_bytes_len(responsestr,responselen);
146 4 uiOffset+=responselen;
147 4 }
148 3 else uiOffset++;
149 3
150 3
151 3 uiOffset%=RXBUFSIZE;
152 3 }else
153 2 {
154 3 uiOffset++;
155 3 uiOffset%=RXBUFSIZE;
156 3 }
157 2 }
158 1 }
159
160 uchar dosprocmd(uchar *buf,uchar *respone,uchar *packlen)
161 {
162 1 uchar rtn,i,j,brtn;
163 1 rtn=0;
164 1 memcpy(&spro,buf,5);
165 1 for(i=0;i<4+spro.len;i++)
166 1 {
167 2 rtn=rtn+buf[i];
168 2 }
169 1 if(rtn==buf[i])
170 1 {
171 2 for(j=0;j<spro.len;j++)
172 2 {
173 3 if(spro.cmd==0x01)
174 3 {
175 4 op_jdq(buf[4+j]);
176 4 send_byte('a');
177 4 send_byte(buf[4+j]);
178 4 }
179 3 if(spro.cmd==0x02)
C51 COMPILER V7.50 FUN 05/27/2007 09:12:24 PAGE 4
180 3 {
181 4 op_bell(buf[4+j]);
182 4 send_byte('b');
183 4 send_byte(buf[4+j]);
184 4 }
185 3 }
186 2 *packlen=4+spro.len+2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -