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