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

📄 main.c.bak

📁 一個使用pic16f877驅動2.4GRF模塊的範例
💻 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 + -