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

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

?? hoarder.c

?? 用C語言讀寫CF卡程序 非常不錯的東西
?? C
?? 第 1 頁 / 共 3 頁
字號:
// Hoarder board software http://vadim.www.media.mit.edu/Hoarder/Hoarder.htm
// Copyright (C) 2001-2002 MIT Media Laboratory
// Concept, design, and programming by Vadim Gerasimov <vadim@media.mit.edu>
// Code fragments by Paul Covell, Matthew Drake
// Ideas contributed by 
// Paul Covell, Ted Selker, Sandy Pentland, Richard DeVaul, 
// Brian Silverman, Tim Hirzel, Josh Weaver, Ivan Chardin 

#include <16F877.H>
#list
#include "Math32.c"

// Configuration bits for initial programming
#fuses   HS, NOPROTECT, WDT, PUT, BROWNOUT, NOLVP

// 20 MHz clock
#use delay (clock=20000000)

// up to 57.6kBaud (recommended 38.4) to be compatible with BiM2 transceiver 
// up to 115,2kBaud for cable connection
#use rs232 (baud=115200, xmit=PIN_C6, rcv=PIN_C7)

// Disable automatic TRIS programming for all ports
#use fast_io(a)  
#use fast_io(b)  
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)

// for MIThril bus and I2C-enabled add-on boards
#use I2C (master, sda=PIN_C4, scl=PIN_C3, address=0xc0, SLOW)

// define for initial PIC programming to include the serial programming function
#define InitialProgram

// define only one: Rochester, ESL, GAME, or Tim
//#define Rochester
#define ESL // Every Sign of Life collect/broadcast
//#define GAME // Ball game broadcast
//#define Tim // Tim Hirzel's project data collection

// define OldSAK for boards earlier than NOV 2001
//#define OldSAK

// define DelayedWrite to use with IBM MicroDrive (TM)
//#define DelayedWrite

// CompactFlash pins
// 3 address lines (all others grounded)
  #define CF_A0      PIN_B0
  #define CF_A1      PIN_B1 
  #define CF_A2      PIN_B2
// data flow strobe signals
  #define CF_N_OE    PIN_B3
  #define CF_N_WE    PIN_B4
// card detect signal (high if card is not present)  
  #define CF_CD1     PIN_B7
  #define cf_out     input(CF_CD1)
// CF power switch  
#ifdef OldSAK
  #define CF_POWER   PIN_C0
#else
  #define CF_POWER   PIN_B6
#endif

// LED pins  
  #define CF_LED0    PIN_C1
  #define CF_LED1    PIN_C2

// EKG amplifier enable for BIOMETRICS add-on module   
  #define EKG_EN     PIN_C5

// Real time clock signals
// two lines shared with CF data bus
  #define RTC_RST    PIN_B5	   
  #define RTC_CLK    PIN_D0	   
  #define RTC_IO     PIN_D1	

// BiM transceiver pins TX-, RX-enable and Carrier Detect
// TX, RX data pins connected to UART
#ifdef OldSAK
  #define BIM_TX     PIN_E0   
  #define BIM_RX     PIN_E1   
  #define BIM_CD     PIN_E2 
#else
  #define BIM_TX     PIN_E2   
  #define BIM_RX     PIN_E1   
  #define BIM_CD     PIN_C0 
#endif  

#define RBIF     0x58
#define RCIF	   0x65
#define OERR	   0xC1
#define CREN	   0xC4

// Event button -- Tim Hirzel's project
#define BUTTON	 PIN_A4

#byte   SPBRG	   = 0x99
#byte   TXSTA	   = 0x98
#byte   PORTA	   = 0x05	
#byte   PORTB	   = 0x06	
#byte   PORTC	   = 0x07	

#byte CF_DATA   = 0x08  /* Port D */
#byte CF_DATA_TRIS = 0x88 /* Port D TRIS */

// 1-in 0-out
#define TRIS_A     0xFF  // 11111111 
#define TRIS_B     0x80  // 10000000 

#ifdef OldSAK
  #define TRIS_C     0xF8  // 11111000
  #define TRIS_C_SLEEP 0x80  // 10000000
  #define TRIS_E 0x04  // 0000x100
#else
  #define TRIS_C     0xD9  // 11011001 
  #define TRIS_C_SLEEP 0x81  // 10000001
  #define TRIS_E 0x01  // 0000x001
#endif

#define TRIS_D_IN  0xFF  // 11111111
#define TRIS_D_OUT 0x00  // 00000000 
#define TRIS_D_RTC_OUT 0xFC
#define TRIS_D_RTC_IN  0xFE

// Function Prototypes 
void print_prompt();
#separate void save_audio();
#separate void save_data();
#separate void send_data();
#separate void send_data_bim();
#separate void send_data_Tim();
#separate void send_player_info();
void led_off();
void led_red();
void led_green();
#separate boolean process_command();
void print_help();
int fromHex(char hex);
void set_default_signals();
void cf_task_file_read(int addr);
void cf_task_file_write(int addr, int data);
byte rtc_read(int addr);
void rtc_write(int addr, int data);
#separate boolean get_disk_configuration();
void cf_set_addr(int addr);


// Global variables

// Data file name on CF card
char const fname[12] = "ESL     DAT";
// A/D buffer
#define buf_size 32
long buffer[buf_size];
int buf_head;
int buf_count;
int ad_count;
boolean ad_on;
boolean audio;
long voltage;

int curData;  // Holds data to be sent
int curAddr;  // Holds address to be read/written

char sector[4]; // Current CF sector number for Read/Write operations
boolean disk_valid; // CF seems ok
boolean file_valid; // Data file seems ok

// FAT (file allocation table) variables
char data_start[4];
char fat_start[4]; // first sector of first copy of FAT
char dir_start[4]; // first sector of root directory
char data_sectors[4]; // number of data sectors
char data_file_size[4];
char sector_counter[4]; // to count down number of unused sectors in data file
byte sectors_per_cluster;
long root_entries; // number of entries in root directory
long cluster;

// Real time clock buffer
char time[8]; // hold all 8 time bytes from RTC chip
// Time in ms after last reset (if timer int set to 1kHz)
char ms[4]; // millisecond timer

char cmd; // last command character
long write_pos; // write position in current sector
long crc16; 


// self-programming function
// reprograms PIC thru serial port
// host sends pieces of code as:
// 1 byte header 0xAB
// 2 bytes start address
// 2 bytes (N) number of words to program
// N words (N*2 bytes) program words
// 
// after each program word function sends back 
// 1 if word programmed successfully
// 0 if not
//
// send non 0XAB byte to exit the cycle and restart Hoarder
//
#ifdef InitialProgram	
#ORG 0x1F00, 0x1FFF
void self_program()
{
  long addr, count, val, i;
  disable_interrupts(GLOBAL);
  while(getc()==0xAB) {
    *(&addr)=getc();
    *(&addr+1)=getc();
    *(&count)=getc();
    *(&count+1)=getc();
    for (i=0; i<count; i++) {
      *(&val)=getc();
      *(&val+1)=getc();
      if (val==read_program_eeprom(addr)) putc(1);
      else {
        write_program_eeprom(addr, val);
        if (val==read_program_eeprom(addr)) putc(1);
        else putc(0);
      }
      addr++;
      restart_wdt();
    }
  }
  #asm
  movlw    0 
  movwf	   0x0A
  goto     0		 	
  #endasm 
}
#endif

// jumps to self_program()
// normally called from command processor
// Note: if you want serial programming to work make sure you can always interrupt 
//       your program from serial port and have a command that calls this function  
#inline
void reprogram()
{
#ifdef InitialProgram
  self_program();
#else
  #asm
  movlw	0x18 
  movwf	0x0A
  goto 	0x700		 	
  #endasm 
#endif
}

// timer function
// increments ms counter
// performs timed AD conversion
// can do a lot of other neat stuff!
// normally interrupts 1000 times per second
// Note: in multisensor boards configuration can be set to 8000 times/sec
//       to sample audio
#int_timer2
void timer2() {
  static int i;
// resets watchdog timer
// Note: if you disable timer interrupt do this periodically somewhere else
//       otherwise WDT will reset PIC in ~2 seconds   
  restart_wdt();
//  inc32(ms);
  if (++ms[0]==0) if (++ms[1]==0) if (++ms[2]==0) ++ms[3]; 
  if (ad_on) {
#ifdef Tim
    if (ad_count==3) voltage=read_adc();
    if (ad_count==0)
#endif  	
    if (/*(ad_count==3) && */(buf_count<buf_size)) {
      i=(buf_head+buf_count)&0x1F;
      buffer[i]=read_adc();
      buf_count++;	
    }
    // else overflow  
    if (audio) ad_count=0;
    else {
      ad_count++;
      if (ad_count>3) ad_count=0;
    }
//#ifdef GAME   
//    if (ad_count==1) set_adc_channel(4); else set_adc_channel(ad_count);	
//#else
    set_adc_channel(ad_count);	
//#endif
  }
}

// Resets AD buffer
void purge_adc_buffer()
{
  buf_head=0;
  buf_count=0;
  set_adc_channel(0);
  ad_count=0;
}

// Green-Red... Happy?
void blink_happy()
{
  while (TRUE) {
    led_green();
    delay_ms(250); 
    led_red();
    delay_ms(250); 
  }
}

void blink_sad()
{
  while (TRUE) {
    led_red();
    delay_ms(250); 
    led_off();
    delay_ms(250); 
  }
}

// Turn off CF
void disable_cf()
{
  set_default_signals();
}

// exit if CF is plugged; otherwise sleep waking up on WDT to check for CF; 
void take_a_nap()
{
  if (input(CF_POWER)) {
    output_low(CF_POWER);
    delay_ms(10);
  }	
  disable_cf();
  do {
    while(cf_out) {	
      led_red();
      delay_ms(1);	
      CF_DATA=0;
      SET_TRIS_D(TRIS_D_OUT);
      set_tris_c(TRIS_C_SLEEP);
      led_off(); 	
      sleep();
    }   
    delay_ms(500);
  } while(cf_out); // make sure CF is still in after 0.5 sec 
  output_low(CF_POWER); // power up
  output_high(CF_N_OE);
  output_high(CF_N_WE);
  SET_TRIS_D(TRIS_D_IN);
  led_green();	
  delay_ms(250);
  led_off(); 	
  // Check CF card configuration
  disk_valid=get_disk_configuration();
}

boolean enable_cf()
{
  // sleep until CF is present
  take_a_nap();
  return TRUE; 
}


#define I2CWRITE 0b00000000
#define I2CREAD  0b00000001

void putI2C(int device, int data) 
{
  i2c_start();
  i2c_write(device);
  i2c_write(data);
  i2c_stop();
}

int getI2C(int device) 
{
  i2c_start();
  i2c_write(device | I2CREAD);
  _return_ = i2c_read();
  i2c_stop();
}

void send_hello()
{
  while (!input(RCIF)) printf("Hello! ");
}
  
void main()
{
  setup_adc_ports(A_ANALOG); // port A all analog inputs
  setup_adc(ADC_CLOCK_DIV_32); // set ADC clock
  setup_psp(PSP_DISABLED);

  set_default_signals(); // preset some of the signals

  SET_TRIS_A(TRIS_A); // set TRIS values
  SET_TRIS_B(TRIS_B);
  SET_TRIS_C(TRIS_C);
  SET_TRIS_D(TRIS_D_IN);
  SET_TRIS_E(TRIS_E);

  port_b_pullups(TRUE); // Should be enabled; Used for B6 and B7 (CF power and CF detection)
  setup_timer_2(T2_DIV_BY_4, 250, 5); // default timer: 1mS interval @ 20 MHz; see timer2()
  zero32(ms); // zero millisecond counter
  ad_on=FALSE;
  audio=FALSE;
  purge_adc_buffer();

//  enable_interrupts(INT_RB);  
  enable_interrupts(INT_TIMER2);  
  enable_interrupts(GLOBAL);
  
  disable_cf();
//  set_default_signals();
//  send_hello();
#ifdef GAME  
  puts("GAME");
  send_player_info();
#else  
//  take_a_nap();
#endif
#ifdef Rochester  
  puts("Roch");
  delay_ms(5000);
  save_audio();
#endif  
#ifdef ESL  
  puts("HackFest v odno slovo");
//  send_data_bim();
#endif  
#ifdef Tim  
  puts("Tim");
  send_data_Tim();
#endif  
  print_prompt();	
  while(TRUE)
  {
    led_off();
    process_command();
    led_red();	
    led_green();
    led_green();
//    if (cf_out) take_a_nap();
  }
}

void set_default_signals()
{
  // default RTC signals
  output_low(RTC_RST);
  output_low(RTC_CLK);
  output_low(RTC_IO); 
  // default CF power down signals
  output_low(CF_N_OE);
  output_low(CF_N_WE);
  cf_set_addr(0);
  output_high(CF_POWER);
  // default radio modem signals
  output_high(BIM_TX); // do not transmit
  output_high(BIM_RX); // do not recive
  // disable EKG amplifiers if present
  output_high(EKG_EN);
  // presumption of invalidity
  disk_valid=false;
}

// reset CF
#separate
void cf_reset()
{
  output_high(CF_POWER);
  delay_ms(500);
  output_low(CF_POWER);
}

// set CF port address (see task file in CF specs)
// Horder uses ports 0-7 to control CF
void cf_set_addr(int addr)
{
  output_bit(CF_A0, bit_test(addr, 0));
  output_bit(CF_A1, bit_test(addr, 1));
  output_bit(CF_A2, bit_test(addr, 2));
}

// write 1 byte into current CF port
void cf_write(int data)
{
  // set data	
  CF_DATA_TRIS = TRIS_D_OUT;
  CF_DATA = data;
  // Strobe write signal
  OUTPUT_LOW(CF_N_WE);
  OUTPUT_HIGH(CF_N_WE);
  CF_DATA_TRIS = TRIS_D_IN;
}

// read 1 byte from current CF port
int cf_read()
{
  CF_DATA_TRIS = TRIS_D_IN;
  // strobe read signal and get data
  output_low(CF_N_OE);
  _return_ = CF_DATA;
  output_high(CF_N_OE);
}

// skip bytes from current sector buffer
// assumes: CF port set to 0
void cf_read_skip(unsigned int count)
{
  CF_DATA_TRIS = TRIS_D_IN;
  do {
    output_low(CF_N_OE);
    output_high(CF_N_OE);
    count--;
  } while (count>0);
}

// write data to CF port addr
void cf_task_file_write(int addr, int data)
{
  cf_set_addr(addr);
  cf_write(data);
}

// read byte from CF port addr
int cf_task_file_read(int addr)
{
  cf_set_addr(addr);
  return(cf_read());
}

// enable nice power-saving features of Microdrive (see Microdrive specs)
// does nothing if used with regular CF memory cards
void enable_microdrive_write_cache()
{
  while ((cf_task_file_read(7)&0xC0)!=0x40);
  cf_task_file_write(1, 0x02);   // 0x02 = enable write cache  
  cf_task_file_write(6, 0xE0);     
  cf_task_file_write(7, 0xEF);   // set features command
  while ((cf_read()&0xC0)!=0x40);
  cf_task_file_write(1, 0xAA);   // 0xAA = enable read look ahead  
  cf_task_file_write(6, 0xE0);     
  cf_task_file_write(7, 0xEF);   // set features command
  while ((cf_read()&0xC0)!=0x40);
#ifdef DelayedWrite  
  cf_task_file_write(1, 0x07);   // 7 = enable delayed write  
  cf_task_file_write(6, 0xE0);     
  cf_task_file_write(7, 0xFA);   // set delayed write command
  while ((cf_read()&0x80)==0x80);
#endif  
}

// start reading CF sector
// global var sector indicates sector number
// after calling this function use cf_read() and cf_skip(int) 
// to read/skip 512 bytes from sector
void cf_start_sector_read()
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲在线视频免费观看| 成人午夜激情在线| 成人免费视频网站在线观看| 色88888久久久久久影院野外| 这里只有精品电影| 中文字幕一区二区三区不卡 | 成人91在线观看| 在线播放一区二区三区| 自拍偷拍国产精品| 国产一区二区三区观看| 欧美三级乱人伦电影| 久久久精品欧美丰满| 午夜视黄欧洲亚洲| 色综合夜色一区| 欧美国产精品专区| 国产一区二区三区视频在线播放| 欧美性猛片xxxx免费看久爱| 国产精品久久毛片a| 激情综合网av| 日韩久久久久久| 日韩影院精彩在线| 欧美三级中文字幕在线观看| 国产精品的网站| 东方aⅴ免费观看久久av| 精品国产sm最大网站免费看| 日韩专区在线视频| 欧美日韩国产bt| 亚洲国产乱码最新视频 | av高清不卡在线| 久久久www成人免费无遮挡大片| 日韩高清一区在线| 欧美四级电影网| 亚洲国产一区二区视频| 日本精品一区二区三区四区的功能| 国产午夜亚洲精品不卡| 激情小说亚洲一区| 亚洲精品在线免费观看视频| 美国十次综合导航| 精品国产91九色蝌蚪| 六月丁香综合在线视频| 日韩午夜小视频| 美女精品一区二区| 久久九九影视网| jizz一区二区| 曰韩精品一区二区| 欧美日韩精品高清| 日韩成人伦理电影在线观看| 69精品人人人人| 久久精品国产99国产| 久久久久久**毛片大全| 国产精品一区不卡| 国产精品乱码妇女bbbb| 91视频在线观看免费| 一区二区三区蜜桃网| 欧美日韩一区在线| 久久精品av麻豆的观看方式| 久久久亚洲精华液精华液精华液| 国产成人综合网| 亚洲欧美韩国综合色| 欧美精品日日鲁夜夜添| 久久99精品久久久久久动态图| 久久精品亚洲精品国产欧美 | 国产欧美日韩三级| 97se亚洲国产综合自在线观| 午夜精品久久久久久久久久| 日韩欧美一级二级三级久久久| 国产经典欧美精品| 一区二区三区色| 日韩久久免费av| 成人av资源下载| 视频在线观看国产精品| 欧美激情一区二区三区全黄| 欧美性猛交xxxx黑人交| 精品一区二区三区蜜桃| 成人免费小视频| 91精品国产色综合久久ai换脸| 国产成人av电影在线| 亚洲一区二区三区四区中文字幕| 久久综合久久综合久久综合| 91蝌蚪porny成人天涯| 久久精工是国产品牌吗| 亚洲乱码一区二区三区在线观看| 欧美一区二区福利在线| 99久久久国产精品免费蜜臀| 日韩成人一级大片| 国产精品不卡在线| 欧美一级理论片| 在线观看欧美日本| 成人在线一区二区三区| 日本不卡视频一二三区| 亚洲精品水蜜桃| 亚洲国产高清在线观看视频| 日韩午夜激情电影| 欧美三级日韩在线| 99精品视频一区二区| 国产精品一区二区不卡| 日精品一区二区| 亚洲一区二区三区中文字幕| 国产精品久久久久一区二区三区| 日韩精品一区二区三区在线观看 | 日本韩国欧美一区二区三区| 久久66热re国产| 五月激情六月综合| 亚洲伦在线观看| 国产精品乱码一区二三区小蝌蚪| 日韩欧美成人午夜| 91精品视频网| 欧美精品久久99久久在免费线 | 视频在线观看国产精品| 亚洲一区二区三区中文字幕在线| 亚洲四区在线观看| 中文字幕一区二区三区色视频| 久久久久久久久免费| 精品福利在线导航| 精品三级在线看| 精品国产伦一区二区三区观看方式 | 91精品国产综合久久精品性色| 在线欧美小视频| 色婷婷综合久色| 欧美在线色视频| 欧美在线制服丝袜| 欧美日韩一区中文字幕| 欧美日韩一区二区三区不卡 | 欧美日韩视频在线第一区 | a在线播放不卡| eeuss鲁一区二区三区| 91在线看国产| 欧美视频日韩视频在线观看| 欧美在线观看18| 在线电影院国产精品| 欧美群妇大交群的观看方式| 欧美高清一级片在线| 欧美一级日韩免费不卡| 久久影院午夜片一区| 国产日产欧产精品推荐色| 国产精品家庭影院| 洋洋av久久久久久久一区| 日韩精品一二三| 国产一区久久久| 92国产精品观看| 欧美日韩一级视频| 欧美不卡在线视频| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美极品美女视频| 亚洲素人一区二区| 日韩精品亚洲专区| 成人午夜私人影院| 欧美午夜不卡视频| 精品国产91乱码一区二区三区| 中文字幕不卡在线| 五月婷婷久久丁香| 国产.欧美.日韩| 欧美日韩精品免费| 欧美国产成人在线| 亚洲成人av一区| 国产成人在线色| 欧美日韩大陆在线| 欧美激情一区二区三区全黄| 性久久久久久久| 高清在线成人网| 欧美狂野另类xxxxoooo| 久久夜色精品国产欧美乱极品| 伊人色综合久久天天| 美女一区二区视频| 欧日韩精品视频| 亚洲国产精品ⅴa在线观看| 亚洲成a人片综合在线| 91免费精品国自产拍在线不卡| 91精品国产黑色紧身裤美女| 国产精品视频你懂的| 蜜臀av亚洲一区中文字幕| 色综合久久88色综合天天 | 色婷婷精品久久二区二区蜜臂av| 欧美一区二区三区免费大片| 国产精品久久久久久久久免费相片| 日韩专区在线视频| 欧美曰成人黄网| 中文字幕亚洲一区二区av在线| 欧美aⅴ一区二区三区视频| 色噜噜狠狠色综合中国| 国产视频一区在线观看 | 国产一区福利在线| 69av一区二区三区| 一区二区三区精品在线观看| 国产精品资源网| 日韩美女天天操| 偷拍亚洲欧洲综合| 欧美亚洲一区三区| 亚洲人吸女人奶水| 不卡的av中国片| 国产欧美日韩中文久久| 黑人精品欧美一区二区蜜桃| 日韩欧美国产一区二区三区| 日韩电影在线看| 欧美日韩日日骚| 亚洲v日本v欧美v久久精品| 日本丶国产丶欧美色综合| 中文字幕亚洲欧美在线不卡| 成人小视频免费在线观看| 亚洲国产精品国自产拍av|