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