ORG 0000H LJMP START ORG 1000H START: MOV IE,#10000001b MOV TMOD,#00010001B MOV P3,#0FFH MOV R3,#0EH MOV TL1,#000H MOV TH1,#000H SERIAL: MOV TMOD, #20H ; Timer 1 in mode 2 (8-bit auto-reload) MOV TH1, #0FDH ; Timer 1 high byte set for 2400 baud rate MOV TL1, #0FDH ; Timer 1 low byte (auto-reload value) SETB TR1 ; Start Timer 1 MOV SCON, #50H ; Mode 1 (8-bit UART), REN enabled (receive enabled) RET RANGECHECK: MOV A, SBUF SUBB A, #30H JNC BELOWRANGE CJNE A, #09H, OUTRANGE SJMP INSIDERANGE BELOWRANGE: CJNE A, #01H, OUTRANGE SJMP INSIDERANGE OUTRANGE: MOV A, #'E' ACALL SERIALTRANSMIT MOV A, #'R' ACALL SERIALTRANSMIT MOV A, #'R' ACALL SERIALTRANSMIT MOV A, #'O' ACALL SERIALTRANSMIT MOV A, #'R' ACALL SERIALTRANSMIT RET SERIALTRANSMIT: JNB TI, $ CLR TI MOV SBUF, A RET INSIDERANGE: RET NOTAC5: SETB TR1 SETB P2.0 ACALL C5_DELAY CLR P2.0 ACALL C5_DELAY JNB TF1,NOTAC5 CLR TR1 CLR TF1 DJNZ R3,NOTAC5 MOV R3,#0EH MOV TL1,#000H MOV TH1,#000H NOTAD5: SETB TR1 SETB P2.0 ACALL D5_DELAY CLR P2.0 ACALL D5_DELAY JNB TF1,NOTAD5 CLR TR1 CLR TF1 DJNZ R3,NOTAD5 MOV R3,#0EH MOV TL1,#000H MOV TH1,#000H NOTAE5: SETB TR1 SETB P2.0 ACALL E5_DELAY CLR P2.0 ACALL E5_DELAY JNB TF1,NOTAE5 CLR TR1 CLR TF1 DJNZ R3,NOTAE5 MOV R3,#0EH MOV TL1,#000H MOV TH1,#000H NOTAF5: SETB TR1 SETB P2.0 ACALL F5_DELAY CLR P2.0 ACALL F5_DELAY JNB TF1,NOTAF5 CLR TR1 CLR TF1 DJNZ R3,NOTAF5 MOV R3,#0EH MOV TL1,#000H MOV TH1,#000H NOTAG5: SETB TR1 SETB P2.0 ACALL G5_DELAY CLR P2.0 ACALL G5_DELAY JNB TF1,NOTAG5 CLR TR1 CLR TF1 DJNZ R3,NOTAG5 MOV R3,#0EH MOV TL1,#000H MOV TH1,#000H NOTAA5: SETB TR1 SETB P2.0 ACALL A5_DELAY CLR P2.0 ACALL A5_DELAY JNB TF1,NOTAA5 CLR TR1 CLR TF1 DJNZ R3,NOTAA5 MOV R3,#0EH MOV TL1,#000H MOV TH1,#000H NOTAB5: SETB TR1 SETB P2.0 ACALL B5_DELAY CLR P2.0 ACALL B5_DELAY JNB TF1,NOTAB5 CLR TR1 CLR TF1 DJNZ R3,NOTAB5 MOV R3,#0EH MOV TL1,#000H MOV TH1,#000H NOTAC6: SETB TR1 SETB P2.0 ACALL C6_DELAY CLR P2.0 ACALL C6_DELAY JNB TF1,NOTAC6 CLR TR1 CLR TF1 DJNZ R3,NOTAC6 LJMP START C5_DELAY: MOV TH0,#0FCH MOV TL0,#04AH SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET D5_DELAY: MOV TH0,#0FCH MOV TL0,#0ADH SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET E5_DELAY: MOV TH0,#0FDH MOV TL0,#009H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET F5_DELAY: MOV TH0,#0FDH MOV TL0,#034H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET G5_DELAY: MOV TH0,#0FDH MOV TL0,#082H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET A5_DELAY: ;MOV TMOD, #01H MOV TH0,#0FDH MOV TL0,#0C7H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET B5_DELAY: MOV TH0,#0FEH MOV TL0,#005H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET C6_DELAY: MOV TH0,#0FEH MOV TL0,#022H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET END