Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
68hc11
/
68HC12
:
programCode.html
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<html><head><title></title><!-- <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> --> <link rel="stylesheet" href="programCode_fichiers/style.css"> <script language="javascript" src="programCode_fichiers/js.js"></script></head> <body bgcolor="#f0f0f0"> <table style="border-collapse: collapse;" border="1" bordercolor="#000000" cellpadding="6" cellspacing="0" width="100%"><tbody><tr><td background="programCode_fichiers/title_gradient_large_red.gif" bgcolor="#800000"><font class="largeframe"><nobr>Program Code</nobr><nobr></nobr></font></td></tr> <tr><td bgcolor="#ffffff"> <a href="http://www.it.lth.se/digp/sammanfattning/2001/lp-2/grupp16/techReport.html">Back</a> <br><br><br> <h2>main.c</h2><br> <br>//Yee Yik & Andreas Lundgren <br>//Digital Project Fall 2001 <br>//Group 16 <br> <br>//Main program <br> <br>#include "IO-reg.h" <br>#include "checkNumPad.h" <br>#include "LCD_driver.h" <br>#include "buttonHandler.h" <br>#include "measureMode.h" <br> <br>char writePosition; <br>unsigned int adjustmentNumber; <br>unsigned long measuredTime; <br>unsigned int nbrOverflow; <br>unsigned int deltaF; <br> <br>void main (void) { <br> <br> char button; <br> unsigned int temp_nbrOf; //temparary store # of overflow so we can restore the original value later <br> <br> /*Initialise the LCD*/ <br> initLCD(); <br> //set position to kolumn 1, row 2. <br> writePosition = 0x40; <br> <br> //set PORTA, bit 3, as input <br> PACTL &= 0xF7; <br> <br> //Turn flash trigger off. <br> PORTD &= 0xEF; <br> <br> //set PORTD, bit 4, as output, rest as input <br> DDRD |= 0x10; <br> DDRD &= 0xD0; <br> <br> measuredTime = 0; <br> adjustmentNumber = 0; <br> nbrOverflow = 0; <br> deltaF = 0; <br> <br> while (1){ <br> /*Check if a buton is pressed, and use the result to display on LCD right away <br> then wait for the bouncing of 0&1 result from button pressing to stop, <br> wait for button is released, <br> and wait for the bouncing result from releasing button to stop*/ <br> <br> if ((PORTA & 8) != 0){ <br> PORTB &= 0xF7; //Turn light diode off; <br> if ((PORTA & 4) != 0){ <br> startMeasure(); <br> measuredTime = nbrOverflow; <br> measuredTime = measuredTime * 0xFFFF; <br> measuredTime = measuredTime + deltaF; <br> write_long_position(0, measuredTime); <br> } else { <br> temp_nbrOf = nbrOverflow; <br> startShooting(); <br> nbrOverflow = temp_nbrOf; <br> } <br> while ((PORTA & 8) != 0){} // Waiting for button to be released <br> } <br> PORTB |= 0x08; //Turn light diode on; <br> <br> button = checkNumPad(); <br> if ((button) > 0){ <br> button_handler(button); <br> wait_bouncing(); <br> wait_button_release(); <br> wait_bouncing(); <br> } //end of if (button is pressed) <br> } //end of while loop <br>} <br> <br> <br><h2>buttonHandler.h</h2><br> <br>void button_handler(char button); <br>char *long_to_string(long number); <br> <br> <br><h2>buttonHandler.c</h2><br> <br>//Yee Yik & Andreas Lundgren <br>//Digital Project Fall 2001 <br>//Group 16 <br> <br>/*Button handler program <br> Get a button 1-16 and handles it.*/ <br> <br>#include "LCD_driver.h" <br> <br>extern char writePosition; <br>extern int adjustmentNumber; <br>extern long measuredTime; <br>extern unsigned int nbrOverflow; <br>extern unsigned int deltaF; <br> <br> <br>char *long_to_string(long number) <br>{ <br> char string[11]; <br> short pos2 = 9; <br> <br> while (number > 0) <br> { <br> string[pos2] = (number % 10) + '0'; <br> number = number / 10; <br> pos2--; <br> } <br> string[10] = 0; <br> return &string[++pos2]; <br>} <br> <br>//char button_handler(char button, char writePosition) <br>void button_handler(char button) <br>{ <br> switch (button) <br> { <br> case 1: <br> break; <br> case 2: <br> if (writePosition < 0x44){ <br> adjustmentNumber = (adjustmentNumber * 10) + 7; <br> write_character_position(writePosition,'7'); <br> writePosition++; <br> } <br> break; <br> case 3: <br> if (writePosition < 0x44){ <br> adjustmentNumber = (adjustmentNumber * 10) + 4; <br> write_character_position(writePosition,'4'); <br> writePosition++; <br> } <br> break; <br> case 4: <br> if (writePosition < 0x44){ <br> adjustmentNumber = (adjustmentNumber * 10) + 1; <br> write_character_position(writePosition,'1'); <br> writePosition++; <br> } <br> break; <br> case 5: <br> if (writePosition < 0x44){ <br> adjustmentNumber = (adjustmentNumber * 10) + 0; <br> write_character_position(writePosition,'0'); <br> writePosition++; <br> } <br> break; <br> case 6: <br> if (writePosition < 0x44){ <br> adjustmentNumber = (adjustmentNumber * 10) + 8; <br> write_character_position(writePosition,'8'); <br> writePosition++; <br> } <br> break; <br> case 7: <br> if (writePosition < 0x44){ <br> adjustmentNumber = (adjustmentNumber * 10) + 5; <br> write_character_position(writePosition,'5'); <br> writePosition++; <br> } <br> break; <br> case 8: <br> if (writePosition < 0x44){ <br> adjustmentNumber = (adjustmentNumber * 10) + 2; <br> write_character_position(writePosition,'2'); <br> writePosition++; <br> } <br> break; <br> case 9: <br> break; <br> case 10: <br> if (writePosition < 0x44){ <br> adjustmentNumber = (adjustmentNumber * 10) + 9; <br> write_character_position(writePosition,'9'); <br> writePosition++; <br> } <br> break; <br> case 11: <br> if (writePosition < 0x44){ <br> adjustmentNumber = (adjustmentNumber * 10) + 6; <br> write_character_position(writePosition,'6'); <br> writePosition++; <br> } <br> break; <br> case 12: <br> if (writePosition < 0x44){ <br> adjustmentNumber = (adjustmentNumber * 10) + 3; <br> write_character_position(writePosition,'3'); <br> writePosition++; <br> } <br> break; <br> case 13: //a backspace button <br> if (writePosition > 0x40){ <br> write_character_position(--writePosition, 20); //write a space to the position <br> adjustmentNumber = (adjustmentNumber / 10); <br> } <br> break; <br> case 14: <br> break; <br> case 15: //minus sign <br> if ((measuredTime - adjustmentNumber) > 0){ <br> clear_display(); <br> measuredTime = measuredTime - adjustmentNumber; <br> if (deltaF < adjustmentNumber) <br> nbrOverflow--; <br> deltaF = deltaF - adjustmentNumber; <br> write_long_position(0x0,measuredTime); <br> writePosition = 0x40; <br> adjustmentNumber = 0; <br> } <br> break; <br> case 16: //plus sign <br> clear_display(); <br> measuredTime = measuredTime + adjustmentNumber; <br> deltaF = deltaF + adjustmentNumber; <br> if (deltaF < adjustmentNumber) <br> nbrOverflow++; <br> write_long_position(0x0,measuredTime); <br> writePosition = 0x40; <br> adjustmentNumber = 0; <br> break; <br> } <br> <br>} <br> <br> <br><h2>checkNumPad.h</h2><br> <br>char sweep(void); <br>void wait_bouncing(void); <br>void wait_button_release(void); <br>char checkNumPad (void); <br> <br> <br><h2>checkNumPad.c</h2><br>//Yee Yik & Andreas Lundgren <br>//Digital Project Fall 2001 <br>//Group 16 <br> <br>/*Keypad input program <br> Read input from keypad and send corresponding signal to LCD*/ <br> <br>#include "IO-reg.h" <br> <br>char sweep() { <br> <br> if ((PORTD & 0x0F) == 0) <br> return 0; <br> <br> else if ((PORTD & 0x01) != 0 ) <br> return 1; <br> <br> else if ((PORTD & 0x02) != 0 ) <br> return 2; <br> <br> else if ((PORTD & 0x04) != 0) <br> return 3; <br> <br> else if ((PORTD & 0x08) != 0) <br> return 4; <br> <br> else <br> return 0; <br> <br>} //end of sweep() <br> <br>char checkNumPad () { <br> <br> char button = 0; <br> //set PORTB to 1000xxxx (ie set PB7 to 1) <br> PORTB &= 0x0F; <br> PORTB |= 0x80; <br> <br> if ((button = sweep()) > 0) //some button is pressed <br> return button; <br> <br> //set PORTB to 0100xxxx (ie set PB6 = 1) <br> PORTB &= 0x0F; <br> PORTB |= 0x40; <br> <br> if ((button = sweep()) > 0) //some button is pressed <br> return (button + 4); <br> <br> //set PORTB to 0010xxxx (ie set PB5 = 1) <br> PORTB &= 0x0F; <br> PORTB |= 0x20; <br> <br> if ((button = sweep()) > 0) //some button is pressed <br> return (button + 8); <br> <br> <br> //set PORTB to 0001xxxx (ie set PB4 = 1) <br> PORTB &= 0x0F; <br> PORTB |= 0x10; <br> <br> if ((button = sweep()) > 0) //some button is pressed <br> return (button + 12); <br> <br> return 0; <br> <br>} //end of checkNumPad() <br> <br>void wait_bouncing() { <br> <br> char i; <br> //For-loop is 26 clk:s, i=100 & 8 MHz => 300 us <br> for (i = 100; i >0; i--) <br> {} <br>} //end of wait_release() <br> <br>void wait_button_release() { <br> while (checkNumPad() > 0) <br> {} <br>} //end of wait_button_release() <br> <br> <br><h2>LCD_driver.h</h2><br> <br>void write_character_position(char pos, char ch); <br> //write character ch at position pos on the LCD <br>void write_string_position(char pos, char *string); <br> //write string of character at position pos on the LCD <br>void write_long_position(char pos, long number); <br> //write long at position po on the LCD <br>void clear_display(void); <br> //clear display <br>void initLCD(void); <br> <br>//temporary <br>void put_character(char ch); <br> <br> <br><h2>LCD_driver.c</h2><br> <br>#include "int6811.h" <br>#include "io6811.h" <br> <br>char ch; <br>int x; <br> <br>void testBF (void) <br>{ <br> DDRC = 0; <br> PORTB &= 0xF8; //retain other value in PB[3:7] <br> PORTB |= 0x03; //set E = 1, R/W = 1, RS = 0 <br> while (PORTC&0x80) { } //wait until busy flag is off <br>} <br> <br>void put(char ch) <br>{ <br> PORTC = ch; <br> DDRC = 0xFF; //enable PORTC as output <br> PORTB |= 0x01; //set Enable to 1, ie read from PORTC <br> PORTB &=0xFE; //set Enable to 0, other value unchange <br> DDRC = 0; //disable PORTC as output <br>} <br> <br>void set_command(void) <br>{ <br> PORTB &= 0xF9; //write to instruction register, RS = 0, R/W = 0, E = x <br>} <br> <br>void set_character(void) <br>{ <br> PORTB |= 0x04; <br> PORTB &= 0xFD; //write to data register, RS = 1, R/W = 0, E = x <br>} <br> <br>void put_command(char ch) <br>{ <br> testBF(); <br> set_command(); <br> put(ch); <br>} <br> <br>void put_character(char ch) <br>{ <br> testBF(); <br> set_character(); <br> put(ch); <br>} <br> <br>void wait_15ms(void) <br>{ <br> for (x = 4700; x != 0; x--); {} <br> //for-loop is 26 clk:s <br>} <br> <br>void initLCD(void) <br>{ <br> wait_15ms(); <br> set_command(); <br> put(0x38); <br> wait_15ms(); <br> put(0x38); <br> wait_15ms(); <br> put(0x38); <br> put_command(0x38); <br> put_command(0x01); <br> put_command(0x06); <br> put_command(0x0C); <br>} <br> <br>void clear_display() <br>{ <br> put_command(0x01); <br>} <br> <br>void write_character_position(char pos, char ch) <br>{ <br> put_command(128+pos); <br> put_character(ch); <br>} <br> <br>void write_string_position(char pos, char *string) <br>{ <br> put_command(128+pos); //+0x40 <br> while (*string != 0) <br> { <br> put_character(*string); <br> string++; <br> } <br>} <br> <br>void write_long_position(char pos, long number) <br>{ <br> char i = 15; <br> if (number == 0){ <br> write_character_position(pos+i,'0'); <br> } <br> while (number != 0) <br> { <br> write_character_position(pos+i,(number % 10) + '0'); <br> number = number / 10; <br> i--; <br> } <br>} <br> <br> <br><h2>measureMode.h</h2><br> <br>void startMeasure(); <br>void startShooting(); <br> <br> <br><h2>measureMode.c</h2><br> <br>//Enable time capture interrupt from PORTA[0:1] <br>#include "IO-reg.h" <br>#include "Vectors.h" <br>#include <intr6811.h> <br> <br>extern unsigned int nbrOverflow; <br>char waitingForInterrupt; <br>unsigned int foil1; <br>unsigned int foil2; <br>extern unsigned int deltaF; <br>char waitingForInterrupt2; <br>char inMeasureMode; <br>unsigned int i; <br> <br>/*MEASURE MODE*/ <br>void startMeasure() { <br> <br> waitingForInterrupt = 1; <br> foil1 = foil2 = 0; <br> inMeasureMode = 1; <br> <br> //Capture falling edge only <br> TCTL2 |= 0x0A; //xxxx 1x1x <br> TCTL2 &= 0xFA; //xxxx x0x0 <br> <br> //clear flag first for PA0 & PA1 <br> TFLG1 = 0x03; <br> //clear flag first for timer Overflow <br> TFLG2 = 0x80; <br> <br> //Enable PORTA[0:1] for time capture <br> TMSK1 |= 0x03; //xxxx xx11 <br> <br> enable_interrupt(); <br> <br>//start <br> while (waitingForInterrupt == 1) /*ADD IF TIME PASSED IS TOO LONG, THEN RETURN*/ <br> { <br> wait_for_interrupt(); <br> } <br> <br> disable_interrupt(); <br> <br> if (foil2 >= foil1) <br> deltaF = foil2-foil1; <br> else { <br> deltaF = 0xFFFF - foil1 + foil2; <br> nbrOverflow--; <br> } <br> <br>} //end of startMeasure() <br> <br> <br>/*SHOOTING MODE*/ <br>void startShooting() { <br> <br> waitingForInterrupt2 = 1; <br> foil1 = 0; <br> inMeasureMode = 0; <br> <br> //Turn flash trigger off. <br> PORTD &= 0xEF; <br> <br> //Capture falling edge only <br> TCTL2 |= 0x0A; //xxxx 1x1x <br> TCTL2 &= 0xFA; //xxxx x0x0 <br> <br> //clear flag first for PA0 <br> TFLG1 = 0x01; <br> //clear flag first for timer Overflow <br> TFLG2 = 0x80; <br> <br> //Enable PORTA[0] for time capture <br> TMSK1 |= 0x01; //xxxx xxx1 <br> <br> //set PA4 as output campare pin <br> OC1M |= 0x10; <br> <br> enable_interrupt(); <br> <br>//start <br> <br> while(waitingForInterrupt2 == 1) { <br> wait_for_interrupt(); <br> } <br> <br> disable_interrupt(); <br> for (i=0; i < 1000; i++){} <br> //Turn flash trigger off. <br> PORTD &= 0xEF; <br>} <br> <br>//Timer Ovwerflow <br>interrupt void TO_interrupt() <br>{ <br> nbrOverflow++; <br> <br> //clear flag Timer Overflow <br> TFLG2 = 0x80; <br>} <br> <br>//PA0, first foil, interrupt which cause the system to start counting <br>interrupt void IC3_interrupt() <br>{ <br> //clear flag Timer Overflow <br> TFLG2 = 0x80; <br> <br> foil1 = TIC3; //store captured time from TIC 3 to foil1 <br> <br> if (! inMeasureMode) { <br> if (nbrOverflow > 0) <br> TOC4 = foil1; <br> else <br> TOC4 = deltaF + foil1; <br> <br> //clear flag first for PA4 <br> TFLG1 = 0x10; <br> //Enable OC4 interrupt <br> TMSK1 |= 0x10; <br> } //end of if (!inMeasureMode) <br> else { <br> //Enable Timer Overflow <br> TMSK2 |= 0x80; <br> } <br> <br> //clear flag first for PA0 <br> TFLG1 = 0x01; <br> //Disable IC3 interrupt <br> TMSK1 &= 0xFE; //xxxx xxx0 <br> <br>} <br> <br>//end measurement <br>interrupt void IC2_interrupt() <br>{ <br> foil2 = TIC2; <br> <br> //clear flag first for PA1 <br> TFLG1 = 0x02; <br> //Disable IC2 interrupts <br> TMSK1 &= 0xFD; //xxxx xx0x <br> //Disable Timer Ovewflow <br> TMSK2 &= 0x7F; <br> <br> waitingForInterrupt = 0; <br>} <br> <br>interrupt void OC4_interrupt() <br>{ <br> foil2 = TCNT; <br> <br> if (nbrOverflow == 0) { <br> PORTD |= 0x10; //Turn flash trigger on. <br> waitingForInterrupt2 = 0; //Exit while-loop in startShooting() <br> //Disable OC4 interrupts <br> TMSK1 &= 0xEF; //xxx0 xxxx <br> } else if (nbrOverflow == 1) { <br> TOC4 = deltaF + foil2; <br> nbrOverflow--; <br> } else { <br> TOC4 = foil2; <br> nbrOverflow--; <br> } <br> <br> //clear flag first for PA4 <br> TFLG1 = 0x10; <br>} <br> <br> <br>* </intr6811.h><h3>CSTARTUP.S07</h3> * <br>* * <br>* This module contains the 68HC11 startup routine and * <br>* must usually be tailored to suit special hardware needs * <br>* * <br>* Note: The routine ?SEG_INIT_L07 is now included in CSTARTUP * <br>* The size of stack is set in the link-file (lnk6???.xcl) * <br>* The segment INTVEC is declared COMMON * <br>* * <br>* Version: 3.30 [IHAW 11/Feb/92] * <br>* Revised: 3.31 [IHAW 07/Jul/92] Bug in stack init * <br>* Revised: 3.32 [IJAR 06/Mar/93] Startup code for K4 added * <br>* Revised: 4.11 [IMAI 29/Oct/96] Updated for ICC6811 4.11 * <br>* [SN 19/jan/98] Updated for Digitala projekt * <br>* * <br>*---------------------------------------------------------------* <br> NAME CSTARTUP <br> EXTERN ?C_EXIT ; Where to go when program is done <br> <br> EXTERN main ; Where to begin execution <br> <br>*---------------------------------------------------------------* <br>* CSTACK - The C stack segment * <br>* * <br>* Please look in the link-file ??????.xcl how to increment * <br>* the stack without having to reassemble cstartup.s07 ! * <br>*---------------------------------------------------------------* <br> <br> RSEG CSTACK <br> RMB 0 ; A bare minimum !! <br> <br>*---------------------------------------------------------------* <br>* Forward declarations of segments used in initialization * <br>*---------------------------------------------------------------* <br> <br> RSEG UDATA0 <br> RSEG UDATA1 <br> RSEG IDATA0 <br> RSEG IDATA1 <br> RSEG ECSTR <br> RSEG WCSTR <br> RSEG CDATA0 <br> RSEG CDATA1 <br> RSEG CCSTR <br> RSEG CONST <br> RSEG CSTR <br> RSEG TEMP <br> <br> <br>*---------------------------------------------------------------* <br>* RCODE - Where the program actually starts * <br>*---------------------------------------------------------------* <br> RSEG RCODE <br>init_C: <br> LDS #$00FF ; #$01FF for 68HC11E9 <br> ; #$02FF for 68HC11E20 <br> <br>*---------------------------------------------------------------* <br>* If the 68HC11 OPTION register MUST be modified, here is the * <br>* place to do it in order to meet the 64-cycle requirement. * <br>* You can also do it in the beginning of main if You don't use * <br>* seg_init * <br>*---------------------------------------------------------------* <br> <br> LDAA #$00 ;store value 00000000 in TMSK2 to set the speed of TCNT. (500 ns) <br> STAA $1024 <br> <br>*---------------------------------------------------------------* <br>* If it is not a requirement that static/global data is set * <br>* to zero or to some explicit value at startup, the next line * <br>* of code can be deleted. * <br>*---------------------------------------------------------------* <br> <br> BSR seg_init <br> <br>*---------------------------------------------------------------* <br>* If hardware must be initiated from assembly or if interrupts * <br>* should be on when reaching main, this is the place to insert * <br>* such code. * <br>*---------------------------------------------------------------* <br> <br> JSR main main() <br> <br>*---------------------------------------------------------------* <br>* Now when we are ready with our C program (usually 6811 * <br>* programs are continouous) we must perform a system-dependent * <br>* action. In this simple case we jump to ?C_EXIT. * <br>*---------------------------------------------------------------* <br>* DO NOT CHANGE NEXT LINE OF CSTARTUP IF YOU WANT TO RUN YOUR * <br>* SOFTWARE WITH THE AID OF THE C-SPY HLL DEBUGGER. * <br>*---------------------------------------------------------------* <br> JMP ?C_EXIT <br> <br> <br>*---------------------------------------------------------------* <br>* Copy initialized PROMmed code to shadow RAM and clear * <br>* uninitialized variables. * <br>*---------------------------------------------------------------* <br>seg_init: <br> <br>*---------------------------------------------------------------* <br>* Zero out UDATA segments * <br>*---------------------------------------------------------------* <br> <br> LDD #.SFE.(UDATA0) <br> SUBD #.SFB.(UDATA0) <br> BEQ SKIP00 <br> XGDY <br> LDX #.SFB.(UDATA0) <br> BSR zero_mem <br>SKIP00 <br> <br> LDD #.SFE.(UDATA1) <br> SUBD #.SFB.(UDATA1) <br> BEQ SKIP01 <br> XGDY <br> LDX #.SFB.(UDATA1) <br> BSR zero_mem <br>SKIP01 <br> <br>*---------------------------------------------------------------* <br>* Copy CDATA segments into IDATA segments * <br>*---------------------------------------------------------------* <br> <br> LDD #.SFE.(CDATA0) <br> SUBD #.SFB.(CDATA0) <br> BEQ SKIP02 <br> LDX #.SFB.(CDATA0) <br> LDY #.SFB.(IDATA0) <br> BSR copy_mem <br>SKIP02 <br> <br> LDD #.SFE.(CDATA1) <br> SUBD #.SFB.(CDATA1) <br> BEQ SKIP03 <br> LDX #.SFB.(CDATA1) <br> LDY #.SFB.(IDATA1) <br> BSR copy_mem <br>SKIP03 <br> <br>*---------------------------------------------------------------* <br>* Copy CCSTR into ECSTR * <br>*---------------------------------------------------------------* <br> <br> LDD #.SFE.(CCSTR) <br> SUBD #.SFB.(CCSTR) <br> BEQ SKIP04 <br> LDX #.SFB.(CCSTR) <br> LDY #.SFB.(ECSTR) <br> BSR copy_mem <br>SKIP04 <br> RTS ; End of initialization <br> <br>*---------------------------------------------------------------* <br>* Clear memory * <br>*---------------------------------------------------------------* <br>zero_mem: <br> CLR 0,X <br> INX <br> DEY <br> BNE zero_mem <br> RTS <br> <br>*---------------------------------------------------------------* <br>* Copy memory * <br>* Copy (X) --> (Y), counter in D * <br>*---------------------------------------------------------------* <br>copy_mem: <br> PSHA <br> LDAA 0,X <br> STAA 0,Y <br> PULA <br> INX <br> INY <br> SUBD #1 <br> BNE copy_mem <br> RTS <br> <br> <br> <br>*---------------------------------------------------------------* <br>* Interrupt vectors must be inserted by the user. Here we * <br>* only used RESET. * <br>*---------------------------------------------------------------* <br> <br> COMMON INTVEC <br> ; Assuming start address = FFD6 for 68HC11 <br> RMB 40 <br> <br> FDB init_C <br> <br> ENDMOD init_C ; 'init_C' is program entry address <br> <br>*---------------------------------------------------------------* <br>* Function/module: exit(int code) * <br>* * <br>* When C-SPY is used this code will automatically be replaced * <br>* by a 'debug' version of exit(). * <br>*---------------------------------------------------------------* <br> MODULE exit <br> <br> PUBLIC exit <br> PUBLIC ?C_EXIT <br> <br> RSEG RCODE <br> <br>?C_EXIT: <br>exit: <br>*---------------------------------------------------------------* <br>* The next line could be replaced by user defined code. * <br>*---------------------------------------------------------------* <br>end_loop: <br> BRA end_loop <br> <br> END <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br>/* - Vectors.h - <br> <br> This file defines the interrupt vector addresses of the 68HC11 <br> and appropriate function names that can be used with the interrupts. <br> It is assumed that the segment INTVEC is located at address 0xFFD6. <br>*/ <br> <br>#pragma language=extended <br> <br>#define INTVEC_START 0 /* Default for 68HC11 (must be matched <br> to the value used at link-time) */ <br> <br> <br> /*=======================*/ <br> /* Interrupt Definitions */ <br> /*=======================*/ <br> <br> /* SCI Serial Communication Interface */ <br>interrupt [INTVEC_START + 0] void SCI_interrupt(void); <br> <br> /* SPI Serial Transfer Complete */ <br>interrupt [INTVEC_START + 2] void SPI_interrupt(void); <br> <br> /* Pulse Accumulator Input Edge */ <br>interrupt [INTVEC_START + 4] void PAIE_interrupt(void); <br> <br> /* Pulse Accumulator Overflow */ <br>interrupt [INTVEC_START + 6] void PAO_interrupt(void); <br> <br> /* Timer Overflow */ <br>interrupt [INTVEC_START + 8] void TO_interrupt(void); <br> <br> /* Timer Output Compare 5 */ <br>interrupt [INTVEC_START + 10] void OC5_interrupt(void); <br> <br> /* Timer Output Compare 4 */ <br>interrupt [INTVEC_START + 12] void OC4_interrupt(void); <br> <br> /* Timer Output Compare 3 */ <br>interrupt [INTVEC_START + 14] void OC3_interrupt(void); <br> <br> /* Timer Output Compare 2 */ <br>interrupt [INTVEC_START + 16] void OC2_interrupt(void); <br> <br> /* Timer Output Compare 1 */ <br>interrupt [INTVEC_START + 18] void OC1_interrupt(void); <br> <br> /* Timer Input Compare 4 */ <br>interrupt [INTVEC_START + 10] void IC4_interrupt(void); <br> <br> /* Timer Input Compare 3 */ <br>interrupt [INTVEC_START + 20] void IC3_interrupt(void); <br> <br> /* Timer Input Compare 2 */ <br>interrupt [INTVEC_START + 22] void IC2_interrupt(void); <br> <br> /* Timer Input Compare 1 */ <br>interrupt [INTVEC_START + 24] void IC1_interrupt(void); <br> <br> /* Real Time Interrupt */ <br>interrupt [INTVEC_START + 26] void RTI_interrupt(void); <br> <br> /* Interrupt ReQuest */ <br>interrupt [INTVEC_START + 28] void IRQ_interrupt(void); <br> <br> /* eXtended Interrupt ReQuest */ <br>interrupt [INTVEC_START + 30] void XIRQ_interrupt(void); <br> <br> /* SoftWare Interrupt */ <br>interrupt [INTVEC_START + 32] void Software_interrupt(void); <br> <br> /* Illegal Opcode Trap */ <br>interrupt [INTVEC_START + 34] void Illegal_Opcode(void); <br> <br>/* Watchdog and Clock Monitor are defined i cstartup.s07 */ <br> <br> <br><h2>/* FILENAME: IO-reg.h</h2><br> * <br> * Register and bit macro definitions for <br> * all HC11 types in A and E series. <br> * <br> * Uppdatering 990917: volatile bara f�r PORTCL, SPSR och SCSR. <br> * <br> */ <br> <br>#define REG_BASE 0x1000 <br> <br>#define PORTA (*(unsigned char *)(REG_BASE + 0x00)) <br>#define PIOC (*(unsigned char *)(REG_BASE + 0x02)) <br>#define PORTC (*(unsigned char *)(REG_BASE + 0x03)) <br>#define PORTB (*(unsigned char *)(REG_BASE + 0x04)) <br>#define PORTCL (*(volatile unsigned char *)(REG_BASE + 0x05)) <br>#define DDRC (*(unsigned char *)(REG_BASE + 0x07)) <br>#define PORTD (*(unsigned char *)(REG_BASE + 0x08)) <br>#define DDRD (*(unsigned char *)(REG_BASE + 0x09)) <br>#define PORTE (*(unsigned char *)(REG_BASE + 0x0A)) <br>#define CFORC (*(unsigned char *)(REG_BASE + 0x0B)) <br>#define OC1M (*(unsigned char *)(REG_BASE + 0x0C)) <br>#define OC1D (*(unsigned char *)(REG_BASE + 0x0D)) <br>#define TCNT (*(unsigned int *)(REG_BASE + 0x0E)) <br>#define TIC1 (*(unsigned int *)(REG_BASE + 0x10)) <br>#define TIC2 (*(unsigned int *)(REG_BASE + 0x12)) <br>#define TIC3 (*(unsigned int *)(REG_BASE + 0x14)) <br>#define TIC4 (*(unsigned int *)(REG_BASE + 0x1E)) <br>#define TOC1 (*(unsigned int *)(REG_BASE + 0x16)) <br>#define TOC2 (*(unsigned int *)(REG_BASE + 0x18)) <br>#define TOC3 (*(unsigned int *)(REG_BASE + 0x1A)) <br>#define TOC4 (*(unsigned int *)(REG_BASE + 0x1C)) <br>#define TOC5 (*(unsigned int *)(REG_BASE + 0x1E)) <br>#define TI4/O4 (*(unsigned int *)(REG_BASE + 0x1E)) <br>#define TCTL1 (*(unsigned char *)(REG_BASE + 0x20)) <br>#define TCTL2 (*(unsigned char *)(REG_BASE + 0x21)) <br>#define TMSK1 (*(unsigned char *)(REG_BASE + 0x22)) <br>#define TFLG1 (*(unsigned char *)(REG_BASE + 0x23)) <br>#define TMSK2 (*(unsigned char *)(REG_BASE + 0x24)) <br>#define TFLG2 (*(unsigned char *)(REG_BASE + 0x25)) <br>#define PACTL (*(unsigned char *)(REG_BASE + 0x26)) <br>#define PACNT (*(unsigned char *)(REG_BASE + 0x27)) <br>#define SPCR (*(unsigned char *)(REG_BASE + 0x28)) <br>#define SPSR (*(volatile unsigned char *)(REG_BASE + 0x29)) <br>#define SPDR (*(unsigned char *)(REG_BASE + 0x2A)) <br>#define BAUD (*(unsigned char *)(REG_BASE + 0x2B)) <br>#define SCCR1 (*(unsigned char *)(REG_BASE + 0x2C)) <br>#define SCCR2 (*(unsigned char *)(REG_BASE + 0x2D)) <br>#define SCSR (*(volatile unsigned char *)(REG_BASE + 0x2E)) <br>#define SCDR (*(unsigned char *)(REG_BASE + 0x2F)) <br>#define ADCTL (*(unsigned char *)(REG_BASE + 0x30)) <br>#define ADR1 (*(unsigned char *)(REG_BASE + 0x31)) <br>#define ADR2 (*(unsigned char *)(REG_BASE + 0x32)) <br>#define ADR3 (*(unsigned char *)(REG_BASE + 0x33)) <br>#define ADR4 (*(unsigned char *)(REG_BASE + 0x34)) <br>#define BPROT (*(unsigned char *)(REG_BASE + 0x35)) <br>#define EPROG (*(unsigned char *)(REG_BASE + 0x36)) <br>#define OPTION (*(unsigned char *)(REG_BASE + 0x39)) <br>#define COPRST (*(unsigned char *)(REG_BASE + 0x3A)) <br>#define PPROG (*(unsigned char *)(REG_BASE + 0x3B)) <br>#define HPRIO (*(unsigned char *)(REG_BASE + 0x3C)) <br>#define INIT (*(unsigned char *)(REG_BASE + 0x3D)) <br>#define TEST1 (*(unsigned char *)(REG_BASE + 0x3E)) <br>#define CONFIG (*(unsigned char *)(REG_BASE + 0x3F)) <br> <br>/* Bit names for general use */ <br>#define bit7 0x80 <br>#define bit6 0x40 <br>#define bit5 0x20 <br>#define bit4 0x10 <br>#define bit3 0x08 <br>#define bit2 0x04 <br>#define bit1 0x02 <br>#define bit0 0x01 <br> <br>/* PORTA bit definitions 0x00 */ <br>#define PA7 bit7 <br>#define PA6 bit6 <br>#define PA5 bit5 <br>#define PA4 bit4 <br>#define PA3 bit3 <br>#define PA2 bit2 <br>#define PA1 bit1 <br>#define PA0 bit0 <br> <br>/* PIOC bit definitions 0x02 */ <br>#define STAF bit7 <br>#define STAI bit6 <br>#define CWOM bit5 <br>#define HNDS bit4 <br>#define OIN bit3 <br>#define PLS bit2 <br>#define EGA bit1 <br>#define INVB bit0 <br> <br>/* PORTC bit definitions 0x03 */ <br>#define PC7 bit7 <br>#define PC6 bit6 <br>#define PC5 bit5 <br>#define PC4 bit4 <br>#define PC3 bit3 <br>#define PC2 bit2 <br>#define PC1 bit1 <br>#define PC0 bit0 <br> <br>/* PORTB bit definitions 0x04 */ <br>#define PB7 bit7 <br>#define PB6 bit6 <br>#define PB5 bit5 <br>#define PB4 bit4 <br>#define PB3 bit3 <br>#define PB2 bit2 <br>#define PB1 bit1 <br>#define PB0 bit0 <br> <br>/* PORTCL bit definitions 0x05 */ <br>#define PCL7 bit7 <br>#define PCL6 bit6 <br>#define PCL5 bit5 <br>#define PCL4 bit4 <br>#define PCL3 bit3 <br>#define PCL2 bit2 <br>#define PCL1 bit1 <br>#define PCL0 bit0 <br> <br>/* DDRC bit definitions 0x07 */ <br>#define DDC7 bit7 <br>#define DDC6 bit6 <br>#define DDC5 bit5 <br>#define DDC4 bit4 <br>#define DDC3 bit3 <br>#define DDC2 bit2 <br>#define DDC1 bit1 <br>#define DDC0 bit0 <br> <br>/* PORTD bit definitions 0x08 */ <br>#define PD5 bit5 <br>#define PD4 bit4 <br>#define PD3 bit3 <br>#define PD2 bit2 <br>#define PD1 bit1 <br>#define PD0 bit0 <br> <br>/* DDRD bit definitions 0x09 */ <br>#define DDD5 bit5 <br>#define DDD4 bit4 <br>#define DDD3 bit3 <br>#define DDD2 bit2 <br>#define DDD1 bit1 <br>#define DDD0 bit0 <br> <br>/* PORTE bit definitions 0x0A */ <br>#define PE7 bit7 <br>#define PE6 bit6 <br>#define PE5 bit5 <br>#define PE4 bit4 <br>#define PE3 bit3 <br>#define PE2 bit2 <br>#define PE1 bit1 <br>#define PE0 bit0 <br> <br>/* CFORC bit definitions 0x0B */ <br>#define FOC1 bit7 <br>#define FOC2 bit6 <br>#define FOC3 bit5 <br>#define FOC4 bit4 <br>#define FOC5 bit3 <br> <br>/* OC1M bit definitions 0x0C */ <br>#define OC1M7 bit7 <br>#define OC1M6 bit6 <br>#define OC1M5 bit5 <br>#define OC1M4 bit4 <br>#define OC1M3 bit3 <br> <br>/* OC1D bit definitions 0x0D */ <br>#define OC1D7 bit7 <br>#define OC1D6 bit6 <br>#define OC1D5 bit5 <br>#define OC1D4 bit4 <br>#define OC1D3 bit3 <br> <br>/* TCTL1 bit definition 0x20 */ <br>#define OM2 bit7 <br>#define OL2 bit6 <br>#define OM3 bit5 <br>#define OL3 bit4 <br>#define OM4 bit3 <br>#define OL4 bit2 <br>#define OM5 bit1 <br>#define OL5 bit0 <br> <br>/* TCTL2 bit definitions 0x21 */ <br>#define EDG4B bit7 <br>#define EDG4A bit6 <br>#define EDG1B bit5 <br>#define EDG1A bit4 <br>#define EDG2B bit3 <br>#define EDG2A bit2 <br>#define EDG3B bit1 <br>#define EDG3A bit0 <br> <br>/* TMSK1 bit definitions 0x22 */ <br>#define OC1I bit7 <br>#define OC2I bit6 <br>#define OC3I bit5 <br>#define OC4I bit4 <br>#define I4O5I bit3 <br>#define IC1I bit2 <br>#define IC2I bit1 <br>#define IC3I bit0 <br> <br>/* TFLG1 bit definitions 0x23 */ <br>#define OC1F bit7 <br>#define OC2F bit6 <br>#define OC3F bit5 <br>#define OC4F bit4 <br>#define I4O5F bit3 <br>#define IC1F bit2 <br>#define IC2F bit1 <br>#define IC3F bit0 <br> <br>/* TMSK2 bit definitions 0x24 */ <br>#define TOI bit7 <br>#define RTII bit6 <br>#define PAOVI bit5 <br>#define PAII bit4 <br>#define PR1 bit1 <br>#define PR0 bit0 <br> <br>/* TFLG2 bit definitions 0x25 */ <br>#define TOF bit7 <br>#define RTIF bit6 <br>#define PAOVF bit5 <br>#define PAIF bit4 <br> <br>/* PACTL bit definitions 0x26 */ <br>#define DDRA7 bit7 <br>#define PAEN bit6 <br>#define PAMOD bit5 <br>#define PEDGE bit4 <br>#define DDRA3 bit3 <br>#define I4O5 bit2 <br>#define RTR1 bit1 <br>#define RTR0 bit0 <br> <br>/* SPCR bit definitions 0x28 */ <br>#define SPIE bit7 <br>#define SPE bit6 <br>#define DWOM bit5 <br>#define MSTR bit4 <br>#define CPOL bit3 <br>#define CPHA bit2 <br>#define SPR1 bit1 <br>#define SPR0 bit0 <br> <br>/* SPSR bit definitions 0x29 */ <br>#define SPIF bit7 <br>#define WCOL bit6 <br>#define MODF bit4 <br> <br>/* BAUD bit definitions 0x2B */ <br>#define TCLR bit7 <br>#define SCP2 bit6 <br>#define SCP1 bit5 <br>#define SCP0 bit4 <br>#define RCKB bit3 <br>#define SCR2 bit2 <br>#define SCR1 bit1 <br>#define SCR0 bit0 <br> <br>/* SCCR1 bit definition 0x2C */ <br>#define R8 bit7 <br>#define T8 bit6 <br>#define M bit4 <br>#define WAKE bit3 <br> <br>/* SCCR2 bit definitions 0x2D */ <br>#define TIE bit7 <br>#define TCIE bit6 <br>#define RIE bit5 <br>#define ILIE bit4 <br>#define TE bit3 <br>#define RE bit2 <br>#define RWU bit1 <br>#define SBK bit0 <br> <br>/* SCSR bit definitions 0x2E */ <br>#define TDRE bit7 <br>#define TC bit6 <br>#define RDRF bit5 <br>#define IDLE bit4 <br>#define OR bit3 <br>#define NF bit2 <br>#define FE bit1 <br> <br>/* SCDR bit definitions 0x2F */ <br>#define R7T7 bit7 <br>#define R6T6 bit6 <br>#define R5T5 bit5 <br>#define R4T4 bit4 <br>#define R3T3 bit3 <br>#define R2T2 bit2 <br>#define R1T1 bit1 <br>#define R0T0 bit0 <br> <br>/* ADCTL bit definitions 0x30 */ <br>#define CCF bit7 <br>#define SCAN bit5 <br>#define MULT bit4 <br>#define CD bit3 <br>#define CC bit2 <br>#define CB bit1 <br>#define CA bit0 <br> <br>/* BPROT bit definitions 0x35 */ <br>#define PTCON bit4 <br>#define BPRT3 bit3 <br>#define BPRT2 bit2 <br>#define BPRT1 bit1 <br>#define BPRT0 bit0 <br> <br>/* EPROG bit definitions 0x36 MC68HC(7)11E20 only */ <br>#define MBE bit7 <br>/* ELAT defined in PPROG */ <br>#define EXCOL bit4 <br>#define EXROW bit3 <br>#define T1 bit2 <br>#define T0 bit1 <br>#define PGM bit0 <br> <br>/* OPTION bit definitions 0x39 */ <br>#define ADPU bit7 <br>#define CSEL bit6 <br>#define IRQE bit5 <br>#define DLY bit4 <br>#define CME bit3 <br>#define CR1 bit1 <br>#define CR0 bit0 <br> <br>/* PPROG bit definitions 0x3B */ <br>#define ODD bit7 <br>#define EVEN bit6 <br>#define ELAT bit5 /* MC68HC711E9 only */ <br>#define BYTE bit4 <br>#define ROW bit3 <br>#define ERASE bit2 <br>#define EELAT bit1 <br>#define EEPGM bit0 <br>#define EPGM bit0 <br> <br>/* HPRIO bit definitions 0x3C */ <br>#define RBOOT bit7 <br>#define SMOD bit6 <br>#define MDA bit5 <br>#define IRVNE bit4 <br>#define PSEL3 bit3 <br>#define PSEL2 bit2 <br>#define PSEL1 bit1 <br>#define PSEL0 bit0 <br> <br>/* INIT bit definitions 0x3D */ <br>#define RAM3 bit7 <br>#define RAM2 bit6 <br>#define RAM1 bit5 <br>#define RAM0 bit4 <br>#define REG3 bit3 <br>#define REG2 bit2 <br>#define REG1 bit1 <br>#define REG0 bit0 <br> <br>/* TEST1 bit definitions 0x3E */ <br>#define TILOP bit7 <br>#define OCCR bit5 <br>#define CBYP bit4 <br>#define DISR bit3 <br>#define FCM bit2 <br>#define FCOP bit1 <br>#define TCON bit0 <br> <br>/* CONFIG bit definitions 0x3F */ <br>#define EE3 bit7 /* MC68HC811E2 only */ <br>#define EE2 bit6 /* MC68HC811E2 only */ <br>#define EE1 bit5 /* MC68HC811E2 only */ <br>#define EE0 bit4 /* MC68HC811E2 only */ <br>#define NOSEC bit3 <br>#define NOCOP bit2 <br>#define ROMON bit1 /* MC68HC11E9 and MC68HC11E8 only */ <br>#define EPON bit1 /* MC68HC711E9 only */ <br>#define EEON bit0 <br> <br><br> <br><br> </td></tr></tbody></table><script language="javascript">postamble();</script> </body></html>