📄 main.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 + -