![]() |
||||
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 ====================> 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
|
![]() |