📄 zhubo.c.bak
字号:
/*
* Copyright (c) 2004,深圳市国人通信有限公司综合网管部
* All rights reserved.
*
* 文件名称:m_power.c
* 文件标识:见配置管理计划书
* 摘 要:驻波模块的监控数据处理
*
* 当前版本:1.1
* 作 者:陈璐
* 完成日期:
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include"zhubo.h"
void main()
{
init();
do
{
sign_collect();
dog();
serial_data();
}while(1);
}
void init()
{
init_mcu();
init_menu();
init_serial();
init_eeprom();
}
void init_mcu()
/********************************************************************
初始化项目:
1、WDT
2、ADC
3、SSP(只初始化端口方向,其他的在具体使用的时候初始化)
4、TMR1
5、USART
6、中断资源
7、端口方向
********************************************************************/
{
TRISA = 0x0f; //initialize the direction of the ports
TRISB = 0xc0;
TRISC = 0x80;
TRISD = 0x00;
TRISE = 0x00;//没用上PORTE
porta_wbuf = 0x00;
portb_wbuf = 0x00;
portc_wbuf = 0x00;
portd_wbuf = 0x00;
porte_wbuf = 0x00;//没用上PORTE
// TMR1L = 0x00; //initialize TMR1,65.6ms
// TMR1H = 0x00;
// T1CON = 0x00;
SPBRG = 0x19; //initialize USART baud = 9600 error = 0.16%
TXSTA = 0x06;//高速波特率使能,TRMT=1(发送移位寄存器TSR"空"标志位)
RCSTA = 0x90;//SPEN=1(串行口使能),CREN=1(使能连续接收)
OPTION = 0x8f;//PORTB弱上拉禁止,PSA(预分频器分配位)用于WDT,PS2:PS0=1:128
INTCON = 0xc0;//GIE=1(全局中断使能),PEIE=1(外围接口中断使能)
PIE1 = 0x20;//RCIE=1(串行通信接口USART接收中断使能),TMR1IE=1(TMR1溢出中断使能)
PIR1 = 0x00;
PIE2 = 0x00;
PIR2 = 0x00;
PCON = 0x03;//未发生上电复位,未发生掉电复位
TMR1L = 0x00; //initialize TMR1,65.5ms
TMR1H = 0x00;
T1CON = 0x31;//使能定时器工作,TMR1ON=1;8分频65.5*8=524ms;
}
///************初始化参数********/
void init_menu()
{
auto uchar i;
dog_soft = 0;
for(i = 0;i < 2 ; i ++)
{
pof_buf1[i] = 0;
// pof_buf2[i] = 0;
por_buf1[i] = 0;
// por_buf2[i] = 0;
// tmp_buf[i] = 0;
}
Prmter1.POFFSET1=rrom(poff1add);
Prmter1.POFFSET2=rrom(poff2add);
// tmp_cnt = 0;
pof_cnt = 0;
por_cnt = 0;
tran_flag=0x00;//转义标志,=0为没有转义,=1为转义过了
Prmter1.ADDR = rrom(mod_add_add+2);//mod_add_add为模块地址参数的地址
//Prmter1.PROTL_ETN = 0x02;
}
/**********************************************************
** 功能说明: 串口初始化函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 王猛 创建时间:不详
*********************************************************/
void init_serial()
{
auto uchar i;
for(i = 0;i < BUF_LENGTH;i++)
{
receive_buf[i] = 0;
}
for(i = 0; i < 2 ;i ++)
{
pChecksum[i] = 0;
}
receive_time_on = 0;
receive_time_count = 0;
receive_over = 0;
receive_cnt = 0;
portd_wbuf = portd_wbuf & 0x7f;
PORTD = portd_wbuf;
}
/**********************************************************
** 功能说明: 初始化eeprom函数
** 输入参数:
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 汤勇 创建时间:2004-11-16
***********************************************************/
void init_eeprom(void)
{
int i;
uchar j;
TRISC0 = 0;
TRISC1 = 0;
err_eeprom=0;
j = rrom(0x07ff);
if(j!=0xaa)
{
for(i=0;i<0x01ff;i++)
{
wrom(i,0x00);
}
wrom(0x07ff,0xaa);
wrom(mod_idadd,0x00);//写入模块ID号地址低字节
wrom(mod_idadd+1,0xf0);//写入模块ID号地址高字节
wrom(mod_add_add,0x02);//写入模块地址的地址低字节
wrom(mod_add_add+1,0xf0);//写入模块地址的地址高字节
wrom(product_add,0x19);//写入生产序列号参数地址低字节
wrom(product_add+1,0xf0);//写入生产序列号参数地址高字节
}
}
void dog()
{
asm("CLRWDT");
OPTION = 0x8f;
}
void delay_Tad(uchar j)
{
auto uchar i;
for(i=0;i<j;i++)
{
asm("nop");
asm("nop");
asm("nop");
}
}
/**********************************************************
** 功能说明: 延时函数
** 输入参数:
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 汤勇 创建时间:2004-11-16
***********************************************************/
void delay_unit(uint buf)
{
auto uint i;
for(i = 0;i < buf ;i++)
{
asm("nop");
}
}
/**********************************************************
** 功能说明: 模块检测函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 汤勇 创建时间:2004/12/13
*********************************************************/
void sign_collect()
{
//CHECK_TEMP();//温度检测
CHECK_POFDN();//下行正向输出功率检测
CHECK_PORDN();//下行反向输出功率检测
//CHECK_SWR();//驻波系数检测
}
/**********************************************************
** 功能说明: adc数据的采集输出
** 输入参数: 无
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 王猛 创建时间:不详
***********************************************************/
uchar adc_read(uchar buf)
{
uchar adcbuf;
ADCON1 = 0x00;
buf = buf & 0x07;
buf = buf << 3;
ADCON0 = buf | 0x41;
delay_Tad(5);
ADGO = 0x01;
while(ADGO)
{
;
}
#if defined(_16F77)
adcbuf = ADRES;
#endif
#if defined(_16F877A)
adcbuf = ADRESH;
#endif
ADON = 0x00;
ADIF = 0x00;
return adcbuf;
}
/**********************************************************
** 功能说明: 温度检测函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 汤勇 创建时间:2004/12/13
*********************************************************/
//void CHECK_TEMP()
//{
// Prmter1.TEMPL=adc_read(2);
// Prmter1.TEMPH=0;
// wrom(tempadd,Prmter1.TEMPL);
//}
/**********************************************************
** 功能说明: 下行正向输出功率检测函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 陈璐 创建时间:2004/12/13
*********************************************************/
void CHECK_POFDN()
{
uchar POF_adc;
uchar buf;
POF_adc=adc_read(0);//下行功率检测和处理
pof_buf1[1]=POF_adc;
pof_cnt++;
if(pof_buf1[0]<pof_buf1[1])
{
pof_buf1[0]=pof_buf1[1];
}
if(pof_cnt>=POF_CNT)
{
Prmter1.POFU = pof_buf1[0];
pof_cnt = 0x00;
pof_buf1[0] = 0x00;
buf = Prmter1.POFU*11/51+Prmter1.POFFSET1-3 ;
if(buf<0x80)
{
Prmter1.POF=buf;
}
else
{
Prmter1.POF=0;
}
// Prmter1.POFdn = adc_read(1);
// Prmter1.POFdn=PTable[A]+2;
}
}
/**********************************************************
** 功能说明: 下行反向输出功率检测函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 陈璐 创建时间:2004/12/13
*********************************************************/
void CHECK_PORDN()
{
uchar POR_adc;
uchar buf;
POR_adc=adc_read(3);//下行功率检测和处理
por_buf1[1]=POR_adc;
por_cnt++;
if(por_buf1[0]<por_buf1[1])
{
por_buf1[0]=por_buf1[1];
}
if(por_cnt>=POR_CNT)
{
Prmter1.PORU = por_buf1[0];
por_cnt = 0x00;
por_buf1[0] = 0x00;
buf = Prmter1.PORU*11/51+Prmter1.POFFSET2-8 ;
if(buf<0x80)
{
Prmter1.POR=buf;
}
else
{
Prmter1.POR=0;
}
}
//Prmter1.PORdn = adc_read(0);
//Prmter1.PORdn =FPTable[B]-8;
}
/*********************************************************
** 功能说明: 驻波系数检测函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 陈璐 创建时间:2005/2/18
*********************************************************/
//void CHECK_SWR()
//{
//uchar PZ,PF,SR;
//PZ=adc_read(1);
//PF=adc_read(0);
//PZ=(sqrt(PZ))*10;
//PF=(sqrt(PF))*10;
//SR=(PZ+PF)/(PZ-PF);
//Prmter1.SWR = SR;
// wrom(SWR_dnadd,Prmter1.SWR);
//}
/**********************************************************
** 功能说明: 对sda端口进行赋值
** 输入参数: buf 类型:uchar :0或1
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 汤勇 创建时间:2004-11-16
***********************************************************/
void sda(uchar buf)
{
if(buf)
{
portc_wbuf = portc_wbuf | 0x02;
PORTC = portc_wbuf;
}
else
{
portc_wbuf = portc_wbuf & 0xfd;
PORTC = portc_wbuf;
}
}
/**********************************************************
** 功能说明: 对scl端口进行赋值
** 输入参数: buf 类型:uchar :0或1
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 汤勇 创建时间:2004-11-16
***********************************************************/
void scl(uchar buf)
{
if(buf)
{
portc_wbuf = portc_wbuf | 0x01;
PORTC = portc_wbuf;
}
else
{
portc_wbuf = portc_wbuf & 0xfe;
PORTC = portc_wbuf;
}
}
/**********************************************************
** 功能说明: 读eeprom的值
** 输入参数: addr 类型:uint :读数的地址
** 输出参数: buf 类型:uchar :读出的数据
** 返 回 值: 无
** 引用函数:
** 创 建 人: 汤勇 创建时间:2004-11-16
***********************************************************/
uchar rrom(uint addr)
{
uchar buf;
union buf_union comm;
comm.buf1 = addr;
_nop();
iic_stop();
iic_star();
iic_send((comm.buf2[1] <<1)| 0xa0);
iic_ack();
iic_send(comm.buf2[0]);
iic_ack();
iic_star();
iic_send((comm.buf2[1] <<1)|0xa1);
iic_ack();
buf = iic_get();
iic_stop();
return buf;
}
/**********************************************************
** 功能说明: 写eeprom
** 输入参数: addr 类型:uchar :写数据的地址
buf 类型:uchar :读出的数据
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 汤勇 创建时间:2004-11-16
***********************************************************/
uchar wrom(uint addr,uchar buf)
{
uchar ubuf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -