Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define PBIN (volatile unsigned char *) 0xFFFFFFF3
- #define PBOUT (volatile unsigned char *) 0xFFFFFFF4
- #define PBDIR (volatile unsigned char *) 0xFFFFFFF5
- #define PCONT (volatile unsigned char *) 0xFFFFFFF7
- #define CNTM (volatile unsigned char *) 0xFFFFFFD0
- #define CTCON (volatile unsigned char *) 0xFFFFFFD8
- #define CTSTAT (volatile unsigned char *) 0xFFFFFFD9
- #define IVECT (volatile unsigned char *) 0x20
- /*Setup should all be same as part A but need a few more vars*/
- interrupt void intserv();
- int main() {
- char digit = 0; /*Digit for disp*/
- *PBDIR = 0xF0; /*Port B dir as output */
- *CTCON = 0x2; /*Stop Timer*/
- *CSTAT = 0x0; /* Clear 'reached 0' flag*/
- *CNTM = 100000000; /*Initialize timer */
- *PBOUT = 0x0; /*Display 0*/
- *IVECT = (unsigned int * ) &intserv; /*Set Interuppt vec*/
- asm("MoveControl PSR, #0x40"); /*CPU responds to IRQ*/
- *PCONT = 0x40; /*Enable PBIN interrupts*/
- while(1) {
- while((*CTSTAT & 0x1) == 0);
- *CSTAT = 0x0;
- digit = (digit + 1)%10;
- *PBOUT = digit << 4;
- }
- exit(0);
- }
- interrupt void intserv() {
- unsigned char sample; /*Port B input sample*/
- sample = *PBIN & 0x3; /*Sample PBIN, isolate bits [1:0] */
- if (sample == 0x1) *CTCON = 0x1; /*start timer*/
- else if (sample == 0x2) *CTCON = 0x2; /*Stop timer*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement