Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // PIC18F4520 Configuration Bit Settings
- #pragma config OSC = XT // Oscillator Selection bits (XT oscillator)
- #pragma config LVP = OFF // Single-Supply ICSP Enable
- #pragma config WDT = OFF // Watchdog Timer Enable bit
- #include <xc.h>
- #include <stdlib.h>
- #define _XTAL_FREQ 4000000
- /*
- KEY A = 440.00Hz
- T2CON = 0b00000111;
- PR2 = 140 With prescale of 16*
- CCPR1L = 0b01000110;
- CCP1CON = 0b00101111;
- KEY B = 493.88Hz
- T2CON = 0b00000111;
- PR2 = 125 with prescale of 16
- CCPR1L = 0b00111111;
- CCPR1CON = 0b00001111;
- KEY G = 392.00Hz
- T2CON = 0b00000111;
- PR2 = 158 with prescale of 16
- CCPR1L = 0b01001111;
- CCP1CON = 0b00101111;
- KEY E = 329.63Hz
- T2CON = 0b00000111;
- PR2 = 188 with prescale of 16
- CCPR1L = 0b01011110;
- CCP1CON = 0b00101111;
- KEY F sharp = 369.99Hz
- T2CON = 0b00000111;
- PR2 = 167
- CCPR1L = 0b01010100;
- CCP1CON = 0b00101111;
- Key E5 = 659.25Hz
- T2CON = 0b00000111;
- PR2 = 94
- CCPR1L = 0b00101111;
- CCP1CON = 0b00101111;
- Key D5 = 587.33Hz
- T2CON = 0b00000111;
- PR2 = 105
- CCPR1L = 0b00110101;
- CCP1CON = 0b00001111;
- Key B5 = 987.77Hz
- T2CON = 0b00000111;
- PR2 = 62
- CCPR1L = 0b00011111;
- CCP1CON = 0b00101111;
- Key A5 = 880Hz
- T2CON = 0b00000111;
- PR2 = 69;
- CCPR1L = 0b00100011;
- CCP1CON = 0b00001111;
- Key F#5 = 739.99Hz
- T2CON = 0b00000111;
- PR2 = 83;
- CCPR1L = 0b00101010;
- CCP1CON = 0b00001111;
- Key E5 = 659.25Hz
- T2CON = 0b00000111;
- PR2 = 93;
- CCPR1L = 0b00101111;
- CCP1CON = 0b00001111;
- Key G5 = 789.99Hz
- T2CON = 0b00000111;
- PR2 = 78;
- CCPR1L = 0b00100111;
- CCP1CON = 0b00101111;
- Key F5 = 698.46Hz
- T2CON = 0b00000111;
- PR2 = 88;
- CCPR1L = 0b00101100;
- CCP1CON = 0b00101111;
- */
- void interrupt highISR(void);
- void delay (unsigned int len);
- unsigned char pr2 [27] = {140, 125, 140, 158, 188, 167, 158, 140, 94, 105, 125, 62, 69, 78, 83, 93,
- 69, 78, 83, 62, 69, 78, 83, 93, 83, 93, 78};
- unsigned char dutyCycleCCPR1L [27] = {0b01000110, 0b00111111, 0b01000110, 0b01001111, 0b01011110, 0b01010100,
- 0b01001111, 0b01000110, 0b00101111, 0b00110101, 0b00111111, 0b00011111,
- 0b00100011, 0b00100111, 0b00101010, 0b00101111, 0b00100011, 0b00100111,
- 0b00101010, 0b00011111, 0b00100011, 0b00100111, 0b00101010, 0b00101111,
- 0b00101010, 0b00101111, 0b00100111};
- unsigned char dutyCycleCCP1CON[27] = {0b00101111, 0b00001111, 0b00101111, 0b00101111, 0b00101111, 0b00101111, 0b00101111,
- 0b00101111, 0b00101111, 0b00001111, 0b00001111, 0b00101111, 0b00001111, 0b00101111,
- 0b00001111, 0b00001111, 0b00001111, 0b00101111, 0b00001111, 0b00101111, 0b00001111,
- 0b00101111, 0b00001111, 0b00001111, 0b00001111, 0b00001111, 0b00101111};
- unsigned int delayTimings[27] = {300, 300, 500, 700, 1000, 1000, 1000, 1000, 1000, 1000, 1400/*32PRESCALE*/, 250, 250, 300, 250, 700,
- 250, 250, 700, 500, 300, 300, 700, 500, 500, 500, 1000};
- unsigned char tmr0HByte[27] = {0xB6, 0xB6, 0x85, 0x55, 0x0B,0x0B,0x0B,0x0B,0x0B,0x0B, 0x55/*32PRESCALE*/,
- 0xC2,0xC2,0xB6, 0xC2,0x55,0xC2,0xC2,0x55,0x85,0xB6,0xB6,0x55,0x85,0x85,0x85,
- 0x0B};
- unsigned char tmr0LByte[27] = {0xC2, 0xC2, 0xEE, 0x1A, 0xDC,0xDC,0xDC,0xDC,0xDC,0xDC, 0x1A/*32PRESCALE*/,
- 0xF7,0xF7, 0xC2,0xF7,0x1A,0xF7,0xF7,0x1A,0xEE,0xC2,0xC2,0x1A,0xEE,0xEE,0xEE,
- 0xDC};
- unsigned char tmr0CON[27] = {0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000100,
- 0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,0b10000011,
- 0b10000011,0b10000011,0b10000011,0b10000011,0b10000011};
- unsigned int i = 0;
- unsigned int x = 0;
- void main ()
- {
- ADCON1 = 0x0F;
- INTCONbits.GIEH = 0; // disables all interrupts
- RCONbits.IPEN = 1; // IPEN
- INTCON2bits.TMR0IP = 1; // high priority
- TMR0H = 0x00;
- TMR0L = 0x00;
- TRISC = 0b11111011; // Configure RC2 (CCP1) as output
- TMR0H = tmr0HByte[i];
- TMR0L = tmr0LByte[i];
- T0CON = tmr0CON[i];
- INTCONbits.TMR0IF = 0;
- INTCONbits.TMR0IE = 1;
- INTCONbits.GIEH = 1;
- while(x<27); // Do nothing, until all tones played
- }
- void interrupt highISR(void){
- if(INTCONbits.TMR0IF)
- {
- T2CON = 0b00000111; //But
- PR2 = pr2[x];
- CCPR1L = dutyCycleCCPR1L[x]; // in array
- CCP1CON = dutyCycleCCP1CON[x];
- INTCONbits.TMR0IF = 0;
- x++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement