//4.28串行口0、串口1和液晶LCM背光:串口1的各项设置。特别是PINSEL0的设置。看门狗加上了。
//5.13在项目工程中添加I2C处理函数,进行读写E2PROM
//在相同的时刻抄表,然后在不同的时刻,将抄得数据发送 发送序列为每个表的地址
//串口0:RS485抄表 串口1:GPRS 数据传输
///注意定义的数组加上范围
//超标时注意:发送数据(包括地址和数据标项)需要加上0x33 接收数据需要将接收的数据减去0x33
//地址:循环查找地址,上电读取周休日状态字,循环来直到得到数据时就是需要的地址
#include "config.h"
#define led1 (1<<19)
#define beep (1<<19)
#define led2 (1<<19)
volatile uint8 rcv_new0,rcv_new1;///串口0和串口1接收到数据标志
uint8 rcv_buf[],r;//RTC的数据组和数据
uint8 rcv_buf0[50],rx;//串口0的数组数据
uint8 rcv_buf1[50],ry;//串口1的数组和数据
uint8 TOU[]={"我的用电管理好的真的"};
uint8 TOU1[]={"At^sics=0,APN,cmnet "};
uint8 TOU2[]={"at^siss=1,conId,0 "};
uint8 DBaddr1[]={0x68,0x34,0x33,0x33,0x33,0x33,0x33,0x68,0x8a,0x1b,0x16};
uint8 DBaddr[]={0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x0a,0x06,0x34,0x33,0x33,0x33,0x33,0x33,0xff};
void __irq IRQ_UART0(void)//串口接受中断,将接受的数据存放在数组rcv_buf[r]中
{ VICVectAddr=0x00;
}
void __irq IRQ_UART1(void)//串口接受中断,将接受的数据存放在数组rcv_buf[r]中
{
VICVectAddr=0x00;
}
void __irq IRQ_RTC(void)
{
uint32 datas;
uint32 times;
uint32 bak;
r=0;
times=CTIME0;
datas=CTIME1;
bak=datas&0x1f;
rcv_buf[r]=bak/10+48;
r++;
rcv_buf[r]=bak%10+48;
r++;
bak=(times>>16)&0x1f;
rcv_buf[r]=bak/10+48;
r++;
rcv_buf[r]=bak%10+48;
r++;
bak=(times>>8)&0x3f;
rcv_buf[r]=bak/10+48;
r++;
rcv_buf[r]=bak%10+48;
r++;
bak=times&0x3f;
rcv_buf[r]=bak/10+48;
r++;
rcv_buf[r]=bak%10+48;
r++;
lcmbd(0x90,rcv_buf[0]);
LcdSendData(rcv_buf[1]);
LcdSendData(rcv_buf[2]);
LcdSendData(rcv_buf[3]);
LcdSendData(rcv_buf[4]);
LcdSendData(rcv_buf[5]);
LcdSendData(rcv_buf[6]);
LcdSendData(rcv_buf[7]);
//UART0_SendBuf(rcv_buf);
ILR=0X03;
VICVectAddr=0x00;
}
int main (void)
{ uint8 i;
//uint8 data_buf[32];
TargetInit();///硬件初始化
IO1DIR=IO1DIR|beep|led2|led1;
IO0DIR=IO0DIR|rs485|led1|lcmled;
VICVectAddr0=(uint32)IRQ_UART0;//串口0中断向量的定义和设置
VICVectAddr1=(uint32)IRQ_UART1;//串口1中断向量的定义和设置
VICVectAddr3=(uint32)IRQ_RTC;//串口1中断向量的定义和设置
IO0CLR=lcmled;///打开液晶的背光灯
lcmb(TOU);//液晶显示
//WdcInit(0xffffffff);//可以判断出是否发生过看门狗复位
//RTCInit(2006,5,19,5,8,10,58);//实时时钟的初始化和设置
Wdcfeed();///需要喂狗
//UART1_SendBuf(TOU);
for(;;)
{ i=i;
////串口1的设置,读取数据后发送
while(rcv_new1==1)
{ delay(100);
//UART1_SendBuf(rcv_buf1);
//UART1_SendByte(ry);
//while ((U1LSR&0X20)==0);
ry=0;
rcv_new1=0;
}
while(rcv_new0==1)
{ delay(1000);
for(i=0;i<30;i++)///////解析返回值状态,0X81正常应答,无返回值
{
if((rcv_buf0==0x68)&&(rcv_buf0[i+1]==0x81))
{
LcdSendCommand(0x90);
LcdSendData(rcv_buf0[i+2]+0x30);//数据长度6
//LcdSendData(rcv_buf0[i+3]-0x33+0x30);//1
//LcdSendData(rcv_buf0[i+4]-0x33+0x30);//2
LcdSendData(rcv_buf0[i+5]-0x33+0x30);//3
LcdSendData(rcv_buf0[i+6]-0x33+0x30);//4
LcdSendData(rcv_buf0[i+7]-0x33+0x30);//5
LcdSendData(rcv_buf0[i+8]-0x33);//4
LcdSendData(rcv_buf0[i+9]-0x33);//5
LcdSendData(rcv_buf0[i+10]-0x33);//4
LcdSendData(rcv_buf0[i+11]-0x33);//5
LcdSendData(rx);//个数
LcdSendData(rx+0x30);//个数
//UART0_SendBufz(rcv_buf0);
rx=0;
rcv_new0=0;
break;
}
}
for(i=0;i<20;i++)////////解析返回值状态,0Xc1异常应答
{
if((rcv_buf0==0x68)&&(rcv_buf0[i+1]==0xc1))
{
LcdSendCommand(0x90);
LcdSendData(0x39);
LcdSendData(rcv_buf0[i-6]+0x30);
LcdSendData(rcv_buf0[i+3]);
LcdSendData(rcv_buf0[i+4]);
LcdSendData(rcv_buf0[i+5]);
LcdSendData(rx);
//UART0_SendBufz(rcv_buf0);
rx=0;
rcv_new0=0;
break;
}
}
}
}
}
/*
// 往起始地址0x00开始写入10个数据 ///写入的数据缓冲区 data_buf
//I2C_WriteNByte(CAT1025, ONE_BYTE_SUBA, 0x00, data_buf, 10);
//I2C_WriteNByte(CAT24WC02, 0, 0x00, &i, 1);
// 清零数据缓冲区,防止出错
// 读回刚才写入的数据
//I2C_ReadNByte(CAT1025, ONE_BYTE_SUBA, 0x00, data_buf, 10);
for(;;){
//LcdSendCommand(0x90);
//LcdSendData(rx+0x30);
//LcdSendData(0x02);
while(rcv_new==1)
{ delay(1500);
UART0_SendBufz(rcv_buf0);//将数据通过串口发送出去
//UART1_SendBuf(rcv_buf1);
LcdSendCommand(0x90);
//LcdSendData(rx+0x30);
LcdSendData(0x02);
lcmb(rcv_buf0);//液晶显示
UART0_SendByte(rx);
//UART0_SendByte(rcv_buf[0]);
//UART0_SendByte(rcv_buf[1]);
//UART0_SendByte(rcv_buf[2]);
//UART0_SendByte(rcv_buf[3]);
//UART0_SendByte(rcv_buf[4]);
rx=0;
IO0SET=lcmled;
rcv_new=0;
}
}
//}*/
/*
广告:本公司,承接单片机,ARM,DSP,CPLD项目开发。
主营:单片机读写U盘/CF卡模块,射频卡,IC卡读写
器,GSM,GPRS,GPS模块和产品。同时本公司受同仁委托,
销售假证,假文凭,身份证。黑车,黑手机,枪支,弹药。
为了扩展业务范围:我们可以代理,计划生育超生,寻仇,报复。欢迎来人来电查询。电话:1315614418*.地址:济南长途汽车站候车室。*/