Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

digital clock program in assembly code

Status
Not open for further replies.

JML11

Newbie level 2
Joined
Sep 10, 2012
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,315
Hello,
I am hoping someone can help me out. I am using a fox11 trainer board and have to write a program in assembly code for a digital clock. I keep getting errors and am not sure what I am doing incorrectly.
I am looking for some direction, please!

DB0: equ 1
DB1: equ 2
*

STACK: equ $8FFF

ONE_MS equ 167 ; for 8 MHz 1000us/6us=167
FIVE_MS equ 835
TEN_MS equ 1670


PORTF equ $1403
d40us: equ 15 ; 15x6us= 90 us, 60us ok
REG_SEL: equ DB0 ; 0=reg, 1=data
ENABLE: equ DB1
NOT_REG_SEL: equ $FE
NOT_ENABLE: equ $FD
NOT_RESET equ $F7 ; force bit 3 = 0

org 0
temp1: rmb 1
pfimg: rmb 1

LCDimg: equ pfimg
LCD_RSimg: equ pfimg
LCD_ENimg: equ pfimg

LCD: equ PORTF
LCD_RS: equ PORTF
LCD_EN: equ PORTF
*
org $D000
jmp start
LOOPB EQU
LDAA #$03
JSR WRITE_NIBBLE
LDX #$0480
LOOP1 EQU
DEX
BNE LOOP1
DECB
BNE LOOPB
LDX #LCD_INIT_TABLE
INIT1 EQU
LDAA $00,X
BEQ LCD_INIT_DONE
BSR WRITE_C_BYTE
INX
BRA INIT1
LCD_INIT_DONE EQU
LDX #DIS_1_2
LDY #DISPLAY_1_2
COPY_ADDITIONAL EQU
LDAA $00,Y
STAA $00,X
INX
INY
CPX #DIS_END
BNE COPY_ADDITIONAL
COPYJMP EQU
LDX INTJMP
STX $100-33
LDAA INTJMP+2
STAA $100-33+2
JSR INC_TIMER
STAA $1022
LDAA #$14
STAA $00
TPA
ANDA #$EF
TAP
LDA #$80
STA $1023
INITVAR EQU
LDX #$0000
LDAA #40
STAA INT_COUNT
LDX #DISPLAY_1_1
BSR WRITE_LINE_1
LDX #DIS_1_2
BSR WRITE_LINE_2
LOOPHERE EQU
BRA LOOPHERE
DELAY4BF EQU
DELAY EQU
PSHB
LDB #$10
D_LOOP DECB
BNE D_LOOP
PULB
RTS
WRITE_LINE_1 EQU
PSHA
PSHX
LDAA #$80
BRA WRITE_LINE
WRITE_LINE_2 EQU
PSHA
PSHX
LDAA #$A8
WRIE_LINE EQU
BSR WRITE_C_BYTE
NEXT_CHARACTER EQU
LDA $00,X
BEQ WRITE_LINE_DONE
BSR WRITE_D_BYTE
INX
BRA NEXT_CHARACTER
WRITE_LINE_DONE EQU
PULX
PULA
RTS
WRITE_D_BYTE EQU
PSHX
LDX #$501F
BRA WRITE_LCD_BYTE
WRIE_C_BYTE EQU
PSHX
LDX #$400F
WRITE_LCD_BYTE EQU
STX MODE_EH
PULX
PSHA
LSRA
LSRA
LSRA
LSRA
BSR DELAY4BF
BSR WRITE_NIBBLE
PULA
PSHA
BSR WRITE_NIBBLE
CMPA #$01
BNE NOT_CLEAR
LDAA #$20
DO_NOT_CLEAR EQU
BSR DELAY4BF
DECA
BNE DO_NOT_CLEAR
NOT_CLEAR EQU
PULA
RTS
WRITE_NIBBLE EQU
PSHA
ANDA #$0F
ORAA MODE_EH
STAA $1003
ANDA MODE_EL
STAA $1003
PULA
RTS
INTJMP JMP INTERRUPT
INC_TIMER EQU
LDD #TIMER_COUNT
ADDD $1016
STD $1016
LDA #$80
STA $1023
RTS
INTERRUPT EQU
DEC INT_COUNT
BNE OVER
LDAA #40
STAA INT_COUNT
BSR INC_DISPLAY
LDX #DIS_1_2
BSR WRITE_LINE_2
OVER EQU
BSR INC_TIMER
RTI
INC_DISPLAY EQU
LDX #DIS_1_2
BSR INC_TIME
HOOK EQU
RTS
INC_TIME EQU
INC $0F,X
LDAA $0F,X
CMPA #'5
BNE OVER_COLON
LDAA #'
STAA $0E,X
STAA $0B,X
STAA $08,X
BRA TIME_DONE
OVER_COLON EQU
CMPA #'9+1
BNE TIME_DONE
LDAA #'0
STAA $0F,X
LDAA #':
STAA $0E,X
STAA $0B,X
STAA $08,X
DEX
DEX
BSR INC_DIGITS
CMPA #'6
BNE TIME_DONE
BSR ZERO_DIGIT
CMPA #'6
BNE TIME_DONE
BSR ZERO_DIGIT
CPD #'2'4
BNE TIME_DONE
LDD #'0'0
STD $0E,X
TIME_DONE EQU
RTS
INC_DIGITS EQU
INC $0F,X
LDAA $0F,X
CMPA #'9+1
BNE DIG_DONE
LDAA #'0
STAA $0F,X
INC $0E,X
DIG_DONE EQU
LDD $0E,X
RTS
ZERO_DIGIT EQU
LDAA #'0
STAA $0E,X
DEX
DEX
DEX
BSR INC_DIGITS
RTS
FCC "CLOCK PROJECT"
FCB $00
FCC "HMST 00:00:00:0"
FCB $00
 

The 68HC11 was one of my favorite processors, but it's been a long time.
I think it's going to be hard for anyone to follow that (which is why C code is preferable these days,
and compilers are available for the 68HC11).
Anyway, probably your best bet is to write a shorter program (e.g. to just flash an LED), then write a
larger program to print a character to your LCD display, then extend it to a set of characters,
then finally incorporate your clock function.

Another approach is to use a simulator and step through your code. Personally I would still write the
code incrementally however, and test frequently to ensure the code is behaving as expected.
 

Unfortunately this is a project for a class I am in and despite making the corrections that the professor suggested, the program keeps coming up with error messages. I do agree that a shorter program would be easier but I need to do the program in its entirety and this is along the lines of what my professor wants (minus the errors of course)....
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top