⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24c08page.c

📁 电话单路计费系统!LCD段码显示!电话机设定自由费率,根据反极信号计费及延时计费自由设定!
💻 C
字号:
		  
/*
****************************************************************************
			AT24C08 test program, Test ok!,Us with [delay.asm]
			Write byte Tan-wentang, 2004-08-15

****************************************************************************
*/

//#pragma src(at24c08asm.asm)
//#pragma src

//#pragma CODE

#include <REG2051.H>
#include <intrins.H>

#include "AT24C08PAGE_Ok.H"
//#include "project.h"
sbit SCL = P3^4;
sbit SDA = P3^5;
sbit WP	 = P3^3;
void delay_ms (unsigned char delaytime);
//=========================================================================

bit EETestAcknowledge (void) {
	SDA = 1;	  
	delay_ms(10);
	SCL = 1;	    
	delay_ms(10);
	F0 = SDA;
	delay_ms(10);
	SCL = 0;	     
	return F0;	            
}
//=========================================================================

unsigned char EEReadByte (void) { 
	unsigned char d = 0;
	unsigned char i;
	     
	i = 8;
	do {
		SCL = 1;
		d *= 2;	   
		if (SDA) d++;
		SCL = 0;	   
	delay_ms(10);
	} while (--i);
	return d;	             
}
//=========================================================================

void EESendByte (unsigned char d) {
	unsigned char i;

	i = 8;
	do {
		SDA = (bit)(d & 0x80);    
	delay_ms(10);
		SCL = 1;	    
	delay_ms(10);
		SCL = 0;	    
		d *= 2;
	} while(--i);
	return;	            
}	 
           
//=========================================================================

void EEStop (void) {
	SCL = 0;	      
	delay_ms(10);
	SDA = 0;	      
	delay_ms(10);
	SCL = 1;	      
	delay_ms(10);
	SDA = 1;	      
	return;	        
}	    
//=========================================================================
void EEAcknowledge (void) {
	SDA = 0;	      
	delay_ms(10);
	SCL = 1;	      
	delay_ms(10);
	SCL = 0;	      
	delay_ms(10);
	SDA = 1;	      
	return;	            
}
//=========================================================================
void EENoAcknowledge (void) {
	SDA = 1;	     
	delay_ms(10);
	SCL = 1;	     
	delay_ms(10);
	SCL = 0;	     
	return;	           
}
//=========================================================================
void EEStart (void) {
	SDA = 1;
	delay_ms(10);
	SCL = 1;	     
	delay_ms(10);
	SDA = 0;	     
	delay_ms(10);
	SCL = 0;	     
	return;	           	
}
//=========================================================================

void EESendWcom (unsigned char Block, com) {
	EEStart();
	//EESendByte(0xa0); 
	EESendByte(0xa0 | com | ((Block & 0x07) * 2)); 
}	                

//=========================================================================

void EEReadPage (unsigned char *str, unsigned char Block, unsigned char StartAddr, unsigned char n) {
	WP = 0;
	EESendWcom(Block , 0x00);
	EETestAcknowledge();	

	EESendByte(StartAddr);                 
	EETestAcknowledge(); 
	          
	EEStart();	  
	EESendWcom(Block , 0x01);
	EETestAcknowledge();  
	         
	do {
		if (1 == n)	break;
		if (0 == n) break;
			
		*str = EEReadByte();                 
		EEAcknowledge();          
		str++;
		n--;  
	} while(1);
	*str = EEReadByte();       
	EENoAcknowledge();            
	EEStop();	  
	WP = 1;
	//EEDelayMs(0x000a);		
}	
// 0 1 2 3 4 5 6 7 * 256 = 8 * 0x100 = 0x800 
// 0 1 2 3 4 5 6 7 * 256 = 8 * 0x100 * 8 = 0x4000  
//=========================================================================
//;        MOV    R5, #83H     ;DATAADDR
//;        MOV    R3, 2BH	     ;EEPROMADDR
//;        MOV    R2, 2AH	     ;EEPROM BLOCK ADDR
//;        MOV    R7, #01H     ;BYTE COUNT
//;        LCALL  L1EE3H	
//=========================================================================
void EEWritePage (unsigned char *str, unsigned char Block, unsigned char StartAddr, unsigned char n) {
	WP = 0;
	EESendWcom(Block , 0x00);
	EETestAcknowledge();	

	EESendByte(StartAddr);                 
	EETestAcknowledge();           
	         
	do {
		if (0 == n) break;
		EESendByte(*str);                  
		EETestAcknowledge();        
		str++;
		n--;
	} while (1);
	EEStop();	  
	delay_ms(0xfe);
	WP = 1;
}
void delay_ms (unsigned char delaytime)
{		  								//22.1184
	unsigned char i,j;
	for (i = 0;i < delaytime;i++)
		for (j = 0 ;j<delaytime;j++);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -