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

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

?? sound_system.bak

?? DSP應用程序大全
?? BAK
字號:
/*
Erase all pages if desired.
Write data to buffer 1. If buffer is full, write buffer to page.
Read DataFlash alternating through buffer1 and buffer2 into the data register.
*/

#include "io8535.h"
#include <ina90.h>
#include "stdlib.h"
#include "dataflash.h"

// prototypes
void setup (void);
void erasing (void);
void recording (void);     
void interrupt[ADC_vect] sample_ready (void);
void write_to_flash (unsigned char ad_data);
void playback (void);
void next_page_to_next_buffer (unsigned char active_buffer, unsigned int page_counter); 
void interrupt[TIMER1_OVF1_vect] out_now(void);  
void active_buffer_to_speaker (unsigned char active_buffer);

// global variables  
volatile unsigned char wait = 0;


void setup(void)
{
    DDRB = 0xBD;                            // SPI Port initialisation
                                            // SCK, MISO, MOSI,  CS, LED,  WP , RDYBSY, RST
                                            // PB7, PB6,  PB5,  PB4, PB3, PB2 ,  PB1,   PB0
                                            //  O    I     O     O    O    O      I      O
                                            //  1    0     1     1    1    1      0      1
                                            
    PORTB = 0xFF;                           // all outputs high, inputs have pullups (LED is off) 
    DDRA = 0x00;                            // define port A as an input    
    PORTA = 0x00;
    DDRD = 0x10;                            // define port D as an input (D4: output)

    _SEI();                                 // enable interrupts
}


void erasing(void)
{
    unsigned int block_counter = 0;
    unsigned char temp = 0x80;
    
    ACSR |= 0x02;                           // set signal flag that new data has to be recorded next

    // interrupt disabled, SPI port enabled, master mode, MSB first,  SPI mode 3, Fcl/4
    SPCR = 0x5C;

    while (block_counter < 512)
    {
        PORTB &= ~DF_CHIP_SELECT;           // enable DataFlash
        
        SPDR = BLOCK_ERASE;
        while (!(SPSR & temp));             // wait for data transfer to be completed
        SPDR = (char)(block_counter>>3);
        while (!(SPSR & temp));             // wait for data transfer to be completed
        SPDR = (char)(block_counter<<5);
        while (!(SPSR & temp));             // wait for data transfer to be completed
        SPDR = 0x00;                        // don't cares
        while (!(SPSR & temp));             // wait for data transfer to be completed

        PORTB |= DF_CHIP_SELECT;            // disable DataFlash

        block_counter++;
        while(!(PINB & 0x02));              // wait until block is erased
    }
    SPCR = 0x00;                            //disable SPI        
}

 
void recording(void)
{   
    // interrupt disabled, SPI port enabled, master mode, MSB first, SPI mode 3, Fcl/4
    SPCR = 0x5C;           
    ADMUX = 0x00;                           // A/D converter input pin number = 0
    ADCSR = 0xDD;                           // single A/D conversion, fCK/32, conversion now started 
    while (!(PIND & 2));                    // loop while button for recording (button 1) is pressed

    ADCSR = 0x00;                           // disable AD converter
    SPCR = 0x00;                            // disable SPI        
}


void interrupt[ADC_vect] sample_ready(void)
{    
    unsigned char count = 0;
    
    while (count < 6) count++;              // wait some cycles
    ADCSR |= 0x40;                          // start new A/D conversion 
    write_to_flash(ADC-0x1D5);              // read data, convert to 8 bit and store in flash 
}                                


void write_to_flash(unsigned char flash_data)
{
    static unsigned int buffer_counter;
    static unsigned int page_counter;
    unsigned char temp = 0x80;
    
    if((ACSR & 0x02))                       // if flag is set that new data has to be written
    {
        buffer_counter = 0;
        page_counter = 0;                   // reset the counter if new data has to be written
        ACSR &= 0xFD;                       // clear the signal flag
    }

    while(!(PINB & 0x02));                  // check if flash is busy

    PORTB &= ~DF_CHIP_SELECT;               // enable DataFlash
     
    SPDR = BUFFER_1_WRITE;
    while (!(SPSR & temp));                 // wait for data transfer to be completed
    SPDR = 0x00;                            // don't cares
    while (!(SPSR & temp));                 // wait for data transfer to be completed
    SPDR = (char)(buffer_counter>>8);       // don't cares plus first two bits of buffer address
    while (!(SPSR & temp));                 // wait for data transfer to be completed        
    SPDR = (char)buffer_counter;            // buffer address (max. 2^8 = 256 pages)
    while (!(SPSR & temp));                 // wait for data transfer to be completed    
    SPDR = flash_data;                      // write data into SPI Data Register
    while (!(SPSR & temp));                 // wait for data transfer to be completed
    
    PORTB |= DF_CHIP_SELECT;                // disable DataFlash 
    
    buffer_counter++; 
        
    if (buffer_counter > 528)               // if buffer full write buffer into memory page
    {
        buffer_counter = 0;
        if (page_counter < 4096)            // if memory is not full   
        { 
            PORTB &= ~DF_CHIP_SELECT;       // enable DataFlash
        
            SPDR = B1_TO_MM_PAGE_PROG_WITHOUT_ERASE; // write data from buffer1 to page 
            while (!(SPSR & temp));         // wait for data transfer to be completed
            SPDR = (char)(page_counter>>6);
            while (!(SPSR & temp));         // wait for data transfer to be completed
            SPDR = (char)(page_counter<<2);
            while (!(SPSR & temp));         // wait for data transfer to be completed
            SPDR = 0x00;                    // don't cares
            while (!(SPSR & temp));         // wait for data transfer to be completed                      
        
            PORTB |= DF_CHIP_SELECT;        // disable DataFlash
        
            page_counter++;
        }
        else
        {
            PORTB |= 0x08;                  // turn LED off
            while (!(PIND & 2));            // wait until button for recording (button 1) is released
        }
    }
}


void playback(void)
{      
    unsigned int page_counter = 0;
    unsigned int buffer_counter = 0;
    unsigned char active_buffer = 1;        // active buffer = buffer1
    unsigned char temp = 0x80;

    TCCR1A = 0x21;                          // 8 bit PWM, using COM1B
    TCNT1 = 0x00;                           // set counter1 to zero      
    TIFR = 0x04;                            // clear counter1 overflow flag 
    TIMSK = 0x04;                           // enable counter1 overflow interrupt
    TCCR1B = 0x01;                          // counter1 clock prescale = 1
    OCR1B = 0x00;                           // set output compare register B to zero
    
    // interrupt disabled, SPI port enabled, master mode, MSB first,  SPI mode 3, Fcl/4
    SPCR = 0x5C;
        
    next_page_to_next_buffer (active_buffer, page_counter);  // read page0 to buffer1 
        
    while (!(PINB & 0x02));                 // wait until page0 to buffer1 transaction is finished
    
    while ((page_counter < 4095)&(!(PIND & 4))) // while button for playback (button 2) is pressed
    {   
        page_counter++;                     // now take next page
         
        next_page_to_next_buffer (active_buffer, page_counter);         
        active_buffer_to_speaker (active_buffer);        
        
        if (active_buffer == 1)             // if buffer1 is the active buffer
        {
          active_buffer++;                    // set buffer2 as active buffer
        }
        else                                // else
        {
          active_buffer--;                    // set buffer1 as active buffer
        }      
    }
    TIMSK = 0x00;                           // disable all interrupts
    TCCR1B = 0x00;                          // stop counter1
    SPCR = 0x00;                            // disable SPI
}


void next_page_to_next_buffer (unsigned char active_buffer, unsigned int page_counter)
{
    unsigned char temp = 0x80;

    while(!(PINB & 0x02));                  // wait until flash is not busy
    
    PORTB &= ~DF_CHIP_SELECT;               // enable DataFlash
                
    if (active_buffer == 1)                 // if buffer1 is the active buffer
    {
        SPDR = MM_PAGE_TO_B2_XFER;          // transfer next page to buffer2
    }
    else                                    // else
    {
        SPDR = MM_PAGE_TO_B1_XFER;          // transfer next page to buffer1
    }
    while (!(SPSR & temp));                 // wait for data transfer to be completed
    SPDR = (char)(page_counter >> 6);
    while (!(SPSR & temp));                 // wait for data transfer to be completed
    SPDR = (char)(page_counter << 2);
    while (!(SPSR & temp));                 // wait for data transfer to be completed
    SPDR = 0x00;                            // write don't care byte
    while (!(SPSR & temp));                 // wait for data transfer to be completed 
    PORTB |= DF_CHIP_SELECT;                // disable DataFlash and start transaction     
}
 

void interrupt[TIMER1_OVF1_vect] out_now(void)
{
   wait = 0;                                // an interrupt has occured 
}                          


void active_buffer_to_speaker (unsigned char active_buffer)
{
    // until active buffer not empty read active buffer to speaker
    
    unsigned int buffer_counter = 0;
    unsigned char temp = 0x80; 
        
    PORTB &= ~DF_CHIP_SELECT;               // enable DataFlash     

    if (active_buffer == 1)                 // if buffer1 is the active buffer
    {
        SPDR = BUFFER_1_READ;               // read from buffer1
    }
    else                                    // else
    {
        SPDR = BUFFER_2_READ;               // read from buffer2
    }
    while (!(SPSR & temp));                 // wait for data transfer to be completed                      
    SPDR = 0x00;                            // write don't care byte
    while (!(SPSR & temp));                 // wait for data transfer to be completed
    SPDR = 0x00;                            // write don't care byte
    while (!(SPSR & temp));                 // wait for data transfer to be completed
    SPDR = 0x00;                            // start at buffer address 0
    while (!(SPSR & temp));                 // wait for data transfer to be completed
    SPDR = 0x00;                            // write don't care byte
    while (!(SPSR & temp));                 // wait for data transfer to be completed   
         
    while (buffer_counter < 528)                          
    {
        SPDR = 0xFF;                        // write dummy value to start register shift
        while (!(SPSR & temp));             // wait for data transfer to be completed
        while(wait);                        // wait for timer1 overflow interrupt            
        OCR1B = SPDR;                       // play data from shift register
        wait = 1;                           // clear the signal flag               
        buffer_counter++;
     }
     PORTB |= DF_CHIP_SELECT;               // disable DataFlash
}


void main(void)
{   
    setup();
    
    for(;;)
    {       
        if (!(PIND & 2))                    // if button for recording (button 2) is pressed
        {
            PORTB &= 0xF7;                  // turn LED on
            recording();       
        }     
        if (!(PIND & 1))                    // if button for erasing (button 0) is pressed
        {            
            PORTB &= 0xF7;                  // turn LED on
            erasing();
            while (!(PIND & 1));            // wait until button for erasing (button 0) is released          
        }       
        if (!(PIND & 4))                    // if button for playback (button 3) is pressed
        {
            PORTB &= 0xF7;                  // turn LED on      
            playback();
            while (!(PIND & 4));            // wait until button for playback (button 3) is released             
        }
    PORTB |= 0x08;                          // turn LED off while running idle
    }
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一二三四区| 亚洲乱码国产乱码精品精的特点 | 国产自产高清不卡| 欧美一区二区三区的| 日韩不卡一区二区三区 | 国产综合色视频| 精品国产乱码久久久久久浪潮| 麻豆国产精品一区二区三区 | 日韩一区二区在线看片| 久久精品国产一区二区| 久久久久久久综合日本| 视频一区视频二区在线观看| 日韩欧美国产不卡| 国产福利视频一区二区三区| 亚洲欧美另类在线| 欧美日韩一区二区三区不卡 | 久久综合久久综合九色| 国产成人精品亚洲日本在线桃色| 最新久久zyz资源站| 欧美日韩一级二级三级| 精品亚洲国内自在自线福利| 欧美激情在线一区二区| 色噜噜狠狠一区二区三区果冻| 亚洲动漫第一页| 欧美精品一区二区三区蜜桃| caoporn国产一区二区| 亚洲国产精品一区二区久久恐怖片 | 日韩免费高清av| 成人涩涩免费视频| 午夜精品aaa| 久久精品人人做| 欧美色倩网站大全免费| 国产精品自在在线| 亚洲高清三级视频| 中文字幕av一区二区三区免费看| 在线不卡免费av| 国产精品亚洲а∨天堂免在线| 亚洲理论在线观看| 久久色在线视频| 欧美日韩精品一二三区| 成人网男人的天堂| 精品一区二区三区在线播放视频| 亚洲综合成人在线视频| 日本一区二区三区免费乱视频 | 99精品视频一区二区三区| 蜜臀久久久久久久| 一区二区三区国产精品| 精品噜噜噜噜久久久久久久久试看 | 日本黄色一区二区| 国产福利视频一区二区三区| 日本美女视频一区二区| 亚洲免费在线电影| 国产精品美日韩| 日韩欧美国产一区二区在线播放| 91日韩精品一区| 国产不卡高清在线观看视频| 麻豆精品在线播放| 亚洲综合成人在线| 亚洲欧美怡红院| 久久噜噜亚洲综合| 精品日韩av一区二区| 欧美一级电影网站| 欧美精品久久一区二区三区| 欧美午夜精品理论片a级按摩| 丰满少妇在线播放bd日韩电影| 日韩va欧美va亚洲va久久| 一区二区在线免费| 中文字幕亚洲在| 日本一区二区三区在线不卡| 精品国产亚洲在线| 日韩精品综合一本久道在线视频| 欧美日韩国产在线观看| 在线观看日产精品| 91美女在线视频| 95精品视频在线| 91免费视频大全| 91论坛在线播放| 色999日韩国产欧美一区二区| av午夜精品一区二区三区| 成人精品电影在线观看| 国产另类ts人妖一区二区| 亚洲成人tv网| 婷婷六月综合亚洲| 五月婷婷久久丁香| 青青草97国产精品免费观看 | 国产一二三精品| 成人黄色国产精品网站大全在线免费观看 | 欧美大片日本大片免费观看| 91精品国产美女浴室洗澡无遮挡| 制服丝袜成人动漫| 91精品国产综合久久精品性色| 欧美午夜精品一区| 日韩欧美区一区二| 日韩视频免费直播| 久久久亚洲综合| 中文字幕一区二区不卡| 夜夜夜精品看看| 亚洲成在线观看| 麻豆精品视频在线观看免费| 国产精品1区2区| 色综合久久99| 日韩一级片在线播放| 日本一区二区三区免费乱视频| 精品欧美一区二区久久| 国产精品女主播av| 亚洲va欧美va人人爽午夜 | 午夜精品久久久久久久久久久| 青青草精品视频| 成人av网站在线| 欧美日韩在线免费视频| 精品久久人人做人人爽| 中文字幕亚洲视频| 亚洲v精品v日韩v欧美v专区| 国产乱人伦偷精品视频免下载 | 18成人在线观看| 夜夜爽夜夜爽精品视频| 国产专区欧美精品| 色婷婷狠狠综合| 欧美成人精品福利| 樱桃视频在线观看一区| 美国一区二区三区在线播放| 成人国产精品免费网站| 欧美精品aⅴ在线视频| 国产喷白浆一区二区三区| 亚洲国产日日夜夜| www.一区二区| 欧美大白屁股肥臀xxxxxx| 亚洲人成人一区二区在线观看| 久久99精品久久久久久国产越南| 不卡在线观看av| 精品国产一区二区国模嫣然| 玉足女爽爽91| av成人免费在线观看| 制服丝袜中文字幕一区| 一区二区三区四区在线| 国产在线视频一区二区| 欧美日产国产精品| 亚洲色图另类专区| 国产精品99久久久久久久女警| 欧美午夜宅男影院| 亚洲男人的天堂在线观看| 国产九九视频一区二区三区| 欧美一区二区三区四区五区| 一区二区三区在线视频免费| 成人午夜精品一区二区三区| 欧美电视剧在线看免费| 国产精品国产自产拍在线| 99久久精品费精品国产一区二区| 欧美精品久久一区| 亚洲一区二三区| 欧美日韩高清一区二区| 精品一区二区三区在线播放 | 成人黄色免费短视频| 99久精品国产| 国产不卡视频一区| 日本欧美加勒比视频| 欧美日韩免费在线视频| 亚洲精品成a人| 欧美成人国产一区二区| 日本一区二区三区久久久久久久久不 | 亚洲视频一二三区| 色综合久久久久久久久久久| 日本在线观看不卡视频| 欧美午夜精品免费| 偷拍一区二区三区| 国产精品久久久一本精品| 国产一区二区调教| 久久久国产精华| 精品久久人人做人人爰| 在线亚洲高清视频| 国产91在线观看丝袜| 毛片不卡一区二区| 久久国产精品一区二区| 国产精品欧美极品| 久久精品一二三| 欧美日韩中文字幕精品| 久久精品国产**网站演员| 日韩欧美一区二区不卡| eeuss鲁一区二区三区| 舔着乳尖日韩一区| 亚洲精品久久久蜜桃| 亚洲精品一区二区三区精华液| 欧洲一区在线电影| 在线免费一区三区| 91免费观看视频| 国产·精品毛片| 精品一区二区三区在线观看国产| 亚洲黄色性网站| 久久久亚洲午夜电影| 欧美精品一区二区在线观看| 在线观看91av| 91在线小视频| 亚洲aaa精品| 日本大胆欧美人术艺术动态| 精品少妇一区二区三区日产乱码| 色综合网站在线| 国产精品视频麻豆| 亚洲国产日韩一级| 亚洲成人精品影院| 亚洲第四色夜色|