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

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

?? hoarder.c

?? 用PIC16F877實現(xiàn)的基于Hoarder board的C源程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
      order++;
    }
    cf_write('E');
    cf_write('N');
    cf_write('D');
  }
  output_high(BIM_TX);
  ad_on=FALSE;
  purge_adc_buffer();
}

#separate
void send_data_Tim()
{
  unsigned int temp;
  unsigned int bits;
  unsigned int i;
  boolean OldButton, NewButton;
  unsigned int ButtonCount; 
  if (!init_file_write()) return;
  ad_on=TRUE;
  OldButton=Button;
  while (!input(RCIF) && next_file_sector_write()) {
  	ButtonCount=0;
    cf_write('E');
    cf_write('S');
    cf_write('L');
    rtc_read_time();
    cf_write(time[0]);
    cf_write(time[1]);
    cf_write(time[2]);
    cf_write(time[3]);
    cf_write(time[4]);
    cf_write(time[6]);
    for (i=0; i<100; i++) {	  	
      for (temp=0; temp<4; temp++) {
      	do {
      		NewButton=input(BUTTON);
      	  if (!NewButton && OldButton) ButtonCount++;
      	  OldButton=NewButton; 	
        } while (buf_count==0);
        if (buffer[buf_head]>voltage+100) { 
         if (voltage<559) led_green(); else led_red();
        };
        cf_write(buffer[buf_head]);
        bits=(bits<<2)|((buffer[buf_head]>>8)&0x03);
        disable_interrupts(GLOBAL);
        buf_head=(buf_head+1)%buf_size;
        buf_count--;
        enable_interrupts(GLOBAL);
        led_off();
      }
      cf_write(bits);
    }
    cf_write(ButtonCount);
    cf_write(0);
    cf_write(0);
  }
  ad_on=FALSE;
  purge_adc_buffer();
}

#separate
void send_player_info()
{
  unsigned int temp;
  unsigned int bits;
  unsigned long order;
  unsigned int i;
  ad_on=TRUE;
  order=0;
  output_low(BIM_TX);
  while (!input(RCIF)) {
    for (temp=0; temp<5; temp++) putc(0x5A); //total packet length 15 @ 38400; 22 @ 57600
    crc16=0;
    put_crc(0xA5);
    put_crc(order);	
    put_crc(order>>8);	
    for (temp=0; temp<4; temp++) { 	
      while (buf_count==0);
      put_crc(buffer[buf_head]);
      bits=(bits<<2)|((buffer[buf_head]>>8)&0x03);
			//if (temp==1) if (buffer[buf_head]<15) output_low(BIM_TX); else output_high(BIM_TX);
      disable_interrupts(GLOBAL);
      buf_head=(buf_head+1)%buf_size;
      buf_count--;
      enable_interrupts(GLOBAL);
    }
    put_crc(bits);
    putc(crc16);     
    putc(crc16>>8);
    order++;
  }
  output_high(BIM_TX);
  ad_on=FALSE;
  purge_adc_buffer();
}

// Print RTC time
#separate
void print_time()
{
  rtc_read_time();
  printf("%2X/%2X/%2X %2X:%2X:%2X", time[4], time[3], time[6], time[2], time[1], time[0]);
}

// Enable RTC oscillator and counter
#separate
void reset_time()
{
  printf("Time reset");
  rtc_write(7,0);
  rtc_write(0,0);
}

// Print CF information
#separate
void check_cf()
{
  if (!enable_cf()) {
    printf("Invalid disk\n");
  } else {
    printf("Dir 0x%2X%2X%2X%2X\n", dir_start[3], dir_start[2], dir_start[1], dir_start[0]);
    printf("Data sectors 0x%2X%2X%2X%2X\n", data_sectors[3], data_sectors[2], data_sectors[1], data_sectors[0]);
    if (file_valid) {
      printf("File start 0x%2X%2X%2X%2X\n", data_start[3], data_start[2], data_start[1], data_start[0]);
      printf("File size 0x%2X%2X%2X%2X\n", data_file_size[3], data_file_size[2], data_file_size[1], data_file_size[0]);
    } else printf("File not found");
  }  
}

// Set RTC time to 8 bytes received thru serial port
#separate
void set_time()
{
  int i;
  for (i=0; i<8; i++) time[i]=loadc();
  rtc_write(7,0);
  rtc_set_time();
}

// Well...
void print_help()
{
  return;
}

/*
| int fromHex(char hex)
| Preconditions: hex is 1-f
| Postconditions: returned int is 1-16
*/
int fromHex(char hex)
{
	if(hex >= '0' && hex <= '9')
	  return(hex - 48); // 0 --> 0
	
	if(hex >= 'a' && hex <= 'f')
	  return(hex - 87);  // a --> 10
	  
	if(hex >= 'A' && hex <= 'F')
	  return(hex - 55); // A --> 10

  // Still here?  Invalid
	return(20);
	
}

// Issues identify drive command (0xEC) and sends result to serial port
#separate
void identify_drive()
{
  unsigned int cnt;

  while ((cf_task_file_read(7)&0xC0)!=0x40);
  cf_task_file_write(6, 0xA0);   // drive 0
  cf_task_file_write(7, 0xEC);   // identify drive command
  while ((cf_read()&0x80)==0x80);
  cf_set_addr(0);

  for(cnt = 0; cnt < 0xFF; cnt++)
  {
    putc(cf_read());
  }

  for(cnt = 0; cnt < 0xFF; cnt++)
  {
    putc(cf_read());
  }
  putc(cf_read());
  putc(cf_read());
}

// reads sector and sends result to serial port
#separate
void read_sector()
{
  unsigned int cnt;

  sector[0]=loadc();
  sector[1]=loadc();
  sector[2]=loadc();
  sector[3]=loadc();
  cf_start_sector_read();

  for(cnt = 0; cnt < 0xFF; cnt++)
  {
    putc(cf_read());
  }

  for(cnt = 0; cnt < 0xFF; cnt++)
  {
    putc(cf_read());
  }

  putc(cf_read());
  putc(cf_read());
}

// CF debugging:
// read and print CF register
#separate
void read_register() {
  int temp;
  temp=cf_task_file_read(curAddr);
  printf("%d: 0x%2X(%u)\n", curAddr, temp, temp);
}

// CF debugging:
// write CF register
#separate
void write_register() {
  printf("Writing 0x%2X(%u) to addr %u\n", curData, curData, curAddr);
  cf_task_file_write(curAddr, curData);
}

// CF debugging:
// set data to write to CF register
#separate
void set_data() {
  int temp;
  printf("Data (hex): ");
  temp = loadc();
  putc(temp);
  if((temp = fromHex(temp)) > 16) return;
  curData = (temp << 4);
  temp = loadc();
  putc(temp);
  if ((temp = fromHex(temp)) > 16) return;
  curData |= temp;
  printf("\nData 0x%2X(%u)\n", curData, curData);
}

// CF debugging:
// set CF register address
#separate
void set_address() {
  int temp;
  printf("Addr (0-7): ");
  temp=loadc();
  putc(temp);
  temp = fromHex(temp);
  if (temp > 7) return;
  curAddr = temp;
  printf("\nAddr %u\n", curAddr);
}

// Find data file in root directory
// If found returns TRUE and first cluster in global var cluster	
#separate
boolean find_data_file_name() {
  int i, j, k, l;
  boolean match;
  move32(sector, dir_start);
  for (i=0; i<root_entries>>4; i++) {
    cf_start_sector_read();
    for (j=0; j<16; j++) {
      match=true;
      for (k=0; k<11; k++) if (cf_read()!=fname[k]) match=false;
      cf_read_skip(26-11);
      cluster=cf_read()|((long)cf_read()<<8);
      if (match) return true;
      cf_read_skip(32-28);
    }
    inc32(sector); 	
  }
  return false; 
}

// Scan FAT to determine the length of first consecutive cluster chain in the data file
// Returns file chain length (number of clusters) in data_file_size
// Note: Current implementationonly works with consecutive cluster chains; 
//       if file is fragmented only first piece is used 
#separate
void scan_data_file_clusters() { 
  char tmp[4];
  long ptr;
  long c;
  zero32(tmp);
  move32(sector, fat_start);
  tmp[0]=cluster>>8;
  add32(sector, tmp);
  cf_start_sector_read();
  ptr=cluster&0xFF00;
  while (ptr++<cluster) cf_read_skip(2);
  zero32(data_file_size);
  do {
    c=cf_read()|((long)cf_read()<<8);
    inc32(data_file_size);
    if (ptr!=c) return;
    if (!(ptr&0xFF)) {
      inc32(sector);
      cf_start_sector_read();
    }
    ptr++;
  } while (true); 	
}

// Finds data file and determines its length
#separate
boolean find_data_file() { // Find the data file
  if (!find_data_file_name()) return false;
  scan_data_file_clusters();
  return true;
}

#separate
boolean get_disk_configuration() {
// Loads and verifies file system parameters
// Returns 
// TRUE if CF card has correct file system and data file           
// FALSE if something is not quite right
//	
// File system requirements:
// - Valid Master Boot Record
// - First partition formatted with FAT16
// - Data file with predetermined name on consecutive clusters 
// get_disk_configuration() checks file system records and 
// attempts to find the data file.
//
// To create file on CF card use PC program CF.EXE
  int tmp; // Yeah! This is an integer variable called tmp 
// Start with sector 0 -- Master Boot Record	
  zero32(sector);
  cf_start_sector_read();
// Skip to partition table and get partition 1 info  
  cf_read_skip(0);
  cf_read_skip(0xC2);
  tmp=cf_read(); // disk_system_id -- type of partition
  if (!((tmp==1)||(tmp==4)||(tmp==6)||(tmp==14))) return FALSE; // 1-FAT12, 2-FAT16, 6-BIGFAT16, 14-BIGFATLB  
// Load start sector number of partition 1 
  cf_read_skip(3);  
  sector[0]=cf_read();
  sector[1]=cf_read();
  sector[2]=cf_read();
  sector[3]=cf_read();
// Read Boot Record (start sector) of Partition 1  
  cf_start_sector_read();
  cf_read_skip(0x0B);
// Bytes/sector must be 0x200 (512)  
  if (cf_read()!=0) return FALSE;
  if (cf_read()!=2) return FALSE;
// And now let's do sectors_per_cluster=cf_read(). Ok?  
  sectors_per_cluster=cf_read();
// FAT (file allocation table) start  
  zero32(fat_start);
  fat_start[0]=cf_read();	
  fat_start[1]=cf_read();	
  add32(fat_start, sector);
// I get depressed when number of FATs is not 2  
  if (cf_read()!=2) return FALSE;
// Get number of entries in the root directory  
  *(&root_entries)=cf_read();
  *(&root_entries+1)=cf_read();
// Well. Reading number of data sectors.
  zero32(data_sectors);
  data_sectors[0]=cf_read();
  data_sectors[1]=cf_read();
  cf_read_skip(1);
// Where is root directory?  
  zero32(dir_start);
  dir_start[0]=cf_read();	
  dir_start[1]=cf_read();	
  add32(dir_start, dir_start);
  add32(dir_start, fat_start);
// Where are data clusters?  
  zero32(data_start);
  *data_start=root_entries>>4;
  add32(data_start, dir_start);
  if (is_zero32(data_sectors)) { 
  // If data_sectors is 0 we got it in a wrong place
    cf_read_skip(0x20-0x18);
    data_sectors[0]=cf_read();
    data_sectors[1]=cf_read();
    data_sectors[2]=cf_read();
    data_sectors[3]=cf_read();
    cf_read_skip(0x3A-0x24);
  } else cf_read_skip(0x3A-0x18);
  if (cf_read()!=0x36) return FALSE; // file system id must be FAT16
  sub32(data_sectors, data_start);
  add32(data_sectors, sector);
// Enable Microdrive write cache... Send me e-mail for more information  
  enable_microdrive_write_cache();
// File is valid if we can find valid file.  
  file_valid=find_data_file();  
  cf_idle(100);
  if (file_valid) { 
    // convert data file size from clusters to sectors
    // Note: sectors per cluster must be power of 2	
    tmp=sectors_per_cluster;
    while (!(tmp&1)) {
      shift_left(data_file_size,4,0);
      tmp>>=1;
    }
    // calculate first sector of data file
    zero32(sector);
    sector[0]=(cluster-2);
    sector[1]=(cluster-2)>>8;
    tmp=sectors_per_cluster;
    while (!(tmp&1)) {
      shift_left(sector,4,0);
      tmp>>=1;
    }
    // and now data_start points to first sector of data file
    add32(data_start, sector);
    return true;
  } else {
    // File not found: let's get idle and depressed	
    return false;
  } 
}

// Tests IR tag reader from Borg lab 
#separate
void tag_test()
{
  char tag[4];
  long tagtime;
  putI2C(0xA0, 2);
  I2C_start();
  I2C_write(0xA0 | I2CREAD);
  tag[0]=i2c_read();
  tag[1]=i2c_read();
  tag[2]=i2c_read();
  tag[3]=i2c_read();
  tagtime=i2c_read();
  tagtime=tagtime<<8|i2c_read();
  i2c_read(0);
  I2C_stop();
  printf("%2X%2X%2X%2X ", tag[0], tag[1], tag[2], tag[3]); 
  putI2C(0xA0, 3);
  I2C_start();
  I2C_write(0xA0 | I2CREAD);
  tag[0]=i2c_read();
  tag[1]=i2c_read();
  tag[2]=i2c_read();
  tag[3]=i2c_read();
  tagtime=i2c_read();
  tagtime=tagtime<<8|i2c_read();
  i2c_read(0);
  I2C_stop();
  printf("%2X%2X%2X%2X\n", tag[0], tag[1], tag[2], tag[3]); 
}

// reads ADC channel and sends result
#separate
void send_adc_sample(int channel)
{
  long sample;
  set_adc_channel(channel);
  sample=read_adc();
  putc(sample);
  putc(sample>>8);
}

// I2C command processor
// ib - I2C start
// ie - I2C stop
// ir - I2C read with ACK
// i0 - I2C read without ACK
// iw - I2C write
// ip - I2C poll
#separate
void access_i2c()
{
  switch (loadc()) {
    case 'b': i2c_start(); break;
    case 'e': i2c_stop(); break;
    case 'r': putc(i2c_read()); break;
    case '0': putc(i2c_read(0)); break;
    case 'w': i2c_write(loadc()); break;
    case 'p': putc(i2c_poll()); break;
  }
}

#separate
void read_mithril_sensor()
{
  byte addr;
  addr=loadc();
  putI2C(addr, loadc());
  I2C_start();
  I2C_write(addr | I2CREAD);
  putc(i2c_read());
  putc(i2c_read());
  putc(i2c_read());
  putc(i2c_read(0));
  I2C_stop();
}

// Command processor
#separate
boolean process_command()
{
  if (!input(RCIF)) return FALSE;
  cmd = loadc();

  /* Echo the character */
  if ((cmd>='0')&&(cmd<='7')) {
    send_adc_sample(cmd-'0');
  } else
  if (cmd=='i') access_i2c(); else
  if (cmd=='m') read_mithril_sensor();
  else {
    putc(cmd);
    puts("");
    switch (cmd) {
      case 0xA5: reprogram(); break;
      case '+': print_time(); break;
      case '-': reset_time(); break;
      case '=': check_cf(); break;
      case '*': identify_drive(); break;
      case '$': read_sector(); break;
      case '@': cf_idle(100); break;
      case '.': cf_sleep(); break;
      case ',': cf_standby(); break;
      case 't': set_time(); break;
      case '(': putc(rtc_read(loadc())); break;
      case '!': cf_reset(); break;
      case 'd': set_data(); break;
      case 'a': set_address(); break;
      case 'r': read_register(); break;
      case 'w': write_register(); break;
      #ifdef Rochester
      case '?': tag_test(); break;
      #endif
      case '#':
        #ifdef GAME
        send_player_info();
        #endif
        #ifdef Rochester
        save_audio();
        #endif
        #ifdef ESL
        send_data_bim();
        #endif
        #ifdef Tim
        send_data_Tim();
        #endif
        break;
    }
    print_prompt();
  }  
  return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影一级片| 欧美午夜电影一区| 欧美日韩你懂得| 欧美一二区视频| 一区二区三区美女| 国产在线麻豆精品观看| 91福利社在线观看| 久久久久久97三级| 热久久国产精品| 在线观看亚洲精品| 国产日韩欧美亚洲| 麻豆视频观看网址久久| 欧美日韩免费视频| 国产精品免费丝袜| 国产精品一区二区久久不卡| 欧美视频一区二区三区四区| 国产精品青草久久| 国产在线精品不卡| 日韩美女视频在线| 日本成人在线看| 欧美日韩黄色影视| 一区二区三区在线视频播放| 成人亚洲一区二区一| 久久一留热品黄| 九一久久久久久| 日韩一区二区电影在线| 午夜精品福利久久久| 欧美性视频一区二区三区| 国产精品不卡视频| www.日韩精品| 亚洲欧洲日韩在线| 91色综合久久久久婷婷| 亚洲欧洲制服丝袜| 日本精品视频一区二区三区| 国产精品高潮呻吟| 99久久99久久免费精品蜜臀| 亚洲国产精品99久久久久久久久| 国产精品99精品久久免费| 26uuu欧美| 高清久久久久久| 国产精品每日更新| 91色.com| 三级成人在线视频| 日韩午夜电影在线观看| 毛片基地黄久久久久久天堂| 精品国产电影一区二区| 国产在线国偷精品产拍免费yy| 精品国产污网站| 风间由美一区二区av101| 国产精品系列在线| 色婷婷av一区二区三区软件| 亚洲第一狼人社区| 日韩三级高清在线| 国产999精品久久| 亚洲精品久久嫩草网站秘色| 欧美艳星brazzers| 蜜桃一区二区三区在线观看| 久久亚洲综合色一区二区三区| 国产精品一卡二| 亚洲自拍另类综合| 日韩亚洲欧美综合| 福利电影一区二区三区| 亚洲人成电影网站色mp4| 欧美精选一区二区| 国产乱对白刺激视频不卡| 亚洲欧洲日韩女同| 91麻豆精品国产91久久久使用方法 | 欧美丰满高潮xxxx喷水动漫 | 亚洲乱码一区二区三区在线观看| 欧美日产在线观看| 国产成人欧美日韩在线电影| 一区二区三区中文在线观看| 日韩一区二区高清| 91成人国产精品| 国产乱码精品一区二区三区五月婷| 国产精品视频一二三区| 欧美乱妇23p| 91欧美一区二区| 精品一区二区免费在线观看| 亚洲天堂免费看| 久久综合中文字幕| 欧美三级三级三级爽爽爽| 高潮精品一区videoshd| 午夜精品久久久久久久| 亚洲欧洲一区二区在线播放| 日韩欧美在线不卡| 色综合视频一区二区三区高清| 麻豆成人免费电影| 亚洲午夜在线观看视频在线| 中文字幕乱码亚洲精品一区| 91精品国产高清一区二区三区| 97久久人人超碰| 国产电影精品久久禁18| 日本不卡一二三区黄网| 亚洲精品菠萝久久久久久久| 亚洲人妖av一区二区| 日韩欧美aaaaaa| 在线不卡中文字幕播放| 91福利在线观看| 色综合久久中文综合久久97| 国产+成+人+亚洲欧洲自线| 另类小说一区二区三区| 性做久久久久久| 亚洲尤物在线视频观看| 亚洲色图一区二区| 久久久亚洲欧洲日产国码αv| 91精品在线一区二区| 欧美日韩中文国产| 欧美三级乱人伦电影| 色综合久久久久久久久| 成人a区在线观看| 成人国产亚洲欧美成人综合网| 精品一区二区三区影院在线午夜| 日韩和欧美的一区| 日韩成人av影视| 蜜臀av一级做a爰片久久| 日日摸夜夜添夜夜添亚洲女人| 亚洲大片免费看| 日本欧美久久久久免费播放网| 天天av天天翘天天综合网色鬼国产| 亚洲女同一区二区| 亚洲一区二区欧美激情| 亚洲第一狼人社区| 日本视频一区二区三区| 久久 天天综合| 国产98色在线|日韩| 国产宾馆实践打屁股91| 成人精品视频.| 色综合网色综合| 欧美日韩国产a| 日韩三级视频在线看| 久久久久久亚洲综合影院红桃| 中文av一区二区| 亚洲国产精品麻豆| 美女在线一区二区| 国产精品一区久久久久| 99在线精品一区二区三区| 色狠狠色噜噜噜综合网| 欧美精品v日韩精品v韩国精品v| 精品日韩一区二区| 国产精品午夜电影| 亚洲高清免费在线| 国产在线精品免费av| 色综合久久九月婷婷色综合| 欧美日韩一区在线观看| 2023国产精华国产精品| 自拍偷拍国产精品| 日韩国产精品久久| 成人精品免费视频| 欧美日韩精品高清| 久久久美女艺术照精彩视频福利播放| 国产精品美女久久久久aⅴ| 亚洲福利视频一区二区| 国产高清成人在线| 2023国产精品自拍| 91精品国产综合久久香蕉麻豆| 中文字幕一区在线观看视频| 亚洲麻豆国产自偷在线| 免费成人美女在线观看.| 懂色av一区二区三区免费观看| 欧美亚洲动漫精品| 久久久久久久久久久久久夜| 一区二区三区色| 国产精品亚洲一区二区三区妖精| 欧美自拍丝袜亚洲| 久久久精品蜜桃| 日韩精品成人一区二区在线| 国产成人免费视频网站高清观看视频| 在线观看日韩一区| 欧美高清一级片在线观看| 偷拍一区二区三区| 91毛片在线观看| 久久久久99精品国产片| 午夜精品久久久久久久久| 成人激情黄色小说| 久久这里只有精品视频网| 五月婷婷激情综合| 日本伦理一区二区| 国产精品免费网站在线观看| 麻豆精品国产91久久久久久| 欧美色欧美亚洲另类二区| 中文字幕不卡在线观看| 极品美女销魂一区二区三区免费| 在线视频一区二区三区| 国产精品久久久99| 国产aⅴ综合色| 久久综合九色综合欧美亚洲| 热久久久久久久| 欧美福利电影网| 亚洲bt欧美bt精品777| 色婷婷狠狠综合| 一区二区三区国产豹纹内裤在线| 丁香婷婷综合色啪| 久久精品亚洲乱码伦伦中文| 九色porny丨国产精品| 日韩精品一区二区三区四区| 日韩精品亚洲一区二区三区免费| 欧美日韩一区二区三区四区五区| 亚洲综合免费观看高清完整版在线| 91色九色蝌蚪|