www.pudn.com > can¡ª¡ªSJA1000.rar > SJA_BCANCONF.h
/************************************************************************
* ¹ãÖÝÖÜÁ¢¹¦µ¥Æ¬»ú·¢Õ¹ÓÐÏÞ¹«Ë¾ http://www.zlgmcu.com *
***********************************************************************/
/************************************************************************
* *
* CAN ¿ØÖÆÆ÷SJA1000»ù±¾µÄÓ²¼þ¶¨Òå(BasicCAN ¹¤×÷·½Ê½£© *
* *
***********************************************************************/
/************************************************************************
* *
* Ä¿µÄ: SJA1000»ù±¾¼Ä´æÆ÷\¹¦ÄÜ붨Ò壬±ãÓÚÓû§Ê¹ÓÃSJA1000ʱ *
* Ö»Ðè×÷ÓëÆäÓ²¼þϵͳÏàÊʺϵļòµ¥µÄÐ޸쬱ãÄÜʵÏÖSJA1000µÄ *
* BasicCAN¹¤×÷·½Ê½µÄ¹¦ÄÜ *
* *
* ÎļþÃû: SJA_BCANCONF.H *
* *
* Ä£¿éÃû: -- *
* *
* Ä¿±êϵͳ: ÈκλùÓÚÈκμæÈÝ8051Ö¸ÁîµÄ΢´¦ÀíÆ÷ͬSJA1000×é³ÉµÄCAN *
* ϵͳ *
* *
* Ó¦ÓÃÓïÑÔ: Keil C51 *
* *
************************************************************************
* °æ±¾ :V1.0 *
* *
************************************************************************
* ¹ãÖÝÖÜÁ¢¹¦µ¥Æ¬»ú·¢Õ¹ÓÐÏÞ¹«Ë¾ ±£ÁôËùÓеİæÈ¨ *
************************************************************************/
#ifndef BasicCAN
#define BasicCAN
/************************************************************************
*SJA1000Óë΢´¦ÀíÆ÷µÄ½Ó¿ÚÊÇÒÔÍⲿ´æ´¢Æ÷µÄ·½Ê½£¬ËùÒÔÒÔϵĻùÖ·¶¨Ò壬Óû§ *
*Ó¦¸ù¾Ý×Ô¼ºµÄʵ¼Êµç·À´½øÐе÷Õû *
************************************************************************/
#define SJA_BaseAdr 0x6000 //¶¨Òåsja1000µÄƬѡ»ùÖ·
//¼ÆËãSJA1000ÔÚµç·ÖеÄʵ¼ÊµØÖ·:»ùÖ·+ÄÚ²¿¼Ä´æÆ÷µØÖ·
/************************************************************************
* ÒÔÏµĶ¨ÒåΪSJA1000µÄÄÚ²¿¼Ä´æÆ÷µÄµØÖ·£¬²»¿ÉÐÞ¸Ä *
* ¸÷¼Ä´æÆ÷µÄ¾ßÌ幦ÄÜÇå²ÎÔÄsja1000µÄÊý¾ÝÊÖ²á *
************************************************************************/
#define REG_CONTROL SJA_BaseAdr+0x00 //ÄÚ²¿¿ØÖƼĴæÆ÷
#define REG_COMMAND SJA_BaseAdr+0x01 //ÃüÁî¼Ä´æÆ÷
#define REG_STATUS SJA_BaseAdr+0x02 //״̬¼Ä´æÆ÷
#define REG_INTERRUPT SJA_BaseAdr+0x03 //ÖжϼĴæÆ÷
#define REG_IER SJA_BaseAdr+0x04 //ÖжÏʹÄܼĴæÆ÷
#define REG_ACR SJA_BaseAdr+0x10 //ÑéÊÕ´úÂë¼Ä´æÆ÷
#define REG_AMR SJA_BaseAdr+0x14 //ÑéÊÕÆÁ±Î¼Ä´æÆ÷
#define REG_BTR0 SJA_BaseAdr+0x06 //×ÜÏß¶¨Ê±¼Ä´æÆ÷0
#define REG_BTR1 SJA_BaseAdr+0x07 //×ÜÏß¶¨Ê±¼Ä´æÆ÷1
#define REG_OCR SJA_BaseAdr+0x08 //Êä³ö¿ØÖƼĴæÆ÷
#define REG_TEST SJA_BaseAdr+0x09 //²âÊԼĴæÆ÷
#define REG_EMLR SJA_BaseAdr+0x0d //³ö´í±¨¾¯½çÏ޼ĴæÆ÷
//ÒÔÏÂΪ·¢ËÍ»º³åÇø¼Ä´æÆ÷¶¨Òå
#define REG_TxBuffer1 SJA_BaseAdr+0x10 //·¢ËÍ»º³åÇø1
#define REG_TxBuffer2 SJA_BaseAdr+0x11 //·¢ËÍ»º³åÇø2
#define REG_TxBuffer3 SJA_BaseAdr+0x12 //·¢ËÍ»º³åÇø3
#define REG_TxBuffer4 SJA_BaseAdr+0x13 //·¢ËÍ»º³åÇø4
#define REG_TxBuffer5 SJA_BaseAdr+0x14 //·¢ËÍ»º³åÇø5
#define REG_TxBuffer6 SJA_BaseAdr+0x15 //·¢ËÍ»º³åÇø6
#define REG_TxBuffer7 SJA_BaseAdr+0x16 //·¢ËÍ»º³åÇø7
#define REG_TxBuffer8 SJA_BaseAdr+0x17 //·¢ËÍ»º³åÇø8
#define REG_TxBuffer9 SJA_BaseAdr+0x18 //·¢ËÍ»º³åÇø9
#define REG_TxBuffer10 SJA_BaseAdr+0x19 //·¢ËÍ»º³åÇø10
#define REG_TxBuffer11 SJA_BaseAdr+0x1a //·¢ËÍ»º³åÇø11
//ÒÔÏÂΪ½ÓÊÕ»º³åÇø¼Ä´æÆ÷¶¨Òå
#define REG_RxBuffer1 SJA_BaseAdr+0x10 //½ÓÊÕ»º³åÇø1
#define REG_RxBuffer2 SJA_BaseAdr+0x11 //½ÓÊÕ»º³åÇø2
#define REG_RxBuffer3 SJA_BaseAdr+0x12 //½ÓÊÕ»º³åÇø3
#define REG_RxBuffer4 SJA_BaseAdr+0x13 //½ÓÊÕ»º³åÇø4
#define REG_RxBuffer5 SJA_BaseAdr+0x14 //½ÓÊÕ»º³åÇø5
#define REG_RxBuffer6 SJA_BaseAdr+0x15 //½ÓÊÕ»º³åÇø6
#define REG_RxBuffer7 SJA_BaseAdr+0x16 //½ÓÊÕ»º³åÇø7
#define REG_RxBuffer8 SJA_BaseAdr+0x17 //½ÓÊÕ»º³åÇø8
#define REG_RxBuffer9 SJA_BaseAdr+0x18 //½ÓÊÕ»º³åÇø9
#define REG_RxBuffer10 SJA_BaseAdr+0x19 //½ÓÊÕ»º³åÇø10
#define REG_RxBuffer11 SJA_BaseAdr+0x1a //½ÓÊÕ»º³åÇø11
/************************************************************************
*ÄÚ²¿µØÖ· 01EH ±¸Óà *
************************************************************************/
/************************************************************************
*ʱÖÓ·ÖÆµ¼Ä´æÆ÷(ÄÚ²¿µØÖ·01FH) *
************************************************************************/
#define REG_CDR SJA_BaseAdr+0x1F //ʱÖÓ·ÖÆµ¼Ä´æÆ÷
/************************************************************************
*¶¨ÒåÖ¸Õë *
************************************************************************/
unsigned char xdata *SJA_BCANAdr;
/************************************************************************
*¶¨ÒåÃüÁî×Ö *
************************************************************************/
#define TR_CMD 0x01 //·¢ËÍÇëÇóÃüÁî
#define SRR_CMD 0x12 //×Ô½ÓÊÕÇëÇó
#define AT_CMD 0x02 //زÕÛ·¢ËÍÃüÁî
#define RRB_CMD 0x04 //ÊͷŽÓÊÕ»º³åÇø
#define COS_CMD 0x08 //Çå³ý³¬ÔØ×´Ì¬
//#define GTS_CMD 0x10 //½øÈë˯Ãß״̬ÃüÁî
/************************************************************************
*¶¨Òå12MµÄ¾§ÌåÏ£¬CAN×ÜÏß²¨ÌØÂÊ *
************************************************************************/
#define ByteRate_20k 0x00 //²¨ÌØÂÊ20kbps
#define ByteRate_40k 0x01 //²¨ÌØÂÊ40kbps
#define ByteRate_50k 0x02 //²¨ÌØÂÊ50kbps
#define ByteRate_80k 0x03 //²¨ÌØÂÊ80kbps
#define ByteRate_100k 0x04 //²¨ÌØÂÊ100kbps
#define ByteRate_125k 0x05 //²¨ÌØÂÊ125kbps
#define ByteRate_200k 0x06 //²¨ÌØÂÊ200kbps
#define ByteRate_250k 0x07 //²¨ÌØÂÊ250kbps
#define ByteRate_400k 0x08 //²¨ÌØÂÊ400kbps
#define ByteRate_500k 0x09 //²¨ÌØÂÊ500kbps
#define ByteRate_666k 0x0a //²¨ÌØÂÊ666kbps
#define ByteRate_800k 0x0b //²¨ÌØÂÊ800kbps
#define ByteRate_1000k 0x0c //²¨ÌØÂÊ1000kbps
/*-------------------------------------------------------------------------------------------
* ÒÔÏÂΪBASICCAN SJA1000µÄ´íÎó×Ö *
-------------------------------------------------------------------------------------------*/
#define CAN_INTERFACE_0K 0 /*SJA1000½Ó¿ÚÕý³£ */
#define CAN_BUS_0K 0 /*CAN×ÜÏß¹¤×÷Õý³£ */
#define CAN_INTERFACE_ERR 0XFF /*SJA1000½Ó¿Ú´íÎó£ */
#define CAN_ENTRESET_ERR 0XFE /*SJA1000²»ÄܽøÈ븴λģʽ */
#define CAN_QUITRESET_ERR 0XFD /*SJA1000²»ÄÜÍ˳ö¸´Î»Ä£Ê½ */
#define CAN_INITOBJECT_ERR 0XFC /*³õʼ»¯±¨ÎÄÑéÊÕÂ˲¨Æ÷´í */
#define CAN_INITBTR_ERR 0XFB /*³õʼ»¯×ÜÏß¶¨Ê±Æ÷Æ÷´í */
#define CAN_INITOUTCTL_ERR 0XFA /*³õʼ»¯Êä³ö¿ØÖÆ´íÎó */
#define CAN_INTCLKDIV_ERR 0XF9 /*³õʼ»¯Ê±ÖÓ·ÖÆµ¿ØÖÆÆ÷´í */
#define CAN_BUS_ERR 0XF8 /*SJA1000·¢ËÍÊý¾Ý´í */
#define NO_BANDRATE_SIZE 0xe7
/************************************************************************
*ÒÔÏÂΪ»ù±¾µÄº¯Êý˵Ã÷£¨BasicCAN) *
************************************************************************/
/************************************************************************
*º¯ÊýÔÐÍ: bit BCAN_CREATE_COMMUNATION(void) *
*²ÎÊý˵Ã÷: ÎÞ *
*·µ»ØÖµ: *
* 0 ; ±íʾSJA1000½Ó¿ÚÕý³£ *
* 1 ; ±íʾSJA1000Óë´¦ÀíÆ÷½Ó¿Ú²»Õý³£ *
* *
*˵Ã÷:¸Ãº¯ÊýÓÃÓÚ¼ì²âCAN¿ØÖÆÆ÷µÄ½Ó¿ÚÊÇ·ñÕý³£ *
************************************************************************/
bit BCAN_CREATE_COMMUNATION(void);
/************************************************************************
*º¯ÊýÔÐÍ: bit BCAN_ENTER_RETMODEL(void) *
*²ÎÊý˵Ã÷: ÎÞ *
*·µ»ØÖµ: *
* 0 ; ±íʾ³É¹¦½øÈ븴λ¹¤×÷ģʽ *
* 1 ; ±íʾ²»ÄܽøÈ븴λ¹¤×÷ģʽ *
* *
*˵Ã÷: CAN¿ØÖÆÆ÷½øÈ븴λ¹¤×÷ģʽ *
************************************************************************/
bit BCAN_ENTER_RETMODEL(void);
/************************************************************************
*º¯ÊýÔÐÍ: bit BCAN_QUIT_RETMODEL(void) *
*²ÎÊý˵Ã÷: ÎÞ *
*·µ»ØÖµ: *
* 0 ; ±íʾ³É¹¦Í˳ö¸´Î»¹¤×÷ģʽ *
* 1 ; ±íʾ²»ÄÜÍ˳ö¸´Î»¹¤×÷ģʽ *
* *
*˵Ã÷: CAN¿ØÖÆÆ÷Í˳ö¸´Î»¹¤×÷ģʽ *
************************************************************************/
bit BCAN_QUIT_RETMODEL(void);
/************************************************************************
;*º¯ÊýÔÐÍ: bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate) *
;*²ÎÊý˵Ã÷: CAN_ByteRate ²¨ÌØÂÊ£¨Kbit/s£© BTR0 BTR1 *
;* 0 5 0EFH 0FFH *
;* 1 10 0D7H 0FFH *
;* 2 20 0CBH 0FFH *
;* 3 40 0C5H 0FFH *
;* 4 50 0C9H 0A7H *
;* 5 80 0C2H 0FFH *
;* 6 100 04H 0A7H *
;* 7 200 02H 025H *
;* 8 250 01H 045H *
;* 9 300 01H 025H *
;* 10 500 01H 012H *
;* 11 600 00H 025H *
;* 12 1000 00H 012H *
;*·µ»ØÖµ: *
;* 0 ;²¨ÌØÂÊÉèÖóɹ¦ *
;* 1 ;²¨ÌØÂÊÉèÖÃʧ°Ü *
;* *
;*˵Ã÷:ÉèÖÃCAN¿ØÖÆÆ÷SJA1000ͨѶ²¨ÌØÂÊ.SJA1000µÄ¾§ÕñΪ±ØÐëΪ12MHZ, *
;* ÆäËü¾§ÌåµÄƵÂʵÄÖµµÄ²¨ÌØÂÊ£¬Ðè×Ô¼º¼ÆËã ¡£¸Ã×Ó³ÌÐòÖ»ÄÜÓÃÓÚ *
;* ¸´Î»Ä£Ê½ *
;************************************************************************/
bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate);
/************************************************************************
;*º¯ÊýÔÐÍ: bit BCAN_SET_OBJECT(unsigned char BCAN_ACR, *
unsigned char BCAN_AMR) *
*²ÎÊý˵Ã÷: *
* BCAN_ACR:´æ·ÅÑéÊÕ´úÂë¼Ä´æÆ÷£¨ACR£©µÄ²ÎÊýÉèÖà *
* BCAN_AMR:´æ·Å½ÓÊÕÆÁ±Î¼Ä´æÆ÷£¨AMR£©µÄ²ÎÊýÉèÖà *
;*·µ»ØÖµ: *
;* 0 ;ͨÐŶÔÏóÉèÖóɹ¦ *
;* 1 ;ͨÐŶÔÏóÉèÖÃʧ°Ü *
;* *
;*˵Ã÷:ÉèÖÃCAN½ÚµãµÄͨѶ¶ÔÏó£¬ÔÊÐí½ÓÊյı¨ÎÄIDºÅµÄ¸ß8λ(D10--D3) ¡£ *
;* ÔÊÐí½ÓÊյı¨ÎÄ,ÊÇÓÉAMRºÍACR¹²Í¬¾ö¶¨µÄ. *
;* Âú×ãÒÔÏÂÌõ¼þµÄIDºÅµÄ±¨ÎIJſÉÒÔ±»½ÓÊÕ *
;*[£¨ID.10-ID.3£©¡Ô£¨AC.7-AC.0£©]||£¨AM.7-AM.0£©¡Ô11111111 *
;* ¸Ã×Ó³ÌÐòÖ»ÄÜÓÃÓÚ¸´Î»Ä£Ê½ * *
;************************************************************************/
bit BCAN_SET_OBJECT(unsigned char BCAN_ACR,unsigned char BCAN_AMR);
/************************************************************************
;*º¯ÊýÔÐÍ: bit BCAN_SET_OUTCLK (unsigned char Out_Control, *
unsigned char Clock_Out); *
;*²ÎÊý˵Ã÷: *
* Out_Control:´æ·ÅÊä³ö¿ØÖƼĴæÆ÷ (OC) µÄ²ÎÊýÉèÖà *
* Clock_Out:´æ·ÅʱÖÓ·ÖÆµ¼Ä´æÆ÷ (CDR) µÄ²ÎÊýÉèÖà *
* *
;*·µ»ØÖµ: *
;* 0 ;ÉèÖóɹ¦ *
;* 1 ;ÉèÖÃʧ°Ü *
;* *
;*˵Ã÷:ÉèÖÃSJA1000µÄÊä³öģʽºÍʱÖÓ·ÖÆµ ¡£¸Ã×Ó³ÌÐòÖ»ÄÜÓÃÓÚ¸´Î»Ä£Ê½ * *
;************************************************************************/
bit BCAN_SET_OUTCLK (unsigned char Out_Control,
unsigned char Clock_Out);
/************************************************************************
*º¯ÊýÔÐÍ: bit BCAN_HW_INIT(unsigned char BCAN_ACR, *
* unsigned char BCAN_AMR, *
* unsigned char Bus_Timing0, *
* unsigned char Bus_Timing1, *
* unsigned char Out_Control, *
* unsigned char Clock_Out *
* ) *
*²ÎÊý˵Ã÷: *
* BCAN_ACR:´æ·ÅÑéÊÕ´úÂë¼Ä´æÆ÷£¨ACR£©µÄ²ÎÊýÉèÖà *
* BCAN_AMR:´æ·Å½ÓÊÕÆÁ±Î¼Ä´æÆ÷£¨AMR£©µÄ²ÎÊýÉèÖà *
* Bus_Timing0:´æ·Å×ÜÏß¶¨Ê±0¼Ä´æÆ÷(BTR0)µÄ²ÎÊýÉèÖà *
* Bus_Timing1:´æ·Å×ÜÏß¶¨Ê±1¼Ä´æÆ÷(BTR1)µÄ²ÎÊýÉèÖà *
* Out_Control:´æ·ÅÊä³ö¿ØÖƼĴæÆ÷ (OC) µÄ²ÎÊýÉèÖà *
* Clock_Out:´æ·ÅʱÖÓ·ÖÆµ¼Ä´æÆ÷ (CDR) µÄ²ÎÊýÉèÖà *
* *
*·µ»ØÖµ: *
* 0 ; ±íʾ³õʼ»¯³É¹¦ *
* 1 ; ±íʾ³õʼ»¯Ê§°Ü *
* *
*˵Ã÷:CAN¿ØÖÆÆ÷µÄ³õʼ»¯Ö»ÄÜÔÚ¸´Î»Ä£Ê½Ï²ÅÄÜÍê³É¡£³õʼ»¯²Ù×÷֮ǰÇëÏȽøÈë*
* µ½¸´Î»²Ù×÷ģʽ,²¢½«Òª³õʼ»¯µÄ¸÷²ÎÊýµÄÖµ°´Êý¾ÝÊÖ²áÖеļÆËã·½·¨,Õý *
* È·µÄ°´Êµ¼ÊÐèÒª¼ÆËãºÃ²ÎÊýºó£¬½«²ÎÊýдÈë¶ÔÓ¦µÄ¼Ä´æÆ÷ ¡£ *
*×¢£º ΪÁËCAN¿ØÖÆÆ÷µÄÕýÈ·ÔËÐУ¬ÇëÎñ±Ø×ÐϸµÄÔĶÁSJA1000µÄÊý¾ÝÊÖ²á *
* *
*ʾÀý£ºÉèÓ¦ÓÃϵͳÖо§Ì寵ÂÊ16MHZ£¬½ÚµãÖ»½ÓÊÕID(±êÖ¾·û£©¸ß°ËλΪ *
* '10101010'µÄÏûÏ¢£¬ÏµÍ³²¨ÌØÂÊΪ50Kbit/s,¹Ø±ÕCLKOUTÊä³ö¡£ *
* Ôò¸ù¾ÝÊý¾ÝÊÖ²áÖеļÆËã·½·¨µÄ¸÷²ÎÊýÈçÏ£º *
* ACR==0AAH,AMR==00H,BTR0==0C9H,BTR1==0C9H,OC==0FFH,CDR=48H *
* Ôòµ÷Óñ¾º¯ÊýΪ£º *
* BCAN_HW_INIT(0xaa,0x00,0xc9,0xc9,0xff,0x48) *
************************************************************************/
bit BCAN_HW_INIT(unsigned char BCAN_ACR,
unsigned char BCAN_AMR,
unsigned char Bus_Timing0,
unsigned char Bus_Timing1,
unsigned char Out_Control,
unsigned char Clock_Out
) ;
/************************************************************************
*º¯ÊýÔÐÍ: bit BCAN_DATA_WRITE(unsigned char *SendDataBuf) *
*²ÎÊý˵Ã÷: ÌØ¶¨Ö¡¸÷ʽµÄÊý¾Ý· *
*·µ»ØÖµ: *
* 0 ; ±íʾ½«Êý¾Ý³É¹¦µÄËÍÖÁ·¢ËÍ»º³åÇø *
* 1 ; ±íʾÉÏÒ»´ÎµÄÊý¾ÝÕýÔÚ·¢ËÍ£¬ *
* ; ±íʾ·¢ËÍ»º³åÇø±»Ëø¶¨£¬²»ÄÜдÈëÊý¾Ý *
* ;±íʾдÈëÊý¾Ý´íÎó *
*˵Ã÷: ½«´ý·¢ËÍÌØ¶¨Ö¡¸÷ʽµÄÊý¾Ý£¬ËÍÈëSJA1000·¢ËÍ»º´æÇøÖУ¬È»ºóÆô¶¯ *
* SJA1000·¢ËÍ¡£ *
* ÌØ¶¨Ö¡¸ñʽΪ:¿ªÊ¼µÄÁ½¸ö×Ö½Ú´æ·Å 'ÃèÊö·û' ,ÒÔºóµÄΪÊý¾Ý *
* ÃèÊö·û°üÀ¨11볤µÄID(±êÖ¾·û£©\1λRTR\4λÃèÊöÊý¾Ý³¤¶ÈµÄDLC¹²16λ *
* *
*×¢£º±¾º¯ÊýµÄ·µ»ØÖµ½öָʾ£¬½«Êý¾ÝÕýȷдÈëSJA1000·¢ËÍ»º´æÇøÖÐÓë·ñ¡£ *
* ²»Ö¸Ê¾SJA1000½«¸ÃÊý¾ÝÕýÈ··¢Ë͵½CAN×ÜÏßÉÏÍê±ÏÓë·ñ *
************************************************************************/
bit BCAN_DATA_WRITE(unsigned char *SendDataBuf);
/************************************************************************
*º¯ÊýÔÐÍ: bit BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf); *
*²ÎÊý˵Ã÷: RcvDataBuf,´æ·Å΢´¦ÀíÆ÷±£´æÊý¾Ý»º³åÇø *
*·µ»ØÖµ: 0;½ÓÊճɹ¦ *
* 1;½ÓÊÕʧ°Ü *
*˵Ã÷:CAN¿ØÖÆÆ÷½ÓÊÕÊý¾Ý,½öÏÞÓÚ½ÓÊÕÊý¾Ý *
************************************************************************/
bit BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf);
/************************************************************************
*º¯ÊýÔÐÍ: unsigned char BCAN_CMD_PRG(unsigned char cmd) *
*²ÎÊý˵Ã÷: cmd:sja1000ÔËÐеÄÃüÁî×Ö *
* 01:·¢ËÍÇëÇó *
* 02£ºÖÐÖ¹·¢ËÍ *
* 04£ºÊͷŽÓÊÕ»º³åÇø *
* 08£ºÇå³ý³¬ÔØ×´Ì¬ *
* 0x10:½øÈë˯Ãß״̬ *
* *
*·µ»ØÖµ: *
* 0 ; ±íʾÃüÁîÖ´Ðгɹ¦ *
* 1 ; ±íʾÃüÁîÖ´ÐÐʧ°Ü *
* *
*˵Ã÷: Ö´ÐÐsja1000ÃüÁî *
************************************************************************/
bit BCAN_CMD_PRG(unsigned char cmd);
bit BCAN_SET_MOD(void);
#endif