📄 i2cmem1.sdi
字号:
,,, LIST p=16F877
,,, #include "P16F877.INC"
,,,
,,,SDO EQU 7
,,,CLK EQU 6
,,,
,,, ORG 0
0000,291F,entrypoint,entrypoint goto start
,,,
,,, ORG 4
0004,2804,intvector,intvector goto intvector
,,,
,,, CBLOCK 0x30
,,, address, value, byte, bit, ack
,,, lc1, lc2, lc3
,,, ENDC
,,,
,,,
0005,1283,set_sdo_high,set_sdo_high bcf STATUS,RP0
0006,1387,, bcf PORTC,SDO
0007,1683,, bsf STATUS,RP0
0008,1787,, bsf TRISC,SDO
0009,1283,, bcf STATUS,RP0
000A,0008,, return
,,,
000B,1283,set_sdo_low,set_sdo_low bcf STATUS,RP0
000C,1387,, bcf PORTC,SDO
000D,1683,, bsf STATUS,RP0
000E,1387,, bcf TRISC,SDO
000F,1283,, bcf STATUS,RP0
0010,0008,, return
,,,
,,,;-----------------------------------------------------------
0011,1283,set_clk_high,set_clk_high bcf STATUS,RP0
0012,1707,, bsf PORTC,CLK
0013,1683,, bsf STATUS,RP0
0014,1307,, bcf TRISC,CLK
0015,1283,, bcf STATUS,RP0
0016,0008,, return
,,,
,,,;-----------------------------------------------------------
0017,1283,set_clk_low,set_clk_low bcf STATUS,RP0
0018,1307,, bcf PORTC,CLK
0019,1683,, bsf STATUS,RP0
001A,1307,, bcf TRISC,CLK
001B,1283,, bcf STATUS,RP0
001C,0008,, return
,,,
,,,;-----------------------------------------------------------
001D,3006,wait_quarter_bit,wait_quarter_bit movlw 0x06
001E,00B5,, movwf lc1
001F,0BB5,wqb0:,wqb0: decfsz lc1,F
0020,281F,, goto wqb0
0021,0008,, return
,,,
,,,;-----------------------------------------------------------
0022,3010,wait_half_bit,wait_half_bit movlw 0x10
0023,00B5,, movwf lc1
0024,0BB5,whb0:,whb0: decfsz lc1,F
0025,281F,, goto wqb0
0026,0008,, return
,,,
,,,;-----------------------------------------------------------
0027,30FF,init,init movlw 0xFF
0028,0087,, movwf PORTC
0029,3000,, movlw 0x00
002A,1683,, bsf STATUS,RP0
002B,0087,, movwf TRISC
002C,1283,, bcf STATUS,RP0
002D,0008,, return
,,,
,,,;-----------------------------------------------------------
002E,2011,wr_start,wr_start call set_clk_high
002F,2022,, call wait_half_bit
0030,200B,, call set_sdo_low
0031,2022,, call wait_half_bit
0032,2017,, call set_clk_low
0033,2022,, call wait_half_bit
0034,2022,, call wait_half_bit
0035,2022,, call wait_half_bit
0036,0008,, return
,,,;-----------------------------------------------------------
0037,2022,wr_stop,wr_stop call wait_half_bit
0038,2017,, call set_clk_low
0039,2022,, call wait_half_bit
003A,200B,, call set_sdo_low
003B,2022,, call wait_half_bit
003C,2011,, call set_clk_high
003D,2022,, call wait_half_bit
003E,2005,, call set_sdo_high
003F,2022,, call wait_half_bit
0040,0008,, return
,,,
,,,;-----------------------------------------------------------
0041,2017,wr_restart,wr_restart call set_clk_low
0042,2022,, call wait_half_bit
0043,2005,, call set_sdo_high
0044,2022,, call wait_half_bit
0045,2011,, call set_clk_high
0046,2022,, call wait_half_bit
0047,200B,, call set_sdo_low
0048,2022,, call wait_half_bit
0049,2017,, call set_clk_low
004A,2022,, call wait_half_bit
004B,0008,, return
,,,
,,,;-----------------------------------------------------------
004C,2017,wr_ack,wr_ack call set_clk_low
004D,2022,, call wait_half_bit
004E,200B,, call set_sdo_low
004F,2022,, call wait_half_bit
0050,2011,, call set_clk_high
0051,2022,, call wait_half_bit
0052,2017,, call set_clk_low
0053,2022,, call wait_half_bit
0054,2005,, call set_sdo_high
0055,2022,, call wait_half_bit
0056,0008,, return
,,,
,,,;-----------------------------------------------------------
0057,2017,wr_no_ack,wr_no_ack call set_clk_low
0058,2022,, call wait_half_bit
0059,2005,, call set_sdo_high
005A,2022,, call wait_half_bit
005B,2011,, call set_clk_high
005C,2022,, call wait_half_bit
005D,2017,, call set_clk_low
005E,2022,, call wait_half_bit
005F,2022,, call wait_half_bit
0060,0008,, return
,,,
,,,;-----------------------------------------------------------
,,,; Generate a reset by generating a stop followed by at least
,,,; eight clock pulses.
0061,2022,wr_reset,wr_reset call wait_half_bit
0062,2017,, call set_clk_low
0063,2022,, call wait_half_bit
0064,200B,, call set_sdo_low
0065,2022,, call wait_half_bit
0066,2011,, call set_clk_high
,,,
0067,3040,, movlw 0x40
0068,00B5,, movwf lc1
0069,0BB5,wrr0:,wrr0: decfsz lc1,F
006A,2869,, goto wrr0
,,,
006B,2005,, call set_sdo_high
,,,
006C,3040,, movlw 0x40
006D,00B5,, movwf lc1
006E,0BB5,wrr1:,wrr1: decfsz lc1,F
006F,286E,, goto wrr1
,,,
0070,2017,, call set_clk_low ; clk 0
0071,2022,, call wait_half_bit
0072,2011,, call set_clk_high
0073,2022,, call wait_half_bit
0074,2017,, call set_clk_low ; clk 1
0075,2022,, call wait_half_bit
0076,2011,, call set_clk_high
0077,2022,, call wait_half_bit
0078,2017,, call set_clk_low ; clk 2
0079,2022,, call wait_half_bit
007A,2011,, call set_clk_high
007B,2022,, call wait_half_bit
007C,2017,, call set_clk_low ; clk 3
007D,2022,, call wait_half_bit
007E,2011,, call set_clk_high
007F,2022,, call wait_half_bit
0080,2017,, call set_clk_low ; clk 4
0081,2022,, call wait_half_bit
0082,2011,, call set_clk_high
0083,2022,, call wait_half_bit
0084,2017,, call set_clk_low ; clk 5
0085,2022,, call wait_half_bit
0086,2011,, call set_clk_high
0087,2022,, call wait_half_bit
0088,2017,, call set_clk_low ; clk 6
0089,2022,, call wait_half_bit
008A,2011,, call set_clk_high
008B,2022,, call wait_half_bit
008C,2017,, call set_clk_low ; clk 7
008D,2022,, call wait_half_bit
008E,2011,, call set_clk_high
008F,2022,, call wait_half_bit
0090,2017,, call set_clk_low ; clk 8
0091,2022,, call wait_half_bit
0092,2011,, call set_clk_high
0093,2022,, call wait_half_bit
,,,
0094,0008,, return
,,,
,,,
,,,;-----------------------------------------------------------
0095,1283,wr_bit,wr_bit bcf STATUS,RP0
0096,201D,, call wait_quarter_bit
0097,0833,, movf bit,w
0098,0532,, andwf byte,w
0099,1903,, btfsc STATUS,Z
009A,289D,, goto bit_is_0
,,,
009B,2005,bit_is_1,bit_is_1 call set_sdo_high
009C,289F,, goto wbit0
,,,
009D,200B,bit_is_0,bit_is_0 call set_sdo_low
009E,289F,, goto wbit0
,,,
,,,
009F,1283,wbit0,wbit0 bcf STATUS,RP0
00A0,201D,, call wait_quarter_bit
00A1,2011,, call set_clk_high
00A2,2022,, call wait_half_bit
00A3,2017,, call set_clk_low
00A4,0008,, return
,,,
,,,;-----------------------------------------------------------
00A5,00B2,wr_byte,wr_byte movwf byte
00A6,3080,, movlw 0x80
00A7,00B3,, movwf bit
,,,
00A8,2095,wbyte0,wbyte0 call wr_bit
00A9,1003,, bcf STATUS,C
00AA,0CB3,, rrf bit,F
00AB,08B3,, movf bit,F
00AC,1D03,, btfss STATUS,Z
00AD,28A8,, goto wbyte0
,,,
00AE,201D,, call wait_quarter_bit
00AF,2005,, call set_sdo_high
00B0,201D,, call wait_quarter_bit
00B1,2011,, call set_clk_high
00B2,201D,, call wait_quarter_bit
00B3,0807,, movf PORTC,W
00B4,3980,, andlw (1<<SDO)
00B5,3A80,, xorlw (1<<SDO)
00B6,00B4,, movwf ack
00B7,201D,, call wait_quarter_bit
00B8,2017,, call set_clk_low
00B9,201D,, call wait_quarter_bit
00BA,0008,, return
,,,
,,,;-----------------------------------------------------------
00BB,00B2,wr_halfbyte,wr_halfbyte movwf byte
00BC,3008,, movlw 0x08
00BD,00B3,, movwf bit
,,,
00BE,2095,whbyte0,whbyte0 call wr_bit
00BF,1003,, bcf STATUS,C
00C0,0CB3,, rrf bit,F
00C1,08B3,, movf bit,F
00C2,1D03,, btfss STATUS,Z
00C3,28BE,, goto whbyte0
,,,
00C4,201D,, call wait_quarter_bit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -