⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.lst

📁 51开发板的源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  I2C                                                                  12/18/2007 11:18:07 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN i2c.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE i2c.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     
                       2     
                       3     
                       4     
                       5     
                       6     
                       7     
                       8     
                       9     
                      10     
                      11     
                      12     
                      13     
                      14     
                      15     
                      16     
                      17     
                      18     
                      19     
                      20     
                      21     
                      22     
                      23     
                      24     
                      25     
                      26     
                      27     
                      28     
                      29     
                      30     
                      31     
                      32     
                      33     
                      34     
                      35     
                      36     
                      37     
                      38     
                      39     
                      40     
                      41     
                      42     
                      43     
                      44     EPM_WR_CODE_SEG SEGMENT CODE
                      45     ;public ?C?CSTPTR
                      46     
                      47     
                      48     ;XX #define TEST
                      49     
                      50     PUBLIC  MOVX_A_DPTR
                      51     PUBLIC  MOVX_DPTR_A
                      52     public  SendStopCondition
                      53     
                      54     PUBLIC is_reading
                      55     PUBLIC is_writing
                      56     PUBLIC epm_err
                      57     PUBLIC addr_low
                      58     PUBLIC addr_high
A51 MACRO ASSEMBLER  I2C                                                                  12/18/2007 11:18:07 PAGE     2

                      59     
                      60     $reguse  MOVX_A_DPTR(A)
                      61     $reguse  MOVX_DPTR_A()
                      62     $reguse  SendStopCondition()
                      63     
                      64     
                      65     ;-------------- PIN DEFINITION ---------------------------
                      66     ;EPM_SDA EQU P2.1
                      67     extrn bit(EPM_SDA)
                      68     ;EPM_SCL EQU P2.2
                      69     extrn bit(EPM_SCL)
                      70     ;if this updated, update eprom.h 
                      71     ;EPM_WP  EQU P2.3
                      72     extrn bit(EPM_WP)
                      73     ;enable_task_switch EQU P2.4
                      74     extrn bit(enable_task_switch)
                      75     
                      76     ;-------------- EPROM PARAMETER DEFINITION ---------------
                      77     ;FOR 24C32
  0020                78     PAGE_SIZE EQU 20H
                      79     ;about 15ms @18.432MHz
  00FA                80     WAIT_WRITE_COUNT EQU 250
                      81     
                      82     ;-------------- IMPORTED VARIABLES --------------------------------
                      83     
                      84     
                      85     
                      86     
                      87     
                      88     
                      89     
                      90     
                      91     
                      92     EPM_BITS        SEGMENT BIT
----                  93     RSEG    EPM_BITS
0000                  94       is_reading:
0000                  95             DBIT 1
0001                  96       is_writing:
0001                  97             DBIT 1
0002                  98       epm_err:
0002                  99             DBIT 1
                     100     
                     101     EPM_DATA        SEGMENT data
----                 102     rseg    EPM_DATA
0000                 103       addr_low:
0000                 104             DS 1
0001                 105       addr_high:
0001                 106             DS 1
                     107     
                     108     
                     109     ;-------------- PROGRAM -------------------------------------------
----                 110     RSEG EPM_WR_CODE_SEG
                     111     
                     112     
                     113     
                     114     
                     115     
                     116     
                     117     
                     118     
                     119     
                     120     
                     121     
                     122     
                     123     
                     124     
A51 MACRO ASSEMBLER  I2C                                                                  12/18/2007 11:18:07 PAGE     3

                     125     
                     126     
                     127     
                     128     
                     129     
                     130     
                     131     
                     132     
                     133     
                     134     
                     135     
                     136     
                     137     
                     138     
                     139     
                     140     
                     141     
                     142     
                     143     
                     144     
                     145     
                     146     
                     147     
                     148     
                     149     
                     150     
                     151     
                     152     
                     153     
                     154     
                     155     
                     156     
                     157     
                     158     
                     159     
                     160     
                     161     
                     162     
                     163     
                     164     
                     165     
                     166     
                     167     
                     168     
                     169     
                     170     
                     171     
                     172     
                     173     
                     174     
                     175     
                     176     
                     177     
                     178     
                     179     
                     180     
                     181     
                     182     
                     183     
                     184     
                     185     
                     186     
                     187     
                     188     
                     189     
                     190     
A51 MACRO ASSEMBLER  I2C                                                                  12/18/2007 11:18:07 PAGE     4

                     191     
                     192     
                     193     
                     194     
                     195     
                     196     
                     197     
                     198     
                     199     ;-------------------- macro : Increment address --------------------
                     200     IncrementAddress Macro first_return_addr
                     201             INC     addr_low
                     202             MOV     A,addr_low
                     203             JNZ     first_return_addr
                     204             INC     addr_high
                     205     endm
                     206     
                     207     
                     208     ;-------------------- macro : Compare address --------------------
                     209     
                     210     CompareAddress Macro RETURN_NOT_EQUAL,RETURN_EQUAL
                     211             MOV     A,DPL
                     212             CJNE    A, addr_low, RETURN_NOT_EQUAL
                     213             MOV     A, DPH
                     214             CJNE    A, addr_high, RETURN_NOT_EQUAL
                     215             SJMP    RETURN_EQUAL
                     216     ENDM
                     217     
                     218     
                     219     ;-------------------- macro : Write control code --------------------
                     220     ;如果EPROM正在写,那么就会不响应。因此要尝试 WAIT_WRITE_COUNT次。
                     221     ;如果已经检测出 EPROM 有错误,那么就只尝试一次。如果尝试成功,则该标志被清除。
                     222     
                     223     ;WriteControlCode Macro control_code, failure_return_addr
0000                 224     WriteControlCode:
                     225     ;       LOCAL WE_WRITE_CONTROL_CODE, WE_NEXT_CONTROL_CODE
                     226     
0000 7500FA   F      227             MOV     addr_low, #WAIT_WRITE_COUNT ; addr_low is used as loop count
                     228             ;如果EPROM 错误,则只尝试一次
0003 300003   F      229             JNB     epm_err, WE_WRITE_CONTROL_CODE
0006 750001   F      230             MOV     addr_low, #1
0009                 231         WE_WRITE_CONTROL_CODE:
0009 C200     F      232             CLR     epm_err
000B 120000   F      233             LCALL   SendStartcondition
000E 74A0            234             MOV     A, #0XA0  ;control_code;//control code 0xa0, write
0010 120000   F      235             LCALL   WriteByte;
0013 300005   F      236             JNB     epm_err, WE_NEXT_CONTROL_CODE
0016 D500F0   F      237             DJNZ    addr_low, WE_WRITE_CONTROL_CODE ;loop end
0019 800E            238             SJMP    WCC_RET   ;failure_return_addr ; fail 
001B                 239         WE_NEXT_CONTROL_CODE:
001B E583            240             MOV     A, DPH ;//high address
001D F500     F      241             MOV     addr_high,A
001F 120000   F      242             LCALL   WriteByte
0022 E582            243             MOV     A,DPL
0024 F500     F      244             MOV     addr_low,A
0026 120000   F      245             LCALL   WriteByte
0029                 246         WCC_RET:
0029 22              247     RET
                     248     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -