📄 speedo1.lst
字号:
SPEEDO1 PAGE 1
1 ;*******************************************************************************************
***********
2 ; DIGITAL SPEEDOMETER CUM ODOMETER USING 16X2 LINE LCD + 8051 + EEPROM(I2C)
3 ;*******************************************************************************************
***********
4 ; XTAL Freq = 12 MHz
5
6 $MOD51
7
8
0090 9 LCD EQU P1 ; P1.0 .....P1.7, PORT1 USED AS DATA BUS
00B2 10 RS EQU P3.2
00B3 11 RW EQU P3.3
00B7 12 EN EQU P3.7
13
00B4 14 DISTO EQU P3.4 ; TIMER 0 INPUT FOR DISTANCE-ODOMETER
00B5 15 SPEDO EQU P3.5 ; TIMER 1 INPUT FOR SPEEDOMETER
16
17
00B0 18 SCL EQU P3.0 ;SCL=PIN6
00B1 19 SDA EQU P3.1 ;SDA=PIN5
20
00A0 21 EEPROMW EQU 10100000B ; SLAVE ADDRESS OF EEPROM 1010 000 + 0 TO WRITE
00A1 22 EEPROMR EQU 10100001B ; SLAVE ADDRESS OF EEPROM 1010 000 + 1 TO READ
23
24
25
---- 26 DSEG
0020 27 ORG 020H ; BIT-ADDRESSABLE RAM
28
0020 29 FLAGS: DS 1 ; VARIABLES FOR I2C PROTOCOL
0000 30 LASTREAD BIT FLAGS.0
0004 31 SQW BIT FLAGS.4
0005 32 ACK BIT FLAGS.5
0006 33 BUS_FLT BIT FLAGS.6
0007 34 _2W_BUSY BIT FLAGS.7
0001 35 OK BIT 1
36
0021 37 BITCNT: DS 1
0022 38 BYTECNT: DS 1
0023 39 POINT: DS 1 ; DISTANCE VARIABLES
0024 40 KM: DS 1
0025 41 TKM: DS 1
0026 42 HKM: DS 1
0027 43 KKM: DS 1
0028 44 TKKM: DS 1
0029 45 TOTAL: DS 1
0048 46 STORE BIT TOTAL.0
47
002A 48 VAL1: DS 1 ; SPEED VAL1
002B 49 VAL2: DS 1 ; SPEED VAL2
002C 50 VAL3: DS 1 ; SPEED VAL3
51
52
53
54 ; ***MACRO'S***
55
56 SCL_HIGH MACRO
SPEEDO1 PAGE 2
57 SETB SCL ; SET SCL HIGH
58 JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL
59 ENDM
60
61
62 CONVERT MACRO
63 ORL A,#30H ; CONVERT TO ASCII BY ADDING 30H
64 ENDM
65
66
---- 67 CSEG ; CODE BEGINS HERE
0000 68 ORG 0000H ; ON RESET
69
0000 800C 70 SJMP MAIN
71
000B 72 ORG 000BH ;Timer Interrupt0
73
000B 020085 74 LJMP UPDATE
75
76
77
000E 758170 78 MAIN: MOV SP,#70H ; MOVE STACK POINTER TO ADDRESS 70H OF RAM
0011 1202A1 79 LCALL PWR_DELAY ;LCD POWER ON DELAY
0014 12015F 80 LCALL INIT ;INITIALIZE LCD
0017 C248 81 CLR STORE ;CLEAR STORE FLAG
82
0019 752300 83 MOV POINT,#00H ; RESET ALL COUNTERS TO ZERO
001C 752400 84 MOV KM,#00H
001F 752500 85 MOV TKM,#00H
0022 752600 86 MOV HKM,#00H
0025 752700 87 MOV KKM,#00H
0028 752800 88 MOV TKKM,#00H
89
002B 752A00 90 MOV VAL1,#00H ; RESET SPEED VALUES TO ZERO
002E 752B00 91 MOV VAL2,#00H
0031 752C00 92 MOV VAL3,#00H
93
0034 120235 94 LCALL READEEPROM ; GET PREVIOUS READING FROM EEPROM
95
0037 1200DD 96 LCALL SEND2LCD ; DISPLAY INITIAL/PREVIOUS VALUES
97
98
003A 758966 99 MOV TMOD,#66H ; BOTH THE TIMERS SET AS COUNTERS IN MODE 2 - 8 BIT AUTO RELOAD
100
003D 758CCB 101 MOV TH0,#203D ; LOAD DISTANCE COUNTER TO COUNT 53 REVOLUTIONS(255-53+1)i,e 100 MET
ERS
0040 758ACB 102 MOV TL0,#203D
103
0043 D2B4 104 SETB DISTO ; T0 INPUT
0045 D2B5 105 SETB SPEDO ; T1 INPUT
106
0047 D2A9 107 SETB ET0 ; ENABLE TR0 INTERRUPT
0049 D2AF 108 SETB EA ; GLOBAL ENABLE INTERRUPTS
004B D28C 109 SETB TR0 ; START TIMER0
110
111
004D 758B00 112 LOOP: MOV TL1,#00H ; RESET SPEED COUNTER TO 00
0050 D28E 113 SETB TR1
SPEEDO1 PAGE 3
0052 1200CE 114 LCALL ONESEC_DELAY
0055 858BF0 115 MOV B,TL1 ; COPY TL1 VALUE TO REGISTER B AFTER ONE SEC DELAY
0058 C28E 116 CLR TR1 ; STOP TR1
005A E5F0 117 MOV A,B
005C 7002 118 JNZ GET_FIRST ; CHECK IF SPEED IS ZERO
005E D248 119 SETB STORE ; IF YES, SET STORE CURRENT READING FLAG
120
0060 900361 121 GET_FIRST: MOV DPTR,#FIRST ; LOAD TABLE FOR FIRST DIGIT OF SPEED
0063 E5F0 122 MOV A,B
0065 93 123 MOVC A,@A+DPTR
0066 F52A 124 MOV VAL1,A
125
0068 900371 126 GET_SECOND: MOV DPTR,#SECOND ; LOAD TABLE FOR SECOND DIGIT OF SPEED
006B E5F0 127 MOV A,B
006D 93 128 MOVC A,@A+DPTR
006E F52B 129 MOV VAL2,A
130
0070 900381 131 GET_THIRD: MOV DPTR,#THIRD ; LOAD TABLE FOR THIRD DIGIT OF SPEED
0073 E5F0 132 MOV A,B
0075 93 133 MOVC A,@A+DPTR
0076 F52C 134 MOV VAL3,A
135
0078 1200DD 136 LCALL SEND2LCD ; SEND VALUES TO LCD
137
007B 104802 138 JBC STORE,STORE_DAT ; CHECK IF STORE FLAG IS SET AND CLEAR THE FLAG
139
007E 80CD 140 SJMP LOOP ; CONTINUE DOING THIS
141
0080 120272 142 STORE_DAT: LCALL SEND2EEPROM ; IF SPEED IS = 00.0 THEN SAVE THE MILEAGE IN EEPROM
143
0083 80C8 144 SJMP LOOP
145
146
147 ;******************************************************************************************
148 ; TIMER 0 ISR - TO MEASURE DISTANCE
149 ;******************************************************************************************
150
0085 0523 151 UPDATE: INC POINT
152
0087 A823 153 MOV R0,POINT
0089 B80A41 154 CJNE R0,#10D,EXIT
008C 752300 155 MOV POINT,#00H
008F 0524 156 INC KM
157
0091 A824 158 MOV R0,KM
0093 B80A37 159 CJNE R0,#10D,EXIT
0096 752400 160 MOV KM,#00H
0099 0525 161 INC TKM
162
009B A825 163 MOV R0,TKM
009D B80A2D 164 CJNE R0,#10D,EXIT
165
00A0 752500 166 MOV TKM,#00H
00A3 0526 167 INC HKM
168
00A5 A826 169 MOV R0,HKM
SPEEDO1 PAGE 4
00A7 B80A23 170 CJNE R0,#10D,EXIT
171
00AA 752600 172 MOV HKM,#00H
00AD 0527 173 INC KKM
174
00AF A827 175 MOV R0,KKM
00B1 B80A19 176 CJNE R0,#10D,EXIT
00B4 0528 177 INC TKKM
178
00B6 A828 179 MOV R0,TKKM
00B8 B80A12 180 CJNE R0,#10D,EXIT
181
00BB 752300 182 MOV POINT,#00H ; WHEN 99,999 Kms, RESET ALL COUNTERS TO ZERO
00BE 752400 183 MOV KM,#00H
00C1 752500 184 MOV TKM,#00H
00C4 752600 185 MOV HKM,#00H
00C7 752700 186 MOV KKM,#00H
00CA 752800 187 MOV TKKM,#00H
188
189
00CD 32 190 EXIT: RETI
191
192 ;******************************************************************************************
00CE 193 ONESEC_DELAY:
194
195
00CE 780A 196 MOV R0,#10D ; One second delay routine
00D0 7964 197 RZ3: MOV R1,#100D
00D2 7AFA 198 RZ1: MOV R2,#250D
00D4 00 199 RZ2: NOP
00D5 00 200 NOP
00D6 DAFC 201 DJNZ R2,RZ2
00D8 D9F8 202 DJNZ R1,RZ1
00DA D8F4 203 DJNZ R0,RZ3
00DC 22 204 RET
205 ;******************************************************************************************
206
00DD 207 SEND2LCD:
208
00DD 7484 209 MOV A,#84H ; LINE 1
00DF 120150 210 LCALL CMD
211
00E2 E528 212 MOV A,TKKM
213 +1 CONVERT
00E4 4430 214 +1 ORL A,#30H ; CONVERT TO ASCII BY ADDING 30H
00E6 120141 216 LCALL DAT
217
218
00E9 E527 219 MOV A,KKM
220 +1 CONVERT
00EB 4430 221 +1 ORL A,#30H ; CONVERT TO ASCII BY ADDING 30H
00ED 120141 223 LCALL DAT
224
00F0 E526 225 MOV A,HKM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -