File "iexample.c"
Full Path: /home/analogde/www/private/Projet/Example/HC11/iexample.c
File size: 2.96 KB
MIME-type: text/x-c
Charset: utf-8
/*============================================================================
Motorola 68HC11
Demonstrate assigning timer interrupt handler at run time under
monitor program as well as in rom mode.
Author: Dusty Nidey, Axiom Mfg.
Tools: ImageCraft C Compiler V3.5
==============================================================================*/
#include <hc11.h>
// Constants
// Definitions
unsigned char count4; // general purpose count byte
unsigned char timeout1; // general purpose timeout. incriments every .03277 seconds
// these functions only used for debugging in Buffalo Monitor
// they can be safely removed for production, or left in
void break1(){
asm("bh1: nop");
}
/* TimeHandle - Interrupt Handler routine
Gets executed on Timer1 overflow flag, which is set to default prescaler
of over 32.77ms
*/
#pragma interrupt_handler TimeHandle
void TimeHandle(){
TFLG2 = 0x80; // clear timer overflow flag
// if timer overflow.
// here every 32.77ms or .03277 seconds
++timeout1; // incriment timeout counter
if(rtimeout < R_TIMEOUT) ++rtimeout; // incriment timeout counter
if(++count4 > 15){ // if time to update counters
// here every .49155 seconds
count4=0;
}
}
/* RESET - MAIN
After executing STARTUP code on reset, execution begins here
*/
main(){
asm(" sei"); // disable interrupts
// FOR BUFFALO MODE ONLY - setup pseudo-interrupt vectors, uncomment this
// For EEPROM mode, use the interrupt vectors table at the end of this file
// *(void(**)())0xD1 = TimeHandle; // Timer Overflow $00DO-$00D2
TCTL2 = 0x06; // enable input capture for A0 and A1
TFLG1 = 0x01; // clear input capture flag - IDLE
TMSK2 = 0x80; // enable timer interrupts
TFLG2 = 0x80; // clear timer overflow flag
asm(" cli"); // enable interrupts
// reset all counters
count4=0;
// MAIN LOOP begins .. endless
for( ; ;){
}
}
// Buffalo Debugger routine to send a HEX formatted byte to the COM1 terminal
void sendbyte(unsigned char byt4){
dummy1 = byt4;
asm(" ldaa _dummy1");
asm(" jsr 0xFFB2");
asm(" ldaa _dummy1");
asm(" jsr 0xFFB5");
}
/*---------------------------------------------------------------- */
/* REMOVE the following if running this under the Buffalo Debugger */
extern void _start(); /* entry point in crt11.s */
#pragma abs_address:0xffd6
/* change the above address if your vector starts elsewhere
*/
void (*interrupt_vectors[])() =
{
/* to cast a constant, say 0xb600, use
(void (*)())0xb600
*/
/* all interrupts reset the processor, which is probably not what
* you want */
_start, /* SCI */
_start, /* SPI */
_start, /* PAIE */
_start, /* PAO */
TimeHandle, /* TOF */
_start, /* TOC5 */
_start, /* TOC4 */
_start, /* TOC3 */
_start, /* TOC2 */
_start, /* TOC1 */
_start, /* TIC3 */
_start, /* TIC2 */
_start, /* TIC1 */
_start, /* RTI */
_start, /* IRQ */
_start, /* XIRQ */
_start, /* SWI */
_start, /* ILLOP */
_start, /* COP */
_start, /* CLM */
_start /* RESET */
};
#pragma end_abs_address