Software


The program for the controller is written in the Assembly language. This program can be compiled using any general-purpose 8051 assembler (A little change may require depending upon the assembler). The code has commented so that, it looks self-explanatory. The List file has been displayed here.


<=============== Start of code ====================>

CALLERID PAGE 1

1 $MOD51
0000 2 STS_REG EQU 0000H ; Address for LCD display Status Reg
0100 3 DTA_REG EQU 0100H ; Address for LCD display Command Reg
4
0000 5 ORG 0
6 ;
0000 0125 7 START: AJMP MONI
8 ;
0003 9 ORG 3
10 ;
0003 01EA 11 AJMP DTMFPROC ; On interrupt 0, jump to DTMF Procedure
12 ;
13 ; ORG 0BH
14 ;
15 ; AJMP START
16 ;
0013 17 ORG 13H
18 ;
0013 2135 19 AJMP HOOKPROC ; On interrupt 1, jump to Hook Procedure
20 ;
21 ; ORG 1BH
22 ;
23 ; AJMP START
24 ;
0025 25 ORG 25H
26 ;
0025 75B0FF 27 MONI: MOV P3,#0FFH ; Initialise LCD display for 16*1 row displaying
0028 758160 28 MOV SP,#60H
002B 7438 29 MOV A,#38H
002D 119A 30 ACALL CMD
002F 740E 31 MOV A,#0EH
0031 119A 32 ACALL CMD
0033 7406 33 MOV A,#6
0035 119A 34 ACALL CMD
0037 7480 35 MOV A,#80H
0039 119A 36 ACALL CMD
003B 7401 37 MOV A,#1
003D 119A 38 ACALL CMD
003F 7800 39 MOV R0,#0
0041 75A885 40 INITINT: MOV IE,#85H ;Initialise interrupt
0044 758160 41 MOV SP,#60H ; Initialise Stack pointer
0047 7401 42 MOV A,#1
0049 119A 43 ACALL CMD
004B 7800 44 MOV R0,#0
004D 7448 45 MOV A,#48H ;DISPLAY THE MESSAGE "Have A Nice Day!"
004F 11AB 46 ACALL LC_WRITE
0051 7461 47 MOV A,#61H
0053 11AB 48 ACALL LC_WRITE
0055 7476 49 MOV A,#76H
0057 11AB 50 ACALL LC_WRITE
0059 7465 51 MOV A,#65H
005B 11AB 52 ACALL LC_WRITE
005D 7420 53 MOV A,#20H
005F 11AB 54 ACALL LC_WRITE
0061 7441 55 MOV A,#41H
0063 11AB 56 ACALL LC_WRITE
0065 7420 57 MOV A,#20H
0067 11AB 58 ACALL LC_WRITE
CALLERID PAGE 2

0069 744E 59 MOV A,#4EH
006B 11AB 60 ACALL LC_WRITE
006D 74C0 61 MOV A,#0C0H
006F 119A 62 ACALL CMD
0071 7469 63 MOV A,#69H
0073 11AB 64 ACALL LC_WRITE
0075 7463 65 MOV A,#63H
0077 11AB 66 ACALL LC_WRITE
0079 7465 67 MOV A,#65H
007B 11AB 68 ACALL LC_WRITE
007D 7420 69 MOV A,#20H
007F 11AB 70 ACALL LC_WRITE
0081 7444 71 MOV A,#44H
0083 11AB 72 ACALL LC_WRITE
0085 7461 73 MOV A,#61H
0087 11AB 74 ACALL LC_WRITE
0089 7479 75 MOV A,#79H
008B 11AB 76 ACALL LC_WRITE
008D 7421 77 MOV A,#21H
008F 11AB 78 ACALL LC_WRITE
0091 75A885 79 MOV IE,#85H
0094 7800 80 MOV R0,#0
0096 7900 81 MOV R1,#0
0098 80FE 82 SJMP $; wait untill any interrupt
83
009A 84 CMD:
009A 11BC 85 ACALL BUSY;
009C C083 86 PUSH DPH ; Write Command into LCD register
009E C082 87 PUSH DPL
00A0 900000 88 MOV DPTR,#STS_REG
00A3 F0 89 MOVX @DPTR,A
00A4 11D0 90 ACALL DELAY
00A6 D082 91 POP DPL
00A8 D083 92 POP DPH
00AA 22 93 RET
94 ;
00AB 95 LC_WRITE:
00AB C083 96 PUSH DPH ; Write ASCII Data Into Data register
00AD C082 97 PUSH DPL
00AF 11BC 98 ACALL BUSY;
00B1 900100 99 MOV DPTR,#DTA_REG
00B4 F0 100 MOVX @DPTR,A
00B5 11D0 101 ACALL DELAY
00B7 D082 102 POP DPL
00B9 D083 103 POP DPH
00BB 22 104 RET
105
00BC 106 BUSY:
00BC C0E0 107 PUSH ACC
00BE C083 108 PUSH DPH
00C0 C082 109 PUSH DPL
00C2 900000 110 MOV DPTR,#STS_REG
00C5 E0 111 BB: MOVX A,@DPTR
00C6 20E7FC 112 JB ACC.7,BB
00C9 D082 113 POP DPL
00CB D083 114 POP DPH
00CD D0E0 115 POP ACC
00CF 22 116 RET

CALLERID PAGE 3

117
118 ; Delay routine
00D0 119 DELAY:
00D0 7D80 120 MOV R5,#80H
00D2 DDFE 121 DJNZ R5,$
00D4 22 122 RET
123 ;
124 ; This procedure converts the values to equalent ASCII values
00D5 125 ASCII:
00D5 126 HASH:
00D5 B40C03 127 CJNE A,#0CH,STAR ;If it is '#' return 23H
00D8 7423 128 MOV A,#23H
00DA 22 129 RET
130 ;
00DB 131 STAR:
00DB B40B03 132 CJNE A,#0BH,ZERO ; If it is '*' return 2AH
00DE 742A 133 MOV A,#2AH
00E0 22 134 RET
135 ;
00E1 136 ZERO:
00E1 B40A03 137 CJNE A,#0AH,ONE_9 ; If it is 0AH, return 30H i.e. for '0'
00E4 7430 138 MOV A,#30H
00E6 22 139 RET
140 ; ;One to Nine values
00E7 141 ONE_9:
00E7 2430 142 ADD A,#30H ; else just add 30H to the value and return
00E9 22 143 RET
144 ;
145 ; procedure executed while INT0
00EA 146 DTMFPROC:
00EA 75A880 147 MOV IE,#80H
00ED 9000F5 148 MOV DPTR,#GET
00F0 C082 149 PUSH DPL
00F2 C083 150 PUSH DPH
00F4 32 151 RETI
152 ;
00F5 153 GET:
00F5 758160 154 MOV SP,#60H
00F8 75A880 155 MOV IE,#80H
00FB 78FF 156 MOV R0,#0FFH
00FD 7401 157 MOV A,#1
00FF 119A 158 ACALL CMD
0101 7900 159 MOV R1,#0
0103 160 DISLOOP:
0103 20B2FD 161 JB INT0,$
0106 E590 162 MOV A,P1
0108 540F 163 ANL A,#0FH
010A B40F10 164 CJNE A,#0FH,CALL_ASCII
010D 30B2FD 165 JNB INT0,$
0110 30B2FD 166 JNB INT0,$
0113 758160 167 MOV SP,#60H
0116 75A885 168 MOV IE,#85H
0119 80FE 169 SJMP $
011B 80FE 170 SJMP $
171 ;
011D 172 CALL_ASCII:
011D 11D5 173 ACALL ASCII
011F B90808 174 CJNE R1,#8,WRITE
CALLERID PAGE 4

0122 C0E0 175 PUSH ACC
0124 74C0 176 MOV A,#0C0H
0126 119A 177 ACALL CMD
0128 D0E0 178 POP ACC
012A 09 179 WRITE: INC R1
012B 11AB 180 ACALL LC_WRITE
012D 30B2FD 181 JNB INT0,$
0130 30B2FD 182 JNB INT0,$
0133 80CE 183 SJMP DISLOOP
184 ;
0135 B8FF28 185 HOOKPROC: CJNE R0,#0FFH,DIAL
0138 7800 186 MOV R0,#0
013A 30B3FD 187 JNB INT1,$
013D 30B3FD 188 JNB INT1,$
0140 75A885 189 MOV IE,#85H
0143 90014B 190 MOV DPTR,#JTT
0146 C082 191 PUSH DPL
0148 C083 192 PUSH DPH
014A 32 193 RETI
194 ;
014B 195 JTT:
014B 758160 196 MOV SP,#60H
014E 0141 197 AJMP INITINT
198 ;
0150 199 CRITICAL:
0150 900158 200 MOV DPTR,#OK
0153 C082 201 PUSH DPL
0155 C083 202 PUSH DPH
0157 32 203 RETI
204 ;
0158 205 OK:
0158 75A885 206 MOV IE,#85H
015B 758160 207 MOV SP,#60H
015E 0141 208 AJMP INITINT
209 ;
0160 210 DIAL:
0160 7401 211 MOV A,#1
0162 119A 212 ACALL CMD
0164 7444 213 MOV A,#44H
0166 11AB 214 ACALL LC_WRITE
0168 7469 215 MOV A,#69H
016A 11AB 216 ACALL LC_WRITE
016C 7461 217 MOV A,#61H
016E 11AB 218 ACALL LC_WRITE
0170 746C 219 MOV A,#6CH
0172 11AB 220 ACALL LC_WRITE
0174 7420 221 MOV A,#20H
0176 11AB 222 ACALL LC_WRITE
0178 7454 223 MOV A,#54H
017A 11AB 224 ACALL LC_WRITE
017C 7468 225 MOV A,#68H
017E 11AB 226 ACALL LC_WRITE
0180 7465 227 MOV A,#65H
0182 11AB 228 ACALL LC_WRITE
0184 74C0 229 MOV A,#0C0H
0186 119A 230 ACALL CMD
0188 7420 231 MOV A,#20H
018A 11AB 232 ACALL LC_WRITE
CALLERID PAGE 5

018C 744E 233 MOV A,#4EH
018E 11AB 234 ACALL LC_WRITE
0190 7475 235 MOV A,#75H
0192 11AB 236 ACALL LC_WRITE
0194 746D 237 MOV A,#6DH
0196 11AB 238 ACALL LC_WRITE
0198 7462 239 MOV A,#62H
019A 11AB 240 ACALL LC_WRITE
019C 7465 241 MOV A,#65H
019E 11AB 242 ACALL LC_WRITE
01A0 7472 243 MOV A,#72H
01A2 11AB 244 ACALL LC_WRITE
01A4 7420 245 MOV A,#20H
01A6 11AB 246 ACALL LC_WRITE
01A8 247 EWD:
01A8 30B205 248 JNB INT0,EAD
01AB 30B3FA 249 JNB INT1,EWD
01AE 2150 250 AJMP CRITICAL
251 ;
01B0 252 EAD:
01B0 7401 253 MOV A,#1
01B2 119A 254 ACALL CMD
01B4 7900 255 MOV R1,#0
01B6 256 LOOP1:
01B6 20B2FD 257 JB INT0,$
01B9 E590 258 MOV A,P1
01BB 540F 259 ANL A,#0FH
01BD 11D5 260 ACALL ASCII
01BF B90808 261 CJNE R1,#8,WRITE1
01C2 C0E0 262 PUSH ACC
01C4 74C0 263 MOV A,#0C0H
01C6 119A 264 ACALL CMD
01C8 D0E0 265 POP ACC
01CA 266 WRITE1:
01CA 09 267 INC R1
01CB 11AB 268 ACALL LC_WRITE
01CD 30B2FD 269 JNB INT0,$
270
01D0 271 LOOP2:
01D0 30B2E3 272 JNB INT0,LOOP1
01D3 30B3FA 273 JNB INT1,LOOP2
01D6 2150 274 AJMP CRITICAL
275
276 END


VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
CALLERID PAGE 6




ACC. . . . . . . . . . . . . . . D ADDR 00E0H PREDEFINED
ASCII. . . . . . . . . . . . . . C ADDR 00D5H
BB . . . . . . . . . . . . . . . C ADDR 00C5H
BUSY . . . . . . . . . . . . . . C ADDR 00BCH
CALL_ASCII . . . . . . . . . . . C ADDR 011DH
CMD. . . . . . . . . . . . . . . C ADDR 009AH
CRITICAL . . . . . . . . . . . . C ADDR 0150H
DELAY. . . . . . . . . . . . . . C ADDR 00D0H
DIAL . . . . . . . . . . . . . . C ADDR 0160H
DISLOOP. . . . . . . . . . . . . C ADDR 0103H
DPH. . . . . . . . . . . . . . . D ADDR 0083H PREDEFINED
DPL. . . . . . . . . . . . . . . D ADDR 0082H PREDEFINED
DTA_REG. . . . . . . . . . . . . NUMB 0100H
DTMFPROC . . . . . . . . . . . . C ADDR 00EAH
EAD. . . . . . . . . . . . . . . C ADDR 01B0H
EWD. . . . . . . . . . . . . . . C ADDR 01A8H
GET. . . . . . . . . . . . . . . C ADDR 00F5H
HASH . . . . . . . . . . . . . . C ADDR 00D5H NOT USED
HOOKPROC . . . . . . . . . . . . C ADDR 0135H
IE . . . . . . . . . . . . . . . D ADDR 00A8H PREDEFINED
INITINT. . . . . . . . . . . . . C ADDR 0041H
INT0 . . . . . . . . . . . . . . B ADDR 00B2H PREDEFINED
INT1 . . . . . . . . . . . . . . B ADDR 00B3H PREDEFINED
JTT. . . . . . . . . . . . . . . C ADDR 014BH
LC_WRITE . . . . . . . . . . . . C ADDR 00ABH
LOOP1. . . . . . . . . . . . . . C ADDR 01B6H
LOOP2. . . . . . . . . . . . . . C ADDR 01D0H
MONI . . . . . . . . . . . . . . C ADDR 0025H
OK . . . . . . . . . . . . . . . C ADDR 0158H
ONE_9. . . . . . . . . . . . . . C ADDR 00E7H
P1 . . . . . . . . . . . . . . . D ADDR 0090H PREDEFINED
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
SP . . . . . . . . . . . . . . . D ADDR 0081H PREDEFINED
STAR . . . . . . . . . . . . . . C ADDR 00DBH
START. . . . . . . . . . . . . . C ADDR 0000H NOT USED
STS_REG. . . . . . . . . . . . . NUMB 0000H
WRITE. . . . . . . . . . . . . . C ADDR 012AH
WRITE1 . . . . . . . . . . . . . C ADDR 01CAH
ZERO . . . . . . . . . . . . . . C ADDR 00E1H

 

We welcome you all to learn and share knowledge on electronics projects
Recent Article:

Starting with PC interfacing Click here

Starting with PC interfacing Click here
Today, there were 1 visitors (16 hits) on this page!
This website was created for free with Own-Free-Website.com. Would you also like to have your own website?
Sign up for free