?? interrupt.c
字號:
#include <reg51.h>
#include <main.h>
#include <interrupt.h>
bit code table_odd_even_bit[16]={0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0};
extern uchar rs485_timeout,pointer_buf485;
extern uchar rs485_buf[MAX_485_LEN];
extern uchar idata spi_buf[MAX_SPI_LEN];
extern uchar pointer_send,send_len;
extern uchar count_1s;
//extern uint count_2min;
extern uint count_10s;
extern uchar oper_len,send_offset,chk_sum,send_i;
extern bit flag_send_data,flag_level,flag_drdy,flag_data_ok;
uchar count_level;
/*
timer0:
*/
/*
void timer0() interrupt 1 using 1
{
if(rs485_timeout)
{
rs485_timeout--;
if(rs485_timeout==0)
{
pointer_buf485=0;
REN_TEN=LOW;
}
}
SPI_DRDY=1;
if(flag_level) //the flag is set when drdy is detected highly
{
if(SPI_DRDY)
{
count_level++;
if(count_level>5)
{
flag_level=0;
count_level=0;
}
}
else
count_level=0;
}
else
{
if(!SPI_DRDY) //p1.5=0
{
count_level++;
if(count_level>5)
{
flag_level=1;
flag_drdy=1;
count_level=0;
// count_1s=20; //clr flag_drdy when there isn't drdy signal waiting for 2s
}
}
else
count_level=0;
}
if(count_1s)
{
count_1s--;
if(count_1s==0)
flag_data_ok=0;
}
if(count_10s)
count_10s--;
TH0=TH0_C;
TL0=TL0_C; //T0=10ms
}
*/
void Rs485_Routine() interrupt 4 using 1
{
if(TI)
{
TI=0;
send_len--;
if(send_len!=0)
{
if(pointer_send<9)
{
send_i=rs485_buf[pointer_send];
TB8=Get_Odd_Even_Bit(send_i);
chk_sum+=send_i;
SBUF=send_i;
}
else if(pointer_send==9)
{
TB8=Get_Odd_Even_Bit(oper_len);
chk_sum+=oper_len;
SBUF=oper_len;
}
else if(pointer_send<oper_len+10) //send:chk_sum
{
if(pointer_send<12)
{
send_i=rs485_buf[pointer_send]+0x33;
TB8=Get_Odd_Even_Bit(send_i);
chk_sum+=send_i;
SBUF=send_i;
}
else
{
send_i=spi_buf[send_offset+pointer_send-12]+0x33;
TB8=Get_Odd_Even_Bit(send_i);
chk_sum+=send_i;
SBUF=send_i;
}
}
else if(pointer_send==oper_len+10) //send:chk_sum
{
TB8=Get_Odd_Even_Bit(chk_sum);
SBUF=chk_sum;
}
else if(pointer_send==oper_len+11) //send: 0x16
{
TB8=1;
SBUF=0x16;
}
pointer_send++;
}
else
{
flag_send_data=0;
REN_TEN=LOW;
}
}
else if(RI)
{
rs485_buf[pointer_buf485]=SBUF;
RI=0;
if(RB8!=Get_Odd_Even_Bit(rs485_buf[pointer_buf485]))
return;
if((rs485_buf[pointer_buf485]!=0x68) && (rs485_timeout==0))
return;
pointer_buf485++;
if(pointer_buf485>=MAX_485_LEN)
pointer_buf485=0;
}
rs485_timeout=80;
}
/*
void Rs485_Routine() interrupt 4 using 2
{
if(TI)
{
TI=0;
send_len--;
if(send_len!=0)
{
if(pointer_send<9)
{
TB8=Get_Odd_Even_Bit(rs485_buf[pointer_send]);
chk_sum+=rs485_buf[pointer_send];
SBUF=rs485_buf[pointer_send];
}
else if(pointer_send==9)
{
TB8=Get_Odd_Even_Bit(oper_len);
chk_sum+=oper_len;
SBUF=oper_len;
}
else if(pointer_send<oper_len+10) //send:chk_sum
{
if(pointer_send<12)
{
TB8=Get_Odd_Even_Bit(rs485_buf[pointer_send]);
chk_sum+=rs485_buf[pointer_send];
SBUF=rs485_buf[pointer_send];
}
else
{
TB8=Get_Odd_Even_Bit(spi_buf[send_offset+pointer_send-12]);
chk_sum+=spi_buf[send_offset+pointer_send-12];
SBUF=spi_buf[send_offset+pointer_send-12];
}
}
else if(pointer_send==oper_len+10) //send:chk_sum
{
TB8=Get_Odd_Even_Bit(chk_sum);
SBUF=chk_sum;
}
else if(pointer_send==oper_len+11) //send: 0x16
{
TB8=1;
SBUF=0x16;
}
pointer_send++;
}
else
{
REN_TEN=LOW;
ES=1;
}
}
if(RI)
{
rs485_buf[pointer_buf485]=SBUF;
RI=0;
if(RB8!=Get_Odd_Even_Bit(rs485_buf[pointer_buf485]))
return;
if((rs485_buf[pointer_buf485]!=0x68) && (rs485_timeout==0))
return;
pointer_buf485++;
if(pointer_buf485==MAX_485_LEN)
pointer_buf485=0;
}
rs485_timeout=8;
}
*/
bit Get_Odd_Even_Bit(uchar para)
{
uchar i;
bit j;
i=para & 0x0f;
j=table_odd_even_bit[i];
i=para & 0xf0;
i>>=4;
if(j)
{
if(table_odd_even_bit[i])
return 0;
else
return 1;
}
else
{
if(table_odd_even_bit[i])
return 1;
else
return 0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -