'========================================================== ' ' PicStic4 PicBASIC Pro Demo for defining the extra I/O P8-P15 ' and read/set/reseting the I/O using the PASS call ' '========================================================== ' Include "MODEDEFS.BAS" Bt0 var B0.bit0 Bt1 var B0.bit1 Bt2 var B0.bit2 Bt3 var B0.bit3 Bt4 var B0.bit4 Bt5 var B0.bit5 Bt6 var B0.bit6 Bt7 var B0.bit7 B0 var byte 'TEMPORARY STORAGE FOR BIT CONVERSION B1 var byte 'PRESENT I/O PORT DIRECTION OF P8-P15 B2 var byte 'PRESENT OUTPUT STATUS OF P8-P15 B3 var byte 'PRESENT INPUT STATUS OF P8-P15 B4 var byte 'SERIAL INPUT CHARACTER REGISTER B19 var byte 'COMMAND [FOR PASS] B20 var byte 'LSB OF PARAMETER [FOR PASS] B21 var byte 'MSB OF PARAMETER [FOR PASS] ' INIT: B19=3 : B20=0 : B21=0 : REM SET CONFIGURATION TO DISABLE ALL call PASS if B19=3 then START gosub STR14 : gosub STR12 : goto INIT START: B19=6 : B20=0 : B21=0 : REM READ THE I/O PORT DIRECTION call PASS if B19=6 then START1 gosub STR14 : gosub STR12 : goto START START1: B1=B20 : REM ASSIGN THE DIRECTION VALUE TO B1 B19=8 : B20=0 : B21=0 : REM READ THE DIGITAL OUTPUTS call PASS if B19=8 then START2 gosub STR14 : gosub STR12 : goto START1 START2: B2=B20 : REM ASSIGN THE OUTPUT STATUS TO B2 B19=9 : B20=0 : B21=0 : REM READ THE DIGITAL INPUTS call PASS if B19=9 then START3 gosub STR14 : gosub STR12 : goto START2 START3: B3=B20 : REM ASSIGN THE INPUT STATUS TO B3 B0=B1 GOSUB STR12 : GOSUB STR1 : GOSUB STR2 : GOSUB STR11 : GOSUB BINBYTE B0=B2 GOSUB STR3 : GOSUB STR2 : GOSUB STR11 : GOSUB BINBYTE B0=B3 GOSUB STR4 : GOSUB STR2 : GOSUB STR11 : GOSUB BINBYTE GOSUB STR5 : GOSUB STR12 GOSUB STR6 : GOSUB STR9 : GOSUB STR1 : GOSUB STR12 GOSUB STR7 : GOSUB STR9 : GOSUB STR3 : GOSUB STR2 : GOSUB STR12 GOSUB STR8 : GOSUB STR10 : GOSUB STR4: GOSUB STR2 : GOSUB STR12 SERIN 6,N9600,B4 : GOSUB ANS : GOSUB STR12 IF B4=68 OR B4=100 THEN DIR IF B4=79 OR B4=111 THEN SETCLR GOTO START DIR: GOSUB STR12 : GOSUB STR9 : GOSUB STR1 : GOSUB STR13 : GOSUB STR12 SERIN 6,N9600,B4 : GOSUB ANS IF B4<48 OR B4>55 THEN DIR DIRX: B4=B4-48 GOSUB TABLE1 B1=B1^B4 B19=5 : B20=B1 : B21=0 : REM SET I/O PORT DIRECTION call PASS if B19=5 and B20=255 and B21=255 then START gosub STR14 : gosub STR12 : goto DIR SETCLR: GOSUB STR12 : GOSUB STR9 : GOSUB STR3 : GOSUB STR13 : GOSUB STR12 SERIN 6,N9600,B4 : GOSUB ANS IF B4<48 OR B4>55 THEN SETCLR SETCLR1:B4=B4-48 GOSUB TABLE1 B2=B2^B4 B19=7 : B20=B2 : B21=0 : REM SET DIGITAL OUTPUTS call PASS if B19=7 and B20=255 and B21=255 then START gosub STR14 : gosub STR12 : goto SETCLR BINBYTE:SEROUT 7,N9600,[#Bt0,#Bt1,#Bt2,#Bt3,#Bt4,#Bt5,#Bt6,#Bt7,13,10] RETURN TABLE1: LOOKUP B4,[1,2,4,8,16,32,64,128],B4 RETURN STR1: SEROUT 7,N9600,["I/O Direction "] : RETURN STR2: SEROUT 7,N9600,["Status of DIO0-7 "] : RETURN STR3: SEROUT 7,N9600,["Output "] : RETURN STR4: SEROUT 7,N9600,["Input "] : RETURN STR5: SEROUT 7,N9600,["Do you wish to:"] : RETURN STR6: SEROUT 7,N9600,["D-"] : RETURN STR7: SEROUT 7,N9600,["O-"] : RETURN STR8: SEROUT 7,N9600,["I-"] : RETURN STR9: SEROUT 7,N9600,["Change "] : RETURN STR10: SEROUT 7,N9600,["Reread "] : RETURN STR11: SEROUT 7,N9600,["="] : RETURN STR12: SEROUT 7,N9600,[13,10] : RETURN STR13: SEROUT 7,N9600,["bit ? [0-7]"] : RETURN STR14: SEROUT 7,N9600,["Comm Err"] : RETURN ANS: SEROUT 7,N9600,[B4] : RETURN