setint, how to set up 2 different interrupts in the same program?

Changster

New Member
Hi All,

I have a 40X2 program that needs 2 separate interrupt routines to run one after the other to allow different input pins at different times.

I tried two interrupts but it will only allow one routine.

Part of the program needs to use a.0 to drive b.2 quickly on and off as necessary and the second part of the program uses an interrupt to use a.1 and drive b.3 on and off quickly.

I've used 'setint off' in the program to turn it off after the first interrupt.

How do I set up one interrupt to do this in different parts of the program?

This is part of the first interrupt:

Code:
[color=Black]camera:
      [/color][color=Blue]write [/color][color=Purple]b20[/color][color=Black],[/color][color=Navy]8
      [/color][color=Blue]read [/color][color=Purple]b20[/color][color=Black],[/color][color=Purple]b21
      [/color][color=Blue]setint [/color][color=Navy]%00000001[/color][color=Black],[/color][color=Navy]%00000001[/color][color=Black],a  [/color][color=Green]; activate interrupt when pin a.0 only goes high
      [/color][color=Blue]serout a.7[/color][color=Black],[/color][color=Blue]n2400[/color][color=Black],[/color][color=Blue]([/color][color=Navy]254[/color][color=Black],[/color][color=Navy]230[/color][color=Blue]) [/color][color=Green]'program counter
      [/color][color=Blue]serout a.7[/color][color=Black],[/color][color=Blue]n2400[/color][color=Black],[/color][color=Blue]([/color][color=Black]#[/color][color=Purple]b21[/color][color=Blue])
      
      for [/color][color=Purple]b3 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]to [/color][color=Navy]10 [/color][color=Green]'timer for glycerin
      [/color][color=Blue]serout a.7[/color][color=Black],[/color][color=Blue]n2400[/color][color=Black], [/color][color=Blue]([/color][color=Navy]254[/color][color=Black],[/color][color=Navy]148[/color][color=Blue])
      serout a.7[/color][color=Black],[/color][color=Blue]n2400[/color][color=Black],[/color][color=Blue]([/color][color=Red]"Glycerin Drain "[/color][color=Black],#[/color][color=Purple]b3[/color][color=Blue])
      [/color][color=Green]rem if pina.0=1 then high b.2 'open V2 glycerin drain 
      rem endif
      rem if pina.0=0 then low b.2 'close V2 glycerin drain
      rem endif
      [/color][color=Blue]pause [/color][color=Navy]100
      [/color][color=Blue]if [/color][color=Purple]pina.0 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then [/color][color=Black]camera     
      [/color][color=Blue]if [/color][color=Purple]b3[/color][color=DarkCyan]=[/color][color=Navy]10 [/color][color=Blue]then [/color][color=Black]water
      [/color][color=Blue]next [/color][color=Purple]b3
      [/color][color=Green]rem low b.0
      [/color][color=Blue]goto [/color][color=Black]camera
      [/color]
[color=Blue]interrupt:
      high b.2 [/color][color=Green]; switch output on
      [/color][color=Blue]pause [/color][color=Navy]50
      [/color][color=Blue]if [/color][color=Purple]pina.0 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then [/color][color=Black]interrupt [/color][color=Green]; loop here until the interrupt cleared
      [/color][color=Blue]low b.2
      [/color][color=Purple]b3[/color][color=DarkCyan]=[/color][color=Navy]0
      [/color][color=Blue]pause [/color][color=Navy]2000 [/color][color=Green]; wait 2 seconds
      [/color][color=Blue]setint [/color][color=Navy]%00000001[/color][color=Black],[/color][color=Navy]%00000001[/color][color=Black],a [/color][color=Green]; re-activate interrupt
      [/color][color=Blue]return [/color][color=Green]; return from sub[/color]

this is part of the second interrupt.

Code:
[color=Black]camerawater:      
      [/color][color=Blue]write [/color][color=Purple]b20[/color][color=Black],[/color][color=Navy]14
      [/color][color=Blue]read [/color][color=Purple]b20[/color][color=Black],[/color][color=Purple]b21
      [/color][color=Blue]setint [/color][color=Navy]%00000010[/color][color=Black],[/color][color=Navy]%00000010[/color][color=Black],a  [/color][color=Green]; activate interrupt when pin a.0 only goes high
      [/color][color=Blue]serout a.7[/color][color=Black],[/color][color=Blue]n2400[/color][color=Black],[/color][color=Blue]([/color][color=Navy]254[/color][color=Black],[/color][color=Navy]230[/color][color=Blue]) [/color][color=Green]'program counter
      [/color][color=Blue]serout a.7[/color][color=Black],[/color][color=Blue]n2400[/color][color=Black],[/color][color=Blue]([/color][color=Black]#[/color][color=Purple]b21[/color][color=Blue])
      serout a.7[/color][color=Black],[/color][color=Blue]n2400[/color][color=Black],[/color][color=Blue]([/color][color=Navy]254[/color][color=Black],[/color][color=Navy]128[/color][color=Blue])
      serout a.7[/color][color=Black],[/color][color=Blue]n2400[/color][color=Black],[/color][color=Blue]([/color][color=Red]"Water Drain"[/color][color=Blue])
      for [/color][color=Purple]b6[/color][color=DarkCyan]=[/color][color=Navy]1 [/color][color=Blue]to [/color][color=Navy]5 [/color][color=Green]'timer for water drain
      [/color][color=Blue]serout a.7[/color][color=Black],[/color][color=Blue]n2400[/color][color=Black],[/color][color=Blue]([/color][color=Navy]254[/color][color=Black],[/color][color=Navy]192[/color][color=Blue])
      serout a.7[/color][color=Black],[/color][color=Blue]n2400[/color][color=Black],[/color][color=Blue]([/color][color=Black]#[/color][color=Purple]b6[/color][color=Black],[/color][color=Red]" Water drain timer"[/color][color=Blue])
      [/color][color=Green]rem if pina.1=1 then high b.3 'V3 open water drain op4
      rem endif
      rem if pina.1=0 then low b.3 'V3 close water drain 
      rem endif
      [/color][color=Blue]if [/color][color=Purple]pina.1 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then [/color][color=Black]camerawater
      [/color][color=Blue]pause [/color][color=Navy]500 [/color][color=Green]'timer for water drain
      [/color][color=Blue]if [/color][color=Purple]b6[/color][color=DarkCyan]=[/color][color=Navy]5 [/color][color=Blue]then [/color][color=Black]water
      [/color][color=Blue]next [/color][color=Purple]b6
      [/color][color=Blue]goto [/color][color=Black]water
      [/color]
[color=Blue]interrupt:
      high b.3 [/color][color=Green]; switch output 1 on
      [/color][color=Blue]pause [/color][color=Navy]50
      [/color][color=Blue]if [/color][color=Purple]pina.1 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then [/color][color=Black]interrupt [/color][color=Green]; loop here until the interrupt cleared
      [/color][color=Blue]low b.3
      pause [/color][color=Navy]2000 [/color][color=Green]; wait 2 seconds
      [/color][color=Blue]setint [/color][color=Navy]%00000010[/color][color=Black],[/color][color=Navy]%00000010[/color][color=Black],a [/color][color=Green]; re-activate interrupt
      [/color][color=Blue]return [/color][color=Green]; return from sub[/color]

Is there a way of accomplishing this easily?

Regards Mark
 

westaust55

Moderator
Try

SETINT OR %00000011, %00000011, a

Then in the single interrupt routine test pins A.0 and A.1 to see which caused the interrupt and then branch to your desired section of code
 
Last edited:
Top