📄 mp3.lst
字号:
CCS PCW C Compiler, Version 3.110, 15985
Filename: c:\documents and settings\ladyada\desktop\mintymp3\mp3.LST
ROM used: 11004 (67%)
Largest free fragment is 5380
RAM used: 645 (42%) at main() level
715 (47%) worst case
Stack: 10 worst case (9 in main + 1 for interrupts)
*
0000: GOTO 52BA
*
0008: NOP
000A: NOP
000C: NOP
000E: NOP
0010: NOP
0012: NOP
0014: NOP
0016: NOP
0018: MOVWF 05
001A: MOVFF FD8,06
001E: MOVF FE9,W
0020: MOVWF 07
0022: MOVF FEA,W
0024: MOVWF 08
0026: MOVF FE1,W
0028: MOVWF 09
002A: MOVF FE2,W
002C: MOVWF 0A
002E: MOVF FD9,W
0030: MOVWF 0B
0032: MOVF FDA,W
0034: MOVWF 0C
0036: MOVF FE0,W
0038: MOVWF 0D
003A: MOVLB 0
003C: MOVF 00,W
003E: MOVWF 0F
0040: MOVF 01,W
0042: MOVWF 10
0044: MOVF 02,W
0046: MOVWF 11
0048: MOVF 03,W
004A: MOVWF 12
004C: MOVF 04,W
004E: MOVWF 13
0050: BTFSS F9D.1
0052: GOTO 005C
0056: BTFSC F9E.1
0058: GOTO 17DC
005C: MOVF 0F,W
005E: MOVWF 00
0060: MOVF 10,W
0062: MOVWF 01
0064: MOVF 11,W
0066: MOVWF 02
0068: MOVF 12,W
006A: MOVWF 03
006C: MOVF 13,W
006E: MOVWF 04
0070: MOVF 0D,W
0072: MOVWF FE0
0074: BSF 0D.7
0076: MOVF 07,W
0078: MOVWF FE9
007A: MOVF 08,W
007C: MOVWF FEA
007E: MOVF 09,W
0080: MOVWF FE1
0082: MOVF 0A,W
0084: MOVWF FE2
0086: MOVF 0B,W
0088: MOVWF FD9
008A: MOVF 0C,W
008C: MOVWF FDA
008E: MOVF 05,W
0090: MOVFF 06,FD8
0094: RETFIE 0
.................... #include <18F452.h>
.................... //////// Standard Header file for the PIC18F452 device ////////////////
.................... #device PIC18F452
.................... #list
....................
....................
.................... // note that these aren't 'valid' since we use a bootloader
.................... #fuses HS, NOPROTECT, NOWDT, PUT, NOBROWNOUT, NOLVP
....................
.................... // 20 MHz clock
.................... #use delay (clock=20000000)
*
1832: MOVLW 02
1834: MOVWF FEA
1836: MOVLW B3
1838: MOVWF FE9
183A: MOVF FEF,W
183C: BTFSC FD8.2
183E: GOTO 185C
1842: MOVLW 06
1844: MOVWF 01
1846: CLRF 00
1848: DECFSZ 00,F
184A: BRA 1848
184C: DECFSZ 01,F
184E: BRA 1846
1850: MOVLW 7B
1852: MOVWF 00
1854: DECFSZ 00,F
1856: BRA 1854
1858: DECFSZ FEF,F
185A: BRA 1842
185C: RETLW 00
....................
.................... #use rs232 (baud=115200, xmit=PIN_C6, rcv=PIN_C7)
....................
.................... long t=0;
.................... #int_timer2
.................... void t2() {
.................... t++; // increments once a millisecond
*
17DC: INCF 15,F
17DE: BTFSC FD8.2
17E0: INCF 16,F
.................... /* if (t == 1000) {
.................... t = 0;
.................... putc('*');
.................... }
.................... */
.................... }
....................
.................... //#use i2c(master, sda=PIN_C3, scl=PIN_C2)
.................... #define SPI_CLK PIN_C0
.................... #define SPI_SDO PIN_C1
.................... #define I2C_SCL PIN_C2
.................... #define I2C_SDA PIN_C3
.................... #define MP3_DATAREQ PIN_A4
.................... #define ENABLE_MP3 PIN_C4
.................... #define MP3_RESET PIN_A0
....................
.................... #define BUTTON_VOLUP PIN_B1
.................... #define BUTTON_VOLDN PIN_B4
.................... #define BUTTON_1 PIN_B3
.................... #define BUTTON_2 PIN_B5
.................... #define BUTTON_3 PIN_B6
.................... #define BUTTON_4 PIN_B7
....................
.................... // Disable automatic TRIS programming for all ports
.................... #use fast_io(a)
.................... #use fast_io(b)
.................... #use fast_io(d)
.................... #use fast_io(e)
.................... #use fast_io(c)
....................
.................... #define nop #asm nop #endasm
....................
.................... #define TRIS_A 0b001000 // rst, mp3data, rdy, /we, /oe, /rst
.................... #define TRIS_B 0b11111010 // 5 buttons, nc, button, /ce
.................... #define TRIS_E 0b000 // all out addr pins
.................... #define TRIS_C_I2CSEND 0b11100000 // 2 buttons (rx/tx), cd1, mp3enable, sda (i2c send), scl, sta_sdi, sta_sclk
17E2: BCF F9E.1
17E4: GOTO 005C
.................... #define TRIS_C_I2CRECV 0b11110000 // 2 buttons (rx/tx), cd1, mp3enable, sda (i2c recv), scl, sta_sdi, sta_sclk
....................
.................... byte sectorbuff[512];
....................
.................... #include "mp3.h"
.................... #define BUTTON_NEXT 2
.................... #define BUTTON_PREV 3
.................... #define BUTTON_PAUSE 4
....................
.................... #define NEXT_TRACK 2
.................... #define PREV_TRACK 3
.................... #define PLAYPAUSE 4
.................... #define STOP 5
.................... boolean PAUSED = false;
....................
.................... #define EE_LASTVOLUME 2
....................
.................... void step() {
.................... printf("step ");
.................... getc();
.................... }
....................
....................
.................... void halt() {
.................... printf("halting");
.................... while (1);
.................... }
....................
.................... int fromHex(char hex) {
.................... if(hex >= '0' && hex <= '9')
*
32D8: MOVLB 2
32DA: MOVF xA7,W
32DC: SUBLW 2F
32DE: BTFSC FD8.0
32E0: GOTO 32F8
32E4: MOVF xA7,W
32E6: SUBLW 39
32E8: BTFSS FD8.0
32EA: GOTO 32F8
.................... return(hex - 48); // 0 --> 0
32EE: MOVLW 30
32F0: SUBWF xA7,W
32F2: MOVWF 01
32F4: GOTO 3338
.................... if(hex >= 'a' && hex <= 'f')
32F8: MOVF xA7,W
32FA: SUBLW 60
32FC: BTFSC FD8.0
32FE: GOTO 3316
3302: MOVF xA7,W
3304: SUBLW 66
3306: BTFSS FD8.0
3308: GOTO 3316
.................... return(hex - 87); // a --> 10
330C: MOVLW 57
330E: SUBWF xA7,W
3310: MOVWF 01
3312: GOTO 3338
.................... if(hex >= 'A' && hex <= 'F')
3316: MOVF xA7,W
3318: SUBLW 40
331A: BTFSC FD8.0
331C: GOTO 3334
3320: MOVF xA7,W
3322: SUBLW 46
3324: BTFSS FD8.0
3326: GOTO 3334
.................... return(hex - 55); // A --> 10
332A: MOVLW 37
332C: SUBWF xA7,W
332E: MOVWF 01
3330: GOTO 3338
....................
.................... // Still here?? Invalid
.................... return(20);
3334: MOVLW 14
3336: MOVWF 01
3338: MOVLB 0
333A: RETLW 00
.................... }
....................
....................
.................... void blink_led(void) {/*
.................... output_high(LED);
.................... delay_ms(100);
.................... output_low(LED);*/
.................... }
....................
.................... byte ScanHex() {
.................... char c;
.................... byte hex = 20;
333C: MOVLW 14
333E: MOVLB 2
3340: MOVWF xA5
.................... byte ret;
.................... while (hex == 20) {
3342: MOVF xA5,W
3344: SUBLW 14
3346: BTFSS FD8.2
3348: GOTO 336A
.................... c = getc();
334C: BTFSS F9E.5
334E: GOTO 334C
3352: MOVF FAE,W
3354: MOVWF xA4
.................... hex = fromHex(c);
3356: MOVLB 0
3358: MOVFF 2A4,2A7
335C: CALL 32D8
3360: MOVFF 01,2A5
.................... }
3364: MOVLB 2
3366: GOTO 3342
.................... putc(c);
336A: MOVF xA4,W
336C: BTFSS F9E.4
336E: GOTO 336C
3372: MOVWF FAD
.................... ret = hex << 4;
3374: SWAPF xA5,W
3376: MOVWF xA6
3378: MOVLW F0
337A: ANDWF xA6,F
.................... hex = 20;
337C: MOVLW 14
337E: MOVWF xA5
.................... while (hex == 20) {
3380: MOVF xA5,W
3382: SUBLW 14
3384: BTFSS FD8.2
3386: GOTO 33A8
.................... c = getc();
338A: BTFSS F9E.5
338C: GOTO 338A
3390: MOVF FAE,W
3392: MOVWF xA4
.................... hex = fromHex(c);
3394: MOVLB 0
3396: MOVFF 2A4,2A7
339A: CALL 32D8
339E: MOVFF 01,2A5
.................... }
33A2: MOVLB 2
33A4: GOTO 3380
.................... putc(c);
33A8: MOVF xA4,W
33AA: BTFSS F9E.4
33AC: GOTO 33AA
33B0: MOVWF FAD
.................... ret |= hex;
33B2: MOVF xA5,W
33B4: IORWF xA6,F
.................... return ret;
33B6: MOVF xA6,W
33B8: MOVWF 01
33BA: MOVLB 0
33BC: RETLW 00
.................... }
....................
.................... int16 Scan16Hex() {
.................... int16 ret;
....................
.................... ret = ScanHex() << 8;
33BE: CALL 333C
33C2: MOVFF 01,2A3
33C6: MOVLB 2
33C8: CLRF xA2
.................... ret |= ScanHex();
33CA: MOVLB 0
33CC: CALL 333C
33D0: MOVF 01,W
33D2: MOVLB 2
33D4: IORWF xA2,F
.................... return ret;
33D6: MOVF xA2,W
33D8: MOVWF 01
33DA: MOVF xA3,W
33DC: MOVWF 02
33DE: MOVLB 0
33E0: RETLW 00
.................... }
....................
.................... int32 Scan32Hex() {
.................... int32 ret;
....................
.................... ret = Scan16Hex() << 16;
33E2: CALL 33BE
33E6: MOVFF 02,2A1
33EA: MOVFF 01,2A0
33EE: MOVLB 2
33F0: CLRF x9E
33F2: CLRF x9F
.................... ret |= Scan16Hex();
33F4: MOVLB 0
33F6: CALL 33BE
33FA: MOVF 01,W
33FC: MOVLB 2
33FE: IORWF x9E,F
3400: MOVF 02,W
3402: IORWF x9F,F
.................... return ret;
3404: MOVLB 0
3406: MOVFF 29E,00
340A: MOVFF 29F,01
340E: MOVFF 2A0,02
3412: MOVFF 2A1,03
3416: RETLW 00
.................... }
....................
....................
....................
....................
....................
.................... #include "cf.c"
.................... #include "cf.h"
.................... #define CF_A0 PIN_E0
.................... #define CF_A1 PIN_E1
.................... #define CF_A2 PIN_E2
....................
.................... #define CF_OE PIN_A1
.................... #define CF_WE PIN_A2
.................... #define CF_READY PIN_A3
.................... #define CF_RESET PIN_A5
.................... #define CF_CD PIN_C5
.................... #define CF_CE PIN_B0
.................... #define TRIS_D_INPUT 0xFF // 11111111
.................... #define TRIS_D_OUTPUT 0x00 // 00000000
....................
.................... #byte CF_DATA = 0x08 /* Port D */
.................... #byte CF_DATA_TRIS = 0x88 /* Port D TRIS */
....................
.................... // wait for the CF RDY line to go high, ie ready for next command
.................... #define waitforready() while (!input(CF_READY))
....................
.................... #define REG_DATA 0x00 // ADDRESS OF DATA REGISTER
.................... #define REG_ERROR 0x01 // ADDRESS OF ERROR REGISTER
.................... #define REG_FEATURES 0x01 // ADDRESS OF FEATURES REGISTER
.................... #define REG_SECTORCOUNT 0x02 // ADDRESS OF SECTOR COUNT REGISTER
.................... #define REG_SECTORNUM 0x03 // ADDRESS OF SECTOR NUMBER REGISTER
.................... #define REG_CYLINDERLOW 0x04 // ADDRESS OF LOW CYLINDER REGISTER
.................... #define REG_CYLINDERHIGH 0x05 // ADDRESS OF HIGH CYLINDER REGISTER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -