📄 iic.lst
字号:
C51 COMPILER V7.09 IIC 12/05/2005 10:23:18 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN IIC.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE IIC.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /*********************************************************************/
3 /* 模 块 名:单片机(C51) 文件名:IIC.c */
4 /* 提交日期:2005年11月15日 作 者:金雨和 */
5 /* 版 本:V1.0 --Copyright(c) 2005-2006中太视讯技术有限公司 */
6 /* 描 述:单片机(C51)串口2处理程序 */
7 /* 修改记录: */
8 /* 日 期 版本 修改人 修改内容 */
9 /* 1. */
10 /*********************************************************************/
11
12 #include <Reg935.h>
13 #include "uart.h"
14 #include "string.h"
15
16 #define IIC_INT KB1 //P0.1 IIC中断脚
17 #define IIC_ADDR 0x04 //IIC地址
18 #define IIC_CON_SET 0x44 //IIC命令设置
19 #define IIC_END_SYMBOL 0xFF //IIC发送结束符
20
21 unsigned char xdata g_ucI2CSendBuf[MAX_I2CDATALEN]; //IIC数据缓存
22 unsigned char xdata g_ucI2CSendBuf_Len; //IIC数据缓存内容长度
23 unsigned char xdata g_ucI2CSendBuf_offset; //IIC缓存数据读取当前位移
24
25 unsigned char xdata g_ucI2CRecvBuf[MAX_I2CDATALEN]; //IIC数据缓存
26 unsigned char xdata g_ucI2CRecvBuf_Len; //IIC数据缓存内容长度
27 unsigned char xdata g_ucI2CRecvBuf_offset; //IIC缓存数据读取当前位移
28
29 extern uchar xdata g_sndBuf[MAX_I2CDATALEN]; //数据发送缓冲
30 extern uchar g_sndBufLen; //数据发送缓冲长度
31 extern uchar g_sndBufOffset; //数据发送偏移
32
33 unsigned char xdata g_ucBspOnLine = 1; //默认值1,BSP当前存在
34 unsigned char xdata g_usBspTimeOut = 0; //Bsp是否超时时间纪录
35
36 bit g_workFlag = 0; //工作灯工作标志
37 bit g_verFlag = 0; //获取版本标志
38 unsigned char g_WorkCount = 0; //工作灯工作控制计数器
39 unsigned char g_resetFlag = 0; //C51复位密码
40
41 /*******************************************************************
42 ** 函 数 名: IIC_Isr()
43 ** 输 入: 无
44 ** 输 出: 无
45 ** 描 述: IIC中断函数。
46 ** 全局变量: 无
47 ** 调用模块:
48 ** SetIICSendRegData -- IIC发送数据
49 ** SetIICRecvRegData -- IIC接收数据
50 ** 被调模块: 无
51 ** 作 者:
52 ** 创建日期: 2005年11月15日
53 ** 修 改:
54 ** 日 期 版本 修改人 修改内容
55 ** 1.
C51 COMPILER V7.09 IIC 12/05/2005 10:23:18 PAGE 2
56 ********************************************************************/
57 void IIC_Isr() interrupt 6
58 {
59 1 switch(I2STAT)
60 1 {
61 2 case 0xA8: /* 从发送模式,收到自身地址,已返回ACK */
62 2 IICSendRegData();
63 2 break;
64 2
65 2 case 0x60:
66 2 IICRecvRegData();
67 2 break;
68 2
69 2 default:
70 2 break;
71 2 }
72 1 }
73
74
75 /*******************************************************************
76 ** 函 数 名: IICInit()
77 ** 输 入: 无
78 ** 输 出: 无
79 ** 描 述: 初始化IIC寄存器。
80 ** 全局变量: 无
81 ** 调用模块: 无
82 ** 被调模块: 无
83 ** 作 者:
84 ** 创建日期: 2005年11月15日
85 ** 修 改:
86 ** 日 期 版本 修改人 修改内容
87 ** 1.
88 ********************************************************************/
89 void IICInit()
90 {
91 1 //使能IIC
92 1 EI2C = 1;
93 1 /***********************************************
94 1 P1.5-RST:仅为输入即P1M1.5=1,P1M2.5=0,
95 1 P1.2,P1.3为SDA,SCL输出为开漏即P1M1.2=1, P1M1.3=1, P1M2.2=1, P1M2.3=1
96 1 **************************************************/
97 1 P1M1 = 0x2C;
98 1 P1M2 = 0x0C;
99 1
100 1 I2ADR = IIC_ADDR;
101 1 /***********************************************************
102 1 I2EN = 1; //IIC使能
103 1 STA = 0; //从模式
104 1 STO = 0;
105 1 SI = 0; //复位中断
106 1 AA = 1;
107 1 CRSEL = 0; //使用内部SCL发生器
108 1 ***********************************************************/
109 1 I2CON = IIC_CON_SET;
110 1 }
111
112
113 /*******************************************************************
114 ** 函 数 名: IICSendRegData()
115 ** 输 入: 无
116 ** 输 出: 无
117 ** 描 述: 将g_ucI2CBuf的数据通过IIC发送到BSP15。
C51 COMPILER V7.09 IIC 12/05/2005 10:23:18 PAGE 3
118 ** 全局变量:
119 ** g_ucI2CSendBuf -- IIC发送缓冲
120 ** g_ucI2CSendBuf_Len -- IIC发送缓冲长度
121 ** g_ucI2CSendBuf_offset -- IIC发送缓冲偏移
122 ** 调用模块: 无
123 ** 被调模块:
124 ** IIC_Isr -- IIC中断服务
125 ** 作 者:
126 ** 创建日期: 2005年11月15日
127 ** 修 改:
128 ** 日 期 版本 修改人 修改内容
129 ** 1.
130 ********************************************************************/
131 void IICSendRegData()
132 {
133 1 /* 循环发送,在数据没有发送完毕前,不退出发送程序 */
134 1 while(g_ucI2CSendBuf_offset < g_ucI2CSendBuf_Len)
135 1 {
136 2 if (I2STAT == 0xC0)
137 2 {
138 3 I2CON = IIC_CON_SET;
139 3 if(g_ucI2CSendBuf_offset >= g_ucI2CSendBuf_Len)
140 3 {
141 4 g_ucI2CSendBuf_offset = 0;
142 4 }
143 3 return;
144 3 }
145 2 else /*if (I2STAT == 0xB8)*/
146 2 {
147 3 I2DAT = g_ucI2CSendBuf[g_ucI2CSendBuf_offset];
148 3 g_ucI2CSendBuf_offset++;
149 3
150 3 I2CON = IIC_CON_SET;
151 3 }
152 2
153 2 /* 等待发送字节完毕 */
154 2 while( SI==0 );
155 2 }
156 1
157 1 do
158 1 {
159 2 /* 发送结束符 */
160 2 I2DAT = IIC_END_SYMBOL;
161 2 I2CON = IIC_CON_SET;
162 2 while( SI==0 );
163 2 }while(I2STAT != 0xC0);
164 1
165 1 g_ucI2CSendBuf_Len = 0;
166 1 g_ucI2CSendBuf_offset = 0;
167 1 I2CON = IIC_CON_SET;
168 1 }
169
170
171 /*******************************************************************
172 ** 函 数 名: IICRecvRegData()
173 ** 输 入: 无
174 ** 输 出: 无
175 ** 描 述: 接收BSP15通过IIC发送过来的数据,保存至g_ucI2CBuf中。
176 ** 全局变量:
177 ** g_ucI2CRecvBuf -- IIC接收缓冲
178 ** g_ucI2CRecvBuf_Len -- IIC接收缓冲长度
179 ** g_ucI2CRecvBuf_offset -- IIC接收缓冲偏移
C51 COMPILER V7.09 IIC 12/05/2005 10:23:18 PAGE 4
180 ** 调用模块:
181 ** OnIICRecv -- 处理接收的IIC数据
182 ** 被调模块:
183 ** IIC_Isr -- IIC中断服务
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -