$include (C8051F410.INC) LED EQU P0.2 DIGIT EQU P1.3 ; switch for left or right digit DSEG at 020h BCDnumber: DS 1 CSEG at 0000h jmp Main ORG 000Bh jmp Timer0IRQ ORG 002Bh jmp Timer2IRQ Timer0IRQ: push psw push acc push b push dph push dpl mov a,BCDnumber mov b,#10 div ab ; a<-BCDnumber/10 jb DIGIT,L1 ; left digit? mov a,b ; no, right digit L1: mov dptr,#Table ; load the conversion table address movc a,@a+dptr ; load the proper value from the table cpl a ; use negative logic mov P2,a ; switch on the 7 segment LEDs cpl DIGIT ; update digit selection pop dpl pop dph pop b pop acc pop psw reti Timer2IRQ: push psw push acc mov TMR2CN,#04h inc BCDnumber clr c mov a,BCDnumber subb a,#100 jc L2 mov BCDnumber,#0 L2: pop acc pop psw reti Main: anl PCA0MD, #0BFh mov PCA0MD, #000h mov XBR1, #040h mov TCON, #010h mov TMOD, #022h mov CKCON, #008h mov TH0, #0F0h mov TH1, #0F6h mov TMR2CN, #004h ; Timer 2 oveflows every second mov TMR2RLL, #03Eh mov TMR2RLH, #0C1h mov TMR2L, #03Eh mov TMR2H, #0C1h mov BCDnumber,#0 mov IE,#0A2h jmp $ Table: ; this table holds the binary 7 segment conversion codes db 03Fh, 006h, 05Bh, 04Fh, 066h, 06Dh, 07Dh, 007h, 07Fh, 06Fh END