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

📄 pic18f458_can_rs232_picc8.35.lst

📁 使用微芯公司的PIC18F458单片机
💻 LST
📖 第 1 页 / 共 3 页
字号:
   164:         TMR0IF = 0;                   //TMR0中断标志位清零
   165:         TMR0ON = 0;                   //禁止TMR0
   166:         //如果接收到的数据流为14个数据,同时第一个数据为0x72
   167:         if((receive_count == 14)&&(receive232[0] == 0x72))  
   168:            USARTreceive_flag = 1;         //置接收到数据标志位
   169:         receive_count = 0;                        //接收计数器清0
   170:    }
   171: }
   172: //************************************************************************
   173: 
   174: 
   175: //////////////////////////////////////////////////////////////////////////
   176: //                             中断函数                                 //
   177: //Function name(函数名称):LOW_ISR                                       //
   178: //Create date(创建日期):2007.8.1                                        //
   179: //created by(创建人):夏红峰                                             //
   180: //E-mail:master_0722@sina.com/master_0722@yahoo.com                     //
   181: //Function(函数功能):低优先级中断入口                                   //
   182: //Input(输入参数类型):void                                              //
   183: //Output(输出参考类型):void                                             //
   184: //Return(返回信息):无                                                   //
   185: //////////////////////////////////////////////////////////////////////////
   186: void interrupt low_priority     LOW_ISR(void)
   187: {
   188:  if((RCIF == 1)&&(RCIE == 1))     //如果串口接收到数据
   189:    {
   190:         TMR0ON = 1;                        //使能TMR0
   191:         TMR0 = TMR0data;                   //初始值重新赋值
   192:         receive232[receive_count] = RCREG; //接收数据并存储后,RCIF自动清零
   193:         receive_count++;                                   //接收计数器加1         
   194:    }    
   195: }
   196: //************************************************************************
   197: 
   198: 
   199: //////////////////////////////////////////////////////////////////////////
   200: //                             子函数                                   //
   201: //Function name(函数名称):Initial                                       //
   202: //Create date(创建日期):2007.8.1                                        //
   203: //created by(创建人):夏红峰                                             //
   204: //E-mail:master_0722@sina.com/master_0722@yahoo.com                     //
   205: //Function(函数功能): IO口及其他寄存器初始化                            //
   206: //Input(输入参数类型):void                                              //
   207: //Output(输出参考类型):void                                             //
   208: //Return(返回信息):无                                                   //
   209: //////////////////////////////////////////////////////////////////////////
   210: void Initial(void)
   211: {
   212:  PORTA = 0x00;
   213:  LATA = 0x00; 
   214:  ADCON1 = 0x07;                      //关闭模拟通道,使之为数字通道
   215:  PORTB = 0x00;   
   216:  LATB = 0x00;  
   217:  PORTC = 0x00;
   218:  LATC = 0x00;
   219:  TRISC0 = 1;                 //S2按键输入
   220:  TRISC1 = 0;                 //L2发光管输出
   221:  PORTD = 0x00;
   222:  LATD = 0x00;
   223:  CMCON =0x07;                //关闭比较器
   224:  TRISD0 = 1;                 //S1按键输入
   225:  TRISD1 = 0;                 //L1发光管输出
   226:  //测试程序是否在运行用...
   227:  RD1 = 1;                        //点亮L0
   228:  DelayNmSec(500);            //延时500ms
   229:  RD1 = 0;                    //熄灭L0
   230:  RC1 = 1;                        //点亮L1
   231:  DelayNmSec(500);           //延时500ms
   232:  RC1 = 0;                    //熄灭L1    
   233:  NOP();  
   234: }
   235: //************************************************************************
   236: 
   237: 
   238: //////////////////////////////////////////////////////////////////////////
   239: //                             子函数                                   //
   240: //Function name(函数名称):InitUSART                                     //
   241: //Create date(创建日期):2007.8.1                                        //
   242: //created by(创建人):夏红峰                                             //
   243: //E-mail:master_0722@sina.com/master_0722@yahoo.com                     //
   244: //Function(函数功能): 串口初始化,波特率:9600bps                        //
   245: //Input(输入参数类型):void                                              //
   246: //Output(输出参考类型):void                                             //
   247: //Return(返回信息):无                                                   //
   248: //////////////////////////////////////////////////////////////////////////
   249: void InitUSART(void)
   250: {
   251:  TRISC6 = 0;                 //RC6-TX
   252:  TRISC7 = 1;                 //RC7-RX
   253:  SPBRG = ((Fosc/BAUDRATE)/64)-1; //8位,异步,低速
   254:  TXSTA = 0b00100010;    //异步模式,8位发送,发送使能,低速
   255:  RCSTA = 0b10010000;    //使能串口,8位接收,使能连续接收
   256:  RCIF = 0;              //串口接收中断标志清零
   257:  RCIE = 1;              //使能串口接收中断
   258:  RCIP = 0;              //低优先级
   259:  NOP(); 
   260: }
   261: //************************************************************************
   262: 
   263: 
   264: //////////////////////////////////////////////////////////////////////////
   265: //                             子函数                                   //
   266: //Function name(函数名称):InitTMR0                                      //
   267: //Create date(创建日期):2007.8.1                                        //
   268: //created by(创建人):夏红峰                                             //
   269: //E-mail:master_0722@sina.com/master_0722@yahoo.com                     //
   270: //Function(函数功能):用于确定串口数据流的长度                           //
   271: //Input(输入参数类型):void                                              //
   272: //Output(输出参考类型):void                                             //
   273: //Return(返回信息):无                                                   //
   274: //////////////////////////////////////////////////////////////////////////
   275: void InitTMR0(void)
   276: {
   277:  //禁止TMR0,8位定时器/计数器,内部指令周期时钟,使用前分频器,1:128分频
   278:  T0CON = 0b01010110;    
   279:  TMR0IF = 0;            //TMR0中断标志位清零
   280:  TMR0IE = 1;            //TMR0中断使能
   281:  TMR0IP = 1;            //TMR0中断优先级高
   282:  TMR0 = TMR0data;       //延时3个串口接收到的字节
   283:  NOP();
   284: }
   285: //************************************************************************
   286: 
   287: 
   288: //////////////////////////////////////////////////////////////////////////
   289: //                             子函数                                   //
   290: //Function name(函数名称):InitCAN                                       //
   291: //Create date(创建日期):2007.8.1                                        //
   292: //created by(创建人):夏红峰                                             //
   293: //E-mail:master_0722@sina.com/master_0722@yahoo.com                     //
   294: //Function(函数功能): CAN初始化                                         //
   295: //Input(输入参数类型):void                                              //
   296: //Output(输出参考类型):void                                             //
   297: //Return(返回信息):无                                                   //
   298: //////////////////////////////////////////////////////////////////////////
   299: void InitCAN(void)
   300: {
   301:  TRISB2 = 0;                      //设置CANRX-RB3输入,CANTX-RB2输出
   302:  TRISB3 = 1;
   303:  CANCON = 0x80;                                   //请求配置方式 
   304:  while((CANSTAT&0x80) != 0x80);   //等待进入配置模式    
   305:  
   306:  //设置CAN波特率125kbps,在Fosc=20MHz时,Tbit=8us,假设BRP=09h
   307:  //则Tq=[2*(1+BRP)]/Fosc=2*(1+9)/(20MHz)=1us
   308:  //normal bit rate=8Tq,SJW=00,Sync_Seg=1Tq,Prog_Seg=1Tq
   309:  //Phase_Seg1=3Tq,Phase_Seg2=3Tq
   310:  //总线过滤器用于唤醒
   311:  BRGCON1 = 0x09;
   312:  BRGCON2 = 0x90;        
   313:  BRGCON3 = 0x42;
   314:         
   315:  RXB0CON = 0x60;                 //接收所有信息(包括错误信息),这样就不需要设置过滤屏蔽器了
   316:  RXB1CON = RXB0CON;      //做同样处理
   317:  
   318:  CIOCON  = 0x00;             //当“隐性”时,CANTX引脚驱动到高阻状态,禁止CAN捕捉
   319: 
   320:  CANCON = 0x00;                                    //请求正常方式 
   321:  while((CANSTAT&0x80) != 0x80);    //等待进入正常模式
   322:  
   323:  //初始化CAN的中断,PIR3为CAN的外围中断标志寄存器 
   324:  RXB0IF = 0;            //CAN接收缓冲器0中断标志位清零
   325:  RXB0IE = 1;            //使能CAN接收缓冲器0的接收中断 
   326:  RXB0IP = 1;            //接收缓冲器0的接收中断为高优先级       

⌨️ 快捷键说明

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