.equ locat, 0xF000 ;Location for this program ;82C55 memory locations .equ port_d, 0xF900 .equ port_e, 0xF901 .equ port_f, 0xF902 .equ port_def_pgm, 0xF903 ;for a more sophisticated example of how to manipulate the ;82C55 port pins, see: ; http://www.pjrc.com/tech/8051/board4/82c55.html ; Serial I/O in PAULMON2 .equ cout, 0x0030 .equ cin, 0x0032 .equ phex, 0x0034 .equ pstr, 0x0038 .equ newline, 0x0048 .equ pint8u, 0x004D .equ esc, 0x003E ;paulmon2's check for esc key .org locat .db 0xA5,0xE5,0xE0,0xA5 ;signiture bytes .db 35,255,0,0 ;id (35=prog) .db 0,0,0,0 ;prompt code vector .db 0,0,0,0 ;reserved .db 0,0,0,0 ;reserved .db 0,0,0,0 ;reserved .db 0,0,0,0 ;user defined .db 255,255,255,255 ;length and checksum (255=unused) .db "Blink LEDs",0 ;max 31 characters, plus the zero .org locat+64 ;executable code begins here startup: mov dptr, #port_def_pgm mov a, #128 movx @dptr, a ;make all pins output begin: mov dptr, #table loop: clr a movc a, @a+dptr ;get pattern to display mov r2, a acall update inc dptr lcall esc jc exit clr a movc a, @a+dptr ;get time to display this pattern mov r3, a jz begin acall delay inc dptr acall print_info sjmp loop exit: ljmp 0 update: push dph push dpl mov dptr, #port_e movx @dptr, a pop dpl pop dph ret delay: mov r0, a dly2: mov r1, #250 dly3: nop nop nop nop nop nop djnz r1, dly3 djnz r0, dly2 ret print_info: push dph push dpl mov dptr, #msg_pattern lcall pstr mov a, r2 lcall phex mov dptr, #msg_delay lcall pstr mov a, r3 lcall pint8u lcall newline pop dpl pop dph ret table: .db 01111111b, 90 .db 00111111b, 70 .db 00011111b, 50 .db 10001111b, 40 .db 11000111b, 40 .db 11100011b, 40 .db 11110001b, 40 .db 11111000b, 50 .db 11111100b, 70 .db 11111110b, 90 .db 11111100b, 70 .db 11111000b, 50 .db 11110001b, 40 .db 11100011b, 40 .db 11000111b, 40 .db 10001111b, 40 .db 00011111b, 50 .db 00111111b, 70 .db 255,0 msg_pattern: .db "Pattern=0x",0 msg_delay: .db " for delay=",0