新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于飞思卡尔DZ60的AD 1302 KEY 485 CAN FLASH LCD程序

基于飞思卡尔DZ60的AD 1302 KEY 485 CAN FLASH LCD程序

作者: 时间:2016-12-01 来源:网络 收藏
if(ReadTimeFlag)
{
ReadTimeFlag = 0;
if(RR ==1)
{
Delay(10);
DE485 = 1;
Ds1302_Read_Time();
asm(nop);
SendSum = (0x6a+Pchange+Failure+ADC1L+ADC1H+ADC2L+ADC2H+P0H+P0L+P1H+P1L+
time_buf1[1]+time_buf1[2]+time_buf1[3]+time_buf1[4]+time_buf1[5]+time_buf1[6]+
MW4L+MW4H+MW5L+MW5H+MW6L+MW6H+MW7L+MW7H+MW8L+MW8H+MW9L+MW9H); //累加和
SCI1send (0x01); //站号
SCI1send (0x57); //写命令
SCI1send (0x00); //首地址
SCI1send (0x12); //18个地址
SCI1send (ADC1H); //MW0高位 电压
SCI1send (ADC1L); //MW0低位
SCI1send (ADC2H); //MW1 电流
SCI1send (ADC2L);
SCI1send (P0H); //MW2 实时功率
SCI1send (P0L);
SCI1send (P1H); //MW3
SCI1send (P1L);
SCI1send (MW4H); //MW4
SCI1send (MW4L);
SCI1send (MW5H); //MW5 当前充电电量(一天累计)
SCI1send (MW5L);
SCI1send (MW6H); //MW6
SCI1send (MW6L);
SCI1send (MW7H); //MW7 当前放电电量(一次累计)
SCI1send (MW7L);
SCI1send (MW8H); //MW8 当前放电电量(一次累计)
SCI1send (MW8L);
SCI1send (MW9H); //MW9 当前放电电量(一次累计)
SCI1send (MW9L);
SCI1send (0x00); //MW10 充放电指示00:放电;FF:充电
SCI1send (Pchange);
SCI1send (0x00); //MW11开始为时间
SCI1send (time_buf1[1]);
SCI1send (0x00);
SCI1send (time_buf1[2]);
SCI1send (0x00);
SCI1send (time_buf1[3]);
SCI1send (0x00);
SCI1send (time_buf1[4]);
SCI1send (0x00);
SCI1send (time_buf1[5]);
SCI1send (0x00);
SCI1send (time_buf1[6]);
SCI1send (0x00); //MW17 过压过流指示
SCI1send (Failure);
SCI1send (SendSum);
asm(nop);
Delay(100);
SendSum = 0x7d+MW21H+MW21L+MW22H+MW22L+MonthC1+DateC1+MW25H+MW25L+MW26L+MW26H+MonthC2+DateC2
+MW29H+MW29L+MW30H+MW30L+MonthF1+DateF1+MW33L+MW33H+MW34H+MW34L+MonthF2+DateF2;
SCI1send (0x01); //站号
SCI1send (0x57); //写命令
SCI1send (0x15); //21号地址
SCI1send (0x10); //16个地址
SCI1send (MW21H); //MW21高位
SCI1send (MW21L); //MW21低位
SCI1send (MW22H); //MW22
SCI1send (MW22L);
SCI1send (0x00); //月 MW23
SCI1send (MonthC1);
SCI1send (0x00); //日 MW24
SCI1send (DateC1);
SCI1send (MW25H); //MW25
SCI1send (MW25L);
SCI1send (MW26H); //MW26
SCI1send (MW26L);
SCI1send (0x00); //MW27
SCI1send (MonthC2);
SCI1send (0x00); //MW28
SCI1send (DateC2);
SCI1send (MW29H); //MW29
SCI1send (MW29L);
SCI1send (MW30H); //MW30
SCI1send (MW30L);
SCI1send (0x00); //MW31
SCI1send (MonthF1);
SCI1send (0x00); //MW32
SCI1send (DateF1);
SCI1send (MW33H); //MW33
SCI1send (MW33L);
SCI1send (MW34H); //MW34
SCI1send (MW34L);
SCI1send (0x00); //MW35
SCI1send (MonthF2);
SCI1send (0x00); //MW36
SCI1send (DateF2);
SCI1send (SendSum); //累加和
asm(nop);
Delay(10);
SCI1send (0x01); //站号
SCI1send (0x52); //读命令
SCI1send (0x13); //19号地址判断在哪个页面
SCI1send (0x01); //1个地址
SCI1send (0x67);
Delay(1); //必须加段延时确保数据发送出去
DE485 = 0; //485切换到接收状态
asm(nop);
}
}
}
}
//==========================================
//定时器1中断函数 中断向量号11 250毫秒定时
//==========================================
void interrupt 11 TPM1_ISR(void)
{
static byte i,j,k;
if((TPM1SC & 0x80)==0x80)
{
TPM1SC_TOF=0;
ADSET = 1;
}
i++;
if(!PAGE8) //
{
j = 0;
}
else
{
j++;
if(j>PAGE8) //大于5秒
{
j = 0;
RR = 2; //转判断ENT键是否按下程序
PAGE8 = 0;
}
}
if(!TENT)
{
k = 0;
}
else
{
k++;
if(k>TENT)
{
k = 0;
T20 = 1; //如果ENT键1分钟内没有按下则跳转到2界面(显示电压,电流)
TENT = 0;
}
}
if(i>3)
{
i = 0;
ReadTimeFlag = 1;
}
}
//==========================================
//串口接收中断 VectorNumber_Vsci1rx 中断向量号17
//==========================================
interrupt VectorNumber_Vsci1rx void SCI_RE(void)
{
static byte j;
static byte i;
byte Rcv;
if(SCI1S1_RDRF) //串口接收中断标志位
{ //清标志位
SCI1S1_RDRF = 0; //接收数据送缓存
Rcv = SCI1D;
//*********************读页面数值*****************************
if(RR == 1)
{
if(Rcv == 0x13)
{
j = 1;
Buffer[0]=Rcv;
}
else
{
if(j < 5) //5个字节
{
Buffer[j] = Rcv;
j++;
}
}
if((Buffer[3]==0x08)&&(Buffer[4]==0x1d)) //如果检测到是第8页面则处理数据
{
PAGE8 =20; //如果停在8页面设置一个计数器,5秒时间内如果还在则认为在修改时间
TENT = 240; //2分钟内ENT键没有按下,则跳转到2页面;
}
if(Buffer[3]!=0x08) //如果跳转到别的界面,马上清零
{
PAGE8 = 0;
TENT = 0;
RR = 1; //回到正常状态
}
}
//****************判断ENT键按下与否******************************* ENT键按下的话20站号变成1
if(RR ==2)
{
if(Rcv == 0x14)
{
j = 1;
Buffer[0]=Rcv;
}
else
{
if(j < 5) //5个字节
{
Buffer[j] = Rcv;
j++;
}
}
if((Buffer[3]==0x01)&&(Buffer[4]==0x17)) //ENT键已经按下
{
RR = 3;
}
}
//******************************读取要修改的时间*******************************
if(RR ==4) //此时ENT已经清零
{
Buffer[j]=Rcv;
if(!i)
{
if(Buffer[j]== 0x0b) //接收到11
{
Buffer[0] =0x0b;
j=1; //才开始类加
}
if(Buffer[1]== 0x06)
{
i = 1;
}
}
if(i)
{
if(j< 15)
{
Buffer[j] = Rcv;
j++;
}
}
if(j==15)
{
i = 0;
}
if(Buffer[14]==(Buffer[3]+Buffer[5]+Buffer[7]+Buffer[9]+Buffer[11]+Buffer[13]+0x12))
{
RR = 0;
time_buf1[1] = Buffer[3] ; //年
time_buf1[2] = Buffer[5] ; //月
time_buf1[3] = Buffer[7] ; //日
time_buf1[4] = Buffer[9] ; //时
time_buf1[5] = Buffer[11]; //分
time_buf1[6] = Buffer[13]; //秒
}
}
}
}
//==========================================
//ADC转换完成中断服务程序 VectorNumber_Vadc中断向量号23
//==========================================
interrupt VectorNumber_Vadc void ADC_ISR(void)
{
static byte count;
switch(ADch_s)
{
case 19:
ADCbuffer1[count]=ADCR;
count++;
if (count > N-1){
count = 0;
ADCSC1=0x00;
ADcount = 1;
}
break;
case 11:
ADCbuffer1[count]=ADCR;
count++;
if (count > N-1){
count = 0;
ADCSC1=0x00;
ADcount = 2;
}
break;
case 3:
ADCbuffer1[count]=ADCR;
count++;
if (count > N-1){
count = 0;
ADCSC1=0x00;
ADcount = 3;
}
break;
case 4:
ADCbuffer1[count]=ADCR;
count++;
if (count > N-1){
count = 0;
ADCSC1=0x00;
ADcount = 4;
}
break;
default:break;
}
asm(nop); //在此设置一个断点,观测ad_h和ad_l的变化
}
上一页 1 2 3 下一页

关键词: 飞思卡尔DZ60AD

评论


技术专区

关闭