⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 meterage.c

📁 采样高压电流
💻 C
📖 第 1 页 / 共 4 页
字号:
						c_i2c_tx_buf[2]=0x23;//24小时制
						write_time(0xe0,1);//从控制寄存器1开始写
						c_i2c_tx_buf[2]=c_second;//秒                               
						c_i2c_tx_buf[3]=c_minute;//分
						c_i2c_tx_buf[4]=c_hour;//时
						c_i2c_tx_buf[5]=c_week;//周
						c_i2c_tx_buf[6]=c_day;//日
						c_i2c_tx_buf[7]=c_month;//月
						c_i2c_tx_buf[8]=c_year;//年
						write_time(0x00,7);//从控制寄存器1开始写

					}
				}
			}
//			if(((P1IN & 0x10)!=0) && c_meter_start==0xff)//c_1s_sign--1秒标志,做记录用
	//		{
		//		u_pass();
		//		do_lostv();
             //		do_losti();
		//		do_lost_other();
	//		}

		}

//---------------------------------------------------------
		

		if(c_1m_sign==1)//c_1m_sign--1分标志,做记录用
		{
			c_1m_sign=0;

			for(i1=4;i1>0;i1--)//整分电流平移
			{
				read_f24c16(0x0195+(uint)(i1-1)*3,3);
				for(i2=0;i2<3;i2++)
					c_i2c_tx_buf[i2+2]=c_i2c_rx_buf[i2];
				write_f24c16(0x0195+(uint)i1*3,3);
				
		/*		read_f24c16(0x01ae+(uint)(i1-1)*4,4);
				for(i2=0;i2<4;i2++)
					c_i2c_tx_buf[i2+2]=c_i2c_rx_buf[i2];
				write_f24c16(0x01ae+(uint)i1*4,4);*/
			}
			convert.high=ul_i_bcd;
			c_i2c_tx_buf[2]=convert.low[0];//最近第一次编程时间
			c_i2c_tx_buf[3]=convert.low[1];
			c_i2c_tx_buf[4]=convert.low[2];
			write_f24c16(0x0195,3);
//read_f24c16(0x0195,15);
			if(c_min5_stat==1)
			{
				read_f24c16(0x01ae,4);
				for(i2=0;i2<4;i2++)
					c_i2c_tx_buf[i2+2]=c_i2c_rx_buf[i2];
				write_f24c16(0x01ae+4,4);
				convert.high=ul_Ah_bcd;
				c_i2c_tx_buf[2]=convert.low[0];//
				c_i2c_tx_buf[3]=convert.low[1];
				c_i2c_tx_buf[4]=convert.low[2];
				c_i2c_tx_buf[5]=convert.low[3];
				write_f24c16(0x01ae,4);
			}
		}

		  if((c_meter_id[0]==0x01&&(c_min5_stat==1&&(c_second>0x01&&c_second<0x13))&&c_work_start==1)||(c_meter_id[0]==0x02&&(c_min5_stat==1&&(c_second>0x20&&c_second<0x33))&&c_work_start==1)||(c_meter_id[0]==0x03&&((c_min5_stat==1&&(c_second>0x40&&c_second<0x53)))&&c_work_start==1))
          	{//	c_1m_sign=0;
          	       
         		if(c_comm_succeed==0&&c_emission_stat==1)
          		{
          			P1OUT|=0x10;//打开无线模块控制脚
          		       c_emission_stat=0;
			       c_rf_stat=1;		   
				c_tx_pointer=(char*)0x22c;

				read_f24c16(0x01ae+4,4);
				convert.low[0]=c_i2c_rx_buf[0];
				convert.low[1]=c_i2c_rx_buf[1];
				convert.low[2]=c_i2c_rx_buf[2];
				convert.low[3]=c_i2c_rx_buf[3];
				ul_temp=convert.high;
				
				read_f24c16(0x01ae,4);
				convert.low[0]=c_i2c_rx_buf[0];
				convert.low[1]=c_i2c_rx_buf[1];
				convert.low[2]=c_i2c_rx_buf[2];
				convert.low[3]=c_i2c_rx_buf[3];
				
				ul_Ah_emission=bcd_hex_long(convert.high);


				ul_Ah_emission=ul_Ah_emission-bcd_hex_long(ul_temp);
			
			convert.high=ul_Ah_emission;
			
			*(c_tx_pointer+31)= convert.low[0]+0X33;
				*(c_tx_pointer+32)= convert.low[1]+0X33;
				*(c_tx_pointer+33)= convert.low[2]+0X33;
				*(c_tx_pointer+34)= convert.low[3]+0X33;


			for(i1=0;i1<5;i1++)//整分电流平移
			{
				read_f24c16(0x0195+3*i1,3);
				*(c_tx_pointer+16+3*i1)= c_i2c_rx_buf[0]+0X33;
				*(c_tx_pointer+17+3*i1)= c_i2c_rx_buf[1]+0X33;
				*(c_tx_pointer+18+3*i1)= c_i2c_rx_buf[2]+0X33;
				
	/*			read_f24c16(0x01ae+4*i1,4);
				*(c_tx_pointer+31+4*i1)= c_i2c_rx_buf[0]+0X33;
				*(c_tx_pointer+32+4*i1)= c_i2c_rx_buf[1]+0X33;
				*(c_tx_pointer+33+4*i1)= c_i2c_rx_buf[2]+0X33;
				*(c_tx_pointer+34+4*i1)= c_i2c_rx_buf[3]+0X33;
*/
			}
			*(c_tx_pointer+35)=c_err_stat+0X33;


				*(c_tx_pointer)=0x68;
				*(c_tx_pointer+1)=c_meter_id[0];
				*(c_tx_pointer+2)=c_meter_id[1];
				*(c_tx_pointer+3)=c_meter_id[2];
				*(c_tx_pointer+4)=c_meter_id[3];
				*(c_tx_pointer+5)=c_meter_id[4];
				*(c_tx_pointer+6)=c_meter_id[5];
				*(c_tx_pointer+7)=0x68;

				*(c_tx_pointer+8)= 0x1f;
				*(c_tx_pointer+9)= 26;

				*(c_tx_pointer+10)= c_second+0X33;
				*(c_tx_pointer+11)=c_minute+0X33;
				*(c_tx_pointer+12)=c_hour+0X33;
				*(c_tx_pointer+13)=c_day+0X33;
				*(c_tx_pointer+14)=c_month+0X33;
				*(c_tx_pointer+15)=c_year+0X33;
				
				
			//	i3=c_data_length+12;
				*(c_tx_pointer+36)=*(c_tx_pointer);
				for(i1=1;i1<36;i1++)//计算校验码
				{
					*(c_tx_pointer+36)=*(c_tx_pointer+36)+*(c_tx_pointer+i1);
				}
				*(c_tx_pointer+37)=0x16;
				
				*(c_rx_pointer+84)=37;//发送长度长度

				
				//U0TXBUF=c_tx1_buf[c_tx1_num];
				//U0TXBUF=*(c_tx_pointer);
				c_tx1_num=0;
				U0TXBUF=c_tx1_buf[c_tx1_num];
          		}
			
          	}		


		//---------------------------------------------------------
		/*if(c_clear_meter!=0)//c_clear_meter--1:新表 2:总清 3:需量清零(编程按键按下,670703,下翻5秒新表。960101,下翻5秒总清。其他日期,下翻5秒需清)
		{
			if(c_clear_count==0)
			{
				read_f24c16(0x0c49,1);//总清次数
				i1=bcd_hex_char(c_i2c_rx_buf[0]);
				if((c_clear_meter==2&&i1>0)||c_clear_meter==1||c_clear_meter==3)
					c_clear_count=1;//c_clear_count--新表显示CLA.CLA3秒计数器
				
				lcd_fill();
				if(c_clear_meter==1)
				{
					new_meter();
					read_int();
    					par_init();
					c_break_stat=0;//c_break_stat--断相状态字:高半字节本次,低半字节上次
				     	c_lost_v_stat=0;//c_lost_v_stat--失压状态:高半字节本次,低半字节上次
					c_high_v_stat=0;//c_high_v_stat--过压状态:高半字节本次,低半字节上次
					c_low_v_stat=0;//c_low_v_stat--欠压状态:高半字节本次,低半字节上次
					c_high_i_stat=0;//c_high_i_stat--过流状态:高半字节本次,低半字节上次
				     	c_lost_i_stat=0;//c_lost_i_stat--失流状态:高半字节本次,低半字节上次
				     	c_all_lostv_i_stat=0;//c_all_lostv_i_stat-全失压时异常电流出现状态:高半字节本次,低半字节上次
				}
				if(c_clear_meter==2)
				{
					if(i1>0)
					{
						i1--;
						i1=hex_bcd_char(i1);
						c_i2c_tx_buf[2]=i1;
						write_f24c16(0x0c49,1);
						all_clear();
						c_meter_stat=c_meter_stat | 0x04;//c_meter_stat--电表状态指示 7:失压 6:过压 5:逆相序  4:断相报警   3:编程开关按下 2:需量正在清零 1:2是否有通信 0:1是否有通信 
					}
					else
						c_clear_meter=0;
//					reset_data();
//					c_meter_stat2=c_meter_stat2| 0x01;//手动抄表//jhf_20061029:
				}
				if(c_clear_meter==3)
				{
					ui_clear_time=1;
					c_meter_stat=c_meter_stat | 0x04;//c_meter_stat--电表状态指示 7:失压 6:过压 5:逆相序  4:断相报警   3:编程开关按下 2:需量正在清零 1:2是否有通信 0:1是否有通信 
					reset_data();
					c_meter_stat2=c_meter_stat2| 0x01;//手动抄表//jhf_20061029:
				}
			}
		}*/
		if(c_clear_meter==2)
		{
		       read_f24c16(0x00f6,1);//总清次数
			i1=bcd_hex_char(c_i2c_rx_buf[0]);
			i1++;
			i1=hex_bcd_char(i1);
			c_i2c_tx_buf[3]=i1;
			write_f24c16(0x00f6,1);
			all_clear();
		//	c_meter_stat=c_meter_stat | 0x04;//c_meter_stat--电表状态指示 7:失压 6:过压 5:逆相序  4:断相报警   3:编程开关按下 2:需量正在清零 1:2是否有通信 0:1是否有通信 

			c_clear_meter=0;
//					reset_data();
//					c_meter_stat2=c_meter_stat2| 0x01;//手动抄表//jhf_20061029:
		}
		if(c_clear_meter==1)
		{
		       c_clear_meter=0;
			new_meter();
			read_int();
			par_init();
                
		}

	}
}

void init_module(void)
{
       /*配置I/O口*/
	
	P1SEL=0;//sel为端口选择寄存器=0:I/O端口 =1:外围模块 P1.2定义定时器功能(PWM输出模式) 
	P1DIR=0xf1;
	P1OUT=0;
       P1IES=0x00;//沿触发选择 0:上升沿 1:下降沿
	P1IFG=0x00;//中断标志寄存器
	P1IE=0x00;//中断使能

	P2SEL=0x38;
	P2DIR=0x03;
	P2OUT=0;
	P2IES=0x00;	//沿触发选择 0:上升沿 1:下降沿
	P2IFG=0x00;//中断标志寄存器
	P2IE=0x00;//中断使能

	/*USART0配置为异步UART串行通讯模式,波特率为1200bps*/
	
	U0CTL=PENA+PEV+CHAR;//控制寄存器 配置通信口0,校验使能,偶效验,8位字符,一位停止位,复位通信口,
    	//7 6 5 4 3 2 1 0
	//| | | | | | | +-SWRST(1)--1:初始化成复位状态 0:USART	模块被允许。
	//| | | | | | +---MM(1)--0:线路空闲多机协议(异步模式),从机模式(同步方式) 1:地址位多机协议(异步模式),主机模式(同步方式)
	//| | | | | +-----SYNC(1)--0:UART模式(同步) 1:SPI模式(异步)
	//| | | | +-------Listen(1)--0:无反馈 1:有反馈,自己发送的数据别自己接收
	//| | | +---------CHAR(1)--0:7位 1:8位
	//| | +-----------SP(1)--0:1位停止位 1:2位停止位
	//| +-------------PEV(1)--0:奇校验 1:偶校验
	//+---------------PENA(1)--0:校验禁止 1:校验允许
    	U0TCTL=SSEL1;//发送控制寄存器 时钟选择主时钟 SSEL1=0x20
    	//7 6 5 4 3 2 1 0
    	//0 0 1 0 0 0 0 0
	//| | | | | | | +-TXEPT(1)--1:发送器空 0:发送器有数据。
	//| | | | | | +---STC(1)--异步模式不使用 0:选择SPI的4线模式 1:3线模式
	//| | | | | +-----TXWAKE(1)--多处理器通信传送控制位(同步方式不使用)
	//| | | | +-------URXSE(1)--接收出发沿控制位,在同步时没有使用 0:没有收到数据 1:接收到数据,请求接收中断服务
	//| | +-+---------SSEL1-0(2)--00:选择外部时钟UCLK 01:选择辅助时钟ACLK 10:11:选择子系统时钟SMCLK
	//| +-------------CKPL(1)--时钟极性控制位
	//+---------------CKPH(1)--时钟相位控制位
    	U0RCTL=0X08;//清除各种错误标志
    	//7 6 5 4 3 2 1 0
    	//0 0 0 0 0 0 0 0
	//| | | | | | | +-RXERR(1)--接收错误标志位 1:有错误接收,该位不能自动复位 0:没有接收错误
	//| | | | | | +---RXWAKE(1)--接收唤醒检测位 0:没有被唤醒 1:唤醒
	//| | | | | +-----URXWIE(1)--接收唤醒中断允许位
	//| | | | +-------URXEIE(1)--接收错误中断允许位
	//| | | +---------BRK(1)--打断检测位
	//| | +-----------OE(1)--溢出标志位
	//| +-------------PE(1)--校验错误标志位
	//+---------------FE(1)--桢错标志
    	U0BR0=0x55;
    	U0BR1=0x03;//1200(主频为1M赫兹)
    	U0MCTL=0x89;//10001001 

	/*
	U0BR0=0xaa;
    	U0BR1=0x1a;//1200(主频为8M赫兹)
    	U0MCTL=0x6b;//01101011 
	*/	


     /*震荡器和系统时钟,外接32768晶震,系统主频1.024MHz*/

	FLL_CTL0 |= XCAP14PF;      	    /* 配置电容 */
	SCFI0 = FLLD_1;  			    /* Freq = 1.024MHz */
	SCFQCTL = 32 - 1;
	FLL_CTL0 |= DCOPLUS;

	/*配置特殊功能寄存器*/

	 IFG1=0x00;
	//7 6 5 4 3 2 1 0
    	//0 0 0 0 0 0 0 0
	//| | | | | | | +-0 WDTIFG(1)--rw-0
	//| | | | | | +---1 OFIFG(1)--rw-0
	//| | | | | +-----2 
	//| | | | +-------3 
	//| | | +---------4 NMIFG(1)--rw-0
	//| | +-----------5
	//| +-------------6 URXIFG0(1)--UART0接收中断标志 rw-0
	//+---------------7 UTXIFG0(1)--UART0发送中断标志 rw-1	c_i2c_tx_buf[2]=c_day;
	
	IFG2=0x00;
	//7 6 5 4 3 2 1 0
    	//0 0 0 0 0 0 0 0
	//| | | | | | | +-0 
	//| | | | | | +---1 
	//| | | | | +-----2 
	//| | | | +-------3 
	//| | | +---------4 
	//| | +-----------5 
	//| +-------------6 
	//+---------------7 BTIFG--基本定时器中断标志rw-0

	ME1=0xc0;//使能异步通信口接收发送模块
	//7 6 5 4 3 2 1 0
    	//0 0 0 0 0 0 0 0
	//| | | | | | | +-0 
	//| | | | | | +---1 
	//| | | | | +-----2 
	//| | | | +-------3 
	//| | | +---------4 
	//| | +-----------5 
	//| +-------------6 URXE0--UART0接收允许 rw-0; USPIE0  --SPI模式接收发送允许
	//+---------------7 UTXE0--UART0发送允许 rw-0
	
//	ME2=0x30; //F42X系列没有ME2项
	//7 6 5 4 3 2 1 0
    	//0 0 0 0 0 0 0 0
	//| | | | | | | +-0 
	//| | | | | | +---1 
	//| | | | | +-----2 
	//| | | | +-------3 
	//| | | +---------4 URXE1(1)--UART1接收允许 rw-0
	//| | +-----------5 UTXE1(1)--UART1发送允许 rw-0
	//| +-------------6 
	//+---------------7 

	IE1=0xc0;
	//7 6 5 4 3 2 1 0
    	//0 0 0 0 0 0 0 0
	//| | | | | | | +-0 WDTIE rw-0
	//| | | | | | +---1 OFIE rw-0
	//| | | | | +-----2 
	//| | | | +-------3 
	//| | | +---------4 NMIIE rw-0
	//| | +-----------5 ACCVIE rw-0
	//| +-------------6 URXIE
	//+---------------7 UTXIE
//	IE2=0x80;//打开基本定时器中断
	IE2=0x80;//关闭基本定时器中断
	//7 6 5 4 3 2 1 0
    	//0 0 0 0 0 0 1 1
	//| | | | | | | +-0 
	//| | | | | | +---1 
	//| | | | | +-----2 
	//| | | | +-------3 
	//| | | +---------4 
	//| | +-----------5 
	//| +-------------6 
	//+---------------7  BTIE --基本定时器中断

	/*配置SVSIN管脚,选择监测电压为2.65V且不复位*/
	SVSCTL |= (SVSON | 0xf0);

	/*配置基本定时器,0.5秒定时中断*/
	
	BTCNT1=0;//配置基本定时器
    	BTCNT2=0;
    	BTCTL=BTDIV+BTIP2+BTIP0;//BTDIV=0x20 BTFRFQ1=0x10 
	//16位定时器,基本定时器用作液晶时钟(f=32768/128),定时器中断间隔时间1s(32768/256/128)
    	//选择计数器2时中由计数器1输出(组成16位模式,时钟源为ACLK=32768),停止计数,中断间隔=Fclk2/128=32768/32768=1S
    	//7 6 5 4 3 2 1 0
	//| | | | | +-+-+-IP2-0(3)--此3位决定中断间隔时间。000:Fclk2/2 001:Fclk2/2 010:Fclk2/8 011:Fclk2/16 100:/32 101:/64 110:/128 111:/256
	//| | | +-+-------FRFQ1-0(2)--00:Flcd=Faclk/32 01:/64 10:/128 11:/256
	//| +-------------HOLD(1)--停止定时器

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -