📄 master.lst
字号:
MASTER PAGE 1
1 ;======================================================================
2 ;
3 ; Author : ADI - Apps www.analog.com/MicroConverter
4 ;
5 ; Date : 30 April 1999
6 ;
7 ; File : master.asm
8 ;
9 ; Hardware : ADuC812
10 ;
11 ; Description : Code for a master in an I2C system.
12 ;
13 ; Reference : Tech Note, uC001: "Using the ADuC812 I2C Interface"
14 ; find it at www.analog.com/microconverter
15 ;
16 ;======================================================================
17
18 $MOD812 ; use ADuC812 & 8052 predefined symbols
19
0008 20 BITCNT DATA 8h ; bit counter for I2C routines
0030 21 BYTECNT DATA 030h ; byte counter for I2C routines
0032 22 SLAVEADD DATA 032h ; slave address for I2C routines
23
0028 24 FLAGS DATA 28h
0040 25 NOACK BIT FLAGS.0 ; I2C no acknowledge flag
0041 26 BUSY BIT FLAGS.1 ; I2C busy flag
0042 27 ERROR BIT FLAGS.2 ; I2C error flag
00B4 28 MISTAKE BIT P3.4
29
30 ;======================================================================
31
---- 32 CSEG
33
0000 34 ORG 0000H
35
0000 020122 36 JMP START
37
38 ;======================================================================
39
007B 40 ORG 007BH ; Subroutines
41
42 ;----------------------------------------------------------------------
43 ; DELAY: Create a delay for the main signals ( SCLOCK , SDATA )
44 ;----------------------------------------------------------------------
45
007B 46 DELAY:
47
007B 00 48 NOP
007C 22 49 RET
50
51 ;----------------------------------------------------------------------
52 ; SENDSTOP: Send the bit stop of the transmission
53 ;----------------------------------------------------------------------
54
007D 55 SENDSTOP:
56
007D D2EE 57 SETB MDE ; to enable SDATA pin as an output
007F C2EF 58 CLR MDO ; get SDATA ready for stop
MASTER PAGE 2
0081 D2ED 59 SETB MCO ; set clock for stop
0083 117B 60 ACALL DELAY
0085 D2EF 61 SETB MDO ; this is the stop bit
0087 C241 62 CLR BUSY ; bus should be released
0089 22 63 RET
64
65 ;----------------------------------------------------------------------
66 ; SENDBYTE: Send a 8-bits word to the slave
67 ;----------------------------------------------------------------------
68
008A 69 SENDBYTE:
70
008A 750808 71 MOV BITCNT,#8 ; 8 bits in a byte
72
008D D2EE 73 SETB MDE ; to enable SDATA pin as an output
008F C2EF 74 CLR MDO
0091 C2ED 75 CLR MCO
0093 33 76 LOOP: RLC A ; send one bit
0094 92EF 77 MOV MDO,C ; put data bit on pin
0096 D2ED 78 SETB MCO ; send clock
0098 C2ED 79 CLR MCO ; clock is off
009A D508F6 80 DJNZ BITCNT,LOOP
81
009D C2EE 82 CLR MDE ; release data line for acknowledge
009F D2ED 83 SETB MCO ; send clock for acknowledge
00A1 30EC02 84 JNB MDI,NEXT ; this is a check
00A4 D240 85 SETB NOACK ; no acknowledge
00A6 C2ED 86 NEXT: CLR MCO ; clock for acknowledge
00A8 22 87 RET
88
89
90 ;----------------------------------------------------------------------
91 ; BITSTART: Send the bit start of the transmission and the slave
92 ; address to the slave
93 ;----------------------------------------------------------------------
94
00A9 95 BITSTART:
96
00A9 D241 97 SETB BUSY ; I2C is in progress
00AB D2EE 98 SETB MDE ; to enable SDATA pin as an output
00AD C240 99 CLR NOACK
00AF C242 100 CLR ERROR
00B1 30ED09 101 JNB MCO,FAULT
00B4 30EF06 102 JNB MDO,FAULT
00B7 C2EF 103 CLR MDO ; this is
00B9 117B 104 ACALL DELAY ; the
00BB C2ED 105 CLR MCO ; start bit
00BD C2B4 106 FAULT: CLR MISTAKE ; set error flag
00BF E532 107 MOV A,SLAVEADD ; Get slave address
00C1 118A 108 ACALL SENDBYTE ; call routine to send slave addr. byte
00C3 22 109 RET
110
111 ;----------------------------------------------------------------------
112 ; SENDATA: Send all the sequence to the slave ( slave address + data )
113 ;----------------------------------------------------------------------
114
00C4 115 SENDATA:
116
MASTER PAGE 3
00C4 11A9 117 ACALL BITSTART
00C6 20EC0C 118 JB MDI,NEXT1
00C9 7400 119 MOV A,#00
00CB E0 120 SLOOP: MOVX A,@DPTR
00CC 118A 121 ACALL SENDBYTE
00CE A3 122 INC DPTR
00CF 204003 123 JB NOACK,NEXT1
00D2 D530F6 124 DJNZ BYTECNT,SLOOP
125
00D5 117D 126 NEXT1: ACALL SENDSTOP
00D7 E528 127 MOV A,FLAGS
00D9 5407 128 ANL A,#07h
00DB 6004 129 JZ RETOUR
00DD C2B4 130 CLR P3.4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -