***************************************************************************** *** DEMO.ASM *** *** *** *** Author : Andrew Duffy *** *** Date : June 1994 *** *** Desc. : This program is a combination of Control.asm to control *** *** the heater/fan and Temperature.asm to show the responses *** *** of the heater temperature. *** *** *** *** ©XCNT, 1992-1994. *** ***************************************************************************** ***************************************************************************** *** Includes *** ***************************************************************************** include "subrts.h" Included by default anyway ***************************************************************************** *** Initialisation routine *** ***************************************************************************** move.b #APPS_MOTOR+APPS_HEATER,d0 Initialise the applications board jsr APPS_INIT (using motor and heater) move.b #0,APPS_PORTA Turn everything off movea.l #Instructs,a6 Print instructions jsr OUTSTR ***************************************************************************** *** Main control routine *** ***************************************************************************** Main bsr Get.Temperature jsr INKEY beq.s Main jsr INCH bclr #5,d0 Convert to upper case cmp.b #'F',d0 beq Mot_For cmp.b #'B',d0 beq Mot_Bac cmp.b #'S',d0 beq Mot_Sto bset #5,d0 Convert back to normal case cmp.b #'1',d0 beq Heat_On cmp.b #'2',d0 beq Heat_Off cmp.b #'.',d0 Was full stop pressed ? bne Main If not then loop again ***************************************************************************** *** Turn everything off *** ***************************************************************************** move.b #0,APPS_PORTA Turn everything off movea.l #End,a6 Print exit text jsr OUTSTR rts Exit ***************************************************************************** *** Motor forward routine *** ***************************************************************************** Mot_For bclr #6,APPS_PORTA Clear bit 6 of Port A bset #7,APPS_PORTA Set bit 7 of Port A movea.l #Forwards,a6 Output forward message jsr OUTSTR bra Main Continue at main ***************************************************************************** *** Motor backward routine *** ***************************************************************************** Mot_Bac bclr #7,APPS_PORTA Clear bit 7 of Port A bset #6,APPS_PORTA Set bit 6 of Port A movea.l #Backwards,a6 Output backward message jsr OUTSTR bra Main Continue at main ***************************************************************************** *** Motor stopped routine *** ***************************************************************************** Mot_Sto bclr #7,APPS_PORTA Clear bit 7 of Port A bclr #6,APPS_PORTA Clear bit 6 of Port A movea.l #Stopped,a6 Output stopped message jsr OUTSTR bra Main Continue at main ***************************************************************************** *** Heater on routine *** ***************************************************************************** Heat_On bset #5,APPS_PORTA Set bit 5 of Port A movea.l #On,a6 Output on message jsr OUTSTR bra Main Continue at main ***************************************************************************** *** Heater off routine *** ***************************************************************************** Heat_Off bclr #5,APPS_PORTA Clear bi 5 of Port A movea.l #Off,a6 Output off message jsr OUTSTR bra Main Continue at main ***************************************************************************** *** Get.Temperature routine *** ***************************************************************************** Get.Temperature movem.l d0-d2,-(a7) Save all used registers move.l #127,d0 Set up d0 with starting value move.l #128,d1 Set up d1 to half of start value .Chop lsr.b #1,d1 Divide half value by half again move.b d0,APPS_PORTB Send try value move.b APPS_PORTA,d2 btst #3,d2 Check if value was higher or lower bne.s .Higher If value was higher .Lower sub.b d1,d0 Subtract half value from main value cmp.b #1,d1 Check if all values have been done beq.s .Done bra.s .Chop Try next value .Higher add.b d1,d0 Add half value to main value cmp.b #1,d1 Check if all values have been done beq.s .Done bra.s .Chop Try next value .Done move.b d0,APPS_PORTB (This ensures an acurate reading move.b APPS_PORTA,d1 of the heater with single byte btst #3,d1 differences rather than 2 bytes) beq.s .Done2 Value is correct add.b #1,d0 Value incorrect, subtract 1 from it .Done2 move.w d0,Temperature Save Temperature ***************************************************************************** *** Temperature found - now draw graph *** ***************************************************************************** move.b #21,d0 Locate cursor to print move.b #47,d1 out temperature value. bsr.s Locate Locate cursor move.w Temperature,d0 Temperature between 0 and 255 jsr OUT2HEX Output fan speed move.b #18,d0 Locate cursor to print move.b #8,d1 out fan bar graph. bsr.s Locate Locate cursor moveq #0,d1 Clear d1 move.w Temperature,d1 Temperature between 0 and 255 lsr.b #2,d1 Divide by four move.b #'*',d0 bsr.s Chars Output characters movem.l (a7)+,d0-d2 Unstack registers rts ***************************************************************************** *** Locate routine *** *** Locates the cursor at d0 down, d1 across. *** ***************************************************************************** Locate movem.l d0-d3/a0/a6,-(a7) Save all used registers moveq #0,d3 movea.l #Locate_Seq+2,a0 ANSI locate sequence - Down move.b d0,d3 bsr.s .Locate_1 Convert value to text value movea.l #Locate_Seq+5,a0 ANSI locate sequence - Across move.b d1,d3 bsr.s .Locate_1 Convert value to text value movea.l #Locate_Seq,a6 Output escape sequence jsr OUTSTR movem.l (a7)+,d0-d3/a0/a6 Unstack registers rts .Locate_1 divu #10,d3 Convert tens first bsr .Locate_1.2 .Locate_1.2 add #$30,d3 Then units move.b d3,(a0)+ move.w #0,d3 swap d3 rts ***************************************************************************** *** Chars routine *** *** Prints d1 number of d0.b characters *** ***************************************************************************** Chars movem.l d0-d1/a6,-(a7) Save all used registers .Chars_1 cmpi.b #0,d1 Check if all characters done beq.s .Chars_1.2 jsr OUTCH Output 1 character subi.b #1,d1 Decrement number to do bra.s .Chars_1 Repeat .Chars_1.2 movea.l #EraseToEnd,a6 Output clear to end string jsr OUTSTR movem.l (a7)+,d0-d1/a6 Unstack registers rts ***************************************************************************** *** Variables *** ***************************************************************************** Temperature ds.w 1 ***************************************************************************** *** Strings *** ***************************************************************************** EraseToEnd dc.b 27,'[K',0 even Locate_Seq dc.b 27,'[ ; f',0 ANSI sequence even Re-align code Instructs dc.b "Demo.asm",13,10,"========",13,10,13,10 dc.b "Ensure that the ADC, Motor, and Heater are all switched on.",13,10 dc.b "Select Heater on the Heater/Pot switch, then watch the temperature as you",13,10 dc.b "play with the heater and fan actions.",13,10,13,10 dc.b "Keys : F to make motor go forwards, B to make motor go backwards, S to stop.",13,10 dc.b " 1 to turn heater on, 2 to turn heater off.",13,10 dc.b " Full stop to quit.",13,10,13,10 dc.b "Motor Status : Stopped",13,10 dc.b "Heater Status : Off",13,10 dc.b 27,"[15;30fTemperature - (Percent)" dc.b 27,"[17;8f00% - - - - - 50% - - - - - 100%" dc.b 27,"[21;32fActual Value :",0 even Forwards dc.b 27,"[12;17fGoing fowards ",13,10,0 even Backwards dc.b 27,"[12;17fGoing backwards",13,10,0 even Stopped dc.b 27,"[12;17fStopped ",13,10,0 even On dc.b 27,"[13;17fOn ",13,10,0 even Off dc.b 27,"[13;17fOff",13,10,0 even End dc.b 27,"[23;1fProgram ended normally.",0 ***************************************************************************** *** End of file DEMO.ASM. *** *****************************************************************************