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

📄 pic18f458_can_rs232_picc8.35.lst

📁 使用微芯公司的PIC18F458单片机
💻 LST
📖 第 1 页 / 共 3 页
字号:
     1: //////////////////////////////////////////////////////////////////////////
     2: //                               文件说明                               // 
     3: //Project code(项目代号或名称):PIC18F458_CAN_RS232_PICC8.35.c          //
     4: //Create date(创建日期):2007.8.1                                       //
     5: //created by(创建人):夏红峰                                            //
     6: //E-mail:master_0722@sina.com/master_0722@yahoo.com                     //
     7: //Function(模块功能):  该程序可以实现以下功能:                         //
     8: //                   1. 通过串口接收中断,如果接收到的数据流为14个数据,//
     9: //                      同时第一个数据为0x72,则把收到的后13个数据通过  //
    10: //                      PIC内部CAN控制器,以标准帧或扩展帧的格式发送到  //
    11: //                      CAN总线上。同时L0(标准帧)或L1(扩展帧)灯闪一下。 //
    12: //                      第1个字节为0x72                                 //
    13: //                              pointer = &receive232[1];                       //
    14: //                              TXB0SIDH = *pointer++;        //第2个字节       //
    15: //                              TXB0SIDL = *pointer++;        //第3个字节       //
    16: //                              TXB0EIDH = *pointer++;        //第4个字节       //
    17: //                              TXB0EIDL = *pointer++;        //第5个字节       //
    18: //                              TXB0DLC = *pointer++;         //第6个字节       //
    19: //                              TXB0D0 = *pointer++;              //第7个字节       //
    20: //                              TXB0D1 = *pointer++;          //第8个字节       //
    21: //                              TXB0D2 = *pointer++;          //第9个字节       //
    22: //                              TXB0D3 = *pointer++;          //第10个字节      //
    23: //                              TXB0D4 = *pointer++;          //第11个字节      //
    24: //                              TXB0D5 = *pointer++;          //第12个字节      //
    25: //                          TXB0D6 = *pointer++;          //第13个字节      //
    26: //                              TXB0D7 = *pointer++;          //第14个字节      //
    27: //                   2. 通过查询,当S1按键按下时,则相应的把预先写好的8 //
    28: //                      个数据,通过PIC内部CAN控制器,以标准帧的格式发送//
    29: //                      到CAN总线上。同时L0灯闪一下。                   //
    30: //                              TXB0SIDH = 0xFF;    //SID10--SID3               //
    31: //                          TXB0SIDL = 0xE0;    //SID2--SID0                //
    32: //                              TXB0DLC = 0x08;     //发送数据长度为8字节       //
    33: //                              TXB0D0 = 0x00;      //发送的数据                //
    34: //                              TXB0D1 = 0x11;                                  //
    35: //                              TXB0D2 = 0x22;                                  //
    36: //                              TXB0D3 = 0x33;                                  //
    37: //                              TXB0D4 = 0x44;                                  //
    38: //                              TXB0D5 = 0x55;                                  //
    39: //                              TXB0D6 = 0x66;                                  //
    40: //                              TXB0D7 = 0x77;                                  //
    41: //                   3. 通过查询,当S2按键按下时,则相应的把预先写好的8 //
    42: //                      个数据,通过PIC内部CAN控制器,以扩展帧的格式发送//
    43: //                      到CAN总线上。同时L1灯闪一下。                   //
    44: //                              TXB0SIDH = 0xFF;    //EID28--21                 //
    45: //                              TXB0SIDL = 0xEB;    //EID20--EID18,EID17--EID16 //
    46: //                              TXB0EIDH = 0xFF;    //EID15--EID8               //
    47: //                              TXB0EIDL = 0xFF;    //EID7--EID0                //
    48: //                              TXB0DLC = 0x08;     //发送数据长度为8字节       //
    49: //                              TXB0D0 = 0x00;      //发送的数据                //
    50: //                              TXB0D1 = 0x11;                                  //
    51: //                              TXB0D2 = 0x22;                                  //
    52: //                              TXB0D3 = 0x33;                                  //
    53: //                              TXB0D4 = 0x44;                                  //
    54: //                              TXB0D5 = 0x55;                                  //
    55: //                              TXB0D6 = 0x66;                                  //
    56: //                              TXB0D7 = 0x77;                                  //
    57: //                   4. 利用PIC内部CAN控制器,如果从CAN总线接收到标准帧 //
    58: //                      数据时,则L0灯闪一下;如果接收到扩展帧数据的话,//
    59: //                      则L1灯闪一下。同时把接收数据发送到串口,通过电脑//
    60: //                      端显示出来。                                    //
    61: //                      send232[0] = RXB0SIDH;       //接收到的标准标识符高字节                //
    62: //                      send232[1] = RXB0SIDL;       //接收到的标准标识符低字节                //
    63: //                      send232[2] = RXB0EIDH;       //接收到的扩展标识符高字节(看RXB0EXID而定)//
    64: //                      send232[3] = RXB0EIDL;       //接收到的扩展标识符低字节(看RXB0EXID而定)//
    65: //                      send232[4] = RXB0DLC;        //接收到的数据长度                        //
    66: //                      send232[5] = RXB0D0;         //接收到的数据                            //
    67: //                              send232[6] = RXB0D1;                            //
    68: //                              send232[7] = RXB0D2;                            //
    69: //                              send232[8] = RXB0D3;                            //
    70: //                              send232[9] = RXB0D4;                            //
    71: //                              send232[10] = RXB0D5;                           //
    72: //                              send232[11] = RXB0D6;                           //
    73: //                              send232[12] = RXB0D7;                           //
    74: //hardware configure(硬件配置):PIC18F458+MCP2551+MAX232                //
    75: //Document(参考文档):                                                  //
    76: //Others(说明):                                                        //
    77: //////////////////////////////////////////////////////////////////////////
    78: 
    79: 
    80: //////////////////////////////////////////////////////////////////////////
    81: //                           头文件定义                                 //
    82: //说明:根据安装文件位置不同,路径有所不同,请注意。                    //
    83: //////////////////////////////////////////////////////////////////////////
    84: #include "pic18.h"
    85: #include "pic18fxx8.h"
    86: //************************************************************************
    87: 
    88: //////////////////////////////////////////////////////////////////////////
    89: //                           配置字配置                                 //
    90: //////////////////////////////////////////////////////////////////////////
    91: //振荡器为HS(20M),系统振荡器时钟转换选择禁止
    92: __CONFIG(1,0xFAFF); 
    93: //监视定时器WDT禁止,掉电锁定复位硬件使能,复位电压为2.7V,上电定时器使能
    94: __CONFIG(2,0xFEFA); 
    95: //使能RB6、RB7为专用调试器接口,堆栈溢出复位使能,低压编程禁止
    96: __CONFIG(4,0xFF7B);
    97: //程序存储区、数据EEPROM,引导区都无代码保护
    98: __CONFIG(5,0xFFFF);
    99: //程序存储区、数据EEPROM,引导区、配置寄存器都无写保护
   100: __CONFIG(6,0xFFFF);
   101: //程序存储区、引导区都无表读保护
   102: __CONFIG(7,0xFFFF);
   103: //************************************************************************
   104: 
   105: 
   106: //////////////////////////////////////////////////////////////////////////
   107: //                           用户标识符定义                             //
   108: //////////////////////////////////////////////////////////////////////////
   109: #define Fosc     20000000              //晶振为20MHZ
   110: #define FCY      5000000                   //晶振为20MHZ,FCY=20M/4=5M
   111: #define BAUDRATE 9600                  //波特率为9600
   112: #define MILLISEC FCY/10000                         //1 mSec delay constant
   113: #define TMR0data 122                   //(1/BAUDRATE)*10*3*FCY/128
   114: //************************************************************************
   115: 
   116: 
   117: //////////////////////////////////////////////////////////////////////////
   118: //                          子函数定义                                  //
   119: //////////////////////////////////////////////////////////////////////////
   120: void interrupt HI_ISR(void);
   121: void interrupt low_priority     LOW_ISR(void);
   122: void Initial(void);
   123: void InitUSART(void);
   124: void InitTMR0(void);
   125: void InitCAN(void);
   126: void DelayNmSec(unsigned int N);
   127: //************************************************************************
   128: 
   129: 
   130: //////////////////////////////////////////////////////////////////////////
   131: //                           全局变量定义                               //
   132: //////////////////////////////////////////////////////////////////////////
   133: static bit CANreceive_flag = 0;            //=1接收到CAN 数据,=0未接收到数据 
   134: static bit USARTreceive_flag = 0;      //=1串口收到数据,=0未收到数据
   135: unsigned char receive_count = 0;           //串口接收数据个数寄存器 
   136: unsigned char send_count = 0;          //串口发送数据个数寄存器 
   137: unsigned char *pointer;                            //串口发送指针 
   138: unsigned char receive232[20];              //串口接收数据数组 
   139: unsigned char send232[20];                         //串口发送数据数组
   140: //************************************************************************
   141: 
   142: 
   143: //////////////////////////////////////////////////////////////////////////
   144: //                             中断函数                                 //
   145: //Function name(函数名称):HI_ISR                                        //
   146: //Create date(创建日期):2007.8.1                                        //
   147: //created by(创建人):夏红峰                                             //
   148: //E-mail:master_0722@sina.com/master_0722@yahoo.com                     //
   149: //Function(函数功能):高优先级中断入口                                   //
   150: //Input(输入参数类型):void                                              //
   151: //Output(输出参考类型):void                                             //
   152: //Return(返回信息):无                                                   //
   153: //////////////////////////////////////////////////////////////////////////
   154: void interrupt HI_ISR(void)
   155: {
   156:  if((RXB0IF == 1)&&(RXB0IE == 1)) //接收到从CAN总线发送过来的数据
   157:    {
   158:         CANreceive_flag = 1;          //置接收到CAN数据
   159:         RXB0IF = 0;                                   //清接收中断标志
   160:         RXB0FUL = 0;                          //打开接收缓冲器接收新信息
   161:    }
   162:  if((TMR0IE == 1)&&(TMR0IF == 1)) //TMR0中断进入,说明串口数据流接收完毕
   163:    {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -