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

📄 24c04-p0-p2-led.lst

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  24C04_P0_P2_LED                                                      01/09/2007 19:55:39 PAGE     1


MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN 24C04-P0-P2-LED.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 24C04-P0-P2-LED.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;*******************************************************************
                       2     ;*                                                                 *
                       3     ;* ME500单片机开发系统演示程序 - 多花样流水灯                      *
                       4     ;*                                                                 *
                       5     ;* P0,P2 LED显示                                                   *
                       6     ;*                                                                 *
                       7     ;* 用数据块写方式将数据写入24C04芯片内,再将其数据读出送LED显示。  *
                       8     ;*                                                                 *
                       9     ;* 邮箱:  gguoqing@willar.com                                      *
                      10     ;* 网站: http://www.willar.com                                    *
                      11     ;* 作者: gguoqing                                                 *
                      12     ;* 时间: 2007/01/08                                               *
                      13     ;*                                                                 *
                      14     ;*【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved *
                      15     ;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!       *
                      16     ;*                                                                 *
                      17     ;*******************************************************************
                      18     ;*                                                                 *
                      19     ;* 24C04的写入数据块最大字节数n为16,一次写入的字节数m不能多于n.    *
                      20     ;*                                                                 *
                      21     ;*******************************************************************
                      22                
  00B5                23              SDA   BIT   P3.5      ;定义24C04数据线
  00B4                24              SCL   BIT   P3.4      ;定义24C04时钟线
                      25               
  002A                26              TEMP  EQU   2AH
  0030                27              DISP  EQU   30H       ;数据存放首地址
                      28     
  00A0                29              SLAW  DATA  0A0H      ;写控制字节   (第一页)
  00A1                30              SLAR  DATA  0A1H      ;读控制字节
                      31     
                      32             ; SLAW  DATA  0A2H      ;写控制字节  (第二页)
                      33             ; SLAR  DATA  0A3H      ;读控制字节
                      34     
                      35     ;**********************************************************
                      36     
0000                  37              ORG 0000H
0000 0130             38              AJMP MAIN
0030                  39              ORG 0030H
                      40     
                      41     ;**********************************************************
0030                  42     MAIN:
0030 758170           43              MOV  SP,#70H
0033 7580FF           44              MOV  P0,#0FFH
                      45             
0036 752A00           46              MOV  TEMP,#00H
0039 900143           47              MOV DPTR,#TAB1
003C 116A             48              ACALL  WRITE_DATA
                      49     
003E 752A10           50              MOV  TEMP,#10H
0041 900153           51              MOV DPTR,#TAB2
0044 116A             52              ACALL  WRITE_DATA
                      53     
0046 752A20           54              MOV  TEMP,#20H
0049 900163           55              MOV DPTR,#TAB3
004C 116A             56              ACALL  WRITE_DATA
                      57     
004E 752A30           58              MOV  TEMP,#30H
A51 MACRO ASSEMBLER  24C04_P0_P2_LED                                                      01/09/2007 19:55:39 PAGE     2

0051 900173           59              MOV DPTR,#TAB4
0054 116A             60              ACALL  WRITE_DATA
                      61     
0056 1194             62              ACALL  READ_DATA
0058                  63     MAIN1:
0058 7830             64              MOV  R0,#DISP
005A 7940             65              MOV  R1,#64
005C                  66     MAIN2:
005C E6               67              MOV  A,@R0
005D F580             68              MOV  P0,A
005F F5A0             69              MOV  P2,A
0061 7C3C             70              MOV  R4,#60
0063 3138             71              CALL  DELAY_5MS
0065 08               72              INC  R0
0066 D9F4             73              DJNZ  R1,MAIN2
0068 80EE             74              JMP  MAIN1
                      75     
                      76     ;**********************************************************
                      77     
                      78     ; 写16字节数据子程序
                      79     ; 查表写数据入24C04
                      80     
                      81     ;**********************************************************
006A                  82     WRITE_DATA:
006A 7910             83              MOV R1,#16          ;写入16个字节的数据
                      84      
006C 3118             85              CALL I2C_START
                      86     
006E 74A0             87              MOV A,#SLAW         ;写入控制字节
0070 11DC             88              CALL  SENDBYTE
0072 3106             89              CALL  I2C_CASK
0074 20D5F3           90              JB  F0,WRITE_DATA
                      91     
0077 E52A             92              MOV  A,TEMP         ;写入I2C单元地址
0079 11DC             93              CALL  SENDBYTE
007B 3106             94              CALL  I2C_CASK
007D 20D5EA           95              JB  F0,WRITE_DATA
0080                  96     WR_LOOP:
0080 E4               97              CLR A
0081 93               98              MOVC A,@A+DPTR
0082 11DC             99              CALL  SENDBYTE      ;写入数据
0084 3106            100              CALL  I2C_CASK
0086 20D5E1          101              JB  F0,WRITE_DATA
0089 08              102              INC R0              ;地址+1
008A A3              103              INC DPTR            ;数据指针+1
008B D9F3            104              DJNZ R1,WR_LOOP     ;16个数写入完毕?
                     105     
008D 3126            106              CALL  I2C_STOP
008F 7C02            107              MOV R4,#2           ;延时若干MS
0091 3138            108              CALL DELAY_5MS
0093 22              109              RET
                     110     
                     111     ;**********************************************************
                     112     
                     113     ; 读N字节数据子程序
                     114     ; 从24C04读出数据,存放在首地址为30H的单元内。
                     115     
                     116     ;**********************************************************
0094                 117     READ_DATA:
0094 3118            118              CALL I2C_START
                     119     
0096 74A0            120              MOV A,#SLAW           ;写入写控制字节
0098 11DC            121              CALL SENDBYTE
009A 3106            122              CALL  I2C_CASK
009C 20D5F5          123              JB  F0,READ_DATA
                     124     
A51 MACRO ASSEMBLER  24C04_P0_P2_LED                                                      01/09/2007 19:55:39 PAGE     3

009F 7400            125              MOV A,#00H            ;写入I2C单元地址
00A1 11DC            126              CALL SENDBYTE
00A3 3106            127              CALL  I2C_CASK
00A5 20D5EC          128              JB  F0,READ_DATA
                     129     
00A8 3118            130              CALL I2C_START
                     131     
00AA 74A1            132              MOV A,#SLAR           ;写入读控制字节
00AC 11DC            133              CALL SENDBYTE
00AE 3106            134              CALL  I2C_CASK
00B0 20D5E1          135              JB  F0,READ_DATA
                     136     
00B3 7830            137              MOV R0,#DISP          ;设定存放数据单元
00B5 7940            138              MOV R1,#64            ;设定读取个数
00B7                 139     RE_LOOP:
00B7 11CA            140              CALL  RCVBYTE         ;读取字节数据
00B9 F6              141              MOV  @R0,A            ;存放数据
00BA D905            142              DJNZ  R1,RE_LOOP1
00BC 11F9            143              CALL  I2C_NACK        ;发送非应答位
00BE 3126            144              CALL  I2C_STOP
00C0 22              145              RET
00C1                 146     RE_LOOP1:
00C1 11EC            147              CALL  I2C_ACK         ;发送应答位
00C3 08              148              INC  R0
00C4 7C01            149              MOV R4,#1             ;延时若干MS
00C6 3138            150              CALL DELAY_5MS
00C8 80ED            151              JMP  RE_LOOP
                     152     
                     153     ;**********************************************************
                     154     
                     155     ;从IIC总线上接收一个字节数据
                     156     ;出口参数:A---接收数据存放在A中
                     157     
                     158     ;**********************************************************
00CA                 159     RCVBYTE:
00CA 7F08            160            MOV R7,#08        ;一个字节共接收8位数据     
00CC                 161     R_BYTE:
00CC D2B5            162            SETB  SDA         ;置SDA为输入方式
00CE D2B4            163            SETB  SCL
00D0 00              164            NOP
00D1 00              165            NOP
00D2 00              166            NOP
00D3 00              167            NOP
00D4 A2B5            168            MOV C,SDA         ;将SDA状态读入C
00D6 33              169            RLC A             ;结果移入A
00D7 C2B4            170            CLR  SCL          ;SCL=0,继续接收数据
00D9 DFF1            171            DJNZ R7,R_BYTE    ;判断8位数据是否接收完全?
00DB 22              172            RET
                     173     
                     174     ;**********************************************************
                     175     
                     176     ;向IIC总线发送一个字节数据
                     177     ;入口参数:A---待发送数据存放在A中
                     178     
                     179     ;**********************************************************
00DC                 180     SENDBYTE:
00DC 7F08            181            MOV R7,#08        ;8位数据长度送R7
00DE                 182     S_BYTE:
00DE 33              183            RLC A             ;A左移,发送位加入C
00DF 92B5            184            MOV SDA,C
00E1 D2B4            185            SETB SCL

⌨️ 快捷键说明

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