|
AN503 |
Product: Domino 2 |
|
Accessing the Coprocessor I/O |
Date: 7/28/99 |
Introduction: This application note presents a program in Basic-52 that uses the Domino II’s coprocessor digital inputs and outputs. | |
Background: One of Domino II’s features is the 16 bits of I/O available through it’s coprocessor, which offer: · 20-mA source per pin. · 25-mA sink per pin. · Bit or port programmable. While using the coprocessor is straight forward, it does require a series of instructions which are easier to use than adding an external I2C I/O expansion IC to the Domino I. |
|
How it works: The coprocessor communicates with the processor via the I2C bus. It accepts an I2C instruction through built in routines in Domino Utilities. Each port and bit has it’s own preset address. For example PORT A’s direction control is located at address 30H. Setting this bit makes all 8 bits of PORT A outputs. The following simple program illustrates using the coprocessors I/O by addressing each port. |
|
Program Listing: 10 REM ** This program demonstrates how to operate the Domino 2's 20 REM ** Coprocessor I/O's. It will allow you to set each port 30 REM *** as inputs or outputs and allow you to read the inputs 40 REM *** and set the outputs. 50 ?"Menu" 60 ?"1 - Set PORT A direction register as inputs" 70 ?"2 - Set PORT B direction register as inputs" 80 ?"3 - Set PORT A direction register as outputs" 90 ?"4 - Set PORT B direction register as outputs" 100 ?"5 - Read PORT A's inputs" 110 ?"6 - Read PORT B's inputs" 120 ?"7 - Set PORT A's outputs" 130 ?"8 - Set PORT B's outputs" 140 INPUT A 150 IF A=1 THEN GOTO 240 160 IF A=2 THEN GOTO 290 170 IF A=3 THEN GOTO 340 180 IF A=4 THEN GOTO 390 190 IF A=5 THEN GOTO 440 200 IF A=6 THEN GOTO 520 210 IF A=7 THEN GOTO 580 220 IF A=8 THEN GOTO 650 ELSE GOTO 50 230 REM *** Setting PORT A as inputs. 240 R = 30H 250 DT = 0FFH 260 GOSUB 11000 270 GOTO 50 280 REM *** Setting PORT B as inputs. 290 R = 33H 300 DT = 0FFH 310 GOSUB 11000 320 GOTO 50 330 REM *** Setting PORT A as outputs. 340 R = 30H 350 DT = 0H 360 GOSUB 11000 370 GOTO 50 380 REM *** Setting PORT B as outputs. 390 R = 33H 400 DT = 0H 410 GOSUB 11000 420 GOTO 50 430 REM *** Read PORT A's inputs. 440 R = 31H 450 GOSUB 10000 460 ?"The decimal value of PORT A is ":PH0. DT 470 G = GET 480 IF G=0 THEN 470 490 GOTO 50 500 REM *** Read PORT B's inputs. 510 R = 34H 520 GOSUB 10000 530 ?"The decimal value of PORT B is ":PH0. DT 540 G = GET 550 IF G=0 THEN 540 560 GOTO 50 570 REM *** Set PORT A's outputs. 580 ?"Please input the decimal number you want PORT A to be." 590 INPUT B 600 R = 32H 610 DT = B 620 GOSUB 11000 630 GOTO 50 640 REM *** Set PORT B's outputs. 650 ?"Please input the decimal number you want PORT B to be." 660 INPUT C 670 R = 35H 680 DT = C 690 GOSUB 11000 700 GOTO 50 9997 REM *********************************************** 9998 REM Coprocessor Read Routine 9999 REM 10000 PUSH 2000h + R 10010 CALL 0F12Ch 10020 POP DT 10030 IF DT>255 THEN PRINT "Communications error !!!" 10040 Return 10050 REM 10997 REM *************************************************** 10998 REM Coprocessor Write Routine 10999 REM 11000 PUSH 2000h + R,DT 11010 CALL 0F128h 11020 POP DT 11030 IF DT>255 THEN PRINT "Communications error !!!" 11040 Return 11050 REM 11060 REM ***************************************************280 REM *** Setting PORT B as inputs. 290 R = 33H 300 DT = 0FFH 310 GOSUB 11000 320 GOTO 50 330 REM *** Setting PORT A as outputs. 340 R = 30H 350 DT = 0H 360 GOSUB 11000 370 GOTO 50 380 REM *** Setting PORT B as outputs. 390 R = 33H 400 DT = 0H 410 GOSUB 11000 420 GOTO 50 430 REM *** Read PORT A's inputs. 440 R = 31H 450 GOSUB 10000 460 ?"The decimal value of PORT A is ":PH0. DT 470 G = GET 480 G = GET 490 IF G=0 THEN 480 500 GOTO 50 510 REM *** Read PORT B's inputs. 520 R = 34H 530 GOSUB 10000 540 ?"The decimal value of PORT B is ":PH0. DT 550 G = GET 560 G = GET 570 IF G=0 THEN 560 580 GOTO 50 590 REM *** Set PORT A's outputs. 600 ?"Please input the decimal number you want PORT A to be." 610 INPUT B 620 R = 32H 630 DT = B 640 GOSUB 11000 650 GOTO 50 660 REM *** Set PORT B's outputs. 670 ?"Please input the decimal number you want PORT B to be." 680 INPUT C 690 R = 35H 700 DT = C 710 GOSUB 11000 720 GOTO 50 9997 REM *********************************************** 9998 REM Coprocessor Read Routine 9999 REM 10000 PUSH 2000h + R 10010 CALL 0F12Ch 10020 POP DT 10030 IF DT>255 THEN PRINT "Communications error !!!" 10040 Return 10050 REM 10997 REM *************************************************** 10998 REM Coprocessor Write Routine 10999 REM 11000 PUSH 2000h + R,DT 11010 CALL 0F128h 11020 POP DT 11030 IF DT>255 THEN PRINT "Communications error !!!" 11040 Return 11050 REM 11060 REM *************************************************** |