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

📄 try.c

📁 用51单片机控制SJA1000通信的一个小程序
💻 C
字号:
#include<stdio.h>        
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#include<string.h>
#define  uchar  unsigned char
#define  uint   unsigned int

#define  NBTR0  0x30
#define  NBTR1  0x31
#define  AMRBF  0x32
#define  ACRBF  0x36
#define  TXBF   0x40
#define  MODE   0x0F00
#define  CMR    0x0F01
#define  SR     0x0F02
#define  IR     0x0F03
#define  IER    0x0F04
#define  BTR0   0x0F06
#define  BTR1   0x0F07
#define  OCR    0x0F08
#define  ALC    0x0F0B
#define  ECC    0x0F0C
#define  EWLR   0x0F0D
#define  RXERR  0x0F0E
#define  TXERR  0x0F0F
#define  TXB    0x0F10
#define  RXB    0x0F10
#define  ACR    0x0F10
#define  AMR    0x0F14
#define  RMC    0x0F1D
#define  RBSA   0x0F1E
#define  CDR    0x0F1F

sbit RES=P1^0;
sbit lamp=P1^1;
/*****************************DELAY*******************************/
void delay(uint i)
 {uint j;
  for(j=0;j<i;j++);
 }

/***************************SJA1000_INIT**************************/
void sja1000_init(void)
 {uchar clear;
  delay(1000);
  XBYTE[MODE]=0x0D;
  XBYTE[CDR]=0x88;
  XBYTE[IER]=0x0d;
  XBYTE[AMR]=0xff;
  XBYTE[AMR+1]=0xff;
  XBYTE[AMR+2]=0x0;
  XBYTE[AMR+3]=0x0;
  XBYTE[ACR]=0xea;
  XBYTE[ACR+1]=0x20;
  XBYTE[BTR0]=0x00;
  XBYTE[BTR1]=0x1c;
  XBYTE[OCR]=0xAA;
  XBYTE[RBSA]=0x0;
  XBYTE[TXERR]=0x0;
  clear=XBYTE[ECC];
  XBYTE[MODE]=0x0C;
 }
/*************************receive array data*****************************/
void received()
   {uint    i;
    uchar  acc,bcc,c;
	uchar  a[14];
	   bcc=XBYTE[SR];
       while(bcc&0xc3)
		{
	     if(bcc&0x80)
		   {
		     acc=XBYTE[IR];
			 XBYTE[MODE]=0x08;
			 delay(1000);  ///to wait for BUS entering into normal mode
			 continue;
		   }
	    
	       else if(bcc&0x08)
            {
	          XBYTE[CMR]=0x0c;
			  continue;
  	        }
	       else if(bcc&0x01)
		      {
 	           lamp=0;
               a[0]=XBYTE[RXB];
	           c=a[0];
	           c=c%16;
	           c=c+4;
               for(i=1;i<c;i++)
	              {
		            a[i]=XBYTE[RXB+i];
		          }
	           XBYTE[CMR]=0x04;
 			  }
			  bcc=XBYTE[SR];
		  }
		  	  acc=XBYTE[ALC];
			  acc=XBYTE[ECC];
   }
/*************************STATE Analyse*****************************/
void sstate()
    {  uchar acc;
	   acc=0xff;
       while(acc&0x10)
	    {
	     acc=XBYTE[SR];
		}
	     acc=0xff;
         while(!(acc&0x08))
	      {
	       acc=XBYTE[SR];
	      }
		  acc=0xff;
	      while(!(acc&0x04))
	       {
	        acc=XBYTE[SR];
	       }
		    
     }
/*******************************send data**********************************/
void send_data()
   {  
       
       XBYTE[TXB]=0x07;
       XBYTE[TXB+1]=0xEA;
       XBYTE[TXB+2]=0x20;
       XBYTE[TXB+3]=0xA3;
	   XBYTE[TXB+4]=0xA3;
	   XBYTE[TXB+5]=0xA3;
	   XBYTE[TXB+6]=0xA3;
	   XBYTE[TXB+7]=0xA3;
	   XBYTE[TXB+8]=0xA3;
	   XBYTE[TXB+9]=0xA3;
	   XBYTE[CMR]=0x010;
	   
   }
/********************************MAIN.C**********************************/
void  main(void)
  { 
  	delay(1000);
    sja1000_init();	
	XBYTE[CMR]=0x04;	
	sstate();
	send_data();
	lamp=0;
    received();
	delay(1000);
 }	  

⌨️ 快捷键说明

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