📄 s35390a.c
字号:
#include "reg51x.h"
#include "TAB.h"
#include <stdio.h>
#include <i2c.h>
#include <intrins.h>
#include <s35390a.h>
/*hxc last change time 2006.4.10 x:x*/
/*hxc last check time 2006.4.14 16:46*/
uchar bdata Swrx;
sbit s0 = Swrx^0;
sbit s1 = Swrx^1;
sbit s2 = Swrx^2;
sbit s3 = Swrx^3;
sbit s4 = Swrx^4;
sbit s5 = Swrx^5;
sbit s6 = Swrx^6;
sbit s7 = Swrx^7;
extern uchar idata DATA_sheet[7][3];//DATA_sheet[0][0]hour,[0][1] minute,[0][2] second ;[1][0] year, [1][1]month,[1][2]day
//[2][0] [2][2] week ;[3][0]hour,[3][0]minute[3][2]day
extern uchar idata trxdata[7];//send receive s35390a data table
/****************************S35390A_read_xbyte************************************
***************************read ok ret1 ,read 4 error ret 0 ******************************/
bit S35390A_read_xbyte(uchar rxaddr,uchar count ){
uchar is,js,Looprx;
bit retbit;
uchar idata Autotime[2][7]; //read 2 contrast data
Looprx=0;
do{
for (js=0;js<2;js++){
I_start();
I_send(rxaddr); //send read addr data command
for( is=1;is<count;is++){ //receive count-1 byte data
Autotime[js][is-1]=I_receive();//receive 8 bit data
I_Ack();
}
Autotime[js][count-1]=I_receive();//receive last byte data
I_clock();
I_stop();
}
retbit=1;
for (is=0;is<count;is++){ //loop contrast read 2 data
if((Autotime[0][is]!=Autotime[1][is])|(Autotime[0][is]==0xff))retbit=0;
}
Looprx++;
if(retbit==1){ //read ok update trmer data
Looprx=4; //read right exit do while
for (is=0;is<count;is++){
trxdata[is]=Swbyte( Autotime[0][is]);
//printf("%bx,",trxdata[is]);
}
printf("\n");
}
}while(Looprx<4);
return(retbit);
}
/****************************S35390A_write_xbyte************************************
************************write data contrast recveive ok ret1,send 4 error ret0***************/
bit S35390A_write_xbyte(uchar txaddr,uchar count ){
uchar is,Looprx;
bit retbit;
uchar idata Autotime[2][7]; //txdata and rxdata 2 contrast data
#if debug
printf("\n35390_write");
#endif
Looprx=0;
//count=7;
do{
for(is=0;is<count;is++){
Autotime[0][is]=trxdata[is];
}
I_clock();
I_start();
I_send(txaddr);
for(is=0;is<count;is++){
I_send(Swbyte(Autotime[0][is]));
}
I_stop();
wait_5ms();
I_start();
I_send(txaddr+1); //send read data command
for( is=0;is<count-1;is++){ //receive count-1 byte data
Autotime[1][is]=Swbyte(I_receive());//receive 8 bit data
I_Ack();
}
Autotime[1][count-1]=Swbyte(I_receive());//receive last byte data
I_clock();
I_stop();
retbit=1;
Autotime[1][4]&=0x3f;
for (is=0;is<count;is++){ //loop contrast write and read 2 data
if(Autotime[0][is]!=Autotime[1][is])retbit=0;
#if debug
printf("\ntx%bx=%bx,%bx",is,Autotime[0][is],Autotime[1][is]);
#endif
}
Looprx++;
if(retbit==1)Looprx=4;
}while(Looprx<4);
return(retbit);
}
/****************************S35390A_write_time************************************
*******write Y-M-D,W,H-M-S timer send data contrast recveive ok ret1,send 4 error ret0***********/
bit S35390A_txtime(uchar txcont){
trxdata[0]=DATA_sheet[1][0];
trxdata[1]=DATA_sheet[1][1];
trxdata[2]=DATA_sheet[1][2];
trxdata[3]=DATA_sheet[2][2];
trxdata[4]=DATA_sheet[0][0];
trxdata[5]=DATA_sheet[0][1];
trxdata[6]=DATA_sheet[0][2];
return( S35390A_write_xbyte(0x64,txcont));
}
/*
bit S35390A_write_time(uchar rxaddr,uchar count ){
uchar is,Looprx;
bit retbit;
uchar Autotime[2][7]; //read 2 contrast data
Looprx=0;
do{
Autotime[0][0]=Swbyte(DATA_sheet[1][0]);
Autotime[0][1]=Swbyte(DATA_sheet[1][1]);
Autotime[0][2]=Swbyte(DATA_sheet[1][2]);
Autotime[0][3]=Swbyte(DATA_sheet[2][2]);
Autotime[0][4]=Swbyte(DATA_sheet[0][0]);
Autotime[0][5]=Swbyte(DATA_sheet[0][1]);
Autotime[0][6]=Swbyte(DATA_sheet[0][2]);
I_start();
I_send(0x64);
for(is=0;is<7;is++){
I_send(Swbyte(DATA_sheet[0][is]));
}
I_stop();
I_start();
I_send(0x65); //send read timer data command
for( is=0;is<6;is++){
Autotime[1][is]=Swbyte(I_receive());//receive 8 bit data
I_Ack();
}
Autotime[js][6]=Swbyte(I_receive());
I_clock();
I_stop();
retbit=1;
for (is=0;is<6;is++){ //loop contrast read 2 data
if(Autotime[0][is]<>Autotime[1][is])retbit=0;
}
Looprx++;
if(retbit==1)Looprx=4;
}while(Looprx<4)
return(retbit);
}//*/
/****************************S35390A_read_time************************************
*****************read ok ret1 and update Y-M-D,W,H-M-S timer,read 4 error ret 0 **************/
bit S35390A_rxtime(){
if(S35390A_read_xbyte(0x65,7)){
DATA_sheet[0][0]=trxdata[4]&0x3f;//hour
DATA_sheet[0][1]=trxdata[5];//minute
DATA_sheet[0][2]=trxdata[6];//second
DATA_sheet[1][0]=trxdata[0];//year
DATA_sheet[1][1]=trxdata[1];//month
DATA_sheet[1][2]=trxdata[2];//day
DATA_sheet[2][2]=trxdata[3];//week
return (1);
}
else {return (0);}
}
/****************************S35390A_init************************************
******************************timer iinitial*************************************/
S35390A_init(){
if(S35390A_read_xbyte(0x61,1)){
if((trxdata[0]&0xc0)!=0){
trxdata[0]=0x03;
S35390A_write_xbyte(0x60,1);
}
}
if(S35390A_read_xbyte(0x63,1)){
if((trxdata[0]&0x80)!=0){
trxdata[0]=0x03;
S35390A_write_xbyte(0x60,1);
}
}
trxdata[0]=0x02;
S35390A_write_xbyte(0x60,1);
}
/*
bit S35390A_read_time(){
uchar is,js,Looprx;
bit retbit;
uchar Autotime[2][7]; //read 2 contrast data
Looprx=0;
do{
for (js=0;js<2;js++){
I_start();
I_send(0x65); //send read timer data command
for( is=0;is<6;is++){
Autotime[js][is]=I_receive();//receive 8 bit data
I_Ack();
}
Autotime[js][6]=I_receive();
I_clock();
I_stop();
}
retbit=1;
for (is=0;is<6;is++){ //loop contrast read 2 data
if(Autotime[0][is]<>Autotime[1][is])retbit=0;
}
Looprx++;
if(retbit==1){ //read ok update trmer data
Looprx=4; //read right exit do while
DATA_sheet[0][0]=Swbyte(Autotime[0][4]);//hour
DATA_sheet[0][1]=Swbyte(Autotime[0][5]);//minute
DATA_sheet[0][2]=Swbyte(Autotime[0][6]);//second
DATA_sheet[1][0]=Swbyte(Autotime[0][0]);//year
DATA_sheet[1][1]=Swbyte(Autotime[0][1]);//month
DATA_sheet[1][2]=Swbyte(Autotime[0][2]);//day
DATA_sheet[2][2]=Swbyte(Autotime[0][3]);//week
}
}while(Looprx<4)
return(retbit);
}//*/
/****************************************************************
void mian() {
unsigned char Select_Type;
uchar im,jm;
uchar x81,x82;
uchar autobyte;
Initialize78E65();
PCON =SMOD;
SCON=UARTMODE1+UARTREN+UARTTI;
TMOD=TIME1MODE2;
TH1=230;
TR1=1;
//Select_Type = _getkey(); // 从键盘输入选择数字
EAROMImage[0]=0x01;
EAROMImage[1]=0x01;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// i2c_writedata(0,_getkey());
//i2c_writedata(1,_getkey());
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//EAROMImage[0]= i2c_READdata(0);
//EAROMImage[1]= i2c_READdata(1);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
while (1)
{
printf( "\n0.I_start\n");
printf( "1.I_stop\n");
printf( "2.I_init\n");
printf( "3.bit I_send( uchar Idata )\n");
printf ("4.send WaitAck\n");
printf( "6.rx n pcs data\n");
printf( ".exit.\n");
printf ("7.send n pcs data\n");
printf ("8.stop interrupt");
Select_Type = _getkey(); // 从键盘输入选择数字
switch(Select_Type){
case '0':
printf("\nI_init\n");
I_init();
break;
case '1':
printf ("\n I_star\n");
I_start();
break;
case '2':
printf ("\n I_stop\\n");
I_stop();
break;
case '3':
printf ("\nI_send\nINPUT TX BYTE");
Select_Type = _getkey();
I_start();
printf("\nsend=%bx\n",(char)(I_send(Select_Type)));
//I_start();
for( im=0;im<6;im++){
autobyte=I_receive();
I_Ack();
printf("\nreceive%bx=%bx\n",im,Swbyte(autobyte));
}
autobyte=I_receive();
I_clock();
I_stop();
printf("\nreceive%bx=%bx\n",6,Swbyte(autobyte));
break;
case '4':
printf ("\nsend WaitAck\n");
I_start();
printf("\nsendaddr=%bx\n",(char)(I_send(0x64)));
printf("\nsend1=%bx\n",(char)(I_send(Swbyte(06))));
printf("\nsend2=%bx\n",(char)(I_send(Swbyte(3))));
printf("\nsend3=%bx\n",(char)(I_send(Swbyte(0x11))));
printf("\nsend4=%bx\n",(char)(I_send(Swbyte(6))));
printf("\nsend5=%bx\n",(char)(I_send(Swbyte(9))));
printf("\nsend6=%bx\n",(char)(I_send(Swbyte(0x59))));
printf("\nsend7=%bx\n",(char)(I_send(Swbyte(0x50))));
I_stop();
break;
case '6':
printf ("\n I_receive addr \n");
Select_Type = _getkey();
printf( "input rx pcs\n");
jm=_getkey();
I_start();
I_send(Select_Type);
for (im=1;im<jm;im++){
EAROMImage[im]=I_receive();
I_Ack();
}
EAROMImage[jm]=I_receive();
I_clock();
I_stop();
for (im=1;im<=jm;im++){
printf ("%bx,",Swbyte(EAROMImage[im]));
}
break;
case '7':
printf ("\nsend WaitAck\n");
printf( "input tx pcs\n");
Select_Type = _getkey();
for (im=0 ;im<Select_Type;im++){
printf("input%bx",im);
EAROMImage[im]=_getkey();
}
// printf( "input two\n");
//jm= _getkey();
I_start();
printf("\nsendaddr=%bx\n",(char)(I_send(EAROMImage[0])));
for (im=1;im<Select_Type;im++){
printf("\nsend%bx=%bx\n",im,(char)(I_send(Swbyte(EAROMImage[im]))));
}
I_stop();
break;
case '8':
printf ("\nstop interrupt");
I_start();
x81=I_send(0x60);
x82=I_send(0x00);
I_stop();
printf ("\n%bx,%bx\n",x81,x82);
break;
}
}
printf( "read one =%bx\n", i2c_READdata(AT24C16_READ_ID,0));
printf( "read two =%bx\n", i2c_READdata(AT24C16_READ_ID,1));
printf( "input one\n");
i2c_writedata(AT24C16_WRITE_ID,0,_getkey());
printf( "input two\n");
i2c_writedata(AT24C16_WRITE_ID,1,_getkey());
}//*/
uchar Swbyte(uchar data1){//a byte swap bit 01234567 <->bit76543210
ACC=data1;
s7=a0;s6=a1;s5=a2;s4=a3;
s3=a4;s2=a5;s1=a6;s0=a7;
return(Swrx);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -