?? text2.c
字號(hào):
#include "compile.h"
#include <W77C32.h>
#include <intrins.h>
#include "IIC.h"
/**************************************************************
聲明函數(shù)
**************************************************************/
#define sddr1 0x01
#define sddr2 0x05
#define PCF8563 0xA2 /*定義器件地址*/
#define WRADDR 0x00
#define RDADDR 0x02
idata uchar p0;
static idata uint n;
static void system();
static void getpage(uchar addr);
static void delayms(uint ms);
static void keyinit(void);
static uchar loadd;
static uchar lebal;
static uchar lebal1;
static uchar count;
static uchar buf3[5];
static void sendmessge(void);
static void init(void);
static messg mess;
/********數(shù)據(jù)楨存儲(chǔ)結(jié)構(gòu)*******************************************/
uchar td[9]={0x00,0x12,0x48,0x45,0x19,0x28,0x06,0x11,0x07}; // 控制狀態(tài)寄存器1、 控制狀態(tài)寄存器2、秒、分、時(shí)、日、星期、月/世紀(jì)、年
/*定義發(fā)送緩沖區(qū)*/
uchar idata rd[7]; // 秒、分、時(shí)、日、星期、月/世紀(jì)、年
messg1 xdata buf2[5000] _at_ 0x0000;
main()
{
uchar w1;
INT5=0;
INT4=0;
//WDTC_MODEL0 ;
//WDTC_ENABLE;
//WDTC_CLEAR;
EA=0;
INT3=0; //
INT2=0;
delayms(1);
p0=P0;
INT2=1;
INT3=1; //
loadd=p0&0x0f; //本機(jī)地址
w1=p0&0xc0;
if(w1==0x00)
{
TH1=0xf5; //定時(shí)器t1設(shè)置,串口1設(shè)置波特率9600
TL1=0xf5;
}
else if(w1==0x40)
{
TH1=0xea; //定時(shí)器t1設(shè)置,串口1設(shè)置波特率4800
TL1=0xea;
}
else if(w1==0x80)
{
TH1=0xd5; //定時(shí)器t1設(shè)置,串口1設(shè)置波特率2400
TL1=0xd5;
}
else
{
TH1=0xa9; //定時(shí)器t1設(shè)置,串口1設(shè)置波特率1200
TL1=0xa9;
}
PS1=1; //
SCON=0xF0;
TMOD =0x21; //設(shè)脂定時(shí)器1為8為自動(dòng)重裝
PCON =0x80; //SMOD=1 //啟動(dòng)定時(shí)器1
SCON1 =0xd8;
SMOD_1=1; //單片機(jī)內(nèi)部設(shè)置
EA=1; //使能串行口0中斷
ES0=1;
//WDTC_CLEAR;
ISendStr(PCF8563,WRADDR,td,0x09);
system();
}
/*************************************************************
初始化
*************************************************************/
void init(void)
{
//單片機(jī)與時(shí)鐘芯片的寄存器設(shè)置
}
/*************************************************************
函數(shù)功能
*************************************************************/
void keyinit()
{
}
void PutCha(uchar c)
{
SBUF1=c;
while(!TI1);
TI1 = 0;
}
void putchar(uchar c)
{
SBUF=c;
while(!TI);
TI = 0;
}
uchar GetChar(void)
{
while(!RI1);
RI1 = 0;
return SBUF1;
}
uchar GetCha(void)
{
while(!RI);
RI = 0;
return SBUF;
}
void system()
{
uchar an;
uchar sddr3=sddr1;
if(n==0)
{
n=1;
}
while(1)
{
//WDTC_CLEAR;
if (sddr3==0x01) //
{
lebal=0x01;
lebal1=0xfe;
}
else if (sddr3==0x02)
{
lebal=0x02;
lebal1=0xfd;
}
else if (sddr3==0x03)
{
lebal=0x04;
lebal1=0xfb;
}
else if (sddr3==0x04)
{
lebal=0x08;
lebal1=0xf8;
}
ES0=0; //關(guān)閉中斷同上位機(jī)
TR1=0;
SCON=0x50; //
an=TH1;
TH1=0xf5;
TL1=0xf5;
TR1=1;
PutCha(sddr3);
// WDTC_CLEAR;
delayms(10);
if(RI1)
{
RI1=0;
getpage(sddr3);
sddr3=sddr3+1;
if(sddr3==sddr2)
{
sddr3=sddr1;
TR1=0;
TH1=an;
TL1=an;
SCON=0xf0;
ES0=1;
TR1=1;
delayms(10000);
}
else
{
TR1=0;
TH1=an;
TL1=an;
SCON=0xf0;
ES0=1;
TR1=1;
}
}
else
{
sddr3=sddr3+1;
if(sddr3==sddr2)
{
sddr3=sddr1;
TR1=0;
TH1=an;
TL1=an;
SCON=0xf0;
ES0=1;
TR1=1;
delayms(10000);
}
else
{
TR1=0;
TH1=an;
TL1=an;
SCON=0xf0;
ES0=1;
TR1=1;
}
}
}
}
/****************************************************************
函數(shù)功能
****************************************************************/
void getpage(uchar sdda)
{
uchar a;
uchar b,c,m,bn;
a=SBUF1;
TB81=0;
if(a==sdda)
{
mess.state |=lebal; //lebal在線標(biāo)志位
PutCha(0x01);
m=GetChar(); //
if(m!=1)
{
PutCha(0x01);
for(b=n;b<n+m-1;b++)
{
buf2[b].carmark=sdda;
for(c=0;c<4;c++)
{
buf2[b].buf[c]=GetChar();
}
// WDTC_CLEAR;
IRcvStr(PCF8563,RDADDR,rd,0x07);
buf2[b].date[0]=rd[6];
buf2[b].date[1]=rd[5];
buf2[b].date[2]=rd[3];
buf2[b].date[3]=rd[2];
buf2[b].date[4]=rd[1];
buf2[b].date[5]=rd[0];
//buf2[b].date[6]=rd[0];
/* TR1=0; //
//bn=TH1;
TH1=0xa9;
TH0=0xa9;
TR1=1;
for (c=0;c<7;c++)
{
SBUF=rd[c]; while(!TI);TI=0;
delayms(100);
}
TR1=0; //
TH1=0xf5;
TH0=0xf5;
TR1=1; */
PutCha(0x01);
}
n=n+m-1;
}
}
PutCha(0x01);
TB81=1;
}
/****************************************************************
函數(shù)功能
****************************************************************/
void delayms(uint ms) // 延時(shí)子程序
{
uint i;
while(ms--)
{
// WDTC_CLEAR;
for(i = 0; i < 300; i++);
}
}
/****************************************************************
****************************************************************/
void sengmessge(void)
{
uchar a,b,c,m;
if(n!=1)
{
// WDTC_CLEAR;
if(n<=30)
{
while(!RI);RI=0;
putchar(start);
putchar(start1);
putchar(n-1);
mess.state|=0x00;
putchar(mess.state);
for(a=1;a<n;a++)
{
putchar(buf2[a].carmark);
for(b=0;b<4;b++)
{
putchar(buf2[a].buf[b]);
}
for(c=0;c<6;c++)
{
putchar(buf2[a].date[c]);
}
//WDTC_CLEAR;
}
putchar(0xff);
putchar(0xff);
n=1;
}
while(n>30)
{
//WDTC_CLEAR;
while(!RI);RI=0;
putchar(start);
putchar(start1);
putchar(0x1e);
mess.state|=0xf0;
putchar(mess.state);
mess.state&=0x0f;
m=n-30;
for(a=n;a>m;a--)
{
putchar(buf2[a].carmark);
for(b=0;b<4;b++)
{
putchar(buf2[a].buf[b]);
}
for(c=0;c<6;c++)
{
putchar(buf2[a].date[c]);
}
//WDTC_CLEAR;
}
putchar(0xff);
putchar(0xff);
n=m;
}
if((n<=30)&&(n>1))
{
while(!RI);RI=0;
putchar(start);
putchar(start1);
putchar(n-1);
mess.state|=0x00;
putchar(mess.state);
for(a=1;a<n;a++)
{
putchar(buf2[a].carmark);
for(b=0;b<4;b++)
{
putchar(buf2[a].buf[b]);
}
IRcvStr(PCF8563,RDADDR,rd,0x07);
for(c=0;c<6;c++)
{
putchar(buf2[a].date[c]);
}
//WDTC_CLEAR;
}
putchar(0xff);
putchar(0xff);
n=1;
}
}
}
void serial_0(void) interrupt 4
{
uchar c,l;
ES0=0;
RI=0;
c=SBUF;
//SCON=0x50;
//WDTC_CLEAR;
if (c==datelebal)
{
SM2=0;
for(l=0;l<6;l++)
{
while(!RI);RI=0;
buf3[l]=SBUF;
}
td[8]=buf3[0];td[7]=buf3[1];td[5]=buf3[2];td[4]=buf3[3];td[3]=buf3[4];td[2]=buf3[5];
ISendStr(PCF8563,WRADDR,td,0x09); // 控制狀態(tài)寄存器1、 控制狀態(tài)寄存器2、秒、分、時(shí)、日、星期、月/世紀(jì)、年
}
else if(c==loadd)
{
SBUF=n-1;
while(!TI);TI=0;
SM2=0;
sengmessge();
}
SCON=0xf0;
SM2=1;
ES0=1;
}
/*uchar td[9]={0x00,0x12,0x48,0x45,0x19,0x28,0x06,0x11,0x07}; // 控制狀態(tài)寄存器1、 控制狀態(tài)寄存器2、秒、分、時(shí)、日、星期、月/世紀(jì)、年
*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -