📄 main.c.bak
字号:
#define PIC_CLK 8000000 //change this to 3.6864, 4, 16 or 20MHz
#include <pic.h>
//#include <pic16f887.h>
//#include <pic1687x.h>
//#include <conio.h>
//#include <stdlib.h>
//#include <stdio.h>
//#include <ctype.h>
#include "always.h"
#include "delay.h"
//#include "error.h"
//#include "maths.h"
//include C files
#include "serial.h"
#include "serial.c"
#include "delay.c"
#include "TRW24G.c"
/*
#define TRW_24G_CE RC1
#define TRW_24G_DATA RC4
#define TRW_24G_CLK RC3
#define TRW_24G_DR1 RB0
#define TRW_24G_CS RC0
#define TRW_24G_DOUT RC5
#define TRW_24G_CLK2 RC2
#define TRW_24G_DR2 RB1
*/
//=========================================================================================
#if defined(_16F887) || defined(_16F877) || defined(_16F873) || defined(_16F874) || defined(_16C76)
__CONFIG( WDTDIS & HS & UNPROTECT & PWRTEN & BOREN & LVPDIS & PWRTDIS & DEBUGDIS &
UNPROTECT);
#else
#error Must be compiled for 16F87x, MPLAB-ICD or 16C76
#endif
//=========================================================================================
static volatile unsigned char RX_BUF[32],TX_BUF[33];
static volatile unsigned char RX_INDEX,RX_CHKSUM,TX_INDEX,TX_CHKSUM;
static bit f_RX_HL,f_TX_HL,f_Rcved,f_TXing;
const unsigned char HexToAsc_Table[]={
'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F'};
//=========================================================================================
//=========================================================================================
//=========================================================================================
/* interrupt service routine*/
//-----------------------------------------------------------------------------------------
void interrupt isr(void)
{
unsigned char c,d;
if(RCIF)
{
c=RCREG;
if(OERR == 0 ) // 无溢出错误
{
switch(c)
{
case '$':
RX_INDEX=0;
RX_CHKSUM=0;
f_RX_HL=0;
break;
case '*':
f_Rcved=1;
// if(RX_CHKSUM==RX_BUF[27]) f_Rcved=1;
break;
default:
if (c>='0' && c<='9')
{c=c-0x30; }
else
{
if (c>='A' && c<='F')
{ c=c-0x37; }
}
f_RX_HL=!f_RX_HL;
if(f_RX_HL)
RX_BUF[RX_INDEX]=c<<4;
else
{
RX_CHKSUM+=c; //璸衡chksum
d=RX_BUF[RX_INDEX];
RX_BUF[RX_INDEX]=d|c;
if(++RX_INDEX>31) RX_INDEX=31;
}
break;
}
}
else
{
CREN = 0;
asm("nop");
CREN = 1;
}
}//if (RCIF)
if(TXIF)
{
if(TX_INDEX==0)
{
f_TX_HL=0; f_TXing=1; TX_CHKSUM=0;
TX_INDEX++;
TXREG = '$';
}
else if((TX_INDEX >0 )&& (TX_INDEX < 28))
{
f_TX_HL=!f_TX_HL;
c=TX_BUF[TX_INDEX];
if(f_TX_HL)
{
d=c/0x10;
TX_CHKSUM += d;
TXREG = HexToAsc_Table[d];
}
else
{
d=c&0xf;
TX_CHKSUM += d;
TXREG = HexToAsc_Table[d];
TX_INDEX++;
}
}
else if(TX_INDEX == 28)
{
d=TX_CHKSUM/0x10;
TXREG = HexToAsc_Table[d];
TX_INDEX++;
}
else if(TX_INDEX == 29)
{
d=TX_CHKSUM&0xF;
TXREG = HexToAsc_Table[d];
TX_INDEX++;
}
else if(TX_INDEX == 30)
{
f_TXing=0;
TXREG = '*';
TX_INDEX++;
}
else if(TX_INDEX >30)
{
TXIE=0;
TXEN=0;
}
}
}
//-----------------------------------------------------------------------------------------
/* interrupt service routine*/
//=========================================================================================
//=========================================================================================
//void initial(void)
//-----------------------------------------------------------------------------------------
void mcu_initial(void)
{
RP0=1; //choose bank 1
GIE=0; //disable all interrupt
OPTION=0x3f; //Prescaler select1:128 and assigned to WDT
INTCON=0; //GIE and PEIE disable;TO and INT enable;IntFlag cleared
PIE1=0; //TMER2中断,异步串行接收中断
PIR1=0;
PIR2=0;
//Set Port
TRISA=0xf7; //
TRISB=0xff; //PORTB.all input
TRISC=0xA0; //
TRISD=0x07; //RD all output
TRISE=0; //RE all output
//
// TMR1IE=1; //enable TIME1 interrupt
//INIT_AD:
ADCON1=0x09; //ADFM=0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -