Old example:

An example program to be debugged has the keyboard monitor included at the end. This program can be downloaded and assembled without modification to test the monitor. The example program under test transmits a number and a constant string to the PC terminal emulator as long as RXchar='g', and stops if RXchar<>'g'. Note that this use of a 'g' command is not the monitor command, but the program under test. The monitor does nothing until the user presses 'esc' on the PC keyboard, then displays a '>' prompt. At this point any of the other monitor commands may be used. Near the beginning of the program there is a short macro defined which calls the UART RXdone ISR as a subroutine. This produces a software interrupt to enter the monitor. The macro is shown below.

.macro break 
    cli 
    rcall RXisr 
.endmacro

Whenever the symbol break is inserted into the program under test, the monitor will be entered without a keystroke from the user. All of the monitor commands can them be used.

Note that the example program defines a interrupt vector to RXisr and defines a register called RXchar to receive characters. Due to the way registers are saved in the ISR, RXchar must be a register below r27. The program under test might start with:

;a received character passed back from RXisr
.def	RXchar	=r20	;RXchar must be in a register below r27

;The following macro calls the ISR as if it is a subroutine
;You can put it your program whenever you want to enter the 
;keyboard monitor

.macro break
	cli
	rcall Monitor
.endmacro

.cseg
.org $0000
	rjmp 	RESET	;reset entry vector
	reti		
	reti
	reti
	reti
	reti
	reti
	reti
	reti		
	rjmp	RXisr	;UART receive and monitor entry
	reti	
	reti
	reti

RESET:	ldi	temp, LOW(RAMEND) ;setup stack pointer
	out 	SPL, temp
	ldi	temp, HIGH(RAMEND)
	out	SPH, temp

	;setup UART -- enable RXdone int, and RX, TX pins
	ldi 	temp, 0b10011000
	out 	UCR, temp
	;set baud rate to 9600
	ldi	temp, 25   ;9600 baud
	out	UBRR, temp

  	;the rest of the program under test
	...
	...
	;at the end iclude the monitor
.include "keymon1.inc"

An include file with just the keyboard monitor can be inserted at the end of any program unter test.