Voting

Category

assembly language

Bookmarking

Del.icio.us Digg Diigo DZone Earthlink Google Kick.ie
Windows Live LookLater Ma.gnolia Reddit Rojo StumbleUpon Technorati

Language Assembler (8051)

Date:04/20/05
Author:Bill Webster
URL:n/a
Comments:0
Info:n/a
Score: (3.11 in 37 votes)
;/ bottles on the wall in 8051 assembler
;/
;/ bill webster 2003
;/____________________________________________________________________________

; sfr definitions
SCON  data 0x98
SBUF  data 0x99
PCON  data 0x87
TMOD  data 0x89
TH1   data 0x8D
B     data 0xF0

; bit definitions
TI    bit 0x99
TR1   bit 0x8E

;/ start vector
;/____________________________________________________________________________
cseg at 0

    jmp start


cseg at 0x30

;/ print number in r0 as decimal - limited to numbers in [0..99]
;/____________________________________________________________________________
putn:
        mov a, r0
        mov b, #10
        div ab
        jz units
        call printDigit

units:
        mov  a, b

        ; fall through

;/ convert number in [0..9] to ascii digit & print
;/____________________________________________________________________________
printDigit:

        add a, #'0'

        ; fall through

;/ character out
;/____________________________________________________________________________
putch:

        jnb TI, putch
        clr TI
        mov SBUF, a
        ret

;/ print string at dptr
;/____________________________________________________________________________
puts:
        clr a
        movc a, @a + dptr
        jnz more
        ret

more:
        call putch
        inc dptr
        jmp puts

;/
;/____________________________________________________________________________
start:

        ; initialize serial port
        orl TMOD, #0x20
        setb TR1
        mov SCON, #0x50

        mov TH1, #0xFE
        orl PCON, #0x80
        setb TI

        ; bottles to begin with
        mov r0, #99

verse:
        call putn

        mov dptr, #line1
        call puts

        call putn

        mov dptr, #line2
        call puts

        dec r0
        call putn

        mov dptr, #line1
        call puts

        mov dptr, #eoln
        call puts

        cjne r0, #0, verse

        jmp $

;/ string constants
;/____________________________________________________________________________

cr      equ 0x0D
lf      equ 0x0A

line1:  db ' bottles of beer on the wall,'
eoln:   db cr, lf, 0

line2:  db ' bottles of beer,', cr, lf
        db 'Take one down, pass it around,', cr, lf, 0

end

Download Source | Write Comment

Alternative Versions

Comments

Download Source | Write Comment

Add Comment

Please provide a value for the fields Name, Comment and Security Code.
This is a gravatar-friendly website.
E-mail addresses will never be shown.
Enter your e-mail address to use your gravatar.

Please don't post large portions of code here! Use the form to submit new examples or updates instead!

Name:

eMail:

URL:

Security Code:
  
Comment: