📄 main.lst
字号:
C51 COMPILER V7.20 MAIN 11/16/2007 15:11:14 PAGE 1
C51 COMPILER V7.20, 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 #include <reg922.h>
2 #include <intrins.h>
3 #include "D12Config.h"
4 #include "Descriptor.h"
5 #include "Chap_9.h"
6 #include "D12Driver.h"
7 #include "D12CI.h"
8 #include "I2c_C51.h"
9
10 unsigned char idata CommandBuf[8];
11 unsigned char idata VerifyByte;
12 //sbit pin_LED = P1^2;
13 /*Not Used yet...Slm
14 void Delay (unsigned long t)
15 {
16 unsigned long i;
17 for(i=0;i<=t;i++) _nop_();
18 }
19 */
20 void SysInit()
21 {
22 1 P0M1&=0;
23 1 P0M2&=0;
24 1 P1M1&=0;
25 1 P1M2&=0;
26 1 P1M1|=0x1c;
27 1 P1M2|=0x0c;
28 1 P3M1&=0;
29 1 P3M2&=0;
30 1 }
31
32 void I2cServe(unsigned char *Buf);
33 void main()
34 {
35 1 SysInit();//初始化端口配置
36 1
37 1 if (Init_D12()!=0) //初始化D12
38 1 return; //如果初始化不成功,返回
39 1
40 1 while(1)
41 1 {
42 2 usbserve(); //处理USB事件
43 2 if( (bEPPflags.bits.configuration) && (bEPPflags.bits.ep1_rxdone) )
44 2 {
45 3 DISABLE();
46 3 CommandBuf[0] = GenEpBuf[0];
47 3 CommandBuf[1] = GenEpBuf[1];
48 3 CommandBuf[2] = GenEpBuf[2];
49 3 CommandBuf[3] = GenEpBuf[3];
50 3 CommandBuf[4] = GenEpBuf[4];
51 3 CommandBuf[5] = GenEpBuf[5];
52 3 CommandBuf[6] = GenEpBuf[6];
53 3 CommandBuf[7] = GenEpBuf[7];
54 3 bEPPflags.bits.ep1_rxdone = 0;
55 3 ENABLE();//当数据移到CommandBufp[]后再开中断以便GenEpBuf[]接收新命令...
C51 COMPILER V7.20 MAIN 11/16/2007 15:11:14 PAGE 2
56 3 I2cServe( CommandBuf );//处理命令包
57 3 D12_WriteEndpoint(3, 8, CommandBuf);//处理后将包回执
58 3 }
59 2 }//end while
60 1 return;//end main()
61 1 }
62
63 /******* 下面为应用程序 *************/
64
65 /*******************************************************************
66 ** 函数名称: I2cServe()
67 ** 功能描述: 处理I2c的控制信息
68 ** 输 入: 无
69 ** 输 出: 无
70 GenEpBuf[0]:读/写控制 00=Bit读 01=Bit写 02=Byte读 03=Byte写 ff=读Firmware Version
71 fe=读Hardware Version
72 GenEpBuf[1]:设备地址
73 GenEpBuf[2]:读/写的数据,在Bit模式下:D7-D4=Bit number(0-7);D3-D0=Set/read value
74 GenEpBuf[3]:保留
75 GenEpBuf[4]:保留
76 GenEpBuf[5]:处理结果,0xaa:成功 0x55:失败 0xbb:未定义的命令代码 0xab:校验错误!
77 GenEpBuf[6]:处理结果,0xaa:成功 0x55:失败 0xbb:未定义的命令代码 0xab:校验错误!
78 GenEpBuf[7]:前7个字节的校验和
79 ********************************************************************/
80 void I2cServe(unsigned char *Buf)//接收到主机发来的I2c控制信息并处理它
81 {
82 1 unsigned char VerifyByte=Buf[0]^Buf[1]^Buf[2]^Buf[3]^Buf[4]^Buf[5]^Buf[6];
83 1 unsigned char Sta,BitNum,SetBit;
84 1
85 1 if(VerifyByte != Buf[7])//校验错误!
86 1 {
87 2 Buf[5]=0xab;
88 2 Buf[6]=0xab;
89 2 return;
90 2 }
91 1
92 1 switch(Buf[0])//命令解析
93 1 {
94 2 case 0xff://读Firware版本号
95 2 Buf[0] = '1';
96 2 Buf[1] = '.';
97 2 Buf[2] = '0';
98 2 Buf[3] = '2';
99 2 break;
100 2 case 0xfe://读Hardware Version
101 2 Buf[0] = '2';
102 2 Buf[1] = '.';
103 2 Buf[2] = '0';
104 2 Buf[3] = '0';
105 2 break;
106 2 case 0x00://Bit读
107 2 BitNum=(Buf[2]>>4);
108 2 Sta=Read_port_bit(Buf[1],BitNum);
109 2 if(Sta==0xaa)//读失败
110 2 {
111 3 Buf[5]=0x55;
112 3 Buf[6]=0x55;
113 3 }
114 2 else//读成功
115 2 {
116 3 Buf[5]=0xaa;
117 3 Buf[6]=0xaa;
C51 COMPILER V7.20 MAIN 11/16/2007 15:11:14 PAGE 3
118 3 Buf[2]=( Buf[2]&0xf0 );
119 3 Buf[2]=( Buf[2]|Sta );
120 3 }
121 2 break;
122 2 case 0x01://Bit写
123 2 BitNum=(Buf[2]>>4);
124 2 SetBit=( Buf[2]&0x0f );
125 2 if( I2c_bit(SetBit,BitNum,Buf[1]) )
126 2 {
127 3 Buf[5]=0xaa;//写成功
128 3 Buf[6]=0xaa;
129 3 }
130 2 else//写失败
131 2 {
132 3 Buf[5]=0x55;
133 3 Buf[6]=0x55;
134 3 }
135 2 break;
136 2 case 0x02://Byte读
137 2 if( IRcvByte(Buf[1], &Buf[2]) )
138 2 {
139 3 Buf[5]=0xaa;//读成功
140 3 Buf[6]=0xaa;
141 3 }
142 2 else//读失败
143 2 {
144 3 Buf[5]=0x55;
145 3 Buf[6]=0x55;
146 3 }
147 2 break;
148 2 case 0x03://Byte写
149 2 if( ISendByte(Buf[1],Buf[2]) )
150 2 {
151 3 Buf[5]=0xaa;
152 3 Buf[6]=0xaa;
153 3 }
154 2 else
155 2 {
156 3 Buf[5]=0x55;
157 3 Buf[6]=0x55;
158 3 }
159 2 break;
160 2 default://以上都不是则写错误代码
161 2 Buf[5]=0xbb;
162 2 Buf[6]=0xbb;
163 2 break;
164 2 }//end switch
165 1
166 1 return;//end function
167 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 646 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
IDATA SIZE = 9 ----
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 + -