Yahoo Groups archive

AVR-Chat

Index last updated: 2026-04-28 22:41 UTC

Thread

still no working interrupt )-:

still no working interrupt )-:

2007-01-08 by Thomas Keller

I don't get it.  My stand alone interrupt routine works, but I cannot 
seem to get interrupts to work in this program.  here is the code (with 
comments which reveal proprietary information redacted out):

;
;==============================================================================
;
;    NAME:        beacon.asm
;
;    PROJECT:    *** REDACTED ***
;
;    VERSION:    v0.1a
;
;    DATE:        01/03/2007
;
;    AUTHOR:        Thomas J Keller
;
;    COPYRIGHT:    Copyright 2007, All Rights Reserved
;
;    DESCRIPTION:    *** REDACTED***
;
;    HISTORY:
;    +===+=======+======================================================+
;     | who |   date       |   description                              
                                                                         |
;    
+-----+----------+---------------------------------------------------------------------------------+
;     |  tjk   | 07/01/03 |  intialize program file                    
                                                                       |
;    
+-----+----------+---------------------------------------------------------------------------------+
;    |  tjk   | 07/01/08  |  add symbolic names for registers and 
constants, for clarity                                  |
;    
+-----+----------+---------------------------------------------------------------------------------+
;    +==================================================================+


.include "tn25def.inc"

;
; Define the variables
;

;
;    .defines
;

.def    TEMP        =    r16
.def    HICOUNT        =    r21            ; HIGHBYTE byte value for timer 0
.def    LOCOUNT     =    r22            ; LOWBYTE byte value for timer
.def    HILOFLAG    =    r23            ; HIGHBYTE/LOWBYTE byte flag
.def    PWMSET        =    r18            ; value to be passed to PWM 
control register
.def    TABLEADDR     =    r19            ; EEPROM table address register
.def    DIRFLAG        =    r17            ; table traversal direction 
control flag

;
;    .equates
;

.equ    TRUE        =    0xff        ; true value
.equ    FALSE        =    0x00        ; false value
.equ    DOWN        =    0xff        ; up count flag value
.equ    UP            =    0x00        ; down count flag vlaue
.equ    HIGHBYTE    =    0xff        ; HIGHBYTE byte flag value
.equ    LOWBYTE        =    0x00        ; LOWBYTE byte flag value


; Define Reset and interrupt vectors, if any
;
RESET:
   rjmp BEGIN
   reti                          ; Addr $01
   reti                          ; Addr $02
   reti                          ; Addr $03
   reti                          ; Addr $04
   rjmp    TIMER0                  ; timer/counter 0 overfLOWBYTE interrupt
   reti                          ; Addr $06
   reti                          ; Addr $07
   reti                          ; Addr $08
   reti                          ; Addr $09
   reti                          ; Addr $0A
   rjmp    TIMER0                     ; timer/counter 0 compare match A 
interrupt
   reti                          ; Addr $0C
   reti                          ; Addr $0D
   reti                          ; Addr $0E
   reti                         ; Addr $0F
   reti                         ; Addr $10



 
;    this table provides the data for the intensity curve needed for
;    xxxxxxxxxxxxxxx.  the data represent the value sin^3 * 255 for
;    each angle from 0 through 90  at .9 degree increments

    .eseg

TABLE:
    .db    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 3, 4, 5, 6, 6
    .db    8, 9, 10, 11, 13, 14, 16, 18, 20, 22, 24, 26, 29, 31, 34, 36
    .db    39, 44, 48, 52, 55, 59, 62, 66, 70, 74, 78, 82, 86, 90, 94, 99
    .db    103, 108, 112, 117, 121, 126, 130, 135, 140, 144, 149, 153
    .db    158, 163, 167, 172, 176, 180, 185, 189, 193, 197, 201, 205
    .db    209, 212, 216, 219, 223, 226, 229, 232, 234, 237, 239, 242
    .db    244, 246, 247, 249, 250, 252, 253, 254, 255, 255, 255
     
;
     .cseg

;
; Program starts here after Reset
;

BEGIN:

    ldi    TEMP,    RAMEND                    ; initialize stack pointer
    out    SPL,    TEMP

;
;    set timer controsl and interrupts
;
   
    ldi    TEMP,    0x02                    ; set WGM1:0 to 0x02
    out    TCCR0A,    TEMP                    ; and store in TCCR0A
    ldi    TEMP,    0x04                    ; set wgm2 and CS2:0
    out TCCR0B,    TEMP                    ; store in TCCR0B

    ldi    TEMP,    0x40;                    ; enable timer/counter 0 
compare match A interrupt
    out    TIMSK,    TEMP                    ; store to timer/counter 0 
Interrupt mask register

    sei                                    ; enable global interrupts

;
;    set up timer delay for ~~.01 second
;
;    counter clock will be prescaled by 256 to make the .01 second count 
easier
;

    ldi    LOCOUNT,    0x38                ;  load LOWBYTE byte of delay 
count
    ldi    HICOUNT,    0xff                ; load HIGHBYTE byte value 
for delay count
    out    OCR1A,    HICOUNT                    ; store in timer/counter 
register   

    ldi    TEMP,    0xe5                    ; load the control value for 
TCCR1
                                        ; CTC1 set, PWMa set, COM1A set to
                                        ; toggle on match, timer clock set
                                        ; for system clock divided by 256
`    out    TCCR1,    TEMP                    ; store in TCCR1

   
    ldi    HILOFLAG,    HIGHBYTE                ; HIGHBYTE/LOWBYTE byte 
flag for timer
                                        ; control (see interrupt handler 
for more)

;
;    this code sets the default initial table adress at 0
;

    ldi    TABLEADDR,    0x00                ; first addresss in EEPROM 
table data
    ldi DIRFLAG,    UP                    ; direction control byte, 0 = up

    rjmp    MAIN                        ; go to the main loop in the code

NEXT:

    ldi    TEMP,    UP                        ; compare value
    cp    TEMP,    DIRFLAG                    ; check direction bit for 
value
    breq    UPCNT                        ; it's set for an up count
   
    ldi    TEMP,    UP                        ; compare value
    dec    TABLEADDR                        ; count the table pointer 
down one
    cp    TABLEADDR,    TEMP                ; at the bottom yet?
    breq    CONT0                        ; nope. continue
    RJMP    QUIT0                        ; all done, depart

UPCNT:
    ldi    TEMP,    0x63                    ; compare value
    inc    TABLEADDR                        ; increment table pointer
    cp    TABLEADDR,     TEMP                ; 99 decimal, end of table
    breq    FIXIT0                        ; deal with table overfLOWBYTE
    rjmp    QUIT0                        ; all done, depart

CONT0:

    ldi    DIRFLAG,    UP                    ; set to count up again
    rjmp    QUIT0

FIXIT0:

    ldi    DIRFLAG,    DOWN                ; reset direction flag for 
down count
           
QUIT0:

    ret                                    ; return from subrouttine 
call   

;
;    read a value from the EEPROM table
;

TABLEDATA:

    out    EEARL,     TABLEADDR                        ; move table 
value address to EEPROM
                                        ; address register LOWBYTE byte

    rcall    NEXT                        ; go grab next tabel address    
                       
    sbi EECR,EERE
    in    PWMSET,        EEDR                ; read data from EEPROM 
data register
    out    OCR1A,    PWMSET                    ; output to PWM control 
register

    ret                                    ; all done, go home   

;
;    timer interrupt handler
;

TIMER0:

    ldi    TEMP,    HIGHBYTE
    cp    HILOFLAG,    TEMP                ; LOWBYTE byte or HIGHBYTE/
    breq    HIGHBYTEFIX                    ; this is the LOWBYTE bytem 
go fix it for the HIGHBYTE byte

LOOP1:
    ldi    HILOFLAG,    LOWBYTE                ; reset for next LOWBYTE 
byte count
    out    OCR0A,     LOCOUNT                    ; reload the timer for 
the countdown, LOWBYTE byte

    rcall    TABLEDATA                    ; go do the output needed
   
    reti                                ; go to sleep until next timer 
interrupt

HIGHBYTEFIX:

    ldi    HILOFLAG,    HIGHBYTE                ; set flag to HIGHBYTE 
byte indicator
    out    TCNT1,    HICOUNT                    ; set the timer for the 
HIGHBYTE byte countdown
    rjmp    LOOP1                        ; now go finish interrupt handler

;
;    this is the main control loop, an infinite loop
;

MAIN:

;    rcall    TABLEDATA
    sleep
    rjmp    MAIN                        ; go back to sleep until next 
interrupt
                                        ; in other words, loop forever

    .exit

Re: [AVR-Chat] still no working interrupt )-:

2007-01-08 by Richard Reeves

I think you're setting the wrong bits in TIMSK.  If you want to 
enable Compare A and the Overflow for Timer0, you need to load TIMSK 
with $12 according to the simulation I have running now, which works 
id I manually set those bits in TIMSK.




Richard
> 
> I don't get it.  My stand alone interrupt routine works, but I cannot
> seem to get interrupts to work in this program.  here is the code
> (with comments which reveal proprietary information redacted out):
> 
>     ldi    TEMP,    0x02                    ; set WGM1:0 to 0x02
>     out    TCCR0A,    TEMP                    ; and store in TCCR0A
>     ldi    TEMP,    0x04                    ; set wgm2 and CS2:0 out
>     TCCR0B,    TEMP                    ; store in TCCR0B
> 
>     ldi    TEMP,    0x40;                    ; enable timer/counter 0
> compare match A interrupt
>     out    TIMSK,    TEMP                    ; store to timer/counter
>     0 
> Interrupt mask register


---
"Sve je bilo tako tiho a nemirno..."
   http://www.musicvangogh.com/

Re: [AVR-Chat] still no working interrupt )-:

2007-01-08 by Richard Reeves

...And your interrupt vector for Compare match A is wrong.  It's the 
one before it that you want (I just single-stepped it and it hit the 
reti on the line before, as indicated below with asterisks.  Have a 
look at page 46 of the data-sheet.  With that changed, it hits the 
interrupt every 3.6ms with a 4MHz clock.



Richard 
RESET:
   rjmp BEGIN
   reti			;Addr $01
   reti			;Addr $02
   reti			;Addr $03
   reti			;Addr $04
   rjmp    TIMER0	;timer/counter 0 overfLOWBYTE interrupt
   reti			; Addr $06
   reti			; Addr $07
   reti			; Addr $08
   reti			; Addr $09
***reti			; Addr $0A***
   rjmp    TIMER0 	; timer/counter 0 compare match A interrupt
   reti			; Addr $0C
   reti			; Addr $0D
   reti			; Addr $0E
   reti			; Addr $0F
   reti			; Addr $10> 


---
"Sve je bilo tako tiho a nemirno..."
   http://www.musicvangogh.com/

Re: [AVR-Chat] still no working interrupt )-:

2007-01-08 by dlc@frii.com

I don't have time to pore over your code looking for the smoking gun,
but there are two comments I will make that can affect what you are
doing and how the missing interrupt could be going awry.

1) You don't save status in your ISR.  You should save it and retrieve it
before exiting the ISR.  Without doing that you will munge the workings of
the non-ISR code that is running.  Save any register that you might be
fiddling with in the ISR as well if you need to.

2) Since you are having problems getting the ISR to work, putting "RETI"
instructions in the interrupt vector table is not wise.  I would rjmp all
unused interrupt vectors to a single routine, set an LED and save a value
telling which ISR got hit, if you sorted that thing out.  Then I'd RETI
from there.  This might help you to find a rogue interrupt or a mistake in
your interrupt coding.

DLC
Show quoted textHide quoted text
> I don't get it.  My stand alone interrupt routine works, but I cannot
> seem to get interrupts to work in this program.  here is the code (with
> comments which reveal proprietary information redacted out):
>
> ;
> ;==============================================================================
> ;
> ;    NAME:        beacon.asm
> ;
> ;    PROJECT:    *** REDACTED ***
> ;
> ;    VERSION:    v0.1a
> ;
> ;    DATE:        01/03/2007
> ;
> ;    AUTHOR:        Thomas J Keller
> ;
> ;    COPYRIGHT:    Copyright 2007, All Rights Reserved
> ;
> ;    DESCRIPTION:    *** REDACTED***
> ;
> ;    HISTORY:
> ;    +===+=======+======================================================+
> ;     | who |   date       |   description
>                                                                          |
> ;
> +-----+----------+---------------------------------------------------------------------------------+
> ;     |  tjk   | 07/01/03 |  intialize program file
>                                                                        |
> ;
> +-----+----------+---------------------------------------------------------------------------------+
> ;    |  tjk   | 07/01/08  |  add symbolic names for registers and
> constants, for clarity                                  |
> ;
> +-----+----------+---------------------------------------------------------------------------------+
> ;    +==================================================================+
>
>
> .include "tn25def.inc"
>
> ;
> ; Define the variables
> ;
>
> ;
> ;    .defines
> ;
>
> .def    TEMP        =    r16
> .def    HICOUNT        =    r21            ; HIGHBYTE byte value for timer
> 0
> .def    LOCOUNT     =    r22            ; LOWBYTE byte value for timer
> .def    HILOFLAG    =    r23            ; HIGHBYTE/LOWBYTE byte flag
> .def    PWMSET        =    r18            ; value to be passed to PWM
> control register
> .def    TABLEADDR     =    r19            ; EEPROM table address register
> .def    DIRFLAG        =    r17            ; table traversal direction
> control flag
>
> ;
> ;    .equates
> ;
>
> .equ    TRUE        =    0xff        ; true value
> .equ    FALSE        =    0x00        ; false value
> .equ    DOWN        =    0xff        ; up count flag value
> .equ    UP            =    0x00        ; down count flag vlaue
> .equ    HIGHBYTE    =    0xff        ; HIGHBYTE byte flag value
> .equ    LOWBYTE        =    0x00        ; LOWBYTE byte flag value
>
>
> ; Define Reset and interrupt vectors, if any
> ;
> RESET:
>    rjmp BEGIN
>    reti                          ; Addr $01
>    reti                          ; Addr $02
>    reti                          ; Addr $03
>    reti                          ; Addr $04
>    rjmp    TIMER0                  ; timer/counter 0 overfLOWBYTE
> interrupt
>    reti                          ; Addr $06
>    reti                          ; Addr $07
>    reti                          ; Addr $08
>    reti                          ; Addr $09
>    reti                          ; Addr $0A
>    rjmp    TIMER0                     ; timer/counter 0 compare match A
> interrupt
>    reti                          ; Addr $0C
>    reti                          ; Addr $0D
>    reti                          ; Addr $0E
>    reti                         ; Addr $0F
>    reti                         ; Addr $10
>
>
>
>
> ;    this table provides the data for the intensity curve needed for
> ;    xxxxxxxxxxxxxxx.  the data represent the value sin^3 * 255 for
> ;    each angle from 0 through 90  at .9 degree increments
>
>     .eseg
>
> TABLE:
>     .db    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 3, 4, 5, 6, 6
>     .db    8, 9, 10, 11, 13, 14, 16, 18, 20, 22, 24, 26, 29, 31, 34, 36
>     .db    39, 44, 48, 52, 55, 59, 62, 66, 70, 74, 78, 82, 86, 90, 94, 99
>     .db    103, 108, 112, 117, 121, 126, 130, 135, 140, 144, 149, 153
>     .db    158, 163, 167, 172, 176, 180, 185, 189, 193, 197, 201, 205
>     .db    209, 212, 216, 219, 223, 226, 229, 232, 234, 237, 239, 242
>     .db    244, 246, 247, 249, 250, 252, 253, 254, 255, 255, 255
>
> ;
>      .cseg
>
> ;
> ; Program starts here after Reset
> ;
>
> BEGIN:
>
>     ldi    TEMP,    RAMEND                    ; initialize stack pointer
>     out    SPL,    TEMP
>
> ;
> ;    set timer controsl and interrupts
> ;
>
>     ldi    TEMP,    0x02                    ; set WGM1:0 to 0x02
>     out    TCCR0A,    TEMP                    ; and store in TCCR0A
>     ldi    TEMP,    0x04                    ; set wgm2 and CS2:0
>     out TCCR0B,    TEMP                    ; store in TCCR0B
>
>     ldi    TEMP,    0x40;                    ; enable timer/counter 0
> compare match A interrupt
>     out    TIMSK,    TEMP                    ; store to timer/counter 0
> Interrupt mask register
>
>     sei                                    ; enable global interrupts
>
> ;
> ;    set up timer delay for ~~.01 second
> ;
> ;    counter clock will be prescaled by 256 to make the .01 second count
> easier
> ;
>
>     ldi    LOCOUNT,    0x38                ;  load LOWBYTE byte of delay
> count
>     ldi    HICOUNT,    0xff                ; load HIGHBYTE byte value
> for delay count
>     out    OCR1A,    HICOUNT                    ; store in timer/counter
> register
>
>     ldi    TEMP,    0xe5                    ; load the control value for
> TCCR1
>                                         ; CTC1 set, PWMa set, COM1A set to
>                                         ; toggle on match, timer clock set
>                                         ; for system clock divided by 256
> `    out    TCCR1,    TEMP                    ; store in TCCR1
>
>
>     ldi    HILOFLAG,    HIGHBYTE                ; HIGHBYTE/LOWBYTE byte
> flag for timer
>                                         ; control (see interrupt handler
> for more)
>
> ;
> ;    this code sets the default initial table adress at 0
> ;
>
>     ldi    TABLEADDR,    0x00                ; first addresss in EEPROM
> table data
>     ldi DIRFLAG,    UP                    ; direction control byte, 0 = up
>
>     rjmp    MAIN                        ; go to the main loop in the code
>
> NEXT:
>
>     ldi    TEMP,    UP                        ; compare value
>     cp    TEMP,    DIRFLAG                    ; check direction bit for
> value
>     breq    UPCNT                        ; it's set for an up count
>
>     ldi    TEMP,    UP                        ; compare value
>     dec    TABLEADDR                        ; count the table pointer
> down one
>     cp    TABLEADDR,    TEMP                ; at the bottom yet?
>     breq    CONT0                        ; nope. continue
>     RJMP    QUIT0                        ; all done, depart
>
> UPCNT:
>     ldi    TEMP,    0x63                    ; compare value
>     inc    TABLEADDR                        ; increment table pointer
>     cp    TABLEADDR,     TEMP                ; 99 decimal, end of table
>     breq    FIXIT0                        ; deal with table overfLOWBYTE
>     rjmp    QUIT0                        ; all done, depart
>
> CONT0:
>
>     ldi    DIRFLAG,    UP                    ; set to count up again
>     rjmp    QUIT0
>
> FIXIT0:
>
>     ldi    DIRFLAG,    DOWN                ; reset direction flag for
> down count
>
> QUIT0:
>
>     ret                                    ; return from subrouttine
> call
>
> ;
> ;    read a value from the EEPROM table
> ;
>
> TABLEDATA:
>
>     out    EEARL,     TABLEADDR                        ; move table
> value address to EEPROM
>                                         ; address register LOWBYTE byte
>
>     rcall    NEXT                        ; go grab next tabel address
>
>     sbi EECR,EERE
>     in    PWMSET,        EEDR                ; read data from EEPROM
> data register
>     out    OCR1A,    PWMSET                    ; output to PWM control
> register
>
>     ret                                    ; all done, go home
>
> ;
> ;    timer interrupt handler
> ;
>
> TIMER0:
>
>     ldi    TEMP,    HIGHBYTE
>     cp    HILOFLAG,    TEMP                ; LOWBYTE byte or HIGHBYTE/
>     breq    HIGHBYTEFIX                    ; this is the LOWBYTE bytem
> go fix it for the HIGHBYTE byte
>
> LOOP1:
>     ldi    HILOFLAG,    LOWBYTE                ; reset for next LOWBYTE
> byte count
>     out    OCR0A,     LOCOUNT                    ; reload the timer for
> the countdown, LOWBYTE byte
>
>     rcall    TABLEDATA                    ; go do the output needed
>
>     reti                                ; go to sleep until next timer
> interrupt
>
> HIGHBYTEFIX:
>
>     ldi    HILOFLAG,    HIGHBYTE                ; set flag to HIGHBYTE
> byte indicator
>     out    TCNT1,    HICOUNT                    ; set the timer for the
> HIGHBYTE byte countdown
>     rjmp    LOOP1                        ; now go finish interrupt handler
>
> ;
> ;    this is the main control loop, an infinite loop
> ;
>
> MAIN:
>
> ;    rcall    TABLEDATA
>     sleep
>     rjmp    MAIN                        ; go back to sleep until next
> interrupt
>                                         ; in other words, loop forever
>
>     .exit
>
>
>
>
>
> Yahoo! Groups Links
>
>
>
>

Re: [AVR-Chat] still no working interrupt )-:

2007-01-09 by Thomas Keller

>  
    OK.  Here is my main loop:

MAIN:

    sleep
    rjmp    MAIN                           ; go back to sleep until next 
interrupt
                                                    ; in other words, 
loop forever

    .exit
   

   now, when i am simulating this, the instruction pointer simply 
oscillates rapidly between the line with "sleep" and the line with "rjmp 
MAIN" on it.  This doesn't seem quite right to me.  If there is no 
interrupt happening, should it just go to sleep and sit there?  Maybe 
the suggestion about a debugging code to tell me which interrupt is 
actually happening isn't such a bad idea after all.  SOMETHING must be 
interrupting, or the pointer woudl just sit at the sleep instruction 
once executed, unless I misunderstand how "sleep" is supposed to work?

tom

Re: [AVR-Chat] still no working interrupt )-:

2007-01-09 by Thomas Keller

Well, nice theory, but it didn't pan out. I replaced all the reti's 
in the vector table with
rjmp DEBUG statements.  I created an IRQ handler named DEBUG that simply 
alters the value of r28 from oxff to oxoo back and forth.  Placed a 
watch on r28, and ran the code.   Still oscillates back and forth 
between "sleep" and "rjmp MAIN", but never enters the DEBUG handler, so 
far as I can tell (using the "auto-Step" feature, which steps once, and 
breaks, then steps again, so my watch should be being updated if the 
value of r28 is changing, which it does not seem to be).
> Recent Activity
>
>    *
>        12
>       New Members
>       <http://groups.yahoo.com/group/AVR-Chat/members;_ylc=X3oDMTJmNnE4bThjBF9TAzk3MzU5NzE0BGdycElkAzQzMTM5NzQEZ3Jwc3BJZAMxNzA2NTU0MjA1BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzExNjgyOTIxMTQ->
>
> Visit Your Group 
> <http://groups.yahoo.com/group/AVR-Chat;_ylc=X3oDMTJlNnNocm85BF9TAzk3MzU5NzE0BGdycElkAzQzMTM5NzQEZ3Jwc3BJZAMxNzA2NTU0MjA1BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTE2ODI5MjExNA--> 
>
> SPONSORED LINKS
>
>     * Microprocessor architecture
>       <http://groups.yahoo.com/gads;_ylc=X3oDMTJjMTJqb291BF9TAzk3MzU5NzE0BF9wAzEEZ3JwSWQDNDMxMzk3NARncnBzcElkAzE3MDY1NTQyMDUEc2VjA3NsbW9kBHN0aW1lAzExNjgyOTIxMTg-?t=ms&k=Microprocessor+architecture&w1=Microprocessor+architecture&w2=Avr+microcontroller&w3=Microcontrollers&c=3&s=80&g=2&.sig=7dkmRu1DUk5VKkg01ad63A>
>     * Avr microcontroller
>       <http://groups.yahoo.com/gads;_ylc=X3oDMTJjMG12bWJmBF9TAzk3MzU5NzE0BF9wAzIEZ3JwSWQDNDMxMzk3NARncnBzcElkAzE3MDY1NTQyMDUEc2VjA3NsbW9kBHN0aW1lAzExNjgyOTIxMTg-?t=ms&k=Avr+microcontroller&w1=Microprocessor+architecture&w2=Avr+microcontroller&w3=Microcontrollers&c=3&s=80&g=2&.sig=dgwyL3Ws4uM4l2zbzBM77w>
>     * Microcontrollers
>       <http://groups.yahoo.com/gads;_ylc=X3oDMTJjYnE1MDQyBF9TAzk3MzU5NzE0BF9wAzMEZ3JwSWQDNDMxMzk3NARncnBzcElkAzE3MDY1NTQyMDUEc2VjA3NsbW9kBHN0aW1lAzExNjgyOTIxMTg-?t=ms&k=Microcontrollers&w1=Microprocessor+architecture&w2=Avr+microcontroller&w3=Microcontrollers&c=3&s=80&g=2&.sig=uNpMy86y2gI1qkVfKK0j2Q>
>
> Yahoo! News
>
> Space News 
> <http://us.ard.yahoo.com/SIG=12ijghn0l/M=493064.9803190.10510181.8674578/D=groups/S=1706554205:NC/Y=YAHOO/EXP=1168299318/A=3848612/R=0/SIG=12ufkbp3p/*http://news.yahoo.com/i/2117;_ylt=A9FJqaPBv65EVi0AKwcPLBIF;_ylu=X3oDMTA2MnU4czRtBHNlYwNzbg-->
>
> Get the latest
>
> space related news
>
> Biz Tools
>
> Y! Small Business 
> <http://us.ard.yahoo.com/SIG=12incflte/M=493064.9803229.10510223.8674578/D=groups/S=1706554205:NC/Y=YAHOO/EXP=1168299318/A=4025323/R=0/SIG=12a352npd/*http://us.rd.yahoo.com/evt=44092/*http://smallbusiness.yahoo.com/r-index>
>
> Track packages,
>
> get forms, & more
>
> Y! GeoCities
>
> Share Photos 
> <http://us.ard.yahoo.com/SIG=12io8p08q/M=493064.9803219.10510212.8674578/D=groups/S=1706554205:NC/Y=YAHOO/EXP=1168299318/A=3848528/R=0/SIG=11vts2tqq/*http://us.rd.yahoo.com/evt=42416/*http://geocities.yahoo.com/>
>
> Put your favorite
>
> photos online.
>
> .

I am becoming most discouraged with this problem.

tom
>
>

Re: [AVR-Chat] still no working interrupt )-:

2007-01-09 by Jim Wagner

I have not tried "sleep" on the simulator but I would bet
that sleep is not simulated.

Jim


On Mon, 08 Jan 2007 18:44:06 -0600
 Thomas Keller <tjkeller1@alltel.net> wrote:
> >  
>     OK.  Here is my main loop:
> 
> MAIN:
> 
>     sleep
>     rjmp    MAIN                           ; go back to
> sleep until next 
> interrupt
>                                                     ; in
> other words, 
> loop forever
> 
>     .exit
>    
> 
>    now, when i am simulating this, the instruction
> pointer simply 
> oscillates rapidly between the line with "sleep" and the
> line with "rjmp 
> MAIN" on it.  This doesn't seem quite right to me.  If
> there is no 
> interrupt happening, should it just go to sleep and sit
> there?  Maybe 
> the suggestion about a debugging code to tell me which
> interrupt is 
> actually happening isn't such a bad idea after all.
>  SOMETHING must be 
> interrupting, or the pointer woudl just sit at the sleep
> instruction 
> once executed, unless I misunderstand how "sleep" is
> supposed to work?
> 
> tom

---------------------------------------------------------------
The Think Different Store
http://www.thinkdifferentstore.com/
For All Your Mac Gear
---------------------------------------------------------------

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.