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

📄 can_self.lst

📁 CAN总线上挂接两个节点
💻 LST
📖 第 1 页 / 共 2 页
字号:
 176          ///////////////////////////////////////////////
 177          //函数:rxd_deal
 178          //说明:接收处理程序;检测接收标志状态位,
 179          //		如果置位则进行接收处理
C51 COMPILER V6.12  CAN_SELF                                                               06/19/2008 15:31:11 PAGE 4   

 180          //入口:无
 181          //返回:无
 182          ///////////////////////////////////////////////
 183          void rxd_deal(void)
 184          {
 185   1          if( RXD_flag )	//RXD_flag=0说明无数据可以接收,RXD_flag=1说明有数据可以接收	
 186   1          {
 187   2              EA = 0;		//关闭CPU中断
 188   2              RXD_flag = 0;	//RXD_flag清零,以便下次查询
 189   2              Rxd_data = RX_buffer[5];	//CAN总线要接收的数据,也是要在数码管3-4位置显示的数据
 190   2              EA = 1;		//重新开启CPU中断
 191   2           }
 192   1      }
 193          
 194          
 195          ///////////////////////////////////////////////
 196          //函数:txd_deal
 197          //说明:发送处理程序;检测发送标志状态位,
 198          //		如果置位则进行发送数据处理
 199          //入口:无
 200          //返回:无
 201          ///////////////////////////////////////////////
 202          void txd_deal(void)
 203          {
 204   1          if( TXD_flag )	//若TXD_flag=1,要求进行数据的发送处理
 205   1          {
 206   2              _nop_();
 207   2              TXD_flag = 0;	//RXD_flag清零,以便下次查询
 208   2              can_txd();		//发送数据帧
 209   2              _nop_();
 210   2              _nop_();
 211   2          }	//发送数据帧后,SJA1000将产生接收中断
 212   1      }
 213          
 214          
 215          
 216          ///////////////////////////////////////////////
 217          //函数:can_txd
 218          //说明:发送扩展数据帧
 219          //入口:无
 220          //返回:无
 221          ///////////////////////////////////////////////
 222          void can_txd(void)
 223          {
 224   1          uchar state;
 225   1          uchar TX_buffer[ N_can ] ;	//N_can=13,TX_buffer数组为待传送的数据帧
 226   1      
 227   1      	//初始化标识码头信息
 228   1          TX_buffer[0] = 0xc8;	//.7=0--扩展帧;.6=1--远程传送请求; 
 229   1          TX_buffer[1] = 0x11;	//本帧信息的ID
 230   1          TX_buffer[2] = 0x22;
 231   1          TX_buffer[3] = 0x33;
 232   1          TX_buffer[4] = 0x44;
 233   1      
 234   1      	//初始化发送数据单元
 235   1          TX_buffer[5]  = Txd_data;	//发送的第1个字节数据,也是数码管要显示的数据(计数结果)
 236   1          TX_buffer[6]  = 0x22;	//2
 237   1          TX_buffer[7]  = 0x33;	//3
 238   1          TX_buffer[8]  = 0x44;	//4
 239   1          TX_buffer[9]  = 0x55;	//5
 240   1          TX_buffer[10] = 0x66;	//6
 241   1          TX_buffer[11] = 0x77;	//7
C51 COMPILER V6.12  CAN_SELF                                                               06/19/2008 15:31:11 PAGE 5   

 242   1          TX_buffer[12] = 0x88;	//8
 243   1      
 244   1      	//初始化数据信息
 245   1          EA = 0; //关中断
 246   1      
 247   1      	//查询SJA1000是否处于接收状态,当SJA1000不处于接收状态时才可继续执行
 248   1          do
 249   1          {
 250   2              state = SR;		//SR为SJA1000的状态寄存器
 251   2              LED_RED = 0;	//点亮LED1
 252   2          }
 253   1          while( state & 0x10 );  //SR.4=1 正在接收,等待
 254   1          
 255   1      	//查询SJA1000是否处于发送完毕状态
 256   1          do
 257   1          {
 258   2              state = SR;		
 259   2              LED_RED = 0;	//点亮LED1
 260   2          }
 261   1          while(!(state & 0x08)); //SR.3=0,发送请求未处理完,等待直到SR.3=1
 262   1      
 263   1      	//查询发送缓冲器状态
 264   1          do
 265   1          {
 266   2              state = SR;		
 267   2              LED_RED = 0;	//点亮LED1
 268   2          }
 269   1          while(!(state & 0x04)); //SR.2=0,发送缓冲器被锁。等待直到SR.2=1
 270   1      
 271   1          LED_RED = !LED_RED;	//熄灭LED1
 272   1          LED_GRE = !LED_GRE;	//点亮LED2
 273   1      
 274   1      	//将待发送的一帧数据信息存入SJA1000的相应寄存器中
 275   1          TBSR0  = TX_buffer[0];
 276   1          TBSR1  = TX_buffer[1];
 277   1          TBSR2  = TX_buffer[2];
 278   1          TBSR3  = TX_buffer[3];
 279   1          TBSR4  = TX_buffer[4];
 280   1          TBSR5  = TX_buffer[5];
 281   1          TBSR6  = TX_buffer[6];
 282   1          TBSR7  = TX_buffer[7];
 283   1          TBSR8  = TX_buffer[8];
 284   1          TBSR9  = TX_buffer[9];
 285   1          TBSR10 = TX_buffer[10];
 286   1          TBSR11 = TX_buffer[11];
 287   1          TBSR12  = TX_buffer[12];
 288   1      
 289   1          CMR = 0x01;	//置位发送请求
 290   1          EA  = 1; 	//重新开启中断
 291   1      }
 292          
 293          ///////////////////////////////////////////////
 294          //函数:delay
 295          //说明:延时子函数
 296          //入口:uchar time:延时时间time us
 297          //返回:无
 298          ///////////////////////////////////////////////
 299          void delay(uchar time)
 300          {
 301   1          while(time--);
 302   1      }
 303          
C51 COMPILER V6.12  CAN_SELF                                                               06/19/2008 15:31:11 PAGE 6   

 304          ///////////////////////////////////////////////
 305          //函数:led_show
 306          //说明:数码管显示函数
 307          //		注意控制P2口的高4位时,不要影响P2口的低4位值
 308          //入口:uchar wela:		wela=1--高两位显示发送数据
 309          //						wela=0--低两位显示接收数据
 310          //		uchar number:	要显示的数据
 311          //返回:无
 312          ///////////////////////////////////////////////
 313          void led_show(uchar wela,uchar number)  
 314          {
 315   1          uchar digit;
 316   1          uchar temp;
 317   1      
 318   1      	if(wela)	//高位显示,即数码管1-2
 319   1      	{
 320   2      		temp = 0x7b;	//temp=01111011B
 321   2      	}
 322   1      	else		//低位显示,即数码管3-4
 323   1      	{
 324   2      		temp = 0xde;	//temp=11011110B
 325   2      	}
 326   1      
 327   1      //数码管个位显示
 328   1      	digit = number%10;
 329   1          P0 = led[digit];
 330   1      	P2 = (temp | 0x0f) & P2;			//开个位
 331   1      	delay(5);
 332   1      	P2 = 0xff;	
 333   1      	P0 = 0xff;			//关闭个位
 334   1      //数码管十位显示
 335   1      	number /= 10;
 336   1      	digit = number%10;
 337   1          P2 = ((temp << 4) | 0x0f) & P2;		//开十位
 338   1      	P0 = led[digit];
 339   1      	delay(5);
 340   1      	P2 = 0xff;		//关闭十位
 341   1          P0 = 0xff;
 342   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    526    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     28      21
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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