📄 pic18f458_can_rs232_picc8.35.lst
字号:
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 + -