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

📄 main.c

📁 Data logger external EEPROM function based on new Renesus microcontroller. This module has been test
💻 C
字号:


/***********************************************************************************
User Includes
***********************************************************************************/

#include    <machine.h> 
/*	Following header file provides a structure to access on-chip I/O registers. */
#include "iodefine.h"
/*	Following header file provides common defines for widely used items.	*/
#include "rsk38347def.h"
/*  Following header file provides prototype for main function */
#include "main.h"
/*	Following header file provides useful macros and function prototypes for
	controling the LCD interface.	*/
#include "lcd.h"
//#include <stdlib.h>



/*************************************************************************************************************/ 
/*                                                                                                           */ 
/*  H8/300L Super Low Power Series                                                                           */ 
/*      -H8/38024 Series-                                                                                    */ 
/*  Application Note                                                                                         */ 
/*                                                                                                           */ 
/*  '2kbit EEPROM Write & Read Control'                                                                      */ 
/*                                                                                                           */ 
/*  Function                                                                                                 */ 
/*  : I/O Port Base                                                                                          */ 
/*                                                                                                           */ 
/*  External Clock : 10MHz                                                                                   */ 
/*  Internal Clock : 5MHz                                                                                    */ 
/*  Sub Clock      : 32.768kHz                                                                               */ 
/*                                                                                                           */ 
/*************************************************************************************************************/ 
 

 
/*************************************************************************************************************/ 
/*  Symbol Definition                                                                                        */ 
/*************************************************************************************************************/ 
struct BIT { 
    unsigned char   b7:1;       /* bit7  */ 
    unsigned char   b6:1;       /* bit6  */ 
    unsigned char   b5:1;       /* bit5  */ 
    unsigned char   b4:1;       /* bit4  */ 
    unsigned char   b3:1;       /* bit3  */ 
    unsigned char   b2:1;       /* bit2  */ 
    unsigned char   b1:1;       /* bit1  */ 
    unsigned char   b0:1;       /* bit0  */ 
}; 
 
struct BIT2 { 
    unsigned char   ba:2;       /* bit7,6 */ 
    unsigned char     :5;       /* other  */ 
}; 
 
#define     PDR1        *(volatile unsigned char *)0xFFD4        /* Port Data Register 1                     */ 
#define     PDR1_BIT2   (*(struct BIT2 *)0xFFD4)                 /* Port Data Register 1                     */ 
#define     P1A         PDR1_BIT2.ba                             /* P17, P16                                 */ 
#define     PCR1        *(volatile unsigned char *)0xFFE4        /* Port Control Register 1                  */ 
 
/*************************************************************************************************************/ 
/*  Function define                                                                                          */ 
/*************************************************************************************************************/ 
extern void INIT( void );                                        /* SP Set                                   */ 
extern void InitialiseDisplay( void );
extern void DisplayString( unsigned char position, char * string); 

 
unsigned char   tmp[1];     
unsigned short  i;
unsigned short LogInterval;
char buf[8];
 
 

/*************************************************************************************************************/ 
/*  Main Program                                                                                             */ 
/*************************************************************************************************************/ 
void main( void ) 
{ 
    unsigned char   tmp[16]; 
    //unsigned char test='A'; 
	unsigned char input[16]= {0xaa, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
                           0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff };
    unsigned short  i;
	unsigned short LogInterval;
	unsigned char buf[16]; 
	LogInterval = 0;
	
	/*	Reset the LCD module.	*/
	//InitialiseDisplay();

	/*	Display Renesas Splash Screen.	*/
	//DisplayString(LCD_LINE1,"Renesas");
  
    set_imask_ccr(1);                                            /* Interrupt Disable                        */ 
 
    PCR1 = 0xC0;  
	                                               /* P17, P16 Set Output Port                 */ 
    send_start();                                                /* Send Start Condition                     */ 
    tmp[0] = 0xA0;                                               /* Set Write Code                           */ 
    send_code(tmp,1);                                            /* Send 1byte                               */ 
    tmp[0] = 0x00;   
	tmp[1] = 0x00;                                            /* Set EEPROM Write Address                 */ 
    send_code(tmp,2);                                            /* Send 1byte                               */ 
 
    //X_BGN = __sectop("SPLPG");                                   /* Sample Program Top address               */ 
    //X_END = __secend("SPLEND");                                  /* Sample Program End address               */ 
    send_code(input,16);                                /* Send and Write Sample Program            */ 
    send_stop();                                                 /* Send Stop Condition                      */ 
 
    for(i = 0; i < 30000; i++);                                   /* Need to wait 10 msec                     */ 
 
    send_start();                                                    /* Dummy Write                              */ 
    tmp[0] = 0xA0; 
    send_code(tmp,1); 
    tmp[0] = 0x00; 
	tmp[1] = 0x00;
    send_code(tmp,2); 
 
    send_start();                                                /* Send Start Condition                     */ 
    tmp[0] = 0xA1;                                               /* Set Read Code                            */ 
    send_code(tmp,1);                                            /* Send 1byte                               */ 
	tmp[0] = 0x00;
	tmp[1] = 0x00;
	buf[0] = 0xA0;
	//buf[0] = 0x10;
    rcv_code(buf,2);                          /* Read EEPROM                              */
	send_stop();                                                 /* Send Stop Condition                      */
	LogInterval = *(unsigned short*)&buf[0]; 
/*	while(1)
	{
	Convert_Number_ToString(LogInterval,buf);
	DisplayString(LCD_LINE2,buf);
	}*/
 
 
    //splpgm();                                                    /* Go to Sample Program                     */ 
 
   
}
/*************************************************************************************************************/ 
/*  Send IIC Communication Data                                                                              */ 
/*************************************************************************************************************/ 
void send_code( unsigned char *inpdt, unsigned char SIZE ) 
{ 
    unsigned char i,tmp; 
 
    while(SIZE--){ 
        tmp = *inpdt++; 
                                                                 /* Set 1 byte                       */ 
        for(i = 0; i < 8; i++){                                  /* 1 byte Send Finish?                      */ 
            if(tmp & 0x80) 
                send_bit1();                                     /* Send bit"1"                              */ 
            else 
                send_bit0();                                     /* Send bit"0"                              */ 
 
            /*tmp = */tmp<<1;                                              /* Next bit                                 */ 
        } 
        PCR1 = 0x80;                                             /* P17: Output Port , P16: Input Port       */ 
        rcv_ack();                                               /* Receive Acknowledge                      */ 
        PCR1 = 0xC0;                                             /* P17, P16 Set Output Port                 */ 
    } 
} 
 
/*************************************************************************************************************/ 
/*  Set SCL,SDA                                                                                              */ 
/*************************************************************************************************************/ 
void send_p1a( unsigned char dt ) 
{ 
    P1A = dt; 
} 
 
/*************************************************************************************************************/ 
/*  Start Condition                                                                                          */ 
/*************************************************************************************************************/ 
void send_start( void ) 
{ 
    send_p1a(0x01);  /* 0 1 */
    send_p1a(0x03);  /* 1 1 */
    send_p1a(0x02);  /* 1 0 */
    send_p1a(0x00);  /* 0 0 */
} 
 
/*************************************************************************************************************/ 
//  Stop Condition 
/*************************************************************************************************************/ 
void send_stop( void ) 
{ 
    send_p1a(0x00); 
    send_p1a(0x02); 
    send_p1a(0x03); 
    send_p1a(0x01); 
} 
/*************************************************************************************************************/ 
/*  Send bit "1"                                                                                             */ 
/*************************************************************************************************************/ 
void send_bit1( void ) 
{ 
    send_p1a(0x01); 
    send_p1a(0x03); 
    send_p1a(0x03); 
    send_p1a(0x01); 
} 
 
/*************************************************************************************************************/ 
/*  Send bit "0"                                                                                             */ 
/*************************************************************************************************************/ 
void send_bit0( void ) 
{ 
    send_p1a(0x00); 
    send_p1a(0x02); 
    send_p1a(0x02); 
    send_p1a(0x00); 
} 
 
/*************************************************************************************************************/ 
/*  Receive IIC Communication Data                                                                           */ 
/*************************************************************************************************************/ 
void rcv_code( unsigned char *outpdt, unsigned char SIZE ) 
{ 
    unsigned char i,b1dt,rtn; 
 
    while(SIZE > 0){ 
        PCR1 = 0x80;                                             /* P17: Output Port, P16: Input Port        */ 
        rtn = 0; 
        for(i = 0; i < 8; i++){                                  /* 1 byte Receive Finish?                   */ 
            /*rtn = */rtn<<1; 
 
            send_p1a(0x00); 
            send_p1a(0x02); 
            send_p1a(0x02); 
            b1dt = P1A;                                          /* Receive 1 bit                            */ 
            send_p1a(0x00); 
            b1dt = (char)(b1dt & 0x01); 
 
            rtn = (char)(rtn|b1dt); 
        } 
        *outpdt = rtn;                                           /* Set Receive Data                         */ 
 
        PCR1 = 0xC0;                                             /* P17, P16 Set Output Port                 */ 
        SIZE--; 
        if(SIZE > 0){ 
            *outpdt++;                                           /* Ram Address Count-up                     */ 
            send_bit0();                                         /* Output Acknowledge                       */ 
        } 
    } 
} 
/*************************************************************************************************************/ 
/*  Receive Acknowledge                                                                                      */ 
/*************************************************************************************************************/ 
void rcv_ack( void ) 
{ 
    send_p1a(0x00); 
    send_p1a(0x02); 
    send_p1a(0x02); 
    if(P1A & 0x01)                                               /* Receive Check Acknowledge                */ 
     //   while(1);
	{ 
    send_p1a(0x00); 
	}
} 
  

         
/***********************************************************************************
End of function main
***********************************************************************************/

⌨️ 快捷键说明

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