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

📄 串口isp下载器avr910的 c 原代码.txt

📁 串口ISP下载器AVR910的 C 原代码.txt
💻 TXT
📖 第 1 页 / 共 4 页
字号:
   putc(0x00); 
} 

/*--------------------------------------------------------------------------*/ 
/* 僨僶僀僗僼儔僌傪庢摼                                                     */ 
/* unsigned char GetDeviceFlag(unsigned char device)                        */ 
/*   device  : 僨僶僀僗僐乕僪                                               */ 
/*   <RETURN>: 僨僶僀僗僼儔僌(彂偒崬傒張棟惂屼僼儔僌)                       */ 
/*--------------------------------------------------------------------------*/ 
unsigned char GetDeviceFlag(unsigned char device) 
{ 
   unsigned char   code; 
   unsigned char   flag; 
   unsigned char   i; 
    
   flag = 0; 
   for (i = 0; code = PRG_RDB(&device_info[i].code); i++) { 
      if (code == device) { 
         flag = PRG_RDB(&device_info[i].flag); 
         break; 
      } 
   } 
   return flag; 
} 

/*--------------------------------------------------------------------------*/ 
/* 彂偒崬傒傪僒億乕僩偟偰偄傞僨僶僀僗偐妋擣偡傞                             */ 
/* unsigned char SupportedDevice(unsigned char device)                      */ 
/*   device  : 僨僶僀僗僐乕僪                                               */ 
/*   <RETURN>: TRUE=僒億乕僩偟偰偄傞, FALSE=僒億乕僩偟偰偄側偄              */ 
/*--------------------------------------------------------------------------*/ 
unsigned char SupportedDevice(unsigned char device) 
{ 
   unsigned char   code; 
   unsigned char   i; 
   unsigned char   rc; 
    
   rc = FALSE; 
   for (i = 0; code = PRG_RDB(&device_info[i].code); i++) { 
      if (code == device) { 
         rc = TRUE; 
         break; 
      } 
   } 
    
   return rc; 
} 


/*--------------------------------------------------------------------------*/ 
/* SPI 僋儘僢僋僷儖僗張棟                                                   */ 
/* void SPI_Clock(void)                                                     */ 
/*--------------------------------------------------------------------------*/ 
void SPI_Clock(void) 
{ 
   delay(2); 
   sbi(PORTB, TARGET_SCK); 
   delay(5); 
   cbi(PORTB, TARGET_SCK); 
   delay(3); 
} 

/*--------------------------------------------------------------------------*/ 
/* SPI 彂偒崬傒張棟                                                         */ 
/* unsigned char SPI_write(unsigned char c)                                 */ 
/*   c       : 1僶僀僩偺SPI憲怣僨乕僞                                       */ 
/*   <RETURN>: 憲怣帪偵庴怣偟偨1僶僀僩偺SPI庴怣僨乕僞                       */ 
/*--------------------------------------------------------------------------*/ 
unsigned char SPI_write(unsigned char c) 
{ 
   unsigned char   i, rx; 
    
   LED_On(); 
    
   i = 0x80; 
   rx = 0x00; 
   do { 
      if (c & i) { 
         sbi(PORTB, TARGET_MOSI); 
      } 
      else { 
         cbi(PORTB, TARGET_MOSI); 
      } 
      if (bit_is_set(PINB, TARGET_MISO)) { 
         rx |= i; 
      } 
      SPI_Clock(); 
      i >>= 1; 
   } while (i); 
    
   LED_Off(); 
    
   return rx; 
} 

/*--------------------------------------------------------------------------*/ 
/* SPI 撉傒弌偟張棟                                                         */ 
/* unsigned char SPI_read(void)                                             */ 
/*   <RETURN>: 1僶僀僩偺SPI庴怣僨乕僞                                       */ 
/*--------------------------------------------------------------------------*/ 
inline unsigned char SPI_read(void) 
{ 
   return SPI_write(0x00); 
} 


/*--------------------------------------------------------------------------*/ 
/* SPI 弶婜壔                                                               */ 
/* void SPI_Init(int device)                                                */ 
/*   device  : 僨僶僀僗僐乕僪                                               */ 
/*--------------------------------------------------------------------------*/ 
void SPI_Init(unsigned char device) 
{ 
   /* I/O億乕僩傪弶婜忬懺偵儕僙僢僩            */ 
   outp(0xff, PORTD); 
   InitDDRD(); 
    
   outp(0x00, PORTB);         /* 慡偰偺弌椡僺儞傪LOW   */ 
   InitDDRB();            /* (偙偙偱僞乕僎僢僩儕僙僢僩偝傟傞)*/ 
    
   /* 僨僶僀僗僐乕僪傪婎偵10斣僺儞偺婡擻傪慖戰偟丄僞乕僎僢僩偺揹尮傪搳擖   */ 
   switch (device) { 
   case S1200A: 
   case S1200B: 
   case S1200C: 
   case S1200D: 
   case S2313A: 
      /* AT90S1200, AT90S1200A, AT90S2313 偼 10pin 偑GND   */ 
      sbi(PORTB, GND_SELECT);      /* 10pin = GND, 20pin dev is selected */ 
      cbi(PORTD, _20PIN_DET); 
      break; 

   case S4433A: 
   case S2333A: 
   case TN28: 
   case m8: 
   case m8b: 

      /* S4433A, S2333A, AT38, ATmega8, ATmega8b       */ 
      cbi(PORTD, _28PIN_DET);                 /*  28pin dev = H*/ 
      break; 

   case S4414A: 
   case m8515: 
   case m8515b: 
   case m161: 
   case m161b: 
   case S4434: 
   case S8535: 
   case m32:    
   case m16: 
   case m16b:    
      /* S4414A, m8515/ b, m161/b,S4434,S8535,ATmega32,ATmega16/b,    */ 
      cbi(PORTD, _40PIN_DET);                 /*  40pin dev = H*/ 
      break; 

   case S2323A: 
   case TN11: 
   case TN10: 
   case TN12: 
   case TN15: 
      /* S2323A, ATtiny11, ATtiny10, ATtiny12, ATtiny15    */ 
      sbi(PORTB, _8PIN_H);         /* 8pin dev = H*/ 
      cbi(PORTD, _8PIN_DET);         /* 8pin dev = H*/ 
      break; 

   default: 
      /* 懠偼10pin 偑VCC偐SPI偵偼柍娭學  (Others='H')      */ 
      sbi(PORTB, VCC_SELECT);         /* 10pin = VCC   */ 
   } 
   sbi(PORTB, VCC_ENABLE);            /* Power On   */ 
    
   /* 儕僙僢僩偵惓僷儖僗傪擖傟偰妋幚偵SPI儌乕僪偵堏峴偡傞      */ 
   wait_1ms(100);               /* 100ms懸婡   */ 
   SetReset(); 
   wait_1ms(50);               /* 50ms懸婡   */ 
   ClrReset(); 
   wait_1ms(100);               /* 100ms懸婡   */ 
    
   wait_1ms(50);               /* 50ms懸婡   */ 
    
   /* 僾儘僌儔儉嫋壜                  */ 
   if (0x20 <= device && device <= 0x7F) { 
      /* 僨僶僀僗僐乕僪 0x20乣0x7F 偼SPI捠怣偺摨婜偑昁梫   */ 
      int      i; 
      for (i = 0; i < 32; i++) {   /* 嵟戝偱32夞傑偱帋峴偡傞   */ 
         SPI_write(0xAC); 
         SPI_write(0x53); 
         if (SPI_write(0x00) == 0x53) { 
            SPI_write(0x00); 
            break; 
         } 
         SPI_write(0x00); 
         SPI_Clock(); 
      } 
   } 
   else { 
      /* 僨僶僀僗僐乕僪 0x01乣0x1F 偼SPI捠怣偺摨婜傪偟側偄         */ 
      /* 仸 AT90S1200宯偑奩摉偡傞偑僨乕僞僔乕僩偱偼摨婜偑昁梫側敜偩偑丄   */ 
      /*    傾僾儕働乕僔儑儞僲乕僩偺avr910.asm偱偼摨婜偟偰偄側偄丅      */ 
      /*    幚嵺偵帋偡偲丄摨婜傪峴偆偲媡偵捠怣弌棃側偄柾條丅         */ 
      SPI_write(0xAC); 
      SPI_write(0x53); 
      SPI_write(0x00); 
      SPI_write(0x00); 
   } 
   wait_1ms(5);                  /* 5ms懸婡   */ 
} 



/*--------------------------------------------------------------------------*/ 
/* 儊僀儞張棟                                                               */ 
/* int main(void)                                                           */ 
/*--------------------------------------------------------------------------*/ 
int main(void) 
{ 
   unsigned char   device = 0;         /* 僨僶僀僗僐乕僪   */ 
   unsigned char   dev_flags = 0;      /* 彂偒崬傒張棟惂屼僼儔僌   */ 
   union U_ADDR { 
      unsigned short   word; 
      unsigned char   byte[2]; 
   } addr;               /* 彂偒崬傒傾僪儗僗抣儚乕僋   */ 
   char   twd_flash = TWD_FLASH; 
   char   twd_eeprom = TWD_EEPROM; 
    
   addr.word = 0x0000;         /* 彂偒崬傒傾僪儗僗傪0斣抧偵弶婜壔   */ 
    
   /* 僴乕僪僂僃傾傪弶婜壔                     */ 
   LED_Off(); 
   InitDDRB(); 
   outp(0xff, PORTD); 
   InitDDRD(); 
   InitUART(); 
   InitTMR0(); 
    
   /* 婲摦帪偺LED揰柵                     */ 
   LED_On(); 
   wait_1ms(500); 
   LED_Off(); 
   wait_1ms(500); 
   LED_On(); 
   wait_1ms(500); 
   LED_Off(); 
    
   /* 儊僀儞儖乕僾                        */ 
   while (1) { 
      char   c, w, i; 

⌨️ 快捷键说明

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