//#include"math.h"
void main()
{
init();
do
{
sign_collect();
serial_data();
}while(1);
}
void init()
{
init_mcu();
init_menu();
init_serial();
init_eeprom();
}
void init_mcu()
{
TRISA = 0x07;
TRISB = 0xc0;
TRISC = 0x80;
TRISD = 0x00;
TRISE = 0x00;
porta_wbuf = 0x00;
portb_wbuf = 0x00;
portc_wbuf = 0x00;
portd_wbuf = 0x00;
porte_wbuf = 0x00;
TMR1L = 0x00;
TMR1H = 0x00;
T1CON = 0x00;
SPBRG = 0x19;
TXSTA = 0x06;
RCSTA = 0x90;
OPTION = 0x8f;
INTCON = 0xc0;
PIE1 = 0x21;
PIR1 = 0x00;
PIE2 = 0x00;
PIR2 = 0x00;
PCON = 0x03;
}
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;
}
// tmp_cnt = 0;
pof_cnt = 0;
por_cnt = 0;
Prmter1.ID_L = MOD_ID_L;
Prmter1.ID_H = MOD_ID_H;
Prmter1.ADDR = rrom(mod_add_add+2);
Prmter1.PROTL_ETN = 0x08;
}
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;
}
void init_eeprom(void)
{
int i,j;
TRISC0 = 0;
TRISC1 = 0;
err_eeprom=0;
j = rrom(0x07ff);
if(j!=2)
{
for(i=0;i<0x01ff;i++)
{
wrom(i,0x00);
}
wrom(0x07ff,0x01);
wrom(mod_idadd,0x00);
wrom(mod_idadd+1,0xf0);
wrom(mod_idadd+2,MOD_ID_L);
wrom(mod_idadd+3,MOD_ID_H);
wrom(mod_add_add,0x02);
wrom(mod_add_add+1,0xf0);
wrom(mod_add_add+2,MOD_ADDR);
wrom(mod_proadd,0x03);
wrom(mod_proadd+1,0xf0);
wrom(mod_proadd+2,PROTL);
wrom(mod_paradd,0x04);
wrom(mod_paradd+1,0xf0);
wrom(mod_paradd+2,MOD_Num);
}
}
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");
}
}
void sign_collect()
{
//CHECK_TEMP();
CHECK_POFDN();
CHECK_PORDN();
//CHECK_SWR();
}
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;
}
//void CHECK_TEMP()
//{
// Prmter1.TEMPL=adc_read(2);
// Prmter1.TEMPH=0;
// wrom(tempadd,Prmter1.TEMPL);
//}
void CHECK_POFDN()
{
uchar POF_adc;
POF_adc=adc_read(1);
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.POFdn = pof_buf1[0];
pof_cnt = 0x00;
pof_buf1[0] = 0x00;
// Prmter1.POFdn = adc_read(1);
// Prmter1.POFdn=PTable[A]+2;
wrom(POF_dnadd,Prmter1.POFdn);
}
}
void CHECK_PORDN()
{
uchar POR_adc;
POR_adc=adc_read(0);
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.PORdn = por_buf1[0];
por_cnt = 0x00;
por_buf1[0] = 0x00;
wrom(POR_dnadd,Prmter1.PORdn);
}
//Prmter1.PORdn = adc_read(0);
//Prmter1.PORdn =FPTable[B]-8;
}
if(buf)
{
portc_wbuf = portc_wbuf | 0x02;
PORTC = portc_wbuf;
}
else
{
portc_wbuf = portc_wbuf & 0xfd;
PORTC = portc_wbuf;
}
}
void scl(uchar buf)
{
if(buf)
{
portc_wbuf = portc_wbuf | 0x01;
PORTC = portc_wbuf;
}
else
{
portc_wbuf = portc_wbuf & 0xfe;
PORTC = portc_wbuf;
}
}
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;
}
uchar wrom(uint addr,uchar buf)
{
uchar ubuf;
uchar wcount;
union buf_union comm;
wcount = 0;
comm.buf1 = addr;
iic_write_re:
if( wcount > 4 )
{
iic_stop();
_nop();
wcount = 0;
err_eeprom = 1;
return 0;
}
_nop();
iic_star();
iic_send((comm.buf2[1]<<1) | 0xa0);
ubuf = iic_ack();
if(ubuf)
{
wcount++;
_nop();
goto iic_write_re;
}
iic_send(comm.buf2[0]);
ubuf = iic_ack();
if(ubuf)
{
wcount++;
_nop();
goto iic_write_re;
}
iic_send(buf);
ubuf = iic_ack();
if(ubuf)
{
wcount++;
_nop();
goto iic_write_re;
}
iic_stop();
return 1;
}
void iic_delay()
{
uchar a;
for(a = 0; a < IIC_DELAY ; a++ )
{
asm("NOP");
}
}
void iic_star()
{
TRISC0 = 0;
TRISC1 = 0;
scl(1);
sda(1);
// _nop();
sda(0);
scl(0);
_nop();
}
void iic_stop()
{
TRISC0 = 0;
TRISC1 = 0;
sda(0);
scl(1);
_nop();
sda(1);
_nop();
scl(1);
_nop();
}
void iic_send(uchar buf)
{
uchar i;
TRISC0 = 0;
TRISC1 = 0;
for(i = 0 ; i < 8 ;i++)
{
if( buf & 0x80 )
{
sda(1);
}
else
{
sda(0);
}
_nop();
scl(1);
//_nop();
scl(0);
//_nop();
buf = buf << 1;
}
}
uchar iic_get()
{
uchar i,buf;
buf = 0x00;
TRISC0 = 0;
TRISC1 = 1;
for(i = 0 ; i < 8 ;i++)
{
scl(1);
_nop();
buf = buf <<1;
if(PORTC & 0x02)
{
buf = buf|0x01;
}
scl(0);
_nop();
}
return buf;
}
uchar iic_ack()
{
uchar buf;
TRISC1 = 1;
TRISC0 = 0;
sda(1);
_nop();
scl(1);
if(PORTC & 0x02)
buf = 1;
else
buf = 0;
scl(0);
_nop();
TRISC1 = 0;
_nop();
return buf;
}
void ack_iic(uchar buf)
{
if(buf == 0)
{
sda(0);
}
else
{
sda(1);
}
_nop();
scl(1);
_nop();
scl(0);
_nop();
}
void interrupt int_process(void)
{
auto uchar i;
if(RCIF == 1)
{
//RCIF = 0;
if(OERR == 1)
{
CREN = 0;
for(i = 0; i < BUF_LENGTH; i ++)
{
receive_buf[i] = 0;
}
receive_cnt = 0;
receive_time_on = 0;
receive_time_count = 0;
receive_over = 0;
CREN = 1;
return;
}
if(portd_wbuf&0x80)
{
return;
}
if(receive_over == 1 )
{
return;
}
if(receive_cnt > 80)
{
receive_time_on = 0;
receive_time_count = 0;
receive_cnt = 0;
for(i = 0; i < BUF_LENGTH; i++)
{
receive_buf[i] = 0;
}
return;
}
receive_buf[receive_cnt] = RCREG;
receive_cnt ++;
if(receive_cnt == 1 )
{
if(receive_buf[0] != 0x48)
{
receive_buf[0] = 0;
receive_cnt = 0;
return;
}
receive_time_count = 0;
receive_time_on = 1;
}
if(receive_buf[receive_cnt - 1] == 0x4d)
{
receive_time_on = 0;
receive_time_count = 0;
receive_over = 1;
CREN = 0;
return;
}
}
else if(TMR1IF == 1)
{
TMR1IF=0;
return;
}
else if(TMR2IF == 1)
{
i= 100;
return;
}
}
void serial_data()
{
auto uchar start,length,buf,buf1;
if(receive_over == 1)
{
start = 1;
length = receive_cnt - 2;
byte_combine(receive_buf,length,start);
if(receive_buf[3] == 0x40)
{
buf = Query_Basic_Parameter();
send_reply_flag(0x00,buf);
goto go_return;
}
if(receive_buf[3] == 0x30)
{
Prmter1.ADDR = receive_buf[8];
receive_buf[2] = Prmter1.ADDR;
wrom(0x0706,Prmter1.ADDR);
send_reply_flag(0x00,0x02);
}
if((Prmter1.ADDR != receive_buf[2]) && (receive_buf[2] != 0xff))
{
goto go_return;
}
if(Prmter1.PROTL_ETN != receive_buf[1])
{
send_reply_flag(0x02,0x00);
goto go_return;
}
if(receive_buf[5] > 32)
{
send_re
ZHUBO.rar_微波模块
版权申诉
79 浏览量
2022-09-19
16:24:39
上传
评论
收藏 3KB RAR 举报
alvarocfc
- 粉丝: 113
- 资源: 1万+
最新资源
- STN4526S8RG-VB一款N-Channel沟道SOP8的MOSFET晶体管参数介绍与应用说明
- CANalyzer 使用指南
- STN4480S8RG-VB一款N-Channel沟道SOP8的MOSFET晶体管参数介绍与应用说明
- 政务信息化项目 验收材料编制指南
- dirent.h用于读取和操作目录项的函数声明和数据类型定义
- 儿童节快乐html网页.zip
- 编译原理 - Compilers - Principles, Techniques, & Tools
- PDMS平面出图-BFDrawing智能出图系统说明文档
- 后缀表达式求值-多语言版(c++ java python等).doc
- Ansible 角色管理 docker-ce 安装并通过 daemon.json 进行配置
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈