Article View: sci.electronics
Article #16200RE: 68HC11 input capture code wanted?
From: Bart
Date: Fri, 22 Jan 1993 06:36
Date: Fri, 22 Jan 1993 06:36
144 lines
7580 bytes
7580 bytes
>From: geoffrey@cosc.canterbury.ac.nz (Geoff Thomas)
>Date: Tue, 19 Jan 1993 04:05:27 GMT
> I'm wanting to write some code for the HC11 Input Capture system, and
> I'd like to get hold of some examples.
Following are some *extracts* from my HC11 code to sense wall distances
on my ultrasonic wall sensing micromouse. The circuit diagrams can be
found in my NELCON'92 paper:
"Robotic Control and Sensing, an HC16 application."
NELCON'92 Proceedings, August 1992, pp 81-88.
There will be copies at the Dept. of EEE at Canterbury Uni.
Refer 68HC11 data book or Reference Manual M68HC11RM/AD for meaning
of undefined labels or bit mask values, (standard HC11 acronyms have
been used).
The code uses the HC11 TOC (Timer Output Compares) 1,2,3,4,5 to generate
the 4 orthogonal sonic sense pulse gates, which are synchronised to an HD6340
generated ultrasonic drive signal. TOC1 is used to turn ON the selected
pulse gates, whilst TOCs 2,3,4,5 turn them off after the desired burst time.
TOC 2,3,4,5 interrupts are enabled, and their service routine enables return
pulse capture and prepares TOC1 for the next pulse, if any.
* Task specific equates: Note: S_Gn = Sonic Gate north - front looking pulse.
SGn .equ OC1D6 ; Assert S_Gn to 1 on TOC1| Data bits to assert outputs
SGs .equ OC1D5 ; Assert S_Gs to 1 on TOC1| OC2 thru OC5.
SGe .equ OC1D4 ; Assert S_Ge to 1 on TOC1| Register: OC1D
SGw .equ OC1D3 ; Assert S_Gw to 1 on TOC1| Clear immediately after Pulse(s)
--- relevant RAM locations ----
...
N_time .rmb 2 ; Pulse return time, ex TIC2, front wall.
S_time .rmb 2 ; Pulse return time, ex TIC1, back wall.
Son_Act .rmb 1 ; TOC action bits. Set to action sonic pulses.
Son_Rpt .rmb 1 ; Sonic pulse repetition period, to nearest ms <= 63.
...
--- Interrupt initialization:
...
Front_Back LDX #REG_CON ; point to HC11 control bit & register bank.
BSET TCTL2-REG_CON,X,EDG1A+EDG2A ; capture on rising edges
BCLR TCTL2-REG_CON,X,EDG1B+EDG2B ; ensure other bits zero.
BCLR TMSK1-REG_CON,X,IC2I+IC3I ; ensure interrups off.
LDX #TIC_IRQ ; Redirect PROVON interrupts for TICs 2,3.
STX TIC1VC ; [PROVON = Provo's Monitor for 6800 series]
STX TIC2VC ; for front/back pulse interrupts
...
--- After pulse(s) have been sent - Turn on TIC interrupts in HC11.
--- THIS SECTION IS part of SUBROUTINE Pls_End which is accessed by the
--- TOC interrupt service routine which runs at the end of the usonic pulses.
...
back_on BRCLR Son_Act,SGs,front_on
BSET TMSK1-REG_CON,X,IC1I ; enable back, south, sense interrupt
front_on BRCLR Son_Act,SGn,walls_on
BSET TMSK1-REG_CON,X,IC2I ; enable front, north, sense interrupt
walls_on BSR Rpt_Calc ;Check update TOC repeat time? Ret: Z=1 if no repeats.
CLC ;IF Z=1, indicate no repeating ie Return with Z,C=1,0.
BEQ PE_Quit ;Exit if Rpt_Tim is zero
LDD Rpt_Tim ;Else get TOC update interval and go update TOC1 etc.
* ;& Fall into Son_repit.
*********
* Son_Repit is Subroutine to fire up next sonic burst after time interval
* in D
[ultrasonic burst has pulse period and burst length tuned to suit either
wall follow or long distance scan]
--- TIC interrupt routines:
TIC_IRQ: LDX #REG_CON ; point to HC11 device register bank.
; Timer Input Capture interrupt service routines
*--------------------------------------------
* TIC_IRQ checks flags on return pulse inputs.
* If Son_Act flags set, then check return flags.
* IF ( flag set and capture time <= Max ) Dir_Time = capture time
* ELSE Dir_time = $0000
* Else capture time not updated.
LDY #$0000
Tst_SGn BRCLR Son_Act,SGn,Tst_SGs ; North wall-sense enabled?
STY N_time ; Yes, default it incase!
BRCLR TFLG1-REG_CON,X,IC1F,Tst_SGs ; If flag clear, check South!
INY ; - indicate valid TIC IRQ
nth_off LDAA #IC1F ; clear North flag!
STAA TFLG1-REG_CON,X
BCLR TMSK1-REG_CON,X,IC1I ; and disable North interrupt
LDD TIC1-REG_CON,X ; flag was set, get bounce time
SUBD Son_BEG0 ; subtract pulse start time
CPD #Maxscan ; If too long,
BGT Tst_SGs ; default it!
STD N_time ; store value - represents front distance.
Tst_SGs BRCLR Son_Act,SGs,TIC_Fin ; South wall-sense enabled?
STY S_time
BRCLR TFLG1-REG_CON,X,IC2F,TIC_Fin ; Problem if flag clear!!
INY ; indicate a valid IRQ.
sth_off LDAA #IC2F ; clear South flag!
STAA TFLG1-REG_CON,X
BCLR TMSK1-REG_CON,X,IC2I ; and disable south interrupt
LDD TIC2-REG_CON,X
SUBD Son_BEG0 ; subtract pulse start time
CPD #Maxscan ; is time value excessively large?
BGT TIC_Fin
STD S_time ; save 'distance' to rear wall.
TIC_Fin CPY #0 ; if zero then no IRQs found, spurious.
BNE TIC_end
LDX #bad_TIC ; point to error message "TIC?"
LDAB TFLG1 ; get Timer flags, see if Input capture??
JSR Print_it ; print flags and message
JSR CRLF
TIC_end RTI
TOC_IRQ: ; Accessed AFTER pulses, NOT by TOC1 !.
JSR Print_Son ; development assist in tuning sonic pulses
JSR Pls_End ; Pls_End will fix all!
RTI ; Pls_End a subroutine to assist debugging.
As it is always useful to have 'online' chats with experienced practitioners
of the art, I suggest you may like to contact Peter Kell, Senior Lecturer
at the Dept. of Electrotechnology, Christchurch Polytechnic. He teaches
microprocessor hardware and Software Engineering and has designed and
developed an HC11 training unit for teaching, (refer his paper in NELCON'92
Proceedings, "Microcontroller Training towards 2000", pp 139p-145. I am most
impressed with his work and hope to obtain a class set of his units to
support our teaching.
------------------------------------------------------------
> Also, how can I get in contact with the HC11 mailing list?
I have *NOT* had anything from the HC11 list for some time now, since about
the time Bob Wier moved to another site. Does it still exist somewhere in
net-land??
Regards, Bart.
Bart Provo |provo_b@kosmos.wcc.govt.nz |School of Electronic Engineering
PO Box 47-105 |access via: PC/AT+modem on |Central Institute of Technology
TRENTHAM |home phone, (answer phone) |Private Bag 39-807
Wellington | in NZ: (04)-5277-054 |Wellington Mail Centre, NZ.
NEW ZEALAND. | to NZ:+64-4-5277-054 |Phn:(04)5277-089 Fax:(04)5276-374
Technical Details
Message-ID:
<1jo4l3INNd4i@golem.wcc.govt.nz>Path:
arc1-ca.pugleaf.net!sparky!uunet!munnari.oz.au!comp.vuw.ac.nz!newshost.wcc.govt.nz!kosmos.wcc.govt.nz!PROVO_BShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!munnari.oz.au!comp.vuw.ac.nz!newshost.wcc.govt.nz!kosmos.wcc.govt.nz!PROVO_B From: provo_b@kosmos.wcc.govt.nz (Bart) Newsgroups: sci.electronics Subject: RE: 68HC11 input capture code wanted? Date: 22 Jan 1993 06:36:19 GMT Organization: Wellington City Council (Public Access), Wgtn, Nz Lines: 144 Message-ID: <1jo4l3INNd4i@golem.wcc.govt.nz> Reply-To: provo_b@kosmos.wcc.govt.nz NNTP-Posting-Host: kosmos.wcc.govt.nz