; Simulate one of those 8 Ball things ; Put message out the serial port ; ; Charles R. Ott ; June 9, 1998 .nolist ;Suppress listing of include file .include "2313def.inc" ;Define chip particulars .list ;***** Global register variables .def wreg =R20 ;General use working register .cseg ; Interrupt vectors .org 0 rjmp reset ;Reset Vector ; Main program entry point on reset reset: ldi wreg,RAMEND ;Init Stack Pointer out SPL,wreg ldi wreg,25 out UBRR,wreg ;Set baud rate generator ldi wreg,0b00001000 out UCR,wreg ;Enable UART tx w/o interrupt ldi wreg,21 rcall putchar ; Main program loop main: ldi ZH,high(msg0*2) ldi ZL,low(msg0*2) rcall puts ldi ZH,high(msg1*2) ldi ZL,low(msg1*2) rcall puts ldi ZH,high(msg2*2) ldi ZL,low(msg2*2) rcall puts rjmp main ;Do it forever..... puts: lpm ;Get next character from ROM tst R0 ;See if at end of message breq putx ;If so, quit mov wreg,R0 ;Get character rcall putchar putnext: adiw ZL,1 ;Increment Z-pointer rjmp puts ;Loop for more putx: ret putchar: sbis USR,UDRE ;Is UART transmitter ready? rjmp putchar ;If not, wait out UDR,wreg ;Put character to UART rcall delay ret delay: ldi R24,0 del1: ldi R25,0 del2: dec R25 brne del2 dec R24 brne del1 ret msg0: .db "Now is the time for all good men to come to the aid ",0 msg1: .db "of their country The quick brown fox jumped over the " ,0 msg2: .db "lazy dog's back 1234567890 times ",0