COP8 "C" COMPILER V3.51 25-Mar-2002 PAGE 1 #pragma option f0 /* remove page breaks from listing file */ /* * COP8C Code Development System * Tutorial Example * INIT3.C * This code may be adapted for any purpose * when used with the COP8C Code Development * System. No warranty is implied or given * as to their usability for any purpose. * * (c) Copyright 2000 Byte Craft Limited * 421 King St.N., Waterloo, ON, Canada, N2J 4E4 * VOICE: 1 (519) 888 6911 * FAX : 1 (519) 746 6751 * email: support@bytecraft.com * * REVISION HISTORY * v1.00 AL 01/2000 Initial Version. */ 0007 #define __SHOW_LIBRARY /* include library sources in listing file */ #include #ifndef __COP8C_H 0008 #define __COP8C_H /* COP8C Code Development System Header file for National Semiconductor: COP8CBR This code may be adapted for any purpose when used with the COP8C Code Development System. No warranty is implied or given as to their usability for any purpose. (c) Copyright 2000 Byte Craft Limited 421 King St.N., Waterloo, ON, Canada, N2J 4E4 VOICE: 1 (519) 888 6911 FAX : 1 (519) 746 6751 email: support@bytecraft.com REVISION HISTORY V1.00 AL 01/00 Initial version */ /* PRAGMA HAS */ #pragma has 888; #pragma has SREG; 00FE #pragma regb BREG; 00EF #pragma regix IX; 00EF #pragma regac AC; 00FC #pragma portrw X @ 0xFC; 00FD #pragma portrw SP @ 0xFD; 00FE #pragma portrw B @ 0xFE; 00FF #pragma portrw S @ 0xFF; /* MEMORY INFO */ 8000 #define ROM_SIZE 32768 0200 #define CODE_START 0x200 0200 7DFF #pragma memory ROM [ROM_SIZE - CODE_START -1] @ CODE_START; 0040 #define STACK_SIZE 0x40 0008 #define RAM_BANK0_START 8 /* leave space for compiler temps 0x0-0x7 */ 0028 #define RAM_BANK0_SIZE 0x70-RAM_BANK0_START-STACK_SIZE 0100 #define RAM_BANK1_START 0x100 0200 #define RAM_BANK2_START 0x200 0300 #define RAM_BANK3_START 0x300 0400 #define RAM_BANK4_START 0x400 0500 #define RAM_BANK5_START 0x500 0600 #define RAM_BANK6_START 0x600 0700 #define RAM_BANK7_START 0x700 0080 #define RAM_BANK1_SIZE 0x80 0080 #define RAM_BANK2_SIZE 0x80 0080 #define RAM_BANK3_SIZE 0x80 0080 #define RAM_BANK4_SIZE 0x80 0080 #define RAM_BANK5_SIZE 0x80 0080 #define RAM_BANK6_SIZE 0x80 0080 #define RAM_BANK7_SIZE 0x80 00F1 #define RAM_REGISTERS_START 0xF1 /* reserve 0xF0 for compiler */ 000B #define RAM_REGISTERS_SIZE 0xFC-RAM_REGISTERS_START 0030 0040 #pragma memory STACK [STACK_SIZE] @ RAM_BANK0_START+RAM_BANK0_SIZE; 0008 0028 #pragma memory RAM bank0 [RAM_BANK0_SIZE] @ RAM_BANK0_START; 0100 0080 #pragma memory RAM bank1 [RAM_BANK1_SIZE] @ RAM_BANK1_START; 0200 0080 #pragma memory RAM bank2 [RAM_BANK2_SIZE] @ RAM_BANK2_START; 0300 0080 #pragma memory RAM bank3 [RAM_BANK3_SIZE] @ RAM_BANK3_START; 0400 0080 #pragma memory RAM bank4 [RAM_BANK4_SIZE] @ RAM_BANK4_START; 0500 0080 #pragma memory RAM bank5 [RAM_BANK5_SIZE] @ RAM_BANK5_START; 0600 0080 #pragma memory RAM bank6 [RAM_BANK6_SIZE] @ RAM_BANK6_START; 0700 0080 #pragma memory RAM bank7 [RAM_BANK7_SIZE] @ RAM_BANK7_START; 077F 0000 #pragma memory LOCAL [0] @ RAM_BANK7_START+RAM_BANK7_SIZE-1; 00F1 000B #pragma memory RAM register [RAM_REGISTERS_SIZE] @ RAM_REGISTERS_START; /* Interrupts */ 01FE #pragma vector __SWI @ 0x1FE; /* Software INTR Instruction */ 01FA #pragma vector __EXT @ 0x1FA; /* External Pin G0 edge */ 01F8 #pragma vector __TIMERT0 @ 0x1F8; /* Timer T0 Underflow */ 01F6 #pragma vector __TIMERT1A @ 0x1F6; /* Timer T1 T1A/Underflow */ 01F4 #pragma vector __TIMERT1B @ 0x1F4; /* Timer T1 T1B */ 01F2 #pragma vector __MICRO @ 0x1F2; /* MICROWIRE/PLUS */ 01EE #pragma vector __UARTR @ 0x1EE; /* UART Recieve */ 01EC #pragma vector __UARTT @ 0x1EC; /* UART Transmit */ 01EA #pragma vector __TIMERT2A @ 0x1EA; /* Timer T2 T2A/Underflow */ 01E8 #pragma vector __TIMERT2B @ 0x1E8; /* Timer T2 T2B */ 01E6 #pragma vector __TIMERT3A @ 0x1E6; /* Timer T3 T3A/Underflow */ 01E4 #pragma vector __TIMERT3B @ 0x1E4; /* Timer T3 T3B */ 01E2 #pragma vector __PORTL @ 0x1E2; /* PortL/wakeup PortL Edge */ 01E0 #pragma vector __VIS @ 0x1E0; /* Default */ /* place the VIS instruction at 0xff */ 00B4 #define VIS_OPCODE 0xb4 00FF #pragma vector INTERRUPT_BRANCH_VECTOR @ 0xFF; 00FF 02 00 void INTERRUPT_BRANCH_VECTOR(void) @ VIS_OPCODE<<8; 00FF B4 00 /* option register bit definitions */ /* #define OPTION_VAL ENABLE_SECURITY | DISABLE_WATCHDOG */ 7FFF #define OPTION_LOCATION 0x7fff 0020 #define SEC_ENABLE 0b00100000 0000 #define SEC_DISABLE 0b00000000 0004 #define WD_DISABLE 0b00000100 0000 #define WD_ENABLE 0b00000000 0002 #define HALT_DISABLE 0b00000010 0000 #define HALT_ENABLE 0b00000000 0001 #define FLEX_FLASH 0b00000001 0000 #define FLEX_ROM 0b00000000 #ifdef OPTION_VAL /*#define OPTION_VAL SEC_DISABLE | WD_ENABLE | HALT_DISABLE | FLEX_FLASH */ #pragma ECON @ OPTION_LOCATION = OPTION_VAL; #endif /* ECON_VAL */ /* PORTE */ 0090 #pragma portrw PORTE @ 0x90; /* PORTE data register */ 0090 #pragma portrw PORTED @ 0x90; /* PORTE data register */ 0091 #pragma portrw PORTEC @ 0x91; /* PORTE configuration register */ 0092 #pragma portr PORTEP @ 0x92; /* PORTE input pins */ /* PORTF */ 0094 #pragma portrw PORTF @ 0x94; /* PORTF data register */ 0094 #pragma portrw PORTFD @ 0x94; /* PORTF data register */ 0095 #pragma portrw PORTFC @ 0x95; /* PORTF configuration register */ 0096 #pragma portr PORTFP @ 0x96; /* PORTF input pins */ /* PORTA */ 00A0 #pragma portrw PORTA @ 0xA0; /* PORTA data register */ 00A0 #pragma portrw PORTAD @ 0xA0; /* PORTA data register */ 00A1 #pragma portrw PORTAC @ 0xA1; /* PORTA configuration register */ 00A2 #pragma portr PORTAP @ 0xA2; /* PORTA input pins */ /* PORTB */ 00A4 #pragma portrw PORTB @ 0xA4; /* PORTB data register */ 00A4 #pragma portrw PORTBD @ 0xA4; /* PORTB data register */ 00A5 #pragma portrw PORTBC @ 0xA5; /* PORTB configuration register */ 00A6 #pragma portr PORTBP @ 0xA6; /* PORTB input pins */ /* HSTCR */ 00AD #pragma portr TINTA @ 0xAD; /* high speed interrupt A */ 00AE #pragma portr TINTB @ 0xAE; /* high speed interrupt b */ 00AF #pragma portrw HSTCR @ 0xAF; /* high speed timer control register */ 0001 #define T3HS 1 0000 #define T2HS 0 /* PORTL */ 00D0 #pragma portrw PORTL @ 0xD0; /* PORTL data register */ 00D0 #pragma portrw PORTLD @ 0xD0; /* PORTL data register */ 00D1 #pragma portrw PORTLC @ 0xD1; /* PORTL configuration register */ 00D2 #pragma portr PORTLP @ 0xD2; /* PORTL input pins */ /* PORTG */ 00D4 #pragma portrw PORTG @ 0xD4; /* PORTG data register */ 00D4 #pragma portrw PORTGD @ 0xD4; /* PORTG data register */ 00D5 #pragma portrw PORTGC @ 0xD5; /* PORTG configuration register */ 00D6 #pragma portr PORTGP @ 0xD6; /* PORTG input pins */ /* PORTC */ 00D8 #pragma portrw PORTC @ 0xD8; /* PORTC data register */ 00D8 #pragma portrw PORTCD @ 0xD8; /* PORTC data register */ 00D9 #pragma portrw PORTCC @ 0xD9; /* PORTC configuration register */ 00DA #pragma portr PORTCP @ 0xDA; /* PORTC input pins */ /* PORTD */ 00DC #pragma portrw PORTD @ 0xDC; /* PORTD data register */ 00DC #pragma portrw PORTDD @ 0xDC; /* PORTD data register */ /* control registers */ 00EE #pragma portrw CNTRL @ 0xEE; /* CNTRL control register */ 0007 #define T1C3 7 /* timer T1 mode control bit */ 0006 #define T1C2 6 /* timer T1 mode control bit */ 0005 #define T1C1 5 /* timer T1 mode control bit */ 0004 #define T1C0 4 /* timer T1 mode control bit */ 0003 #define MSEL 3 /* selects G5 and G4 as MICROWIRE/PLUS signals SK and SO */ 0002 #define IEDG 2 /* external interrupt edge polarity select */ 0001 #define SL1 1 /* select MICROWIRE/PLUS clock divide */ 0000 #define SL0 0 /* select MICROWIRE/PLUS clock divide */ 00EF #pragma portrw PSW @ 0xEF; /* PSW register */ 0007 #define HC 7 /* half carry flag */ 0006 #define C 6 /* carry flag */ 0005 #define T1PND 5 /* timer T1 interrupt pending flag */ 0005 #define T1PNDA 5 /* timer T1 interrupt pending flag */ 0004 #define T1ENA 4 /* timer T1 interrupt enable for timer underflow or T1A */ 0003 #define EXPND 3 /* external interrupt pending */ 0002 #define BUSY 2 /* MICROWIRE/PLUS busy shifting flag */ 0001 #define EXEN 1 /* enable external interrupt */ 0000 #define GIE 0 /* global interrupt enable */ 00E8 #pragma portrw ICNTRL @ 0xE8; /* ICNTRL register */ 0006 #define LPEN 6 /* PORTL interrupt enable */ 0005 #define T0PND 5 /* timer T0 interrupt pending */ 0004 #define T0EN 4 /* timer T0 interrupt enable */ 0003 #define uWPND 3 /* MICROWIRE/PLUS interrupt pending */ 0002 #define uWEN 2 /* enable MICROWIRE/PLUS interrupt */ 0001 #define T1PNDB 1 /* timer T1 interrupt pending flag for T1B capture edge */ 0000 #define T1ENB 0 /* timer T1 interrupt enable for T1B input capture edge */ /* timer 1 */ 00EA #pragma portrw TMRLO @ 0xEA; /* timer T1 lower byte */ 00EB #pragma portrw TMRHI @ 0xEB; /* timer T1 upper byte */ 00EC #pragma portrw T1RALO @ 0xEC; /* timer T1 autoload register T1RA lower byte */ 00ED #pragma portrw T1RAHI @ 0xED; /* timer T1 autoload register T1RA upper byte */ 00E6 #pragma portrw T1RBLO @ 0xE6; /* timer T1 autoload register T1RB lower byte */ 00E7 #pragma portrw T1RBHI @ 0xE7; /* timer T1 autoload register T1RB upper byte */ /* timer 2 */ 00C6 #pragma portrw T2CNTRL @ 0xC6; /* timer T2 control register */ 0007 #define T2C3 7 /* timer T2 mode control bit */ 0006 #define T2C2 6 /* timer T2 mode control bit */ 0005 #define T2C1 5 /* timer T2 mode control bit */ 0004 #define T2C0 4 /* timer T2 mode control bit */ 0003 #define T2PNDA 3 /* timer T2 interrupt pending flag */ 0002 #define T2ENA 2 /* timer T2 interrupt enable for timer underflow or T2A */ 0001 #define T2PNDB 1 /* timer T2 interrupt pending flag */ 0000 #define T2ENB 0 /* timer T2 interrupt enable for T2B input capture edge */ 00C0 #pragma portrw TMR2LO @ 0xC0; /* timer T2 lower byte */ 00C1 #pragma portrw TMR2HI @ 0xC1; /* timer T2 upper byte */ 00C2 #pragma portrw T2RALO @ 0xC2; /* timer T2 autoload register T2RA lower byte */ 00C3 #pragma portrw T2RAHI @ 0xC3; /* timer T2 autoload register T2RA upper byte */ 00C4 #pragma portrw T2RBLO @ 0xC4; /* timer T2 autoload register T2RB lower byte */ 00C5 #pragma portrw T2RBHI @ 0xC5; /* timer T2 autoload register T2RB upper byte */ /* timer 3 */ 00B6 #pragma portrw T3CNTRL @ 0xB6; /* timer T3 control register */ 0007 #define T3C3 7 /* timer T3 mode control bit */ 0006 #define T3C2 6 /* timer T3 mode control bit */ 0005 #define T3C1 5 /* timer T3 mode control bit */ 0004 #define T3C0 4 /* timer T3 mode control bit */ 0003 #define T3PNDA 3 /* timer T3 interrupt pending flag */ 0002 #define T3ENA 2 /* timer T3 interrupt enable for timer underflow or T3A */ 0001 #define T3PNDB 1 /* timer T3 interrupt pending flag */ 0000 #define T3ENB 0 /* timer T3 interrupt enable for T3B input capture edge */ 00B0 #pragma portrw TMR3LO @ 0xB0; /* timer T3 lower byte */ 00B1 #pragma portrw TMR3HI @ 0xB1; /* timer T3 upper byte */ 00B2 #pragma portrw T3RALO @ 0xB2; /* timer T3 autoload register T3RA lower byte */ 00B3 #pragma portrw T3RAHI @ 0xB3; /* timer T3 autoload register T3RA upper byte */ 00B4 #pragma portrw T3RBLO @ 0xB4; /* timer T3 autoload register T3RB lower byte */ 00B5 #pragma portrw T3RBHI @ 0xB5; /* timer T3 autoload register T3RB upper byte */ 00E9 #pragma portrw SIOR @ 0xE9; /* MICROWIRE/PLUS shift register */ /* ITMR */ 00CF #pragma portrw ITMR @ 0xCF; /* idle timer control register */ 0007 #define LSON 7 /* turns the low speed oscillator on or off */ 0006 #define HSON 6 /* turns the high speed oscillator on or off */ 0005 #define DCEN 5 /* clock idle timer with high speed clock */ 0004 #define CCKSEL 4 /* high speed timer as CPU clock */ 0002 #define ITSEL2 2 /* idle timer period bit */ 0001 #define ITSEL1 1 /* idle timer period bit */ 0000 #define ITSEL0 0 /* idle timer period bit */ /* ENAD */ 00CB #pragma portrw ENAD @ 0xCB; /* A/D converter control register */ 0007 #define ADCH3 7 /* ADC channel select bit */ 0006 #define ADCH2 6 /* ADC channel select bit */ 0005 #define ADCH1 5 /* ADC channel select bit */ 0004 #define ADCH0 4 /* ADC channel select bit */ 0003 #define ADMOD 3 /* places the ADC in single-ended or differential mode */ 0002 #define MUX 2 /* enables the ADC multiplexor output */ 0001 #define PSC 1 /* MCLK divide by 1 or 12 */ 0000 #define ADBSY 0 /* ADC busy (currently converting) */ /* ADRSLTL */ 00CD #pragma portrw ADRSLTL @ 0xCD; /* A/D converter result low */ /* ADRSLTH */ 00CC #pragma portrw ADRSLTH @ 0xCC; /* A/D converter result high */ /* ISPAD */ 00A8 #pragma portrw ISPAD @ 0xA8; /* ISP address register */ /* ISPADLO */ 00A8 #pragma portrw ISPADLO @ 0xA8; /* ISP address register low */ /* ISPADHI */ 00A9 #pragma portrw ISPADHI @ 0xA9; /* ISP address register high */ /* ISPRD */ 00AA #pragma portrw ISPRD @ 0xAA; /* ISP read data register low */ /* ISPWR */ 00AB #pragma portrw ISPWR @ 0xAB; /* ISP write data register low */ /* PGMTIM */ 00E1 #pragma portrw PGMTIM @ 0xE1; /* flash memory write timing register */ /* ISPKEY */ 00E2 #pragma portrw ISPKEY @ 0xE2; /* ISP key register */ /* UART */ 00B8 #pragma portrw TBUF @ 0xB8; /* UART transmit buffer */ 00B9 #pragma portrw RBUF @ 0xB9; /* UART receive buffer */ 00BA #pragma portrw ENU @ 0xBA; /* UART Control and Status */ 0007 #define PEN 7 /* enable / dis-able Parity */ 0006 #define PSEL1 6 /* Parity select bits */ 0005 #define XBIT9 5 /* Program Bit transmission or Selects Parity */ 0005 #define PSEL0 5 /* Program Bit transmission or Selects Parity */ 0004 #define CHL1 4 /* frame format selection */ 0003 #define CHL0 3 /* frame format selection */ 0002 #define ERR 2 /* error Flag */ 0001 #define RBFL 1 /* Byte Received Flag */ 0000 #define TBMT 0 /* Byte Transfered Flag */ 00BB #pragma portrw ENUR @ 0xBB; /* UART Receive Control and Status */ 0007 #define DOE 7 /* Data Overrun error */ 0006 #define FE 6 /* Flag Framing error */ 0005 #define PE 5 /* Parity error */ 0004 #define BD 4 /* flags a line break */ 0003 #define RBIT9 3 /* Ninth bit in UART nine bit mode */ 0002 #define ATTN 2 /* Attention mode enable */ 0001 #define XMTG 1 /* UART transmitting indicator */ 0000 #define RCVG 0 /* Framing error (goes low when RDX goes high) */ 00BC #pragma portrw ENUI @ 0xBC; /* UART register - Interrupt and Clock Source */ 0007 #define STP2 7 /* Sets number of Stop bits to be Transmitted */ 0006 #define BRK 6 /* Holds TDX low to generate a line break */ 0005 #define ETDX 5 /* ETDX - UART Transmit Pin */ 0004 #define SSEL 4 /* UART Mode Select */ 0003 #define XRCLK 3 /* Clock source selection reception */ 0002 #define XTCLK 2 /* Clock source selection transmission */ 0001 #define ERI 1 /* Enable / Disable Receiver interrupt */ 0000 #define ETI 0 /* Enable / Disable Transmiter Interrupt */ 00BD #pragma portrw BAUD @ 0xBD; /* UART baud register */ 00BE #pragma portrw PSR @ 0xBE; /* UART prescale select register */ 00C7 #pragma portrw WDSVR @ 0xC7; /* WATCHDOG service register */ 00C8 #pragma portrw LWKEDG @ 0xC8; /* LMIWU edge select register */ 00C9 #pragma portrw LWKEN @ 0xC9; /* LMIWU enable register */ 00CA #pragma portrw LWKPND @ 0xCA; /* LMIWU pending register */ #endif /* __COP8C_H */ #include #ifndef __PORT_H 0009 #define __PORT_H #endif /* __PORT_H */ /*_init_*/ #include #ifndef STARTUP_H 000C #define STARTUP_H #endif /* STARTUP_H */ 00FF #define PORTL_STARTUP_DDR OOOOOOOO /* set all port B pins as output */ 000D #define CNTRL_STARTUP_VAL 0x70; /* start timer 2 */ 0008 05 int i=5; void main(void) { 0200 9D C0 LD A,0C0 0202 9C D0 X A,0D0 0204 FB JP 00200 while(1) /* loop forever */ 0205 PORTLD=TMR2LO; /* output low byte of timer T2 on port L */ } /*_init_*/ #ifndef __STARTUP_C 000E #define __STARTUP_C /* * COP8C Code Development System * startup function used with library routines * STARTUP.C * This code may be adapted for any purpose * when used with the COP8C Code Development * System. No warranty is implied or given * as to their usability for any purpose. * * (c) Copyright 2000 Byte Craft Limited * 421 King St.N., Waterloo, ON, Canada, N2J 4E4 * VOICE: 1 (519) 888 6911 * FAX : 1 (519) 746 6751 * email: support@bytecraft.com * * REVISION HISTORY * V0.90b AL 20/01/2000 Initial Version. */ /* * This startup function can be used to initialize * port and option registerbat system reset * * This function is automatically called by the compiler * at reset * * CNTRL_STARTUP_DATA value assigned to CNTRL at startup * * PORTA_STARTUP_DATA value assigned to PORTA at startup * PORTA_STARTUP_DDR PORTA input/output status at startup * * PORTB_STARTUP_DATA value assigned to PORTB at startup * PORTB_STARTUP_DDR PORTB input/output status at startup * * PORTC_STARTUP_DATA value assigned to PORTC at startup * PORTC_STARTUP_DDR PORTC input/output status at startup * * PORTD_STARTUP_DATA value assigned to PORTD at startup * PORTD_STARTUP_DDR PORTD input/output status at startup * * PORTE_STARTUP_DATA value assigned to PORTE at startup * PORTE_STARTUP_DDR PORTE input/output status at startup * * PORTF_STARTUP_DATA value assigned to PORTF at startup * PORTF_STARTUP_DDR PORTF input/output status at startup * * PORTG_STARTUP_DATA value assigned to PORTG at startup * PORTG_STARTUP_DDR PORTG input/output status at startup * * PORTL_STARTUP_DATA value assigned to PORTL at startup * PORTL_STARTUP_DDR PORTL input/output status at startup * ***/ #ifndef __COP8C_H #define __COP8C_H /* COP8C Code Development System Header file for National Semiconductor: COP8 Generic Device Headerfile This code may be adapted for any purpose when used with the COP8C Code Development System. No warranty is implied or given as to their usability for any purpose. (c) Copyright 1998,1999,2000 Byte Craft Limited 421 King St.N., Waterloo, ON, Canada, N2J 4E4 VOICE: 1 (519) 888 6911 FAX : 1 (519) 746 6751 email: support@bytecraft.com Michael Lee (MEKL) REVISION HISTORY V3.00 ML 05/98 Initial Version V3.01 AL 06/98 modified SaveContext and RestoreContext macros V3.02 AL 06/98 modified SaveContext and RestoreContext macros V3.03 AL 10/98 modified RAM declarations, reserved 0xF0 for compiler V3.04 AL 06/99 modified SaveContext and RestoreContext macros V3.05 AL 06/00 moved SaveContext and RestoreContext macros to "cop8_isr.h" */ /* PRAGMA HAS */ #pragma has 888; #pragma has SREG; #pragma regb BREG; #pragma regix IX; #pragma regac AC; #pragma portrw X @ 0xFC; #pragma portrw SP @ 0xFD; #pragma portrw B @ 0xFE; #pragma portrw S @ 0xFF; /* MEMORY INFO */ #define ROM_SIZE 32768 #define CODE_START 0x200 #pragma memory ROM [ROM_SIZE - CODE_START] @ CODE_START; #define STACK_SIZE 0x20 #define RAM_BANK0_START 8 /* leave space for compiler temps 0x0-0x7 */ #define RAM_BANK0_SIZE 0x70-RAM_BANK0_START-STACK_SIZE #define RAM_BANK1_START 0x100 #define RAM_BANK2_START 0x200 #define RAM_BANK3_START 0x300 #define RAM_BANK1_SIZE 0x80 #define RAM_BANK2_SIZE 0x80 #define RAM_BANK3_SIZE 0x80 #define RAM_REGISTERS_START 0xF1 /* reserve 0xF0 for compiler */ #define RAM_REGISTERS_SIZE 0xFC-RAM_REGISTERS_START #pragma memory STACK [STACK_SIZE] @ RAM_BANK0_START+RAM_BANK0_SIZE; #pragma memory RAM bank0 [RAM_BANK0_SIZE] @ RAM_BANK0_START; #pragma memory RAM bank1 [RAM_BANK1_SIZE] @ RAM_BANK1_START; #pragma memory RAM bank2 [RAM_BANK2_SIZE] @ RAM_BANK2_START; #pragma memory RAM bank3 [RAM_BANK3_SIZE] @ RAM_BANK3_START; #pragma memory LOCAL [0] @ RAM_BANK3_START+RAM_BANK3_SIZE-1; #pragma memory RAM register [RAM_REGISTERS_SIZE] @ RAM_REGISTERS_START; /* Interrupts */ #pragma vector __SWI @ 0x1FE; /* Software INTR Instruction */ #pragma vector __EXT @ 0x1FA; /* External Pin G0 edge */ #pragma vector __TIMERT0 @ 0x1F8; /* Timer T0 Underflow */ #pragma vector __TIMERT1A @ 0x1F6; /* Timer T1 T1A/Underflow */ #pragma vector __TIMERT1B @ 0x1F4; /* Timer T1 T1B */ #pragma vector __MICRO @ 0x1F2; /* MICROWIRE/PLUS */ #pragma vector __UARTR @ 0x1EE; /* UART Recieve */ #pragma vector __UARTT @ 0x1EC; /* UART Transmit */ #pragma vector __TIMERT2A @ 0x1EA; /* Timer T2 T2A/Underflow */ #pragma vector __TIMERT2B @ 0x1E8; /* Timer T2 T2B */ #pragma vector __TIMERT3A @ 0x1E6; /* Timer T3 T3A/Underflow */ #pragma vector __TIMERT3B @ 0x1E4; /* Timer T3 T3B */ #pragma vector __PORTL @ 0x1E2; /* PortL/wakeup PortL Edge */ #pragma vector __VIS @ 0x1E0; /* Default */ /* place the VIS instruction at 0xff */ #define VIS_OPCODE 0xb4 #pragma vector INTERRUPT_BRANCH_VECTOR @ 0xFF; void INTERRUPT_BRANCH_VECTOR(void) @ VIS_OPCODE<<8; /* PORTL */ #pragma portrw PORTL @ 0xD0; /* PORTL data register */ #pragma portrw PORTLD @ 0xD0; /* PORTL data register */ #pragma portrw PORTLC @ 0xD1; /* PORTL configuration register */ #pragma portr PORTLP @ 0xD2; /* PORTL input pins */ /* PORTG */ #pragma portrw PORTG @ 0xD4; /* PORTG data register */ #pragma portrw PORTGD @ 0xD4; /* PORTG data register */ #pragma portrw PORTGC @ 0xD5; /* PORTG configuration register */ #pragma portr PORTGP @ 0xD6; /* PORTG input pins */ /* PORTC */ #pragma portrw PORTC @ 0xD8; /* PORTC data register */ #pragma portrw PORTCD @ 0xD8; /* PORTC data register */ #pragma portrw PORTCC @ 0xD9; /* PORTC configuration register */ #pragma portr PORTCP @ 0xDA; /* PORTC input pins */ /* PORTD */ #pragma portrw PORTD @ 0xDC; /* PORTD data register */ #pragma portrw PORTDD @ 0xDC; /* PORTD data register */ /* PortI */ #pragma portr PORTIP @ 0xD7; /* PORTI input pins */ /* Port F */ #pragma portrw PORTF @ 0x94; /* Data Register */ #pragma portrw PORTFD @ 0x94; /* Data Register */ #pragma portrw PORTFC @ 0x95; /* Configuration Registar */ #pragma portrw PORTFP @ 0x96; /* Input Pins (read-only) */ /* PORTE */ #pragma portrw PORTE @ 0x90; /* PORTE data register */ #pragma portrw PORTED @ 0x90; /* PORTE data register */ #pragma portrw PORTEC @ 0x91; /* PORTE configuration register */ /* control registerb*/ #pragma portrw CNTRL @ 0xEE; /* CNTRL control register */ #define T1C3 7 /* timer T1 mode control bit */ #define T1C2 6 /* timer T1 mode control bit */ #define T1C1 5 /* timer T1 mode control bit */ #define T1C0 4 /* timer T1 mode control bit */ #define MSEL 3 /* selects G5 and G4 as MICROWIRE/PLUS signals SK and SO */ #define IEDG 2 /* external interrupt edge polarity select */ #define SL1 1 /* select MICROWIRE/PLUS clock divide */ #define SL0 0 /* select MICROWIRE/PLUS clock divide */ #pragma portrw PSW @ 0xEF; /* PSW register */ #define HC 7 /* half carry flag */ #define C 6 /* carry flag */ #define T1PND 5 /* timer T1 interrupt pending flag */ #define T1PNDA 5 /* timer T1 interrupt pending flag */ #define T1ENA 4 /* timer T1 interrupt enable for timer underflow or T1A */ #define EXPND 3 /* external interrupt pending */ #define BUSY 2 /* MICROWIRE/PLUS busy shifting flag */ #define EXEN 1 /* enable external interrupt */ #define GIE 0 /* global interrupt enable */ #pragma portrw ICNTRL @ 0xE8; /* ICNTRL register */ #define LPEN 6 /* PORTL interrupt enable */ #define T0PND 5 /* timer T0 interrupt pending */ #define T0EN 4 /* timer T0 interrupt enable */ #define uWPND 3 /* MICROWIRE/PLUS interrupt pending */ #define uWEN 2 /* enable MICROWIRE/PLUS interrupt */ #define T1PNDB 1 /* timer T1 interrupt pending flag for T1B capture edge */ #define T1ENB 0 /* timer T1 interrupt enable for T1B input capture edge */ /* timer 1 */ #pragma portrw TMRLO @ 0xEA; /* timer T1 lower byte */ #pragma portrw TMRHI @ 0xEB; /* timer T1 upper byte */ #pragma portrw T1RALO @ 0xEC; /* timer T1 autoload register T1RA lower byte */ #pragma portrw T1RAHI @ 0xED; /* timer T1 autoload register T1RA upper byte */ #pragma portrw T1RBLO @ 0xE6; /* timer T1 autoload register T1RB lower byte */ #pragma portrw T1RBHI @ 0xE7; /* timer T1 autoload register T1RB upper byte */ /* timer 2 */ #pragma portrw T2CNTRL @ 0xC6; /* timer T2 control register */ #define T2C3 7 /* timer T2 mode control bit */ #define T2C2 6 /* timer T2 mode control bit */ #define T2C1 5 /* timer T2 mode control bit */ #define T2C0 4 /* timer T2 mode control bit */ #define T2PNDA 3 /* timer T2 interrupt pending flag */ #define T2ENA 2 /* timer T2 interrupt enable for timer underflow or T2A */ #define T2PNDB 1 /* timer T2 interrupt pending flag */ #define T2ENB 0 /* timer T2 interrupt enable for T2B input capture edge */ #pragma portrw TMR2LO @ 0xC0; /* timer T2 lower byte */ #pragma portrw TMR2HI @ 0xC1; /* timer T2 upper byte */ #pragma portrw T2RALO @ 0xC2; /* timer T2 autoload register T2RA lower byte */ #pragma portrw T2RAHI @ 0xC3; /* timer T2 autoload register T2RA upper byte */ #pragma portrw T2RBLO @ 0xC4; /* timer T2 autoload register T2RB lower byte */ #pragma portrw T2RBHI @ 0xC5; /* timer T2 autoload register T2RB upper byte */ /* timer 3 */ #pragma portrw T3CNTRL @ 0xB6; /* timer T3 control register */ #define T3C3 7 /* timer T3 mode control bit */ #define T3C2 6 /* timer T3 mode control bit */ #define T3C1 5 /* timer T3 mode control bit */ #define T3C0 4 /* timer T3 mode control bit */ #define T3PNDA 3 /* timer T3 interrupt pending flag */ #define T3ENA 2 /* timer T3 interrupt enable for timer underflow or T3A */ #define T3PNDB 1 /* timer T3 interrupt pending flag */ #define T3ENB 0 /* timer T3 interrupt enable for T3B input capture edge */ #pragma portrw TMR3LO @ 0xB0; /* timer T3 lower byte */ #pragma portrw TMR3HI @ 0xB1; /* timer T3 upper byte */ #pragma portrw T3RALO @ 0xB2; /* timer T3 autoload register T3RA lower byte */ #pragma portrw T3RAHI @ 0xB3; /* timer T3 autoload register T3RA upper byte */ #pragma portrw T3RBLO @ 0xB4; /* timer T3 autoload register T3RB lower byte */ #pragma portrw T3RBHI @ 0xB5; /* timer T3 autoload register T3RB upper byte */ #pragma portrw SIOR @ 0xE9; /* MICROWIRE/PLUS shift register */ /* comparator */ #pragma portrw CMPSL @ 0xB7; /* comparator select register */ #define CMP2OE 6 /* comparator 2 output enable */ #define CMP2RD 5 /* reads comparator 2 output */ #define CMP2EN 4 /* enable comparator 2 */ #define CMP1OE 3 /* comparator 1 output enable */ #define CMP1RD 2 /* reads comparator 1 output */ #define CMP1EN 1 /* enable comparator 1 */ /* UART */ #pragma portrw TBUF @ 0xB8; /* UART transmit buffer */ #pragma portrw RBUF @ 0xB9; /* UART receive buffer */ #pragma portrw ENU @ 0xBA; /* UART Control and Status */ #define PEN 7 /* enable / dis-able Parity */ #define PSEL1 6 /* Parity select bits */ #define XBIT9 5 /* Program Bit transmission or Selects Parity */ #define PSEL0 5 /* Program Bit transmission or Selects Parity */ #define CHL1 4 /* frame format selection */ #define CHL0 3 /* frame format selection */ #define ERR 2 /* error Flag */ #define RBFL 1 /* Byte Received Flag */ #define TBMT 0 /* Byte Transfered Flag */ #pragma portrw ENUR @ 0xBB; /* UART Receive Control and Status */ #define DOE 7 /* Data Overrun error */ #define FE 6 /* Flag Framing error */ #define PE 5 /* Parity error */ #define SPARE 4 /* Reserved */ #define RBIT9 3 /* Ninth bit in UART nine bit mode */ #define ATTN 2 /* Attention mode enable */ #define XMTG 1 /* UART transmitting indicator */ #define RCVG 0 /* Framing error (goes low when RDX goes high) */ #pragma portrw ENUI @ 0xBC; /* UART register - Interrupt and Clock Source */ #define STP2 7 /* Sets number of Stop bits to be Transmitted */ #define STP78 6 /* Program last Stop bit */ #define ETDX 5 /* ETDX - UART Transmit Pin */ #define SSEL 4 /* UART Mode Select */ #define XRCLK 3 /* Clock source selection reception */ #define XTCLK 2 /* Clock source selection transmission */ #define ERI 1 /* Enable / Disable Receiver interrupt */ #define ETI 0 /* Enable / Disable Transmiter Interrupt */ #pragma portrw BAUD @ 0xBD; /* UART baud register */ #pragma portrw PSR @ 0xBE; /* UART prescale select register */ #pragma portrw WDSVR @ 0xC7; /* WATCHDOG service register */ #pragma portrw LWKEDG @ 0xC8; /* LMIWU edge select register */ #pragma portrw LWKEN @ 0xC9; /* LMIWU enable register */ #pragma portrw LWKPND @ 0xCA; /* LMIWU pending register */ #endif /* __COP8C_H */ #ifndef __PORT_H #define __PORT_H #pragma option -l /* * COP8C Code Development System * IO port library * PORT.H * This code may be adapted for any purpose * when used with the COP8C Code Development * System. No warranty is implied or given * as to their usability for any purpose. * * (c) Copyright 2000 Byte Craft Limited * 421 King St.N., Waterloo, ON, Canada, N2J 4E4 * VOICE: 1 (519) 888 6911 * FAX : 1 (519) 746 6751 * email: support@bytecraft.com * * REVISION HISTORY * V0.90b AL 20/01/2000 Initial Version. */ #define DDR(PORT,VAL) (PORT##C=VAL) #define DDR_WAIT() NOP() #define IIIIIIII 0b00000000 #define IIIIIIIO 0b00000001 #define IIIIIIOI 0b00000010 #define IIIIIIOO 0b00000011 #define IIIIIOII 0b00000100 #define IIIIIOIO 0b00000101 #define IIIIIOOI 0b00000110 #define IIIIIOOO 0b00000111 #define IIIIOIII 0b00001000 #define IIIIOIIO 0b00001001 #define IIIIOIOI 0b00001010 #define IIIIOIOO 0b00001011 #define IIIIOOII 0b00001100 #define IIIIOOIO 0b00001101 #define IIIIOOOI 0b00001110 #define IIIIOOOO 0b00001111 #define IIIOIIII 0b00010000 #define IIIOIIIO 0b00010001 #define IIIOIIOI 0b00010010 #define IIIOIIOO 0b00010011 #define IIIOIOII 0b00010100 #define IIIOIOIO 0b00010101 #define IIIOIOOI 0b00010110 #define IIIOIOOO 0b00010111 #define IIIOOIII 0b00011000 #define IIIOOIIO 0b00011001 #define IIIOOIOI 0b00011010 #define IIIOOIOO 0b00011011 #define IIIOOOII 0b00011100 #define IIIOOOIO 0b00011101 #define IIIOOOOI 0b00011110 #define IIIOOOOO 0b00011111 #define IIOIIIII 0b00100000 #define IIOIIIIO 0b00100001 #define IIOIIIOI 0b00100010 #define IIOIIIOO 0b00100011 #define IIOIIOII 0b00100100 #define IIOIIOIO 0b00100101 #define IIOIIOOI 0b00100110 #define IIOIIOOO 0b00100111 #define IIOIOIII 0b00101000 #define IIOIOIIO 0b00101001 #define IIOIOIOI 0b00101010 #define IIOIOIOO 0b00101011 #define IIOIOOII 0b00101100 #define IIOIOOIO 0b00101101 #define IIOIOOOI 0b00101110 #define IIOIOOOO 0b00101111 #define IIOOIIII 0b00110000 #define IIOOIIIO 0b00110001 #define IIOOIIOI 0b00110010 #define IIOOIIOO 0b00110011 #define IIOOIOII 0b00110100 #define IIOOIOIO 0b00110101 #define IIOOIOOI 0b00110110 #define IIOOIOOO 0b00110111 #define IIOOOIII 0b00111000 #define IIOOOIIO 0b00111001 #define IIOOOIOI 0b00111010 #define IIOOOIOO 0b00111011 #define IIOOOOII 0b00111100 #define IIOOOOIO 0b00111101 #define IIOOOOOI 0b00111110 #define IIOOOOOO 0b00111111 #define IOIIIIII 0b01000000 #define IOIIIIIO 0b01000001 #define IOIIIIOI 0b01000010 #define IOIIIIOO 0b01000011 #define IOIIIOII 0b01000100 #define IOIIIOIO 0b01000101 #define IOIIIOOI 0b01000110 #define IOIIIOOO 0b01000111 #define IOIIOIII 0b01001000 #define IOIIOIIO 0b01001001 #define IOIIOIOI 0b01001010 #define IOIIOIOO 0b01001011 #define IOIIOOII 0b01001100 #define IOIIOOIO 0b01001101 #define IOIIOOOI 0b01001110 #define IOIIOOOO 0b01001111 #define IOIOIIII 0b01010000 #define IOIOIIIO 0b01010001 #define IOIOIIOI 0b01010010 #define IOIOIIOO 0b01010011 #define IOIOIOII 0b01010100 #define IOIOIOIO 0b01010101 #define IOIOIOOI 0b01010110 #define IOIOIOOO 0b01010111 #define IOIOOIII 0b01011000 #define IOIOOIIO 0b01011001 #define IOIOOIOI 0b01011010 #define IOIOOIOO 0b01011011 #define IOIOOOII 0b01011100 #define IOIOOOIO 0b01011101 #define IOIOOOOI 0b01011110 #define IOIOOOOO 0b01011111 #define IOOIIIII 0b01100000 #define IOOIIIIO 0b01100001 #define IOOIIIOI 0b01100010 #define IOOIIIOO 0b01100011 #define IOOIIOII 0b01100100 #define IOOIIOIO 0b01100101 #define IOOIIOOI 0b01100110 #define IOOIIOOO 0b01100111 #define IOOIOIII 0b01101000 #define IOOIOIIO 0b01101001 #define IOOIOIOI 0b01101010 #define IOOIOIOO 0b01101011 #define IOOIOOII 0b01101100 #define IOOIOOIO 0b01101101 #define IOOIOOOI 0b01101110 #define IOOIOOOO 0b01101111 #define IOOOIIII 0b01110000 #define IOOOIIIO 0b01110001 #define IOOOIIOI 0b01110010 #define IOOOIIOO 0b01110011 #define IOOOIOII 0b01110100 #define IOOOIOIO 0b01110101 #define IOOOIOOI 0b01110110 #define IOOOIOOO 0b01110111 #define IOOOOIII 0b01111000 #define IOOOOIIO 0b01111001 #define IOOOOIOI 0b01111010 #define IOOOOIOO 0b01111011 #define IOOOOOII 0b01111100 #define IOOOOOIO 0b01111101 #define IOOOOOOI 0b01111110 #define IOOOOOOO 0b01111111 #define OIIIIIII 0b10000000 #define OIIIIIIO 0b10000001 #define OIIIIIOI 0b10000010 #define OIIIIIOO 0b10000011 #define OIIIIOII 0b10000100 #define OIIIIOIO 0b10000101 #define OIIIIOOI 0b10000110 #define OIIIIOOO 0b10000111 #define OIIIOIII 0b10001000 #define OIIIOIIO 0b10001001 #define OIIIOIOI 0b10001010 #define OIIIOIOO 0b10001011 #define OIIIOOII 0b10001100 #define OIIIOOIO 0b10001101 #define OIIIOOOI 0b10001110 #define OIIIOOOO 0b10001111 #define OIIOIIII 0b10010000 #define OIIOIIIO 0b10010001 #define OIIOIIOI 0b10010010 #define OIIOIIOO 0b10010011 #define OIIOIOII 0b10010100 #define OIIOIOIO 0b10010101 #define OIIOIOOI 0b10010110 #define OIIOIOOO 0b10010111 #define OIIOOIII 0b10011000 #define OIIOOIIO 0b10011001 #define OIIOOIOI 0b10011010 #define OIIOOIOO 0b10011011 #define OIIOOOII 0b10011100 #define OIIOOOIO 0b10011101 #define OIIOOOOI 0b10011110 #define OIIOOOOO 0b10011111 #define OIOIIIII 0b10100000 #define OIOIIIIO 0b10100001 #define OIOIIIOI 0b10100010 #define OIOIIIOO 0b10100011 #define OIOIIOII 0b10100100 #define OIOIIOIO 0b10100101 #define OIOIIOOI 0b10100110 #define OIOIIOOO 0b10100111 #define OIOIOIII 0b10101000 #define OIOIOIIO 0b10101001 #define OIOIOIOI 0b10101010 #define OIOIOIOO 0b10101011 #define OIOIOOII 0b10101100 #define OIOIOOIO 0b10101101 #define OIOIOOOI 0b10101110 #define OIOIOOOO 0b10101111 #define OIOOIIII 0b10110000 #define OIOOIIIO 0b10110001 #define OIOOIIOI 0b10110010 #define OIOOIIOO 0b10110011 #define OIOOIOII 0b10110100 #define OIOOIOIO 0b10110101 #define OIOOIOOI 0b10110110 #define OIOOIOOO 0b10110111 #define OIOOOIII 0b10111000 #define OIOOOIIO 0b10111001 #define OIOOOIOI 0b10111010 #define OIOOOIOO 0b10111011 #define OIOOOOII 0b10111100 #define OIOOOOIO 0b10111101 #define OIOOOOOI 0b10111110 #define OIOOOOOO 0b10111111 #define OOIIIIII 0b11000000 #define OOIIIIIO 0b11000001 #define OOIIIIOI 0b11000010 #define OOIIIIOO 0b11000011 #define OOIIIOII 0b11000100 #define OOIIIOIO 0b11000101 #define OOIIIOOI 0b11000110 #define OOIIIOOO 0b11000111 #define OOIIOIII 0b11001000 #define OOIIOIIO 0b11001001 #define OOIIOIOI 0b11001010 #define OOIIOIOO 0b11001011 #define OOIIOOII 0b11001100 #define OOIIOOIO 0b11001101 #define OOIIOOOI 0b11001110 #define OOIIOOOO 0b11001111 #define OOIOIIII 0b11010000 #define OOIOIIIO 0b11010001 #define OOIOIIOI 0b11010010 #define OOIOIIOO 0b11010011 #define OOIOIOII 0b11010100 #define OOIOIOIO 0b11010101 #define OOIOIOOI 0b11010110 #define OOIOIOOO 0b11010111 #define OOIOOIII 0b11011000 #define OOIOOIIO 0b11011001 #define OOIOOIOI 0b11011010 #define OOIOOIOO 0b11011011 #define OOIOOOII 0b11011100 #define OOIOOOIO 0b11011101 #define OOIOOOOI 0b11011110 #define OOIOOOOO 0b11011111 #define OOOIIIII 0b11100000 #define OOOIIIIO 0b11100001 #define OOOIIIOI 0b11100010 #define OOOIIIOO 0b11100011 #define OOOIIOII 0b11100100 #define OOOIIOIO 0b11100101 #define OOOIIOOI 0b11100110 #define OOOIIOOO 0b11100111 #define OOOIOIII 0b11101000 #define OOOIOIIO 0b11101001 #define OOOIOIOI 0b11101010 #define OOOIOIOO 0b11101011 #define OOOIOOII 0b11101100 #define OOOIOOIO 0b11101101 #define OOOIOOOI 0b11101110 #define OOOIOOOO 0b11101111 #define OOOOIIII 0b11110000 #define OOOOIIIO 0b11110001 #define OOOOIIOI 0b11110010 #define OOOOIIOO 0b11110011 #define OOOOIOII 0b11110100 #define OOOOIOIO 0b11110101 #define OOOOIOOI 0b11110110 #define OOOOIOOO 0b11110111 #define OOOOOIII 0b11111000 #define OOOOOIIO 0b11111001 #define OOOOOIOI 0b11111010 #define OOOOOIOO 0b11111011 #define OOOOOOII 0b11111100 #define OOOOOOIO 0b11111101 #define OOOOOOOI 0b11111110 #define OOOOOOOO 0b11111111 #pragma option +l #endif /* __PORT_H */ #ifdef PORTA_STARTUP_CONF #define PORTA_STARTUP_DDR PORTA_STARTUP_CONF #endif /* PORTA_STARTUP_CONF */ #ifdef PORTB_STARTUP_CONF #define PORTB_STARTUP_DDR PORTB_STARTUP_CONF #endif /* PORTB_STARTUP_CONF */ #ifdef PORTC_STARTUP_CONF #define PORTC_STARTUP_DDR PORTC_STARTUP_CONF #endif /* PORTC_STARTUP_CONF */ #ifdef PORTD_STARTUP_CONF #define PORTD_STARTUP_DDR PORTD_STARTUP_CONF #endif /* PORTD_STARTUP_CONF */ #ifdef PORTE_STARTUP_CONF #define PORTE_STARTUP_DDR PORTE_STARTUP_CONF #endif /* PORTE_STARTUP_CONF */ #ifdef PORTF_STARTUP_CONF #define PORTF_STARTUP_DDR PORTF_STARTUP_CONF #endif /* PORTF_STARTUP_CONF */ #ifdef PORTG_STARTUP_CONF #define PORTG_STARTUP_DDR PORTG_STARTUP_CONF #endif /* PORTG_STARTUP_CONF */ #ifdef PORTL_STARTUP_CONF #define PORTL_STARTUP_DDR PORTL_STARTUP_CONF #endif /* PORTL_STARTUP_CONF */ void __STARTUP(void) { #ifdef PORTA_STARTUP_DATA PORTAD=PORTA_STARTUP_DATA; #endif #ifdef PORTA_STARTUP_DDR DDR(PORTA,PORTA_STARTUP_DDR); #endif #ifdef PORTB_STARTUP_DATA PORTBD=PORTB_STARTUP_DATA; #endif #ifdef PORTB_STARTUP_DDR DDR(PORTB,PORTB_STARTUP_DDR); #endif #ifdef PORTC_STARTUP_DATA PORTCD=PORTC_STARTUP_DATA; #endif #ifdef PORTC_STARTUP_DDR DDR(PORTC,PORTC_STARTUP_DDR); #endif #ifdef PORTD_STARTUP_DATA PORTDD=PORTD_STARTUP_DATA; #endif #ifdef PORTD_STARTUP_DDR DDR(PORTD,PORTD_STARTUP_DDR); #endif #ifdef PORTE_STARTUP_DATA PORTED=PORTE_STARTUP_DATA; #endif #ifdef PORTE_STARTUP_DDR DDR(PORTE,PORTE_STARTUP_DDR); #endif #ifdef PORTF_STARTUP_DATA PORTFD=PORTF_STARTUP_DATA; #endif #ifdef PORTF_STARTUP_DDR DDR(PORTF,PORTF_STARTUP_DDR); #endif #ifdef PORTG_STARTUP_DATA PORTGD=PORTG_STARTUP_DATA; #endif #ifdef PORTG_STARTUP_DDR DDR(PORTG,PORTG_STARTUP_DDR); #endif #ifdef PORTL_STARTUP_DATA PORTLD=PORTL_STARTUP_DATA; #endif #ifdef PORTL_STARTUP_DDR DDR(PORTL,PORTL_STARTUP_DDR); #endif #ifdef CNTRL_STARTUP_VAL 0205 BC D1 FF LD 0D1,#FF 0208 CNTRL=CNTRL_STARTUP_VAL; #endif #ifdef WDSVR_STARTUP_VAL WDSVR=WDSVR_STARTUP_VAL; #endif 0208 BC EE 70 LD 0EE,#70 020B 8E RET } #endif /* __STARTUP_C */ #endif /* __SHOW_LIBRARY */ /* COP8C Library V1.0 These routines may be adapted for any purpose when used with the C800 Code Development system and National Semiconductor Corporation COP800 microprocessors warranty is implied or given as to their usability for any purpose. (c) 2000 Byte Craft Limited Waterloo, Ontario Canada N2J 4E4 (519) 888-6911 Walter Banks V1.0 07 Mar 92 WB Initial release. V1.1 30 Jul 96 WB Changed librarties to support sregisters Portions of this code copyright National Semiconductor */ long __RMOD(void) { return(*(0x4)); } long __MUL16x16(void) { int CNTR @0xF0; #ifdef __SREG *(0xff) = 0; // Set S Register to page 0 #endif #asm ; ;16x16 BINARY MULTIPLY ;MULTIPLICANT IN M(0,1), MULTIPLIER IN M(2,3) ;PRODUCT IN M(2,3,4,5) ; BEGIN: LD CNTR,#0x11 ;CNTR=17 COUNTS LD B,#004 LD [B+],#000 LD [B],#000 LD X,#000 RC RSHIFT: LD A,[B] RRC A X A,[B-] LD A,[B] RRC A X A,[B-] LD A,[B] RRC A X A,[B-] LD A,[B] RRC A X A,[B] LD B,#005 IFNC JP TEST RC LD B,#004 LD A,[X+] ADC A,[B] X A,[B+] LD A,[X-] ADC A,[B] X A,[B] TEST: DRSZ CNTR JP RSHIFT RET #endasm } long __MUL8x8(void) { int CNTR @0xF0; #ifdef __SREG *(0xff) = 0; // Set S Register to page 0 #endif #asm ; 8 BY 8 MULTIPLICATION SUBROUTINE ; ; ; MULTIPLICAND IN [0] (ICAND) ; MULTIPLIER IN [1] (IER) ; PRODUCT IN [X,A] (PROD) ; ; MPY88: LD CNTR,#9 ; LD CNTR WITH LENGTH OF RC ; MULTIPLIER FIELD + 1 LD B,#2 CLR A ; CLEAR UPPER PRODUCT M88LUP: RRC A ; RIGHT SHIFT X A,[B-] ; UPPER PRODUCT LD A,[B] RRC A ; RIGHT SHIFT LOWER X A,[B-] ; PRODUCT/MULTIPLIER CLR A ; CLR ACC AND TEST LOW IFC ; ORDER MULTIPLIER BIT LD A,[B] ; MULTIPLICAND TO ACC IF RC ; LOW ORDER BIT = 1 LD B,#2 ; ADD MULTIPLICAND TO ADC A,[B] ; UPPER PRODUCT DRSZ CNTR ; DECREMENT AND TEST JP M88LUP ; CNTR FOR ZERO LD A,2 ; Move High byte X A,0xFC ; to X register LD A,1 ; Move low byte to A RET ; RETURN FROM SUBROUTINE #endasm } void __DIV8BY8(void) { int CNTR @0xF0; #ifdef __SREG *(0xff) = 0; // Set S Register to page 0 #endif #asm ; 8 BY 8 DIVISION SUBROUTINE ; ; DIVIDEND IN [0] (DD) ; DIVISOR IN [2] (DR) ; QUOTIENT IN [0] (QUOT) ; REMAINDER IN [1] (TEST FIELD) ; ; DIV88: LD CNTR,#8 ; LOAD CNTR WITH LENGTH LD B,#1 ; OF DIVIDEND FIELD LD [B],#0 ; CLEAR TEST FIELD DIV88S: RC LD B,#0 LD A,[B] ADC A,[B] ; LEFT SHIFT DIVIDEND X A,[B+] LD A,[B] ADC A,[B] ; LEFT SHIFT TEST FIELD X A,[B] LD A,[B+] ; TEST FIELD TO ACC SC ; TEST SUBTRACT DIVISOR SUBC A,[B] ; FROM TEST FIELD IFNC ; TEST IF BORROW JP DIV88B ; FROM SUBTRACTION LD B,#1 ; SUBTRACTION RESULT X A,[B-] ; TO TEST FIELD SBIT 0,[B] ; SET QUOTIENT BIT DIV88B: DRSZ CNTR ; DECREMENT AND TEST JP DIV88S ; CNTR FOR ZERO RET ; RETURN FROM SUBROUTINE #endasm } void __LDIV(void) { int CNTR @0xF0; #ifdef __SREG *(0xff) = 0; // Set S Register to page 0 #endif #asm ; 16 BY 16 DIVISION SUBROUTINE ; ; MINIMUM CODE ; ; 34 BYTES ; 979 INSTRUCTION CYCLES AVERAGE ; 1067 INSTRUCTION CYCLES MAXIMUM ; ; DIVIDEND IN [1,0] (DD) ; DIVISOR IN [5,4] (DR) ; QUOTIENT IN [1,0] (QUOT) ; REMAINDER IN [3,2] (TEST FIELD) ; ; DV1616: LD CNTR,#16 ; LOAD CNTR WITH LENGTH ; OF DIVIDEND FIELD LD B,#3 LD [B-],#0 ; CLEAR LD [B],#0 ; TEST FIELD DV616S: RC LD X,#2 ; INITIALIZE X POINTER LD B,#0 ; INITIALIZE B POINTER DV616L: LD A,[B] ; LEFT SHIFT DIVIDEND ADC A,[B] ; AND TEST FIELD X A,[B+] IFBNE #4 JP DV616L SC ; RESET BORROW LD A,[X+] ; TEST FIELD LO TO ACC SUBC A,[B] ; SUBT DR LO FROM REM LO LD A,[X] ; TEST FIELD HI TO ACC LD B,#5 SUBC A,[B] ; SUBT DR HI FROM REM HI IFNC ; TEST IF BORROW JP DV616T ; FROM SUBTRACTION X A,[X-] ; RESULT HI TO REM HI LD A,[X] ; TEST FIELD LO TO ACC LD B,#4 SUBC A,[B] ; SUBT DR LO FROM REM LO X A,[X] ; RESULT LO TO REM LO LD B,#0 SBIT 0,[B] ; SET QUOTIENT BIT DV616T: DRSZ CNTR ; DECREMENT AND TEST JP DV616S ; CNTR FOR ZERO RET ; RETURN FROM SUBROUTINE #endasm } #pragma endlibrary #endif /* __COP8C_C */ 0000 DD 6F LD SP,#06F 0002 AC 02 0C JMPL 0020C __MAIN: 020C AD 02 05 JSRL 00205 020F DF 00 LD S,#000 0211 DC 00 LD X,#000 0213 DE 6F LD B,#06F 0215 64 CLRA 0216 B2 X A,[X+] 0217 CE DRSZ B 0218 FC JP 00215 0219 BC 08 05 LD 008,#05 021C AC 02 00 JMPL 00200 SYMBOL TABLE LABEL VALUE LABEL VALUE ADBSY 0000 ADCH0 0004 ADCH1 0005 ADCH2 0006 ADCH3 0007 ADMOD 0003 ADRSLTH 00CC ADRSLTL 00CD ATTN 0002 B 00FE BAUD 00BD BD 0004 BREG Reg 00FE BRK 0006 BUSY 0002 C 0006 CCKSEL 0004 CHL0 0003 CHL1 0004 CNTRL 00EE CODE_START 0200 DCEN 0005 DOE 0007 ENAD 00CB ENU 00BA ENUI 00BC ENUR 00BB ERI 0001 ERR 0002 ETDX 0005 ETI 0000 EXEN 0001 EXPND 0003 FE 0006 FLEX_FLASH 0001 FLEX_ROM 0000 GIE 0000 HALT_DISABLE 0002 HALT_ENABLE 0000 HC 0007 HSON 0006 HSTCR 00AF ICNTRL 00E8 IEDG 0002 IIIIIIII 0000 IIIIIIIO 0001 IIIIIIOI 0002 IIIIIIOO 0003 IIIIIOII 0004 IIIIIOIO 0005 IIIIIOOI 0006 IIIIIOOO 0007 IIIIOIII 0008 IIIIOIIO 0009 IIIIOIOI 000A IIIIOIOO 000B IIIIOOII 000C IIIIOOIO 000D IIIIOOOI 000E IIIIOOOO 000F IIIOIIII 0010 IIIOIIIO 0011 IIIOIIOI 0012 IIIOIIOO 0013 IIIOIOII 0014 IIIOIOIO 0015 IIIOIOOI 0016 IIIOIOOO 0017 IIIOOIII 0018 IIIOOIIO 0019 IIIOOIOI 001A IIIOOIOO 001B IIIOOOII 001C IIIOOOIO 001D IIIOOOOI 001E IIIOOOOO 001F IIOIIIII 0020 IIOIIIIO 0021 IIOIIIOI 0022 IIOIIIOO 0023 IIOIIOII 0024 IIOIIOIO 0025 IIOIIOOI 0026 IIOIIOOO 0027 IIOIOIII 0028 IIOIOIIO 0029 IIOIOIOI 002A IIOIOIOO 002B IIOIOOII 002C IIOIOOIO 002D IIOIOOOI 002E IIOIOOOO 002F IIOOIIII 0030 IIOOIIIO 0031 IIOOIIOI 0032 IIOOIIOO 0033 IIOOIOII 0034 IIOOIOIO 0035 IIOOIOOI 0036 IIOOIOOO 0037 IIOOOIII 0038 IIOOOIIO 0039 IIOOOIOI 003A IIOOOIOO 003B IIOOOOII 003C IIOOOOIO 003D IIOOOOOI 003E IIOOOOOO 003F INTERRUPT_BRANCH_VECTOR 00FF IOIIIIII 0040 IOIIIIIO 0041 IOIIIIOI 0042 IOIIIIOO 0043 IOIIIOII 0044 IOIIIOIO 0045 IOIIIOOI 0046 IOIIIOOO 0047 IOIIOIII 0048 IOIIOIIO 0049 IOIIOIOI 004A IOIIOIOO 004B IOIIOOII 004C IOIIOOIO 004D IOIIOOOI 004E IOIIOOOO 004F IOIOIIII 0050 IOIOIIIO 0051 IOIOIIOI 0052 IOIOIIOO 0053 IOIOIOII 0054 IOIOIOIO 0055 IOIOIOOI 0056 IOIOIOOO 0057 IOIOOIII 0058 IOIOOIIO 0059 IOIOOIOI 005A IOIOOIOO 005B IOIOOOII 005C IOIOOOIO 005D IOIOOOOI 005E IOIOOOOO 005F IOOIIIII 0060 IOOIIIIO 0061 IOOIIIOI 0062 IOOIIIOO 0063 IOOIIOII 0064 IOOIIOIO 0065 IOOIIOOI 0066 IOOIIOOO 0067 IOOIOIII 0068 IOOIOIIO 0069 IOOIOIOI 006A IOOIOIOO 006B IOOIOOII 006C IOOIOOIO 006D IOOIOOOI 006E IOOIOOOO 006F IOOOIIII 0070 IOOOIIIO 0071 IOOOIIOI 0072 IOOOIIOO 0073 IOOOIOII 0074 IOOOIOIO 0075 IOOOIOOI 0076 IOOOIOOO 0077 IOOOOIII 0078 IOOOOIIO 0079 IOOOOIOI 007A IOOOOIOO 007B IOOOOOII 007C IOOOOOIO 007D IOOOOOOI 007E IOOOOOOO 007F ISPAD 00A8 ISPADHI 00A9 ISPADLO 00A8 ISPKEY 00E2 ISPRD 00AA ISPWR 00AB ITMR 00CF ITSEL0 0000 ITSEL1 0001 ITSEL2 0002 LPEN 0006 LSON 0007 LWKEDG 00C8 LWKEN 00C9 LWKPND 00CA MSEL 0003 MUX 0002 OIIIIIII 0080 OIIIIIIO 0081 OIIIIIOI 0082 OIIIIIOO 0083 OIIIIOII 0084 OIIIIOIO 0085 OIIIIOOI 0086 OIIIIOOO 0087 OIIIOIII 0088 OIIIOIIO 0089 OIIIOIOI 008A OIIIOIOO 008B OIIIOOII 008C OIIIOOIO 008D OIIIOOOI 008E OIIIOOOO 008F OIIOIIII 0090 OIIOIIIO 0091 OIIOIIOI 0092 OIIOIIOO 0093 OIIOIOII 0094 OIIOIOIO 0095 OIIOIOOI 0096 OIIOIOOO 0097 OIIOOIII 0098 OIIOOIIO 0099 OIIOOIOI 009A OIIOOIOO 009B OIIOOOII 009C OIIOOOIO 009D OIIOOOOI 009E OIIOOOOO 009F OIOIIIII 00A0 OIOIIIIO 00A1 OIOIIIOI 00A2 OIOIIIOO 00A3 OIOIIOII 00A4 OIOIIOIO 00A5 OIOIIOOI 00A6 OIOIIOOO 00A7 OIOIOIII 00A8 OIOIOIIO 00A9 OIOIOIOI 00AA OIOIOIOO 00AB OIOIOOII 00AC OIOIOOIO 00AD OIOIOOOI 00AE OIOIOOOO 00AF OIOOIIII 00B0 OIOOIIIO 00B1 OIOOIIOI 00B2 OIOOIIOO 00B3 OIOOIOII 00B4 OIOOIOIO 00B5 OIOOIOOI 00B6 OIOOIOOO 00B7 OIOOOIII 00B8 OIOOOIIO 00B9 OIOOOIOI 00BA OIOOOIOO 00BB OIOOOOII 00BC OIOOOOIO 00BD OIOOOOOI 00BE OIOOOOOO 00BF OOIIIIII 00C0 OOIIIIIO 00C1 OOIIIIOI 00C2 OOIIIIOO 00C3 OOIIIOII 00C4 OOIIIOIO 00C5 OOIIIOOI 00C6 OOIIIOOO 00C7 OOIIOIII 00C8 OOIIOIIO 00C9 OOIIOIOI 00CA OOIIOIOO 00CB OOIIOOII 00CC OOIIOOIO 00CD OOIIOOOI 00CE OOIIOOOO 00CF OOIOIIII 00D0 OOIOIIIO 00D1 OOIOIIOI 00D2 OOIOIIOO 00D3 OOIOIOII 00D4 OOIOIOIO 00D5 OOIOIOOI 00D6 OOIOIOOO 00D7 OOIOOIII 00D8 OOIOOIIO 00D9 OOIOOIOI 00DA OOIOOIOO 00DB OOIOOOII 00DC OOIOOOIO 00DD OOIOOOOI 00DE OOIOOOOO 00DF OOOIIIII 00E0 OOOIIIIO 00E1 OOOIIIOI 00E2 OOOIIIOO 00E3 OOOIIOII 00E4 OOOIIOIO 00E5 OOOIIOOI 00E6 OOOIIOOO 00E7 OOOIOIII 00E8 OOOIOIIO 00E9 OOOIOIOI 00EA OOOIOIOO 00EB OOOIOOII 00EC OOOIOOIO 00ED OOOIOOOI 00EE OOOIOOOO 00EF OOOOIIII 00F0 OOOOIIIO 00F1 OOOOIIOI 00F2 OOOOIIOO 00F3 OOOOIOII 00F4 OOOOIOIO 00F5 OOOOIOOI 00F6 OOOOIOOO 00F7 OOOOOIII 00F8 OOOOOIIO 00F9 OOOOOIOI 00FA OOOOOIOO 00FB OOOOOOII 00FC OOOOOOIO 00FD OOOOOOOI 00FE OOOOOOOO 00FF OPTION_LOCATION 7FFF PE 0005 PEN 0007 PGMTIM 00E1 PORTA 00A0 PORTAC 00A1 PORTAD 00A0 PORTAP 00A2 PORTB 00A4 PORTBC 00A5 PORTBD 00A4 PORTBP 00A6 PORTC 00D8 PORTCC 00D9 PORTCD 00D8 PORTCP 00DA PORTD 00DC PORTDD 00DC PORTE 0090 PORTEC 0091 PORTED 0090 PORTEP 0092 PORTF 0094 PORTFC 0095 PORTFD 0094 PORTFP 0096 PORTG 00D4 PORTGC 00D5 PORTGD 00D4 PORTGP 00D6 PORTL 00D0 PORTLC 00D1 PORTLD 00D0 PORTLP 00D2 PORTL_STARTUP_DDR 00FF PSC 0001 PSEL0 0005 PSEL1 0006 PSR 00BE PSW 00EF RAM_BANK0_SIZE 0028 RAM_BANK0_START 0008 RAM_BANK1_SIZE 0080 RAM_BANK1_START 0100 RAM_BANK2_SIZE 0080 RAM_BANK2_START 0200 RAM_BANK3_SIZE 0080 RAM_BANK3_START 0300 RAM_BANK4_SIZE 0080 RAM_BANK4_START 0400 RAM_BANK5_SIZE 0080 RAM_BANK5_START 0500 RAM_BANK6_SIZE 0080 RAM_BANK6_START 0600 RAM_BANK7_SIZE 0080 RAM_BANK7_START 0700 RAM_REGISTERS_SIZE 000B RAM_REGISTERS_START 00F1 RBFL 0001 RBIT9 0003 RBUF 00B9 RCVG 0000 ROM_SIZE 8000 S 00FF SEC_DISABLE 0000 SEC_ENABLE 0020 SIOR 00E9 SL0 0000 SL1 0001 SP 00FD SSEL 0004 STACK_SIZE 0040 STP2 0007 T0EN 0004 T0PND 0005 T1C0 0004 T1C1 0005 T1C2 0006 T1C3 0007 T1ENA 0004 T1ENB 0000 T1PND 0005 T1PNDA 0005 T1PNDB 0001 T1RAHI 00ED T1RALO 00EC T1RBHI 00E7 T1RBLO 00E6 T2C0 0004 T2C1 0005 T2C2 0006 T2C3 0007 T2CNTRL 00C6 T2ENA 0002 T2ENB 0000 T2HS 0000 T2PNDA 0003 T2PNDB 0001 T2RAHI 00C3 T2RALO 00C2 T2RBHI 00C5 T2RBLO 00C4 T3C0 0004 T3C1 0005 T3C2 0006 T3C3 0007 T3CNTRL 00B6 T3ENA 0002 T3ENB 0000 T3HS 0001 T3PNDA 0003 T3PNDB 0001 T3RAHI 00B3 T3RALO 00B2 T3RBHI 00B5 T3RBLO 00B4 TBMT 0000 TBUF 00B8 TINTA 00AD TINTB 00AE TMR2HI 00C1 TMR2LO 00C0 TMR3HI 00B1 TMR3LO 00B0 TMRHI 00EB TMRLO 00EA VIS_OPCODE 00B4 WDSVR 00C7 WD_DISABLE 0004 WD_ENABLE 0000 X 00FC XBIT9 0005 XMTG 0001 XRCLK 0003 XTCLK 0002 __BCdirect 0001 __EXT 01FA __MAIN 020C __MICRO 01F2 __PORTL 01E2 __RESET 0000 __STARTUP Fun 0205 __SWI 01FE __TIMERT0 01F8 __TIMERT1A 01F6 __TIMERT1B 01F4 __TIMERT2A 01EA __TIMERT2B 01E8 __TIMERT3A 01E6 __TIMERT3B 01E4 __UARTR 01EE __UARTT 01EC __VIS 01E0 __longAC Reg 0002 __longIX Reg 0000 bank0 0001 bank1 0002 bank2 0003 bank3 0004 bank4 0005 bank5 0006 bank6 0007 bank7 0008 i Reg 0008 main Fun 0200 register 0009 uWEN 0002 uWPND 0003 REGISTER USAGE MAP ('X' = Used, '-' = Unused) 0000 : --------X------- ---------------- ---------------- XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ---------------- 0080 : ---------------- ---------------- ---------------- ---------------- 00C0 : ---------------- ---------------- ---------------- ---------------- 0100 : ---------------- ---------------- ---------------- ---------------- 0140 : ---------------- ---------------- ---------------- ---------------- 0180 : ---------------- ---------------- ---------------- ---------------- 01C0 : ---------------- ---------------- ---------------- ---------------- RAM USAGE MAP 0000 __longIX signed long 0002 __longAC signed long 00FE BREG unsigned char 00FC X portrw 00FD SP portrw 00FE B portrw 00FF S portrw 0090 PORTE portrw 0090 PORTED portrw 0091 PORTEC portrw 0092 PORTEP portr 0094 PORTF portrw 0094 PORTFD portrw 0095 PORTFC portrw 0096 PORTFP portr 00A0 PORTA portrw 00A0 PORTAD portrw 00A1 PORTAC portrw 00A2 PORTAP portr 00A4 PORTB portrw 00A4 PORTBD portrw 00A5 PORTBC portrw 00A6 PORTBP portr 00AD TINTA portr 00AE TINTB portr 00AF HSTCR portrw 00D0 PORTL portrw 00D0 PORTLD portrw 00D1 PORTLC portrw 00D2 PORTLP portr 00D4 PORTG portrw 00D4 PORTGD portrw 00D5 PORTGC portrw 00D6 PORTGP portr 00D8 PORTC portrw 00D8 PORTCD portrw 00D9 PORTCC portrw 00DA PORTCP portr 00DC PORTD portrw 00DC PORTDD portrw 00EE CNTRL portrw 00EF PSW portrw 00E8 ICNTRL portrw 00EA TMRLO portrw 00EB TMRHI portrw 00EC T1RALO portrw 00ED T1RAHI portrw 00E6 T1RBLO portrw 00E7 T1RBHI portrw 00C6 T2CNTRL portrw 00C0 TMR2LO portrw 00C1 TMR2HI portrw 00C2 T2RALO portrw 00C3 T2RAHI portrw 00C4 T2RBLO portrw 00C5 T2RBHI portrw 00B6 T3CNTRL portrw 00B0 TMR3LO portrw 00B1 TMR3HI portrw 00B2 T3RALO portrw 00B3 T3RAHI portrw 00B4 T3RBLO portrw 00B5 T3RBHI portrw 00E9 SIOR portrw 00CF ITMR portrw 00CB ENAD portrw 00CD ADRSLTL portrw 00CC ADRSLTH portrw 00A8 ISPAD portrw 00A8 ISPADLO portrw 00A9 ISPADHI portrw 00AA ISPRD portrw 00AB ISPWR portrw 00E1 PGMTIM portrw 00E2 ISPKEY portrw 00B8 TBUF portrw 00B9 RBUF portrw 00BA ENU portrw 00BB ENUR portrw 00BC ENUI portrw 00BD BAUD portrw 00BE PSR portrw 00C7 WDSVR portrw 00C8 LWKEDG portrw 00C9 LWKEN portrw 00CA LWKPND portrw 0008 i signed char LOCAL RAM USAGE FROM 0780 TO 077F ROM USAGE MAP 0000 to 0004 00FF to 0100 0200 to 021E Total ROM used 0026 (38) Errors : 0 Warnings : 0