'========================================================== ' ' PicStic4 PicBASIC Pro Demo for using PWM, and ' EXTERNAL SHIFT REGISTER OUTPUT using the PASS call ' '========================================================== ' Include "MODEDEFS.BAS" B0 var byte 'TEMPORARY STORAGE B1 var byte 'TEMPORARY STORAGE B2 var W1.byte0 'THE LSByte OF A 16-bit NUMBER B3 var W1.byte1 'THE MSByte OF A 16-bit NUMBER B4 var W2.byte0 'THE TEMPORARY LSByte OF A 16-bit NUMBER B5 var W2.byte1 'THE TEMPORARY MSByte OF A 16-bit NUMBER B19 var byte 'COMMAND (FOR PASS) B20 var byte 'LSB OF PARAMETER (FOR PASS) B21 var byte 'MSB OF PARAMETER (FOR PASS) W1 var word W2 var word W10 var word START: SEROUT 7,N9600,["Hit...",13,10] SEROUT 7,N9600,["1-Demo PWM",13,10] SEROUT 7,N9600,["2-Demo Ext. Shift Reg.",13,10] SERIN 6,N9600,B1 if B1<49 or B1>50 then START B1=B1-49 branch B1,[DOPWM,DOSHFT] DOPWM: B19=3 : B20=4 : B21=0 : REM SET CONFIGURATION TO PWM call PASS if B19<>0 or B20<>0 or B21<>0 then DOPWM1 gosub STR1 : goto DOPWM DOPWM1: SEROUT 7,N9600,["Setting the period = 100Hz",13,10] SEROUT 7,N9600,["sweeping the duty cycle 1-99%"] W10=12500/100*10 : W1=12500//100*10+W10 : REM PERIOD VALUE = 125000/FREQUENCY B19=21 : B20=B2 : B21=B3 : REM SET PWM TOTAL PERIOD call PASS if B19=21 and B20=255 and B21=255 then DOPWM2 gosub STR1 : goto DOPWM1 DOPWM2: for B0=1 to 99 SEROUT 7,N9600,[#B0," %",13,10] W2=W1/10*B0/10 IF W2>8 then DOPWM3 W2=8 DOPWM3: B19=22 : B20=B4 : B21=B5 : REM SET PWM HIGH TIME call PASS if B19=22 and B20=255 and B21=255 then DOPWM4 gosub STR1 : goto DOPWM3 DOPWM4: pause 1 next B0 goto DOPWM2 DOSHFT: SEROUT 7,N9600,["Shifting out a 0-65535 count",13,10] DOSHFT1:for W1=0 to 65535 SEROUT 7,N9600,[" #",#W1,13,10] DOSHFT2:B19=34 : B20=B2 : B21=B3 : REM SHIFT VALUE OUT EXT SHIFT REGISTER call PASS if B19=34 and B20=255 and B21=255 then DOSHFT3 gosub STR1 : goto DOSHFT2 DOSHFT3:next W1 goto DOSHFT1 STR1: SEROUT 7,N9600,["Comm Error-",#B19,13,10] : RETURN