📄 i2c.lst
字号:
CCS PCM C Compiler, Version 3.187, 16465
Filename: D:\myPIC\ccsc_I2c.LST
ROM used: 456 (6%)
Largest free fragment is 2048
RAM used: 7 (4%) at main() level
13 (7%) worst case
Stack: 4 locations
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 193
0003: NOP
.................... /*=============================================================================
.................... I2C总线访问24C02,运行程序:
.................... 24C02 ready -> LED0亮,
.................... Test OK -> LED7亮,
.................... Write&Read OK -> LED1/3/5/7亮。
.................... =============================================================================*/
.................... ///////////////////////////////////////////////////////////////////////////////
.................... // MPLAB IDE V7.11 + CCS C3.18
.................... // i2c access 24C02 for MCD2-demo
.................... //
.................... // by LW7807@163.com
.................... // 2005/06/21
.................... ///////////////////////////////////////////////////////////////////////////////
.................... #include <16F877A.h> // PIC16F877 header file
.................... //////// Standard Header file for the PIC16F877A device ////////////////
.................... #device PIC16F877A
.................... #list
....................
.................... #use delay(clock=4000000) // for 4Mhz crystal
*
017C: MOVLW 22
017D: MOVWF 04
017E: MOVF 00,W
017F: BTFSC 03.2
0180: GOTO 190
0181: MOVLW 01
0182: MOVWF 78
0183: CLRF 77
0184: DECFSZ 77,F
0185: GOTO 184
0186: DECFSZ 78,F
0187: GOTO 183
0188: MOVLW 4A
0189: MOVWF 77
018A: DECFSZ 77,F
018B: GOTO 18A
018C: NOP
018D: NOP
018E: DECFSZ 00,F
018F: GOTO 181
0190: BCF 0A.3
0191: BCF 0A.4
0192: GOTO 1B8 (RETURN)
.................... #fuses XT, NOWDT, NOPROTECT, NOLVP // for debug mode
....................
.................... #define EEPROM_24C02_SDA PIN_B5
.................... #define EEPROM_24C02_SCL PIN_B4
.................... #define EEPROM_24C02_SIZE 256
.................... #use i2c(master, sda=EEPROM_24C02_SDA, scl=EEPROM_24C02_SCL)
*
000C: MOVLW 08
000D: MOVWF 78
000E: NOP
000F: NOP
0010: BCF 06.4
0011: BSF 03.5
0012: BCF 06.4
0013: NOP
0014: BCF 03.5
0015: RLF 26,F
0016: BCF 06.5
0017: BTFSS 03.0
0018: GOTO 01C
0019: BSF 03.5
001A: BSF 06.5
001B: BCF 03.5
001C: BTFSC 03.0
001D: GOTO 021
001E: BSF 03.5
001F: BCF 06.5
0020: BCF 03.5
0021: BSF 03.5
0022: BSF 06.4
0023: BCF 03.5
0024: BTFSC 06.4
0025: GOTO 028
0026: BSF 03.5
0027: GOTO 023
0028: DECFSZ 78,F
0029: GOTO 00E
002A: NOP
002B: BCF 06.4
002C: BSF 03.5
002D: BCF 06.4
002E: NOP
002F: BSF 06.5
0030: NOP
0031: NOP
0032: BSF 06.4
0033: BCF 03.5
0034: BTFSC 06.4
0035: GOTO 038
0036: BSF 03.5
0037: GOTO 033
0038: CLRF 78
0039: NOP
003A: BTFSC 06.5
003B: BSF 78.0
003C: BCF 06.4
003D: BSF 03.5
003E: BCF 06.4
003F: BCF 03.5
0040: BCF 06.5
0041: BSF 03.5
0042: BCF 06.5
0043: BCF 03.5
0044: RETLW 00
*
00A7: MOVLW 08
00A8: MOVWF 26
00A9: MOVF 77,W
00AA: MOVWF 27
00AB: BSF 03.5
00AC: BSF 06.5
00AD: NOP
00AE: BSF 06.4
00AF: BCF 03.5
00B0: BTFSC 06.4
00B1: GOTO 0B4
00B2: BSF 03.5
00B3: GOTO 0AF
00B4: BTFSC 06.5
00B5: BSF 03.0
00B6: BTFSS 06.5
00B7: BCF 03.0
00B8: RLF 78,F
00B9: NOP
00BA: BSF 03.5
00BB: BCF 06.4
00BC: BCF 03.5
00BD: BCF 06.4
00BE: DECFSZ 26,F
00BF: GOTO 0AB
00C0: BSF 03.5
00C1: BSF 06.5
00C2: NOP
00C3: BCF 03.5
00C4: BCF 06.5
00C5: MOVF 27,W
00C6: BTFSC 03.2
00C7: GOTO 0CB
00C8: BSF 03.5
00C9: BCF 06.5
00CA: BCF 03.5
00CB: NOP
00CC: BSF 03.5
00CD: BSF 06.4
00CE: BCF 03.5
00CF: BTFSC 06.4
00D0: GOTO 0D3
00D1: BSF 03.5
00D2: GOTO 0CE
00D3: NOP
00D4: BCF 06.4
00D5: BSF 03.5
00D6: BCF 06.4
00D7: NOP
00D8: BCF 03.5
00D9: BCF 06.5
00DA: BSF 03.5
00DB: BCF 06.5
00DC: BCF 03.5
00DD: BCF 0A.3
00DE: BCF 0A.4
00DF: GOTO 10D (RETURN)
....................
....................
.................... ///////////////////////////////////////////////////////////////////////////////
.................... //
.................... void init_eeprom_24c02(void)
.................... {
.................... port_b_pullups(true); // !!!internal pullup resister
*
0004: BSF 03.5
0005: BCF 01.7
....................
.................... output_float(EEPROM_24C02_SCL);
0006: BSF 06.4
.................... output_float(EEPROM_24C02_SDA);
0007: BSF 06.5
.................... }//end init_24c02()
0008: BCF 03.5
0009: BCF 0A.3
000A: BCF 0A.4
000B: GOTO 19F (RETURN)
....................
.................... ///////////////////////////////////////////////////////////////////////////////
.................... //
.................... int8 eeprom_24c02_ready(void)
.................... {
.................... int1 ack;
....................
.................... i2c_start(); // If write cmd is acknowledged,
*
0045: BSF 03.5
0046: BSF 06.5
0047: NOP
0048: BSF 06.4
0049: NOP
004A: BCF 03.5
004B: BCF 06.5
004C: BSF 03.5
004D: BCF 06.5
004E: NOP
004F: BCF 03.5
0050: BCF 06.4
0051: BSF 03.5
0052: BCF 06.4
.................... ack = i2c_write(0xa0); // then the device is ready.
0053: MOVLW A0
0054: BCF 03.5
0055: MOVWF 26
0056: CALL 00C
0057: MOVF 78,W
0058: BTFSS 03.2
0059: GOTO 05C
005A: BCF 25.0
005B: GOTO 05D
005C: BSF 25.0
.................... i2c_stop();
005D: BSF 03.5
005E: BCF 06.5
005F: NOP
0060: BSF 06.4
0061: BCF 03.5
0062: BTFSC 06.4
0063: GOTO 066
0064: BSF 03.5
0065: GOTO 061
0066: NOP
0067: NOP
0068: NOP
0069: NOP
006A: BSF 03.5
006B: BSF 06.5
006C: NOP
....................
.................... return (0==ack) ??0xff : 0;
006D: MOVLW 00
006E: BCF 03.5
006F: BTFSC 25.0
0070: MOVLW 01
0071: XORLW 00
0072: BTFSS 03.2
0073: GOTO 076
0074: MOVLW FF
0075: GOTO 077
0076: MOVLW 00
0077: MOVWF 78
.................... }//end eeprom_24c02_ready()
0078: RETLW 00
....................
.................... ///////////////////////////////////////////////////////////////////////////////
.................... //
.................... void eeprom_24c02_write(int8 addr, int8 data)
.................... {
.................... while(0 == eeprom_24c02_ready()); // wait 24c02 ready
0079: CALL 045
007A: MOVF 78,F
007B: BTFSC 03.2
007C: GOTO 079
.................... i2c_start();
007D: BSF 03.5
007E: BSF 06.5
007F: NOP
0080: BSF 06.4
0081: NOP
0082: BCF 03.5
0083: BCF 06.5
0084: BSF 03.5
0085: BCF 06.5
0086: NOP
0087: BCF 03.5
0088: BCF 06.4
0089: BSF 03.5
008A: BCF 06.4
.................... i2c_write(0xa0);
008B: MOVLW A0
008C: BCF 03.5
008D: MOVWF 26
008E: CALL 00C
.................... i2c_write(addr);
008F: MOVF 23,W
0090: MOVWF 26
0091: CALL 00C
.................... i2c_write(data);
0092: MOVF 24,W
0093: MOVWF 26
0094: CALL 00C
.................... i2c_stop();
0095: BSF 03.5
0096: BCF 06.5
0097: NOP
0098: BSF 06.4
0099: BCF 03.5
009A: BTFSC 06.4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -