📄 cat1161.lst
字号:
C51 COMPILER V6.12 CAT1161 09/24/2005 15:47:31 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE CAT1161
OBJECT MODULE PLACED IN G:\C51PRJ\CAT1161\CAT1161.OBJ
COMPILER INVOKED BY: e:\keil\c51\BIN\C51.EXE G:\C51PRJ\CAT1161\CAT1161.C DB SB OE
stmt level source
1 /****************************************************************************/
2 /* */
3 /* Copyright (c) 2005, 老树工作室 */
4 /* All rights reserved. */
5 /* */
6 /* http://www.saintone.net Email:hxm0902@163.com */
7 /* QQ:112431149 Tel:010-62966630 */
8 /* */
9 /****************************************************************************/
10 /****************************************************************************/
11 /* 文件名:cat1161.c */
12 /* 版 本:Version 1.0 */
13 /* 描 述:cat1161的eeprom读写试验代码 */
14 /* 作 者:spot */
15 /* 函 数: */
16 /* iic_wait */
17 /* iic_start */
18 /* iic_stop */
19 /* iic_ack */
20 /* iic_no_ack */
21 /* iic_wait_ack */
22 /* iic_send_byte */
23 /* iic_receive_byte */
24 /* */
25 /* 历史记录: */
26 /* spot 2005-06-20 Creat Inital version. (Version 1.0) */
27 /****************************************************************************/
28 #include <reg52.h>
29 #include <absacc.h>
30 #include <intrins.h>
31 #include "../includes/types.h"
32
33 sbit SDA = P0^5; /* iic数据传送位 */
34 sbit SCL = P0^4; /* iic时钟控制位 */
35
36 /* 函数声明 */
37 void iic_wait(void); /* iic延时 */
38 void iic_start(void); /* 开启iic总线 */
39 void iic_stop(void); /* 关闭iic总线 */
40 void iic_ack(void); /* 发送ACK信号 */
41 void iic_no_ack(void); /* 发送NOACK信号 */
42 bit iic_wait_ack(void); /* 等待ACK信号 */
43 void iic_send_byte(u_char demand); /* MCU向iic设备发送一个字节 */
44 u_char iic_receive_byte(void); /* MCU从iic设备接收一个字节 */
45 void write_iic_data(u_char write_data[], u_char address, u_char num); /* 向iic设备写入N个字节 */
46 void read_iic_data(u_char read_data[], u_char address, u_char num); /* 从iic设备读取N个字节 */
47 /* 声明结束 */
48
49 /* iic延时 */
50 void iic_wait(void)
51 {
52 1 _nop_();
53 1 _nop_();
54 1 _nop_();
55 1 _nop_();
C51 COMPILER V6.12 CAT1161 09/24/2005 15:47:31 PAGE 2
56 1 _nop_();
57 1 _nop_();
58 1 }
59
60 /* 开启iic总线 */
61 void iic_start(void)
62 {
63 1 SDA = 1;
64 1 SCL = 1;
65 1 iic_wait();
66 1 SDA = 0;
67 1 iic_wait();
68 1 SCL = 0;
69 1 }
70
71 /* 关闭iic总线 */
72 void iic_stop(void)
73 {
74 1 SDA=0;
75 1 SCL=0;
76 1 iic_wait();
77 1 SCL=1;
78 1 iic_wait();
79 1 SDA=1;
80 1 }
81
82 /* 发送ACK信号 */
83 void iic_ack(void)
84 {
85 1 SDA=0;
86 1 iic_wait();
87 1 SCL=1;
88 1 iic_wait();
89 1 SCL=0;
90 1 }
91
92 /* 发送NOACK信号 */
93 void iic_no_ack(void)
94 {
95 1 SDA=1;
96 1 iic_wait();
97 1 SCL=1;
98 1 iic_wait();
99 1 SCL=0;
100 1 }
101
102 /****************************************************************************/
103 /* 函数名:iic_wait_ack */
104 /* 功 能:等待ACK信号 */
105 /* 作 者:spot */
106 /* 输 入:无 */
107 /* 输 出:1-ACK 0-ERROR */
108 /* */
109 /* 历史记录: */
110 /* spot 2005-06-20 Creat Inital version. (Version 1.0) */
111 /****************************************************************************/
112 bit iic_wait_ack(void)
113 {
114 1 u_char errtime=255;
115 1
116 1 SDA=1;
117 1 iic_wait();
C51 COMPILER V6.12 CAT1161 09/24/2005 15:47:31 PAGE 3
118 1 SCL=1;
119 1 iic_wait();
120 1
121 1 while(SDA)
122 1 {
123 2 errtime--;
124 2 if(!errtime)
125 2 return 0;
126 2 }
127 1
128 1 SCL=0;
129 1 return 1;
130 1 }
131
132 /****************************************************************************/
133 /* 函数名:iic_send_byte */
134 /* 功 能:MCU向iic设备发送一个字节 */
135 /* 作 者:spot */
136 /* 输 入: */
137 /* sbyte 待发送的字节数据 */
138 /* */
139 /* 输 出:无 */
140 /* */
141 /* 历史记录: */
142 /* spot 2005-06-20 Creat Inital version. (Version 1.0) */
143 /****************************************************************************/
144 void iic_send_byte(u_char sbyte)
145 {
146 1 u_char i = 8;
147 1
148 1 while(i--)
149 1 {
150 2 SCL = 0;
151 2 _nop_();
152 2 SDA = (bit)(sbyte&0x80);
153 2 sbyte <<= 1;
154 2 iic_wait();
155 2 SCL = 1;
156 2 iic_wait();
157 2 }
158 1
159 1 SCL=0;
160 1 }
161
162 /****************************************************************************/
163 /* 函数名:iic_receive_byte */
164 /* 功 能:MCU从iic设备接收一个字节 */
165 /* 作 者:spot */
166 /* 输 入:无 */
167 /* 输 出:ddata 接收数据 */
168 /* */
169 /* 历史记录: */
170 /* spot 2005-06-20 Creat Inital version. (Version 1.0) */
171 /****************************************************************************/
172 u_char iic_receive_byte(void)
173 {
174 1 u_char i=8;
175 1 u_char ddata=0;
176 1
177 1 SDA=1;
178 1 while(i--)
179 1 {
C51 COMPILER V6.12 CAT1161 09/24/2005 15:47:31 PAGE 4
180 2 ddata <<= 1;
181 2 SCL=0;
182 2 iic_wait();
183 2 SCL=1;
184 2 iic_wait();
185 2 ddata |= SDA;
186 2 }
187 1 SCL=0;
188 1 return ddata;
189 1 }
190
191 /****************************************************************************/
192 /* 函数名:write_iic_data */
193 /* 功 能:向iic设备写入N个字节 */
194 /* 作 者:spot */
195 /* 输 入: */
196 /* write_data 存放写入字节的数组 */
197 /* address 指定从address处开始写入 */
198 /* num 写入的字节数 */
199 /* */
200 /* 输 出:无 */
201 /* */
202 /* 历史记录: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -