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

📄 24cxx.lst

📁 单片机开发板源程序适合初学者 第一部分4*4矩阵式键盘
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  24CXX                                                                09/13/2007 02:25:18 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;实验名称:读写AT24C02实验
                       2     ;  功能:用串口发送指令读出或写入00-7FH单无的内容,显示结果在LCD上显示
                       3     ;  读出(16进制数):AA 地址
                       4     ;  写入(16进制数):BB 地址 内容
                       5     ;  作者:http://www.mcuprog.com
                       6     ;        05-02-01
                       7     
  00B3                 8     SCK             BIT     P3.3            ;I2C的时钟线
  00B4                 9     SDA             BIT     P3.4            ;I2C的数据线
                      10     ;读写I2C总线器件要用到的寄存器
  0000                11     ERRFLAG         BIT     00H
  001A                12     TEMP1           EQU     1AH
  001B                13     DELAYCOUNT      EQU     1BH
  001C                14     ADDREHI         EQU     1CH             ;读写的地址
  001D                15     ADDRELO         EQU     1DH
  001E                16     WRITE_DATA      EQU     1EH             ;单字节写入的数据
  001F                17     READ_DATA       EQU     1FH             ;单字节读出的数据
                      18     
  00A2                19     E               BIT     P2.2
  00A1                20     RW              BIT     P2.1
  00A0                21     RS              BIT     P2.0
                      22     
  0080                23     LCDPORT         EQU     P0
  0030                24     CMD_BYTE        EQU     30H
  0031                25     DAT_BYTE        EQU     31H
                      26     
  0001                27     READBIT         BIT     01H             ;读某个单元
  0002                28     WRITEBIT        BIT     02H             ;写某个单元
  0003                29     RS232OKBIT      BIT     03H             ;一个完整的串口指令完
  0032                30     RECSUM          EQU     32H             ;要从232收的字字数
0000                  31                     ORG     0000H
0000 2100             32                     AJMP    MAIN
000B                  33                     ORG     000BH
000B 4100             34                     AJMP    TIME0_1
0023                  35                     ORG     0023H
0023 C298             36     RS232:          CLR     RI
0025 E599             37                     MOV     A,SBUF
0027 B4AA09           38                     CJNE    A,#0AAH,RS232_1
002A 753201           39                     MOV     RECSUM,#01H     ;是读EEP后面只要一个地址就可
002D 7840             40                     MOV     R0,#40H
002F D201             41                     SETB    READBIT
0031 0146             42                     AJMP    RS232_RE
0033 B4BB09           43     RS232_1:        CJNE    A,#0BBH,RS232_2
0036 753202           44                     MOV     RECSUM,#02H     ;是写后要要一个地址一个写的内容
0039 7840             45                     MOV     R0,#40H
003B D202             46                     SETB    WRITEBIT
003D 0146             47                     AJMP    RS232_RE
003F F6               48     RS232_2:        MOV     @R0,A
0040 08               49                     INC     R0
0041 D53202           50                     DJNZ    RECSUM,RS232_RE
0044 D203             51                     SETB    RS232OKBIT
0046 32               52     RS232_RE:       RETI
                      53     
                      54                     
0100                  55                     ORG     0100H
0100 7820             56     MAIN:           MOV     R0,#20H
0102 7600             57     CLR0:           MOV     @R0,#00H
0104 08               58                     INC     R0
A51 MACRO ASSEMBLER  24CXX                                                                09/13/2007 02:25:18 PAGE     2

0105 B870FA           59                     CJNE    R0,#70H,CLR0
0108 751D00           60                     MOV     ADDRELO,#00H
010B 120352           61                     LCALL   READ_BYTE
010E 1202C2           62                     LCALL   INITLCD
0111 753080           63                     MOV     CMD_BYTE,#80H            
0114 12029E           64                     LCALL   WRITE_CMD
0117 1202ED           65                     LCALL   DELAY0
011A 753141           66                     MOV     DAT_BYTE,#"A"
011D 1202B0           67                     LCALL   WRITE_DAT
0120 753144           68                     MOV     DAT_BYTE,#"D"
0123 1202B0           69                     LCALL   WRITE_DAT
0126 753144           70                     MOV     DAT_BYTE,#"D"
0129 1202B0           71                     LCALL   WRITE_DAT
012C 753152           72                     MOV     DAT_BYTE,#"R"
012F 1202B0           73                     LCALL   WRITE_DAT
0132 753145           74                     MOV     DAT_BYTE,#"E"
0135 1202B0           75                     LCALL   WRITE_DAT       
0138 75313A           76                     MOV     DAT_BYTE,#":"
013B 1202B0           77                     LCALL   WRITE_DAT       
013E 120236           78                     LCALL   DISPEEPAD
                      79     
0141 7530C0           80                     MOV     CMD_BYTE,#0C0H           
0144 12029E           81                     LCALL   WRITE_CMD
0147 75314D           82                     MOV     DAT_BYTE,#"M"
014A 1202B0           83                     LCALL   WRITE_DAT
014D 753145           84                     MOV     DAT_BYTE,#"E"
0150 1202B0           85                     LCALL   WRITE_DAT
0153 75314D           86                     MOV     DAT_BYTE,#"M"
0156 1202B0           87                     LCALL   WRITE_DAT
0159 75314F           88                     MOV     DAT_BYTE,#"O"
015C 1202B0           89                     LCALL   WRITE_DAT
015F 753152           90                     MOV     DAT_BYTE,#"R"
0162 1202B0           91                     LCALL   WRITE_DAT
0165 753159           92                     MOV     DAT_BYTE,#"Y"
0168 1202B0           93                     LCALL   WRITE_DAT       
016B 75313A           94                     MOV     DAT_BYTE,#":"
016E 1202B0           95                     LCALL   WRITE_DAT
0171 12026A           96                     LCALL   DISPEEPMO       
                      97     
0174 758CFC           98                     MOV     TH0,#0FCH       ;1MS
0177 758A67           99                     MOV     TL0,#67H                        
017A 758DFD          100                     MOV     TH1,#0FDH       ;9600波特
017D 758BFD          101                     MOV     TL1,#0FDH
0180 758921          102                     MOV     TMOD,#21H
0183 759850          103                     MOV     SCON,#50H
0186 D28C            104                     SETB    TR0
0188 D28E            105                     SETB    TR1
018A 75A892          106                     MOV     IE,#92H
018D D29C            107                     SETB    REN
018F 438701          108     MAIN1:          ORL     PCON,#01H
0192 218F            109                     AJMP    MAIN1   
                     110     
0200                 111                     ORG     0200H
0200 758CFC          112     TIME0_1:        MOV     TH0,#0FCH
0203 758A67          113                     MOV     TL0,#67H
0206 100302          114                     JBC     RS232OKBIT,TODP
0209 4113            115                     AJMP    TIME0_RE
020B 100106          116     TODP:           JBC     READBIT,READ_EEP
020E 100211          117                     JBC     WRITEBIT,WRITE_EEP
0211 4113            118                     AJMP    TIME0_RE
                     119     
0213 32              120     TIME0_RE:       RETI
                     121     
0214 85401D          122     READ_EEP:       MOV     ADDRELO,40H
0217 120352          123                     LCALL   READ_BYTE
021A 120236          124                     LCALL   DISPEEPAD
A51 MACRO ASSEMBLER  24CXX                                                                09/13/2007 02:25:18 PAGE     3

021D 12026A          125                     LCALL   DISPEEPMO
0220 4113            126                     AJMP    TIME0_RE
0222 85401D          127     WRITE_EEP:      MOV     ADDRELO,40H
0225 85411E          128                     MOV     WRITE_DATA,41H
0228 85411F          129                     MOV     READ_DATA,41H
022B 120304          130                     LCALL   WRITE_BYTE
022E 120236          131                     LCALL   DISPEEPAD
0231 12026A          132                     LCALL   DISPEEPMO
0234 4113            133                     AJMP    TIME0_RE
                     134     
                     135     
                     136     ;显示EEP地址
0236 753087          137     DISPEEPAD:      MOV     CMD_BYTE,#87H            
0239 12029E          138                     LCALL   WRITE_CMD
023C E51D            139                     MOV     A,ADDRELO
023E 54F0            140                     ANL     A,#0F0H
0240 C4              141                     SWAP    A
0241 B40A00          142                     CJNE    A,#0AH,DPEEPAD_1
0244 5006            143     DPEEPAD_1:      JNC     DPEEPAD_2
0246 2430            144                     ADD     A,#30H
0248 F531            145                     MOV     DAT_BYTE,A
024A 4150            146                     AJMP    DPEEPAD_3
024C 2437            147     DPEEPAD_2:      ADD     A,#37H
024E F531            148                     MOV     DAT_BYTE,A
0250 1202B0          149     DPEEPAD_3:      LCALL   WRITE_DAT
                     150                             
0253 E51D            151                     MOV     A,ADDRELO
0255 540F            152                     ANL     A,#0FH
0257 B40A00          153                     CJNE    A,#0AH,DPEEPAD_4
025A 5006            154     DPEEPAD_4:      JNC     DPEEPAD_5
025C 2430            155                     ADD     A,#30H
025E F531            156                     MOV     DAT_BYTE,A
0260 8004            157                     SJMP    DPEEPAD_6
0262 2437            158     DPEEPAD_5:      ADD     A,#37H
0264 F531            159                     MOV     DAT_BYTE,A
0266 1202B0          160     DPEEPAD_6:      LCALL   WRITE_DAT
0269 22              161                     RET
                     162     
026A 7530C7          163     DISPEEPMO:      MOV     CMD_BYTE,#0C7H           
026D 12029E          164                     LCALL   WRITE_CMD
0270 E51F            165                     MOV     A,READ_DATA
0272 54F0            166                     ANL     A,#0F0H
0274 C4              167                     SWAP    A
0275 B40A00          168                     CJNE    A,#0AH,DPEEPMO_1
0278 5006            169     DPEEPMO_1:      JNC     DPEEPMO_2
027A 2430            170                     ADD     A,#30H
027C F531            171                     MOV     DAT_BYTE,A
027E 4184            172                     AJMP    DPEEPMO_3
0280 2437            173     DPEEPMO_2:      ADD     A,#37H
0282 F531            174                     MOV     DAT_BYTE,A
0284 1202B0          175     DPEEPMO_3:      LCALL   WRITE_DAT
                     176                             
0287 E51F            177                     MOV     A,READ_DATA
0289 540F            178                     ANL     A,#0FH
028B B40A00          179                     CJNE    A,#0AH,DPEEPMO_4
028E 5006            180     DPEEPMO_4:      JNC     DPEEPMO_5
0290 2430            181                     ADD     A,#30H
0292 F531            182                     MOV     DAT_BYTE,A
0294 8004            183                     SJMP    DPEEPMO_6
0296 2437            184     DPEEPMO_5:      ADD     A,#37H
0298 F531            185                     MOV     DAT_BYTE,A
029A 1202B0          186     DPEEPMO_6:      LCALL   WRITE_DAT
029D 22              187                     RET
                     188     
                     189     ;LCD1602要用到的一些子程序
                     190     ;写命令(入口参数CMD_BYTE)
A51 MACRO ASSEMBLER  24CXX                                                                09/13/2007 02:25:18 PAGE     4

029E C2A0            191     WRITE_CMD:      CLR     RS
02A0 C2A1            192                     CLR     RW
02A2 E530            193                     MOV     A,CMD_BYTE
02A4 F580            194                     MOV     LCDPORT,A
02A6 D2A2            195                     SETB    E
02A8 00              196                     NOP
02A9 00              197                     NOP
02AA C2A2            198                     CLR     E
02AC 1202ED          199                     LCALL   DELAY0
02AF 22              200                     RET
                     201     
                     202     ;写显示数据(入口参数DAT_BYTE)
02B0 D2A0            203     WRITE_DAT:      SETB    RS
02B2 C2A1            204                     CLR     RW
02B4 E531            205                     MOV     A,DAT_BYTE
02B6 F580            206                     MOV     LCDPORT,A
02B8 D2A2            207                     SETB    E
02BA 00              208                     NOP
02BB 00              209                     NOP
02BC C2A2            210                     CLR     E
02BE 1202ED          211                     LCALL   DELAY0
02C1 22              212                     RET
                     213     
                     214     ;LCD显示初始化
02C2 753030          215     INITLCD:        MOV     CMD_BYTE,#30H
02C5 12029E          216                     LCALL   WRITE_CMD
02C8 753030          217                     MOV     CMD_BYTE,#30H
02CB 12029E          218                     LCALL   WRITE_CMD
02CE 753030          219                     MOV     CMD_BYTE,#30H
02D1 12029E          220                     LCALL   WRITE_CMD
02D4 753038          221                     MOV     CMD_BYTE,#38H           ;设定工作方式
02D7 12029E          222                     LCALL   WRITE_CMD
02DA 75300C          223                     MOV     CMD_BYTE,#0CH           ;显示状态设置
02DD 12029E          224                     LCALL   WRITE_CMD
02E0 753001          225                     MOV     CMD_BYTE,#01H           ;清屏
02E3 12029E          226                     LCALL   WRITE_CMD
02E6 753006          227                     MOV     CMD_BYTE,#06H           ;输入方式设置
02E9 12029E          228                     LCALL   WRITE_CMD               
02EC 22              229                     RET
                     230     ;延时子程序
02ED 7DA0            231     DELAY0:         MOV     R5,#0A0H
02EF 00              232     DELAY1:         NOP
02F0 DDFD            233                     DJNZ    R5,DELAY1
02F2 22              234                     RET
                     235     
                     236     ;延时子程序
02F3 E51B            237     DELAY:          MOV     A,DELAYCOUNT
02F5 600C            238                     JZ      DELAY_RE
02F7 151B            239                     DEC     DELAYCOUNT
02F9 7FC8            240                     MOV     R7,#0C8H
02FB 00              241     DELAY_1:        NOP
02FC 00              242                     NOP
02FD 00              243                     NOP
02FE DFFB            244                     DJNZ    R7,DELAY_1
0300 0202F3          245                     LJMP    DELAY
0303 22              246     DELAY_RE:       RET                             
                     247     ;---------------24CXX要用到的子程序---------------------------------
                     248     ;单字节写(入口ADDREHI,ADDRELO,WRITE_DATA)
0304 1203C3          249     WRITE_BYTE:     LCALL   STARTI2C
0307 200023          250                     JB      ERRFLAG,WRITE_B_RE      ;不是空闲返回
030A 74A0            251                     MOV     A,#0A0H 
030C 12038C          252                     LCALL   SHOUT_DATA
030F 200012          253                     JB      ERRFLAG,WRITE_B_STOP    ;出错停止
                     254     ;               MOV     A,ADDREHI               ;送高位地址
                     255     ;               LCALL   SHOUT_DATA
                     256     ;               JB      ERRFLAG,WRITE_B_STOP

⌨️ 快捷键说明

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