Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define PAOUT (volatile unsigned char *) 0xFFFFFFF1
- //needs change to be PBOUT -> 0xFFFFFFF.
- #define PBIN (volatile unsigned char *) 0xFFFFFFF3
- //set both inputs to 1 because start unpressed.
- #define PBDIR (volatile unsigned char *) 0xFFFFFFF5
- #define CNTM (volatile unsigned int *) 0xFFFFFFD0
- #define CTCON (volatile unsigned char *) 0xFFFFFFD8
- #define CTSTAT (volatile unsigned char *) 0xFFFFFFD9
- #define IVECT (volatile unsigned int *) (0x20)
- interrupt void intserv();
- unsigned char digit = 0; /* Digit to be displayed, init to 0. */
- int main() {
- *PBDIR = 0x00; /* Set Port B direction to input */
- *CTCON = 0x02; /* Stop Timer */
- *CTSTAT = 0x0; /* Clear “reached 0” flag */
- *CNTM = 100000000; /* Initialize Timer */
- *IVECT = (unsigned int *) &intserv; /* Set interrupt vector */
- asm(“MoveControl PSR,#0x40”); /* CPU responds to IRQ */
- *CTCON = 0x11; /* Enable Timer interrupts & start counting */
- *PBOUT = 0x00; /* Display 0 */
- while (1) { //our actual program, setup already completed.
- while ((*PBIN & 0x2) != 0); /* Wait until E SW is pressed */
- while ((*PBIN & 0x2) == 0); /* Wait until E SW is released */
- // bitwise AND &, good way to implement don't cares.
- //handles the press/depress for E switch
- //DO THE COUNTING.
- *PBOUT = (digit << 4); /* Update Port B */
- /* We can also put “*CTCON &= 0xEF;” before and “*CTCON |= 0x10;”
- * after the last statement, to make sure that intserv() is not
- * interfering with main() accessing shared digit/led/PAOUT */
- while((*PBIN & 0x1) != 0);
- while(*PBIN & 0x1) == 0));
- *PBOUT = (0 << 4)
- }
- exit(0);
- }
- interrupt void intserv() {
- *CTSTAT = 0x0; /* Clear “reached 0” flag */
- digit = (digit + 1)%10; /* Increment digit */
- *PBOUT = ((digit << 4)); /* Update Port B */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement