亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? canadc.c

?? C8051F020控制的SJA1000can總線芯片的驅動程序
?? C
字號:
#pragma  REGPARMS
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "c8051f020.h"
#include "can20.h"
sfr16 DP       = 0x82;                 // data pointer
sfr16 TMR3RL   = 0x92;                 // Timer3 reload value
sfr16 TMR3     = 0x94;                 // Timer3 counter
sfr16 ADC0     = 0xbe;                 // ADC0 data
sfr16 ADC0GT   = 0xc4;                 // ADC0 greater than window
sfr16 ADC0LT   = 0xc6;                 // ADC0 less than window
sfr16 RCAP2    = 0xca;                 // Timer2 capture/reload
sfr16 T2       = 0xcc;                 // Timer2
sfr16 RCAP4    = 0xe4;                 // Timer4 capture/reload
sfr16 T4       = 0xf4;                 // Timer4
sfr16 DAC0     = 0xd2;                 // DAC0 data
sfr16 DAC1     = 0xd5;                 // DAC1 data

#define BAUDRATE     115200            // Baud rate of UART in bps
#define SYSCLK       22118400          // SYSCLK frequency in Hz
#define SAMPLE_RATE  50000             // Sample frequency in Hz
#define INT_DEC      256               // integrate and decimate ratio

unsigned char xdata SendBuffer[13];
unsigned char xdata GetBuffer[13];
long result; 
void config (void) {

//Local Variable Definitions
	WDTCN = 0x07;	// Watchdog Timer Control Register
    WDTCN = 0xDE;   // Disable WDT
    WDTCN = 0xAD;

	XBR0 = 0xEF;	// XBAR0: Initial Reset Value
	XBR1 = 0x07;	// XBAR1: Initial Reset Value
	XBR2 = 0x44;	// XBAR2: Initial Reset Value
// Port configuration (1 = Push Pull Output)
    P0MDOUT = 0x1D; // Output configuration for P0 
    P1MDOUT = 0x01; // Output configuration for P1 
    P2MDOUT = 0x03; // Output configuration for P2 
    P3MDOUT = 0x00; // Output configuration for P3 
    P74OUT = 0xff;  // Output configuration for P4-7
    P1MDIN = 0xFF;  // Input configuration for P1
// View port pinout

		// The current Crossbar configuration results in the 
		// following port pinout assignment:
		// Port 0
		// P0.0 = UART TX0        (Push-Pull Output)
		// P0.1 = UART RX0        (Open-Drain Output/Input)
		// P0.2 = SPI Bus SCK     (Push-Pull Output)
		// P0.3 = SPI Bus MISO    (Push-Pull Output)
		// P0.4 = SPI Bus MOSI    (Push-Pull Output)
		// P0.5 = SPI Bus NSS     (Open-Drain Output/Input)
		// P0.6 = SMBus SDA       (Open-Drain Output/Input)
		// P0.7 = SMBus SCL       (Open-Drain Output/Input)

		// Port 1
		// P1.0 = UART TX1        (Push-Pull Output)(Digital)
		// P1.1 = UART RX1        (Open-Drain Output/Input)(Digital)
		// P1.2 = PCA CEX0        (Open-Drain Output/Input)(Digital)
		// P1.3 = PCA CEX1        (Open-Drain Output/Input)(Digital)
		// P1.4 = PCA CEX2        (Open-Drain Output/Input)(Digital)
		// P1.5 = PCA CEX3        (Open-Drain Output/Input)(Digital)
		// P1.6 = PCA CEX4        (Open-Drain Output/Input)(Digital)
		// P1.7 = PCA ECI         (Open-Drain Output/Input)(Digital)
					
		// Port 2		
		// P2.0 = CP0             (Push-Pull Output)
		// P2.1 = CP1             (Push-Pull Output)
		// P2.2 = T0              (Open-Drain Output/Input)
		// P2.3 = /INT0           (Open-Drain Output/Input)
		// P2.4 = GP I/O          (Open-Drain Output/Input)
		// P2.5 = GP I/O          (Open-Drain Output/Input)
		// P2.6 = GP I/O          (Open-Drain Output/Input)
		// P2.7 = GP I/O          (Open-Drain Output/Input)

		// Port 3		
		// P3.0 = GP I/O          (Open-Drain Output/Input)
		// P3.1 = GP I/O          (Open-Drain Output/Input)
		// P3.2 = GP I/O          (Open-Drain Output/Input)
		// P3.3 = GP I/O          (Open-Drain Output/Input)
		// P3.4 = GP I/O          (Open-Drain Output/Input)
		// P3.5 = GP I/O          (Open-Drain Output/Input)
		// P3.6 = GP I/O          (Open-Drain Output/Input)
		// P3.7 = GP I/O          (Open-Drain Output/Input)

    EMI0CF = 0x24;    // External Memory Configuration Register
	EMI0CN=0x00;
    EMI0TC=0x01;
}
void SYSCLK_Init (void)
{
   int xdata i;                         // delay counter
   OSCXCN = 0x67;                      // start external oscillator with
                                       // 22.1184MHz crystal
   for (i=0; i < 256; i++) ;           // XTLVLD blanking interval (>1ms)
   while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector
}
void UART0_Init (void)
{
   SCON0   = 0x50;                     // SCON0: T1 mode 1, 8-bit UART, enable RX
                                      
   TMOD    = 0x21;                     // TMOD: timer 1, mode 2, 8-bit reload
                                       // T0 16 bit Timer
   T2CON &= 0x0cf;                     //select T1 as  baudrate 
   TH1    = -(SYSCLK/BAUDRATE/16);     // set Timer1 reload value for baudrate
   TR1    = 1;                         // start Timer1
   CKCON |= 0x10;                      // Timer1 uses SYSCLK as time base
   PCON  |= 0x80;                      // SMOD00 = 1
// ES0=1;
}
unsigned char Can_Init(void)
{
 unsigned char tt;
 unsigned int i;
 P3=0xff;
 for(i=0;i<1000;i++);
 P3=0x00;
 for(i=0;i<1000;i++);
 P3=0xff;
 for(i=0;i<1000;i++);
 ModeControlReg= RM_RR_Bit;
 tt=ModeControlReg;
 ClockDivideReg=0x88;
 InterruptEnReg=0xff;
 BusTiming0Reg= 0x03; //100 K
 BusTiming1Reg=0x2f;
 AcceptCode0Reg=0x57;
 AcceptCode1Reg=0x00;
 AcceptCode2Reg=0xaa;
 AcceptCode3Reg=0x55;
 AccepMask0Reg=0xff;
 AccepMask1Reg=0xff;
 AccepMask2Reg=0xff;
 AccepMask3Reg=0xff;
 
 RxBufstartAdr=0;
 TxErrCountReg=0;
 RxErrCountReg=0;
 ErrCodeCapReg=0;
 OutControlReg=0x1a;
 ModeControlReg=AFM_Bit;
 
 tt=StatusReg;
 while(tt==0x10)
 tt=StatusReg; 
 return tt;
}
unsigned char WriteCan(unsigned int a,unsigned int b)
{
 unsigned char * xdata tt;
 unsigned int i;
 unsigned char tt1,count;
 count=11;
 
 tt1=StatusReg; 
 if((tt1&RS_Bit)!=0x00)return 0;
 tt1=StatusReg;
 if((tt1&TCS_Bit)==0x00)return 0;
 tt=&TxFramInFo;
 SendBuffer[0]=0x08;
 SendBuffer[1]=0x01;
 SendBuffer[2]=0x08;
 SendBuffer[3]=a;
 SendBuffer[4]=b;
 SendBuffer[5]=0x0;
 SendBuffer[6]=0x0;
 SendBuffer[7]=0x0;
 SendBuffer[8]=0x0;
 SendBuffer[9]=0x0;
 SendBuffer[10]=0x0;
 for(i=0;i<count;i++)
 {*tt=SendBuffer[i];
  tt++;
 }
 CommandReg=TR_Bit;
 return 1;
}

void INTE0_ISR (void) interrupt 0
{
  unsigned char tt1;
  unsigned char * xdata tt;
  unsigned int i,count;
  tt1=InterruptReg;
  if((tt1&0x04)!=0)
  {
   tt1=StatusReg;
   if((tt1&0x80)!=0)
   ModeControlReg=AFM_Bit;
   return;
  }
 
  if((tt1&0x08)!=0)
  {CommandReg=0x0c;
   return;
  }
  if((tt1&0x01)!=0)
  {tt=&RxFramInFo;
   count=(*tt&0x0f);
   if((*tt&0x80)==0)
   count+=3;
   else
   count+=5;
   for(i=0;i<count;i++)
   {GetBuffer[i]=*tt;
    tt++;
   }
  
  CommandReg=RRB_Bit;
  }
  tt1=ArbLostCapReg;
  tt1=ErrCodeCapReg; 
  return;
}

void ADC0_Init (void)
{
   ADC0CN = 0x05;                      // ADC0 disabled; normal tracking
                                       // mode; ADC0 conversions are initiated 
                                       // on overflow of Timer3; ADC0 data is
                                       // left-justified
   REF0CN = 0x07;                      // enable temp sensor, on-chip VREF,
                                       // and VREF output buffer
   AMX0SL = 0x0f;                      // Select TEMP sens as ADC mux output
   ADC0CF = (SYSCLK/2500000) << 3;     // ADC conversion clock = 2.5MHz
   ADC0CF |= 0x01;                     // PGA gain = 2

   EIE2 |= 0x02;                       // enable ADC interrupts
}

//-----------------------------------------------------------------------------
// Timer3_Init
//-----------------------------------------------------------------------------
//
// Configure Timer3 to auto-reload at interval specified by <counts> (no 
// interrupt generated) using SYSCLK as its time base.
//
void Timer3_Init (int counts)
{
   TMR3CN = 0x02;                      // Stop Timer3; Clear TF3;
                                       // use SYSCLK as timebase
   TMR3RL  = -counts;                  // Init reload values
   TMR3    = 0xffff;                   // set to reload immediately
   EIE2   &= ~0x01;                    // disable Timer3 interrupts
   TMR3CN |= 0x04;                     // start Timer3
}

//-----------------------------------------------------------------------------
// Interrupt Service Routines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// ADC0_ISR
//-----------------------------------------------------------------------------
//
// ADC0 end-of-conversion ISR 
// Here we take the ADC0 sample, add it to a running total <accumulator>, and
// decrement our local decimation counter <int_dec>.  When <int_dec> reaches
// zero, we post the decimated result in the global variable <result>.
//
void ADC0_ISR (void) interrupt 15
{
   static unsigned int_dec=INT_DEC;    // integrate/decimate counter
                                       // we post a new result when
                                       // int_dec = 0
   static long accumulator=0L;         // here's where we integrate the
                                       // ADC samples             

   AD0INT = 0;									// clear ADC conversion complete
                                       // indicator

	accumulator += ADC0;                // read ADC value and add to running
                                       // total
   int_dec--;                          // update decimation counter

   if (int_dec == 0) {                 // if zero, then post result
      int_dec = INT_DEC;               // reset counter
      result = accumulator >> 8;
      accumulator = 0L;                // reset accumulator
   }
}

main()
{
 unsigned long temperature;                   // temperature in hundredths of a
                                     // degree C
 unsigned int  temp_int, temp_frac;
 SYSCLK_Init();
 config();
 UART0_Init();
 Can_Init();
 Timer3_Init (SYSCLK/SAMPLE_RATE);   // initialize Timer3 to overflow at
                                       // sample rate

 ADC0_Init ();                       // init ADC
 AD0EN = 1;                          // enable ADC
 EA=1;
 EX0=1;
 IP=0x01;
 while(1)
 {
  temperature = result;
 // calculate temperature in hundredths of a degree
  temperature = temperature - 42380;
  temperature = (temperature * 100L) / 156;
  temp_int = temperature / 100;
  temp_frac = temperature - (temp_int * 100);
  if(WriteCan(temp_int,temp_frac)==0x01)
  {SBUF0=0xAA;
   while(TI0==0);
   TI0=0;
   SBUF0=0x55;
   while(TI0==0);
   TI0=0;
  }
 
 }
}




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品黄色片免费大全| 精品无人区卡一卡二卡三乱码免费卡| 亚洲一线二线三线久久久| 性感美女久久精品| 国内欧美视频一区二区 | 中文字幕中文字幕一区| 亚洲欧美乱综合| 亚洲国产裸拍裸体视频在线观看乱了| 美女网站在线免费欧美精品| 成人激情动漫在线观看| 欧美日韩电影在线| 久久久久青草大香线综合精品| 亚洲男同性恋视频| 老色鬼精品视频在线观看播放| 成人毛片老司机大片| 欧美日韩一区二区三区免费看| 欧美精品一区二区精品网| 专区另类欧美日韩| 经典三级在线一区| 99久久国产综合精品麻豆| 欧美一区二区三区性视频| 中文字幕av免费专区久久| 亚洲成人精品影院| 国产91露脸合集magnet| 欧美日韩不卡在线| 国产精品私人自拍| 麻豆精品国产91久久久久久| 91日韩在线专区| 精品久久免费看| 亚洲一区二区五区| 成人激情黄色小说| 国产成人亚洲综合a∨婷婷图片| 国产精品美女久久久久久久久| 亚洲国产精品久久人人爱| 粉嫩嫩av羞羞动漫久久久| 56国语精品自产拍在线观看| 中文字幕在线播放不卡一区| 久久国产精品72免费观看| 色狠狠一区二区三区香蕉| 久久久美女艺术照精彩视频福利播放| 午夜影院久久久| 91视频xxxx| 国产精品少妇自拍| 日本麻豆一区二区三区视频| 在线观看视频一区二区| 国产精品伦一区二区三级视频| 麻豆精品在线看| 制服丝袜中文字幕一区| 亚洲精品国产第一综合99久久 | 欧美人伦禁忌dvd放荡欲情| 亚洲视频在线一区观看| 国产精品小仙女| 欧美一二三区在线| 五月婷婷欧美视频| 日本福利一区二区| 国产精品成人一区二区三区夜夜夜| 国内精品久久久久影院薰衣草| 91麻豆精品国产91久久久更新时间 | 亚洲二区在线观看| 91蝌蚪国产九色| 中文字幕一区不卡| www.综合网.com| 欧美激情在线一区二区三区| 国内精品不卡在线| 精品国产1区2区3区| 免费高清在线一区| 日韩视频一区二区在线观看| 青草国产精品久久久久久| 欧美日韩二区三区| 丝袜美腿亚洲一区| 91精品国产免费| 日韩国产欧美三级| 337p亚洲精品色噜噜| 亚洲不卡一区二区三区| 精品视频一区二区三区免费| 亚洲国产成人高清精品| 欧美无砖专区一中文字| 亚洲一区二区综合| 欧美人狂配大交3d怪物一区| 午夜精品成人在线视频| 欧美日韩国产123区| 亚洲国产成人高清精品| 91.成人天堂一区| 日韩av中文在线观看| 欧美一卡2卡3卡4卡| 捆绑调教美女网站视频一区| 精品三级在线看| 精品一区二区在线免费观看| 精品国产乱码久久久久久免费| 黄页视频在线91| 久久久久99精品国产片| 大白屁股一区二区视频| 中文字幕在线一区二区三区| 99久久国产免费看| 亚洲国产综合人成综合网站| 精品1区2区3区| 日韩av一级片| 久久精品这里都是精品| www.性欧美| 一区二区三区免费看视频| 欧美无砖专区一中文字| 男人的j进女人的j一区| 久久精品亚洲国产奇米99| 不卡视频在线观看| 一区2区3区在线看| 欧美精品久久天天躁| 久久精品国产在热久久| 国产精品美女一区二区| 在线观看亚洲a| 久久国产日韩欧美精品| 中文字幕精品三区| 国产精品乱码一区二区三区软件| 91网站在线观看视频| 亚洲国产美女搞黄色| 欧美精品一区二区三区蜜桃视频| 成人综合婷婷国产精品久久蜜臀| 亚洲激情图片qvod| 日韩欧美不卡在线观看视频| 岛国一区二区在线观看| 亚洲综合图片区| 精品三级在线观看| 91一区在线观看| 蜜桃av一区二区三区| 国产精品久久久久久久久免费丝袜 | 在线观看亚洲一区| 韩国女主播成人在线| 亚洲乱码中文字幕| 精品国产三级电影在线观看| 色综合天天在线| 美国欧美日韩国产在线播放| 亚洲人成网站在线| 精品国产制服丝袜高跟| 91免费观看视频| 久久66热re国产| 一区二区免费视频| 久久色.com| 欧美三级乱人伦电影| 国产精品综合一区二区| 亚洲h在线观看| 国产精品国产三级国产专播品爱网| 欧美老肥妇做.爰bbww视频| 成人18视频在线播放| 日韩 欧美一区二区三区| 中文字幕在线观看不卡| 日韩精品一区二区在线| 在线观看不卡一区| 国产91丝袜在线观看| 日韩精彩视频在线观看| 亚洲欧美一区二区三区极速播放 | 国产精品一区二区免费不卡 | 欧美亚洲一区二区三区四区| 国产精品影音先锋| 日日夜夜精品视频天天综合网| 中文字幕+乱码+中文字幕一区| 日韩午夜中文字幕| 在线看国产日韩| 成人午夜视频在线| 蜜臀av性久久久久蜜臀aⅴ | 91福利社在线观看| 成人污视频在线观看| 久久丁香综合五月国产三级网站| 午夜一区二区三区视频| 一区二区三区四区在线播放 | 粉嫩aⅴ一区二区三区四区五区 | 欧美精品一区二区高清在线观看 | 韩国三级电影一区二区| 午夜精品福利一区二区三区av| 亚洲欧美一区二区不卡| 国产精品日产欧美久久久久| 久久先锋影音av| 日韩一区二区三区在线| 欧美日韩夫妻久久| 91久久精品国产91性色tv| a级精品国产片在线观看| 国产精品一区不卡| 国内精品不卡在线| 久久精品国产成人一区二区三区 | 欧美成人a视频| 欧美高清激情brazzers| 在线看不卡av| 欧美最猛黑人xxxxx猛交| 91精品91久久久中77777| 91天堂素人约啪| 不卡av在线网| 91香蕉视频污| 一本色道久久综合亚洲91| 91在线视频网址| 972aa.com艺术欧美| 成人18视频日本| 91麻豆精品一区二区三区| 波多野洁衣一区| 99精品一区二区三区| 97精品国产97久久久久久久久久久久| 播五月开心婷婷综合| 91亚洲男人天堂| 在线精品视频一区二区三四 | 亚洲另类春色国产| 亚洲一区二区三区小说| 亚洲国产精品久久一线不卡| 天堂在线一区二区|