📄 24c16a.lst
字号:
C51 COMPILER V7.06 24C16A 11/25/2006 17:36:28 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 24C16A
OBJECT MODULE PLACED IN 24c16a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c16a.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*++++++++++++++++++++++++++++++++++++++++
2 * 作者:殷少翔
3 * 日期:2006年11月10日
4 * 修改:2006年11月15日
5 * 说明:用于S51, 12M晶振
6 * 约定:每个函数以scl=0开始,scl=0结尾
7 ++++++++++++++++++++++++++++++++++++++++++*/
8
9 #include "24c16a.h"
10 #include<intrins.h> //可以使用_nop_()函数
11
12 UINT8 WorkpieceNum[4];
13 /****************************************************************************************************/
14 //关于中断,测频率的函数
15 /*****************************************************************************************************/
16 /*================
17 外部中断 计数程序
18 ================*/
19 /*void INTO(void) interrupt 0 using 0
20 {
21 IE0 = 0 ;
22 F_Num++ ;
23 }
24
25 /*===============
26 T0计时的函数,1s
27 ================*/
28 /*void Time0(void) interrupt 1 using 1
29 {
30 TF0 = 0 ;
31 TH0 = (65536-50000)/256 ;
32 TL0 = (65536-50000)%256 ;
33
34 T0_Num++ ;
35 if(T0_Num==20) //中断20次(1s)
36 {
37 F = F_Num ; //输出频率
38 T0_Num = 0 ; //从0计时
39 F_Num = 0 ; //从0计数
40
41 }
42
43 }
44
45
46 /*===============
47 各中断初始化函数
48 =================*/
49
50 /*void InterruptInit(void)
51 {
52 TH0 = (65536-50000)/256 ;
53 TL0 = (65536-50000)%256 ;
54 TMOD = 0x01 ;
55
C51 COMPILER V7.06 24C16A 11/25/2006 17:36:28 PAGE 2
56 TR0 = 1 ; //T0方式0 初值50000
57 ET0 = 1 ;
58
59 IT0 = 1 ; //INT0下降沿触发
60 EX0 = 1 ;
61
62 EA = 1 ;
63 }
64 /*********************************************************************************************************
-/
65 //关于24C16的函数
66 /*********************************************************************************************************
-/
67 /*=======
68 开始函数
69 ========*/
70 void start_24(void)
71 {
72 1 scl = 0 ;
73 1 sda = 1 ;
74 1 scl = 1 ; _nop_();
75 1 sda = 0 ; _nop_();
76 1
77 1 scl = 0 ;
78 1 }
79
80 /*=======
81 结束函数
82 =======*/
83 void stop_24(void)
84 {
85 1 scl = 0 ;
86 1 sda = 0 ;
87 1 scl = 1 ; _nop_() ;
88 1 sda = 1 ; _nop_() ;
89 1
90 1 scl = 0 ;
91 1 }
92
93 /*===========
94 读8 Bit 数据
95 ============*/
96 UINT8 read_8_bit_24(void)
97 {
98 1 UINT8 r_8_bit, n, m ;
99 1 UINT8 temp[8] = 0 ;
100 1
101 1 r_8_bit = 0 ;
102 1 scl = 0 ;scl = 1 ;
103 1 for(n=0; n<8; n++) //得到数据,由高到低位
104 1 {
105 2 scl = 1 ;
106 2 _nop_() ;
107 2 temp[n] = sda ;
108 2 scl = 0 ;
109 2 }
110 1 scl = 0 ;
111 1 sda = 1 ;scl = 1 ;
112 1 _nop_() ; _nop_() ;
113 1 scl = 0 ; //处理确认位
114 1
115 1 for(m=0; m<8; m++) //数据处理
C51 COMPILER V7.06 24C16A 11/25/2006 17:36:28 PAGE 3
116 1 {
117 2 r_8_bit = r_8_bit << 1 ;
118 2 if(temp[m]==1) r_8_bit = r_8_bit|0x01 ;
119 2 else r_8_bit = r_8_bit|0x00 ;
120 2 }
121 1 return r_8_bit ;
122 1 }
123
124 /*===============
125 写8 Bit 数据 x
126 ================*/
127 void write_8_bit_24(UINT8 x)
128 {
129 1 UINT8 w_8_bit, n, m, a;
130 1 UINT8 temp[8] = 0 ;
131 1 w_8_bit = x ;
132 1
133 1 for(n=0; n<8; n++)
134 1 {
135 2 a = w_8_bit&0x80 ; //高位在前
136 2 if(a==0x80) temp[n] = 1 ;
137 2 else temp[n] = 0 ;
138 2 w_8_bit = w_8_bit << 1 ;
139 2 }
140 1
141 1 sda = 1 ;scl = 0 ;
142 1 for(m=0; m<8; m++) //先写高位
143 1 {
144 2 sda = temp[m] ;
145 2 scl = 1 ;
146 2 _nop_() ;
147 2 scl = 0 ;
148 2 }
149 1
150 1 scl = 1 ; _nop_() ;
151 1 scl = 0 ; //处理确认位
152 1
153 1 }
154
155 /*===========================================================================
156 * 读1 Byte 数据
157 * 输入参数:r_add 要读的数据的地址,格式为:1010+页码(3位)+0+地址(8位)
158 * 返回参数:r_1_byte 读得到的数据
159 ============================================================================*/
160 UINT8 read_1_byte_24(UINT16 r_add)
161 {
162 1 UINT8 r_1_byte ;
163 1 UINT8 H , L, h;
164 1
165 1 H = r_add / 256 ; //得到高8位数据
166 1 L = r_add % 256 ; //得到低8位数据
167 1 h = H+1 ; //得到读指令的数据
168 1
169 1 wp = 0 ; //写允许
170 1 delay_n5ms_24(1);
171 1
172 1 start_24();
173 1 write_8_bit_24(H); //发写指令
174 1 _nop_() ;_nop_() ;
175 1 write_8_bit_24(L); //写入地址
176 1 _nop_() ;_nop_() ;
177 1
C51 COMPILER V7.06 24C16A 11/25/2006 17:36:28 PAGE 4
178 1 start_24();
179 1 write_8_bit_24(h); //发读命令
180 1 _nop_() ;_nop_() ;
181 1
182 1 wp = 1 ; //写保护
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -