Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
06/13/11 14:36
Modified:
  06/13/11 14:40

Read: times


 
#182639 - simulator
Responding to: ???'s previous message
I use Proteus VSM simulator. I have no hardware. The image in my previous post is the actual simulator.

OK. If I'm stuck right now I'll move to other parts of my task and come back to this later. I'll finish keyboard and menu first then.

I've stripped everything:

getSensorData1:
    ; preserve status - begin
    push    PSW             ; Program PSW - program status word
    push    ACC
    push    DPH             ; Preserver DPTR - high & low byte
    push    DPL
    ; preserve status - end

    ; restore status
    pop     PSW             ; Restore PSW - before exit
    pop     ACC
    pop     DPH             ; Restore DPTR
    pop     DPL
    reti

 


...and it still crashes sometimes.

Thank you very much for your time!


BTW. The sample (I've found it somewhere) below does something very similar to what I'm doing but it does work in this simulator. Mine doesn't.



; @ 11.0592mhz
;d4 - p2.0
;d5 - p2.1
;d6 - p2.2
;d7 - p2.3
;en - p2.7
;rs - p2.5

var1 equ r0		;var1 uses regiser r0 of bank 0
temp equ r1		;temp uses regiser r1 of bank 0
delay equ r2		;delay uses regiser r2 of bank 0
temp1 equ r3		;temp1 uses regiser r3 of bank 0
temp2 equ r4		;temp2 uses regiser r4 of bank 0
counter1 equ r5         ;counter1 uses regiser r5 of bank 0
counter2 equ r6         ;counter2 uses regiser r6 of bank 0

lcd_port equ p2         ;lcd connected to port2
en equ p2.7             ;enable connected to p2.7
rs equ p2.5             ;register select to p2.5

;  r/w pin connected to ground

;*******************************************************
;-------------------- "main program" -------------------
;*******************************************************

org 00h        ; program start here when power up
jmp main

org 03h        ; program start here when external interrupt 0 occur
;jmp one
mov A, #1
mov A, #2
reti

org 13h        ; program start here when external interrupt 1 occur
jmp two


main:
mov ie,#85h          ; enable external interrupts
call lcd_init        ; initialize lcd
mov dptr,#str_enter  ; point to string 1
acall lcd_str        ; display string
mov dptr,#str_enter1 ; point to string 2
mov a,#0c0h          ; lcd 2nd line address
acall lcd_cmd        ; comand to lcd
acall lcd_str        ; display string 
mov dptr,#str_enter2 ; point to string 3
mov a,#0c8h          ; lcd 2nd line location address
acall lcd_cmd        ; comand to lcd
acall lcd_str        ; display string 

jmp $




;*******************************************************
;-----------------" reseting the lcd "------------------
;*******************************************************

lcd_reset:                  ;lcd reset sequence
        mov lcd_port, #0ffh
        mov delay,#20           ;20ms delay
        acall delayms
        mov lcd_port, #83h      ;data = 30h, en = 1, first init
        mov lcd_port, #03h      ;data = 30h, en = 0
        mov delay,#15           ;delay 15ms
        acall delayms
        mov lcd_port, #83h      ;second init, data = 30h, en = 1
        mov lcd_port, #03h      ;data = 30h, en = 0
        mov delay,#5            ;delay 5ms
        acall delayms
        mov lcd_port, #83h      ;third init
        mov lcd_port, #03h
        mov delay,#5            ;delay 5ms
        acall delayms
        mov lcd_port, #82h      ;select data width (20h for 4bit)
        mov lcd_port, #02h      ;data = 20h, en = 0
        mov delay,#5            ;delay 5ms
        acall delayms
        ret

;*******************************************************
;-----------------" lcd initilizing "-------------------
;*******************************************************


lcd_init:
        acall lcd_reset         ;call lcd reset sequence
        mov a,#28h              ;4-bit, 2 line, 5x7 dots
        acall lcd_cmd           ;call lcd command
        mov a,#0eh              ;display on cursor off
        acall lcd_cmd           ;call lcd command
        mov a,#06h              ;set entry mode (auto increment)
        acall lcd_cmd           ;call lcd command
        mov a,#80h              ;bring cursor to line 1
        acall lcd_cmd           ;call lcd command
        ret

;*******************************************************
;----------------" lcd command write "------------------
;*******************************************************

lcd_cmd:                  ;lcd command routine
        mov temp,a            ;save a copy of command to temp
        swap a                ;swap to use higher nibble
        anl a,#0fh            ;mask the first four bits
        add a,#80h            ;enable = 1, rs = 0
        mov lcd_port,a        ;move it to lcd port
        anl a,#0fh            ;enable = 0, rs = 0
        mov lcd_port,a        ;move to lcd port

        mov a,temp            ;reload the command from temp
        anl a,#0fh            ;mask first four bits
        add a,#80h            ;enable = 1
        mov lcd_port,a        ;move to port
        anl a,#0fh            ;enable = 0
        mov lcd_port,a        ;move to lcd port

        mov delay,#2          ;delay 2 ms
        acall delayms
        ret

;*******************************************************
;------------------" lcd data write "-------------------
;*******************************************************

lcd_dat:                  ;lcd data routine
        mov temp,a            ;keep copy of data in temp
        swap a                ;we need higher nibble
        anl a,#0fh            ;mask first four bits
        add a,#0a0h           ;enable = 1, rs = 1
        mov lcd_port,a        ;move to lcd port
        nop
        clr en                ;enable = 0

        mov a,temp            ;reload the data from temp
        anl a,#0fh            ;we need lower nibble now
        add a,#0a0h           ;enable = 1, rs = 1
        mov lcd_port,a        ;move to lcd port
        nop
        clr en                ;enable = 0

        mov delay,#2          ;delay 2ms
        acall delayms
        ret


;*******************************************************
;--------------" delay of milli seconds "---------------
;*******************************************************

delayms:
mov var1,#230
d:
nop
nop
djnz var1,d
djnz delay,delayms
ret

;*******************************************************
;--------------" displaying string data "---------------
;*******************************************************

lcd_str:
clr a
movc a,@a+dptr
jz lcd_str_end
inc dptr
acall lcd_dat
sjmp lcd_str
lcd_str_end:
ret


one:
inc counter1
mov delay,#250           ;delay 250ms
acall delayms
mov a,counter1          ; converting decimal no into ascii to display on lcd
mov b,#10
div ab
mov temp2,b
mov b,#10
div ab
add a,#30h
mov temp1,a
mov a,#0c4h
acall lcd_cmd
mov a,temp1
acall lcd_dat
mov a,b
add a,#30h
acall lcd_dat
mov a,temp2
add a,#30h
acall lcd_dat
reti

two:
inc counter2
mov delay,#250           ;delay 250ms
acall delayms
mov a,counter2           ; converting decimal no into ascii to display on lcd
mov b,#10
div ab
mov temp2,b
mov b,#10
div ab
add a,#30h
mov temp1,a
mov a,#0cch
acall lcd_cmd
mov a,temp1
acall lcd_dat
mov a,b
add a,#30h
acall lcd_dat
mov a,temp2
add a,#30h
acall lcd_dat
reti

;*******************************************************
;------------------" look up tables "-------------------
;*******************************************************

str_enter:
db "hello world", 41, 0C5h, 41, 11000000b, 0h

str_enter1:
db "C1= ",0h

str_enter2:
db "C2= ",0h

end




 







List of 12 messages in thread
TopicAuthorDate
Timers/LCD and Interrupts problem            01/01/70 00:00      
   show sourcecode and BTW...            01/01/70 00:00      
      thanks            01/01/70 00:00      
         Using Google Documents....arrrgh.            01/01/70 00:00      
            I hope that's better            01/01/70 00:00      
   Button Connect to Interrupt :-(            01/01/70 00:00      
      but it can be good exercise            01/01/70 00:00      
         hmmm            01/01/70 00:00      
            irq pin            01/01/70 00:00      
               simulator            01/01/70 00:00      
                  push pop            01/01/70 00:00      
                     :(            01/01/70 00:00      

Back to Subject List