??? 12/05/06 02:55 Read: times |
#128947 - 0-255 SSD Counter Responding to: ???'s previous message |
Ralph,
Here is the program that counts from 0 to 255 on 3 7-segment displays. #include "8051equ.inc" .org 00h ajmp start .org 0bh reti .org 13h reti .org 1bh reti .org 23h reti .org 25h initialize: mov TCON, #00h mov TMOD, #00h mov PSW, #00h mov IE, #00h ret delay_ms: mov r7, #00h loop_1: inc r7 mov a, r7 cjne a, #0ffh, loop_1 ret ; 8-bit binary to bcd converter ; a - input value ; r2 - output digit 1 ; r3 - output digit 2 ; r4 - output digit 3 bin_to_bcd: mov B, #010d div ab mov r4, B mov B, #010d div ab mov r3, B mov B, #010d div ab mov r2, B ret segment_table: .db 00001001b, 11101011b, 01000101b, 01100001b, 10100011b, 00110001b, 00010001b, 01101011b, 00000001b, 00100011b ; display 3 digit BCD number in the A register display_bcd: mov dptr, #segment_table movc a, @a+dptr mov P1, a ret start: acall initialize mov r0, #00h loop: mov r5, #00h mov a, r0 acall bin_to_bcd display_loop: mov a, r2 acall display_bcd setb P3.3 acall delay_ms clr P3.3 mov a, r3 acall display_bcd setb P3.4 acall delay_ms clr P3.4 mov a, r4 acall display_bcd setb P3.5 acall delay_ms clr P3.5 inc r5 cjne r5, #90h, display_loop inc r0 ajmp loop .end Please note that P3.3, P3.4 and P3.5 are connected to transistors that control which 7-segment display is currently active. In this way, I can control 3 7-segment displays with values only on P1. And yes, I have been programming for many years. I have also done x86 assembly programming. |