This program displays the min and max of 30 A/D samples over
the RS-232 interface. The process is repeated forever.
Configure the CCS prototype card as follows:
Insert jumpers from: 11 to 17, 12 to 18 and 9 to 16
Use the #9 POT to vary the voltage.
/
#include <16C71.H>
#use delay(clock=15000000)
#use rs232(baud=9600,xmit=PIN_A3,rcv=PIN_A2)
main() {
int i,value,min,max;
printf("Sampling:");
setup_port_a( ALL_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
do {
min=255;
max=0;
for(i=0;i<=30;++i) {
delay_ms(100);
value = Read_ADC();
if(value < min)
min=value;
if(value > max)
max=value;
}
printf("nrMin: %2X Max: %2Xrn",min,max);
} while (TRUE);
}
Output Listing
.................... min=255;
008D: MOVLW FF
008E: MOVWF 28
.................... max=0;
008F: CLRF 29
.................... incc=TRUE;
0090: BSF 2B,0
.................... for(i=0;i<=30;++i) {
0091: CLRF 26
0092: MOVLW 1F
0093: SUBWF 26,W
0094: BTFSC 03,0
0095: GOTO 0AC
.................... delay_ms(100);
0096: MOVLW 64
0097: MOVWF 2C
0098: GOTO 02D
.................... value = Read_ADC();
0099: BSF 1F,2
009A: BTFSC 1F,2
009B: GOTO 09A
009C: MOVF 1E,W
009D: MOVWF 27
.................... if(value < min)
009E: MOVF 28,W
009F: SUBWF 27,W
00A0: BTFSC 03,0
00A1: GOTO 0A4
.................... min=value;
00A2: MOVF 27,W
00A3: MOVWF 28
.................... if(value > max)
00A4: MOVF 27,W
00A5: SUBWF 29,W
00A6: BTFSC 03,0
00A7: GOTO 0AA
.................... max=value;
00A8: MOVF 27,W
00A9: MOVWF 29
.................... }
00AA: INCF 26,F
00AB: GOTO 092
.................... if (incc)
00AC: BTFSC 2B,0
.................... counter++;
00AD: INCF 2A,F
[1] [2]