24c256.LST
资源名称:24c256.rar [点击查看]
上传用户:liao132
上传日期:2020-09-03
资源大小:26k
文件大小:14k
源码类别:
PropertySheet
开发平台:
C++ Builder
- C51 COMPILER V7.05 24C256 11/06/2009 08:47:56 PAGE 1
- C51 COMPILER V7.05, COMPILATION OF MODULE 24C256
- OBJECT MODULE PLACED IN 24c256.OBJ
- COMPILER INVOKED BY: D:SiLabsMCUIDEfilesC51BINC51.exe 24c256.c DB OE
- stmt level source
- 1 /*编辑:赵大帅*/
- 2 /*日期:2009-04-12*/
- 3 /////////////////////////////////
- 4 /*修改:XXX*/
- 5 /*日期:XX-XX-XX*/
- 6 /////////////////////////////////////////////////////////////////
- 7 /*本文档是基于C8051F330单片机的EEPROM 24C512和时钟芯片FCP8563
- 8 的驱动程序,本文档可以对24C512实现单字节读写、多字节读写,还可
- 9 以实现对FCP8563的初始化和读操作;可以通过串口对24C512和FCP8563
- 10 进行调试查看*/
- 11 /////////////////////////////////////////////////////////////////
- 12 #include <c8051f330.h>
- 13 //////////////////I2C接口
- 14 sbit SCL=P0^6;
- 15 sbit SDA=P0^0;
- 16
- 17 ///////////////////////////////////////
- 18 /*延时子程序:delay()*/
- 19 /*输入参数:num1,num2*///设定延时时间
- 20 /*输出参数:无*/
- 21 /*返回:无*/
- 22 void delay(unsigned char char1,unsigned int int1)
- 23 {
- 24 1 unsigned char j;
- 25 1 unsigned int i;
- 26 1 for(j=0;j<char1;j++)
- 27 1 {
- 28 2 for(i=0;i<int1;i++)
- 29 2 {
- 30 3
- 31 3 }
- 32 2 }
- 33 1 }
- 34 ////////////////////////////////////////
- 35 /*IO初始化:IO_Init()*/
- 36 /*输入参数:无*/
- 37 /*输出参数:无*/
- 38 /*返回:无*/
- 39 void Io_init(void)
- 40 {
- 41 1 XBR0 =0x01;//USART 使能
- 42 1 XBR1 =0X40;
- 43 1 P0MDIN =0xF3;//P02、P03为模拟输入;其余为数字输入
- 44 1 P0MDOUT =0x3e;//P04、P05为推挽输出;P06、P07为漏极开路输出
- 45 1 P0SKIP =0xCF;
- 46 1 P1MDIN =0xFF;//P1均为数字输入
- 47 1 P1MDOUT =0xC7;//P13,P14,P15为漏极开路输出,P10,P11,P12为推挽输出
- 48 1 P1SKIP =0xFF;
- 49 1 }
- 50 ///////////////////////////////////////
- 51 /*晶振初始化:oscillator()*/
- 52 /*输入参数:无*/
- 53 /*输出参数:无*/
- 54 /*返回:无*/
- 55 void oscillator()
- C51 COMPILER V7.05 24C256 11/06/2009 08:47:56 PAGE 2
- 56 {
- 57 1 OSCXCN =0x67;//开启外部震荡(晶体振荡器方式,12MHZ)
- 58 1 while((OSCXCN & 0x80) ==0X00 ){} //判断XTLVLD:晶体振荡器S是否工作稳定?
- 59 1 CLKSEL =0x01; //切换到外部晶振
- 60 1 }
- 61 /////////////////////////////////
- 62 void WDT_reset()
- 63 {
- 64 1 PCA0MD =0x08;
- 65 1 PCA0CPL2 =0xFF;
- 66 1 PCA0H =PCA0L =0x00;
- 67 1 PCA0MD =0x41;
- 68 1 PCA0CPH2 =0x00;
- 69 1 }
- 70 /*起始位:I2C_Start()*/
- 71 /*输入参数:无*/
- 72 /*输出参数:无*/
- 73 /*返回:无*/
- 74 void I2C_Start()
- 75 {
- 76 1 SCL =1;
- 77 1 SDA =1;
- 78 1 delay(1,20);
- 79 1 SDA =0;
- 80 1 delay(1,20);
- 81 1 WDT_reset();
- 82 1 }
- 83 ////////////////////////////////
- 84 /*停止位:I2C_Stop()*/
- 85 /*输入参数:无*/
- 86 /*输出参数:无*/
- 87 /*返回:无*/
- 88 void I2C_Stop()
- 89 {
- 90 1 SCL =1;
- 91 1 SDA =0;
- 92 1 delay(1,20);
- 93 1 SDA =1;
- 94 1 delay(1,20);
- 95 1 WDT_reset();
- 96 1 // SCL =0;
- 97 1 }
- 98 ////////////////////////////////
- 99 /*接受应答位:I2C_Receive_ACK()*/
- 100 /*输入参数:无*/
- 101 /*输出参数:无*/
- 102 /*返回:无*/
- 103 void I2C_Receive_ACK()
- 104 {
- 105 1 SCL =0;
- 106 1 delay(1,20);
- 107 1 SCL =1;
- 108 1 delay(1,20);
- 109 1 /*
- 110 1 if(!SDA)
- 111 1 {
- 112 1 UART_send(0xAA);
- 113 1 }
- 114 1 */
- 115 1 SCL =0;
- 116 1 }
- 117 ////////////////////////////////
- C51 COMPILER V7.05 24C256 11/06/2009 08:47:56 PAGE 3
- 118 /*发送应答位:I2C_Send_ACK()*/
- 119 /*输入参数:无*/
- 120 /*输出参数:无*/
- 121 /*返回:无*/
- 122 void I2C_Send_ACK()
- 123 {
- 124 1 SCL =0;
- 125 1 SDA =0;
- 126 1 delay(1,20);
- 127 1 SCL =1;
- 128 1 delay(1,20);
- 129 1 SCL =0;
- 130 1 SDA =1;
- 131 1 }
- 132 ////////////////////////////////
- 133 /*发送非应答位:I2C_Send_NOACK()*/
- 134 /*输入参数:无*/
- 135 /*输出参数:无*/
- 136 /*返回:无*/
- 137 void I2C_Send_NOACK()
- 138 {
- 139 1 SCL =0;
- 140 1 SDA =1;
- 141 1 delay(1,20);
- 142 1 SCL =1;
- 143 1 delay(1,20);
- 144 1 SCL =0;
- 145 1 }
- 146 ////////////////////////////////
- 147 /*写一个字节数据到24CXXX:I2Cwrite_byte_to24C256()*/
- 148 /*输入参数:dat*///写24C512一个字节
- 149 /*输出参数:无*/
- 150 /*返回:无*/
- 151 void I2Cwrite_byte_to24C256(unsigned char dat)
- 152 {
- 153 1 unsigned char i;
- 154 1 for(i=0;i<8;i++)
- 155 1 {
- 156 2 SCL =0;
- 157 2 if(dat & 0x80)
- 158 2 {
- 159 3 SDA =1;
- 160 3 }
- 161 2 else
- 162 2 {
- 163 3 SDA =0;
- 164 3 }
- 165 2 delay(1,20);
- 166 2 SCL =1;
- 167 2 delay(1,20);
- 168 2 dat<<=1;
- 169 2 }
- 170 1 SCL =0;
- 171 1 }
- 172 ////////////////////////////////
- 173 /*从24C256读一个字节的数据:I2Cread_byte_from24C256()*/
- 174 /*输入参数:无*/
- 175 /*输出参数:无*/
- 176 /*返回:无*/
- 177 unsigned char I2Cread_byte_from24C256()
- 178 {
- 179 1 unsigned char i;
- C51 COMPILER V7.05 24C256 11/06/2009 08:47:56 PAGE 4
- 180 1 unsigned char dat;
- 181 1 for(i=0;i<8;i++)
- 182 1 {
- 183 2 SCL =0;
- 184 2 delay(1,20);
- 185 2 SCL =1;
- 186 2 if(SDA)
- 187 2 {
- 188 3 dat =(dat<<1)+1;
- 189 3 }
- 190 2 else
- 191 2 {
- 192 3 dat =dat<<1;
- 193 3 }
- 194 2 }
- 195 1 SCL =0;
- 196 1 return dat;
- 197 1 }
- 198 /////////////////////////////
- 199 /*随机读24C256 n个字节的数据*/
- 200 /*输入参数:I2C_add,addr*///I2C_add:24C512地址,addr:读EEPROM起始地址,num:字节个数
- 201 /*输出参数:da*///数组首地址
- 202 /*返回:无*/
- 203 void READ_24C256(unsigned char I2C_add,unsigned int addr,unsigned char *da,unsigned char num)
- 204
- 205 { unsigned char i;
- 206 1 unsigned char buffer1,buffer2;
- 207 1 buffer2=addr;//地址低8位
- 208 1 buffer1=(addr>>8);//地址高8位
- 209 1 I2C_Start();
- 210 1 I2Cwrite_byte_to24C256(I2C_add);
- 211 1 I2C_Receive_ACK(); //(sun)主机只发送脉冲,并不监测数据位
- 212 1 I2Cwrite_byte_to24C256(buffer1);
- 213 1 I2C_Receive_ACK();
- 214 1 I2Cwrite_byte_to24C256(buffer2);
- 215 1 I2C_Receive_ACK();
- 216 1 I2C_Start();
- 217 1 I2Cwrite_byte_to24C256((I2C_add|0x01));
- 218 1 I2C_Receive_ACK();
- 219 1 for(i=0;i<(num-1);i++)
- 220 1 {
- 221 2 *da=I2Cread_byte_from24C256();
- 222 2 I2C_Send_ACK();
- 223 2 da++;
- 224 2 }
- 225 1 *da=I2Cread_byte_from24C256();
- 226 1 I2C_Send_NOACK();
- 227 1 I2C_Stop();
- 228 1 }
- 229 ///////////////////////////////////////////////
- 230 /*写24C256 n个字节的数据*/
- 231 /*输入参数:I2C_add,addr*///I2C_add:24C512地址,addr:写EEPROM起始地址,da:数组首地址,num:字节数
- 232 /*输出参数:无*/
- 233 /*返回:无*/
- 234 void WRITE_24C256(unsigned char I2C_add,unsigned int addr,unsigned char *da,unsigned char num)
- 235 {
- 236 1 unsigned char i;
- 237 1 unsigned char buffer1,buffer2;
- 238 1 buffer2=addr;//地址低8位
- 239 1 buffer1=(addr>>8);//地址高8位
- 240 1 I2C_Start();
- 241 1 I2Cwrite_byte_to24C256(I2C_add);
- C51 COMPILER V7.05 24C256 11/06/2009 08:47:56 PAGE 5
- 242 1 I2C_Receive_ACK();
- 243 1 I2Cwrite_byte_to24C256(buffer1);
- 244 1 I2C_Receive_ACK();
- 245 1 I2Cwrite_byte_to24C256(buffer2);
- 246 1 I2C_Receive_ACK();
- 247 1 for(i=0;i<num;i++)
- 248 1 {
- 249 2 I2Cwrite_byte_to24C256(*da);
- 250 2 I2C_Receive_ACK();
- 251 2 da++;
- 252 2 }
- 253 1 I2C_Stop();
- 254 1 }
- 255 ///////////////////////////////////////
- 256 /*波特率设置:Band_Init()*/
- 257 /*输入参数:band///设定串口通信波特率
- 258 /*输出参数:无*/
- 259 /*返回:无*/
- 260 void Band_init(unsigned char band)
- 261 {
- 262 1 TH1=TL1 =band;//9600:0xB8;14400:0xD0;28800:0xE8;57600:0xF4;115200:0xFA;230400:0xFD
- 263 1 CKCON |=(1<<1)|(1<<0);//T1适用外部时钟8分频
- 264 1 TMOD =0x20;//T1采用8位自动重装方式
- 265 1 TCON =0x40;//T1允许,中断不使能
- 266 1 }
- 267 ///////////////////////////////////////
- 268 /*UART初始化:UART_init()*/
- 269 /*输入参数:无*/
- 270 /*输出参数:无*/
- 271 /*返回:无*/
- 272 void UART_init()
- 273 {
- 274 1 SCON0=0x10; //允许接收
- 275 1 ES0=1; //UART0中断允许
- 276 1 }
- 277 ///////////////////////////////////////
- 278 /*发送数据:USART_Send()*/
- 279 /*输入参数:KEY_DATA///UART发送的数据
- 280 /*输出参数:无*/
- 281 /*返回:无*/
- 282 /*void UART_send(char c)
- 283 {
- 284 SBUF0 = c;
- 285 while (!TI0);
- 286 TI0 = 0;
- 287 }*/
- 288 ///////////////////////////////////////////////////////////////////
- 289 int main()
- 290 {
- 291 1 unsigned char a[6]={2,2,3,4,5,6};
- 292 1 unsigned char b[6]={1,1,1,1,1,1};
- 293 1 unsigned int ad=0;
- 294 1 PCA0MD=0x08; //关开门狗
- 295 1 Io_init(); //IO初始化
- 296 1 oscillator(); //晶振初始化
- 297 1 Band_init(0xB8); //波特率设置
- 298 1 UART_init();
- 299 1 // for(i=0;i<512;i++) //串口初始化
- 300 1
- 301 1 // {
- 302 1 WRITE_24C256(0xA0,10,a,64);
- 303 1 delay(10,1000);
- C51 COMPILER V7.05 24C256 11/06/2009 08:47:56 PAGE 6
- 304 1 // ad+=64;
- 305 1 // }
- 306 1 READ_24C256(0xA0,10,b,6);
- 307 1 delay(10,1000);
- 308 1
- 309 1 return 0;
- 310 1 }
- MODULE INFORMATION: STATIC OVERLAYABLE
- CODE SIZE = 568 ----
- CONSTANT SIZE = 12 ----
- XDATA SIZE = ---- ----
- PDATA SIZE = ---- ----
- DATA SIZE = ---- 36
- IDATA SIZE = ---- ----
- BIT SIZE = ---- ----
- END OF MODULE INFORMATION.
- C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)