📄 2402den.lst
字号:
A51 MACRO ASSEMBLER 2402DEN 02/12/2008 18:15:52 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN 2402DEN.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 2402DEN.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;********************************************************************************
2 ;* 24C02读写 8路花样跑马灯 *
3 ;* 将演示数据先写入24C02芯片内,再将其数据逐个读出送P0口LED显示。 *
4 ;硬件连接:8路指示灯接P0,24C02控制SDAP3.7 SCLP3.6 *
5 ;开机, 跑马灯 为证明2402的作用, 去掉2402连线,则无显示 *
6 ;********************************************************************************
7 ;* 日期: 2008-2-25 *
8 ;* 版本: 3.0 *
9 ;* 作者: 深圳志博电子有限公司 专业8051单片机教学站 *
10 ;* 邮箱: zty0012001@163.com *
11 ;* 网站: http://www.elecmcu.com http://www.elecmcu.com 更多例程请登陆网站 *
12 ;********************************************************************************
13 ;* 硬件:此程序在本公司志博电子实验仪运行通过 *
14 ;********************************************************************************
15 ;* 【版权】 Copyright(C)深圳志博电子有限公司 www.elecmcu.com All Rights Reserved *
16 ;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
17 ;********************************************************************************
0097 18 SDA BIT P1.7 ;定义24C02数据线
0096 19 SCL BIT P1.6 ;定义24C02时钟线
20 ;-----------------------------------------------------
0000 21 ORG 0000H
0000 0130 22 AJMP MAIN
0030 23 ORG 0030H
24 ;-----------------------------------------------------
0030 25 MAIN:
0030 758160 26 MOV SP,#60H
0033 7580FF 27 MOV P0,#0FFH
0036 113C 28 ACALL WRITE_DATA
0038 29 M_LOOP:
0038 114F 30 ACALL READ_DATA
003A 80FC 31 JMP M_LOOP
32 ;-----------------------------------------------------
33 ;写N字节数据子程序
34 ;查表写数据入24C02
35 ;-----------------------------------------------------
003C 36 WRITE_DATA:
003C 7800 37 MOV R0,#00H ;数据写入首地址
003E 7948 38 MOV R1,#72 ;共写入72个字节的数据
0040 9000FF 39 MOV DPTR,#TAB ;查表
0043 40 WR_LOOP:
0043 E4 41 CLR A
0044 93 42 MOVC A,@A+DPTR
0045 F5F0 43 MOV B,A
0047 120065 44 LCALL WRITE_BYTE ;将查表结果写入24C02
004A 08 45 INC R0 ;地址+1
004B A3 46 INC DPTR ;数据指针+1
004C D9F5 47 DJNZ R1,WR_LOOP ;72个数写入完毕?
004E 22 48 RET
49 ;-----------------------------------------------------
50 ;读N字节数据子程序
51 ;从24C02读出数据,送P0口显示
52 ;-----------------------------------------------------
004F 53 READ_DATA:
004F 7800 54 MOV R0,#00H ;设定读取的初始地址
0051 7948 55 MOV R1,#72 ;设定读取个数
0053 56 RE_LOOP:
0053 12007F 57 LCALL READ_BYTE ;读EEPROM
A51 MACRO ASSEMBLER 2402DEN 02/12/2008 18:15:52 PAGE 2
0056 11E2 58 CALL STOP
0058 08 59 INC R0 ;地址+1
0059 F580 60 MOV P0,A ;将结果输出到P0显示
005B F5A0 61 MOV P2,A
005D 7C3C 62 MOV R4,#60 ;延时约300ms
005F 1200F4 63 LCALL DELAY_5MS
0062 D9EF 64 DJNZ R1,RE_LOOP
0064 22 65 RET
66 ;----------------------------------------------------
67 ;写操作子程序
68 ;输入参数: R0---要写入的地址,B---要写入的数据
69 ;----------------------------------------------------
0065 70 WRITE_BYTE:
0065 11D4 71 CALL START
0067 74A0 72 MOV A,#0A0H
0069 11B0 73 CALL SENDBYTE
006B 11C0 74 CALL WAITACK
006D E8 75 MOV A,R0
006E 11B0 76 CALL SENDBYTE
0070 11C0 77 CALL WAITACK
0072 E5F0 78 MOV A,B
0074 11B0 79 CALL SENDBYTE
0076 11C0 80 CALL WAITACK
0078 11E2 81 CALL STOP
007A 7C01 82 MOV R4,#1 ;每写入1个字节,延时若干MS
007C 11F4 83 CALL DELAY_5MS
007E 22 84 RET
85 ;----------------------------------------------------
86 ;读操作子程序
87 ;输入参数:R0---要读的字节地址,
88 ;输出参数: A---结果
89 ;----------------------------------------------------
007F 90 READ_BYTE:
007F 11D4 91 CALL START
0081 74A0 92 MOV A,#0A0H
0083 11B0 93 CALL SENDBYTE
0085 11C0 94 CALL WAITACK
0087 E8 95 MOV A,R0
0088 11B0 96 CALL SENDBYTE
008A 11C0 97 CALL WAITACK
008C 11D4 98 CALL START
008E 74A1 99 MOV A,#0A1H
0090 11B0 100 CALL SENDBYTE
0092 11C0 101 CALL WAITACK
0094 1197 102 CALL RCVBYTE
0096 22 103 RET
104 ;-----------------------------------------------------
105 ;从IIC总线上接收一个字节数据
106 ;出口参数:A---接收数据存放在A中
107 ;-----------------------------------------------------
0097 108 RCVBYTE:
0097 7F08 109 MOV R7,#08 ;一个字节共接收8位数据
0099 E4 110 CLR A
009A D297 111 SETB SDA ;释放SDA数据线
009C 112 R_BYTE:
009C C296 113 CLR SCL
009E 00 114 NOP
009F 00 115 NOP
00A0 00 116 NOP
00A1 00 117 NOP
00A2 D296 118 SETB SCL ;启动一个时钟周期,读总线
00A4 00 119 NOP
00A5 00 120 NOP
00A6 00 121 NOP
00A7 00 122 NOP
00A8 A297 123 MOV C,SDA ;将SDA状态读入C
A51 MACRO ASSEMBLER 2402DEN 02/12/2008 18:15:52 PAGE 3
00AA 33 124 RLC A ;结果移入A
00AB D297 125 SETB SDA ;释放SDA数据线
00AD DFED 126 DJNZ R7,R_BYTE ;判断8位数据是否接收完全?
00AF 22 127 RET
128 ;----------------------------------------------------
129 ;向IIC总线发送一个字节数据
130 ;入口参数:A---待发送数据存放在A中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -