?? ex6m.c
字號:
#include <p18f4680.h> // p18cxxx.h must have current processor
#include "CAN18XX8.h" // Purpose of using AN738 Subroutine !!
#include "WAP_LCD.H"
#include <stdlib.h>
void Delay_100(void) ;
void Delay_10(void) ;
void Show_Word_Hex ( unsigned char , unsigned char , int ) ;
char Temp_ASCII[10] ;
char WaitOnBus ;
union
{
unsigned char Bytes[2] ;
unsigned int Word ;
} AD_ALL ;
union
{
unsigned char Bytes[2] ;
unsigned int Word ;
} Int2Byte ;
unsigned char Var1,Var2 ;
unsigned long TX_ID1 ;
BYTE TX_Data_Buf1[8] ;
unsigned long RX_ID1 ;
BYTE RX_Data_Buf1[8] ;
BYTE RX_Data_Len1 ;
enum CAN_RX_MSG_FLAGS RX1_Message_Flag ;
unsigned long RX_ID2 ;
BYTE RX_Data_Buf2[8] ;
BYTE RX_Data_Len2 ;
enum CAN_RX_MSG_FLAGS RX2_Message_Flag ;
#define OUTGOING_ID 0X210
#define INCOMING_ID 0X200
#define MESSAGE_ID1 0x200
#define MESSAGE_ID2 0x88
#define RX_Filter0 0x100
#define RX_Filter1 0x00
#define RX_Filter2 0x00
#define RX_Filter3 0x00
#define RX_Filter4 0x00
#define RX_Filter5 0x00
#define RXB0_MASK 0x700
#define RXB1_MASK 0x700
#define RTR_ID_MIN 0x81
#define RTR_ID_MAX 0x88
#define SW2 PORTBbits.RB0
#define SW3 PORTAbits.RA4
#define TX_ID_MIN 0x100
#define TX_ID_MAX 0x1F0
void main( void )
{
PORTD = 0x00 ;
TRISD = 0x00 ;
TRISBbits.TRISB2 = 0 ; // CANTX
TRISBbits.TRISB3 = 1 ; // CANRX
TRISBbits.TRISB0 = 1 ; // Switch 2
TRISAbits.TRISA4 = 1 ; // Switch 3
CMCON = 0b00000111 ; // Disable Comparator Module
// ***************************************************************
// AD Modul initialize for PIC18F458X
// ***************************************************************
ADCON1 = 0b00001110 ;
ADCON2 = 0b10100010 ; // Right Justified !!
ADCON0 = 0b00000001 ; // Initial ADCON0 for A/D Module
OpenLCD( ) ;
Delay_100( ) ;
putrsLCD("RTR ID = ") ;
LCD_Set_Cursor(0,1) ;
putrsLCD("DATA = ") ;
//
// Initialize CAN Communication Module !!
// The Sequence of Parameter is SJW,BRP,PHASEG1,PHASEG2,PROPSEG, Mode !!
//
CANInitialize( 2,8,3,3,1, CAN_CONFIG_LINE_FILTER_OFF &
CAN_CONFIG_SAMPLE_ONCE &
CAN_CONFIG_VALID_STD_MSG &
CAN_CONFIG_PHSEG2_PRG_ON ) ;
CANSetOperationMode(CAN_OP_MODE_CONFIG) ;
CANSetMask(CAN_MASK_B1, RXB0_MASK, CAN_CONFIG_STD_MSG ) ; // Set Mask For Standard Data Frame
CANSetMask(CAN_MASK_B2, RXB1_MASK, CAN_CONFIG_STD_MSG ) ;
CANSetFilter(CAN_FILTER_B1_F1, RX_Filter0 , CAN_CONFIG_STD_MSG) ;
CANSetFilter(CAN_FILTER_B1_F2, 0x00000000 , CAN_CONFIG_STD_MSG) ;
CANSetFilter(CAN_FILTER_B2_F1, 0x00000000 , CAN_CONFIG_STD_MSG) ;
CANSetFilter(CAN_FILTER_B2_F2, 0x00000000 , CAN_CONFIG_STD_MSG) ;
CANSetFilter(CAN_FILTER_B2_F3, 0x00000000 , CAN_CONFIG_STD_MSG) ;
CANSetFilter(CAN_FILTER_B2_F4, 0x00000000 , CAN_CONFIG_STD_MSG) ;
CANSetOperationMode(CAN_OP_MODE_NORMAL) ;
TX_ID1 = TX_ID_MIN ;
Show_Word_Hex ( 8 , 0 , (int) TX_ID1 ) ;
LATD = 0x00 ;
while (1)
{
Delay_100( ) ;
if ( ! SW3 )
{
if ( CANIsTxReady( ) )
CANSendMessage( TX_ID1 ,TX_Data_Buf1,0,CAN_TX_PRIORITY_0 &
CAN_TX_STD_FRAME &
CAN_TX_RTR_FRAME ) ;
Show_Word_Hex ( 8 , 0 , (int) TX_ID1 ) ;
}
Delay_10( ) ;
if ( CANIsRxReady( ) )
{
CANReceiveMessage(&RX_ID1,RX_Data_Buf1,&RX_Data_Len1,&RX1_Message_Flag ) ;
LCD_Set_Cursor(8,1) ;
putrsLCD(" ") ;
LCD_Set_Cursor(8,1) ;
AD_ALL.Bytes[0] = RX_Data_Buf1[3] ;
AD_ALL.Bytes[1] = RX_Data_Buf1[4] ;
itoa ( AD_ALL.Word , Temp_ASCII ) ;
putsLCD( Temp_ASCII ) ;
LATD = AD_ALL.Word >> 2 ;
}
if ( ! SW2 )
{
TX_ID1 += 0x10 ;
if ( TX_ID1 > TX_ID_MAX ) TX_ID1 = TX_ID_MIN ;
Show_Word_Hex ( 8 , 0 , (int) TX_ID1 ) ;
while ( ! SW2 ) ;
}
}
}
void Show_Word_Hex ( unsigned char CurX , unsigned char CurY , int Word_Value)
{
LCD_Set_Cursor(CurX,CurY) ;
putrsLCD(" ") ;
LCD_Set_Cursor(CurX,CurY) ;
Int2Byte.Word = Word_Value ;
puthexLCD( Int2Byte.Bytes[1]) ;
puthexLCD( Int2Byte.Bytes[0]) ;
}
void Delay_100(void)
{
int X1 ;
for (X1 = 0 ; X1 < 10000 ; X1 ++ ) ;
}
void Delay_10(void)
{
int X1 ;
for (X1 = 0 ; X1 < 100 ; X1 ++ ) ;
}
//************************************************
//* #pragma Interrupt Declarations *
//************************************************
#pragma interrupt isr_high // save = PRODL,PRODH,FSR0L,FSR0H
#pragma interruptlow isr_low // save = WREG,STATUS,BSR,PRODL,PRODH,FSR0L,FSR0H
//************************************************
//* Function: isr_high_direct *
//* - Direct execution to the actual *
//* high-priority interrupt code. *
//************************************************
#pragma code isrhighcode = 0x0000008
void isr_high_direct(void)
{
//***EXERCISE 2 CODE HERE***
_asm //begin in-line assembly
goto isr_high //go to isr_high function
_endasm //end in-line assembly
}
#pragma code
//************************************************
//* Function: isr_low_direct *
//* - Direct execution to the actual *
//* low-priority interrupt code. *
//************************************************
#pragma code isrlowcode = 0x0000018
void isr_low_direct(void)
{
//***EXERCISE 2 CODE HERE***
_asm //begin in-line assembly
goto isr_low //go to isr_high function
_endasm //end in-line assembly
}
#pragma code
//************************************************
//* Function: isr_high(void) *
//* High priority interrupt will *
//************************************************
void isr_high(void)
{
}
//************************************************
//* Function: isr_low(void) *
//* Low priority interrupt will *
//* - Check cause of interrupt and *
//************************************************
void isr_low(void)
{
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -