jft的笔记 https://passport2.21ic.com/?140076 [收藏] [复制] [RSS]

日志

RS485抄表程序

已有 1949 次阅读2006-5-27 10:24

//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*.地址:济南长途汽车站候车室。*/


 


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

访客pTkw4B 2008-6-14 12:47
广告很搞笑