Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
movlw b'01111000'
movwf ANSEL
clrf ADRESL
bsf TRISIO, SB ;Включили SB на вход.
bsf TRISIO, ANAIN ;Включили входа АЦП на вход. В)
bsf TRISIO, SYNC_PIN ;Включили GP1 на вход.(SYNC)
bcf TRISIO, PWM_PIN ;Включили GP2 на выход. (PWM)
bsf WPU,PWM_PIN ;включили подтягивающий резистор на PWM
bcf WPU, SB ;отключили подтягивающий резистор на SB1
bcf WPU, 0x00 ;отключили подтягивающий резистор на GP0
bcf WPU, 0x01 ;отключили подтягивающий резистор на GP1
bcf WPU, ANAIN ;отключили подтягивающий резистор на GP4 (Аналоговый вход по умолчанию)
MOVLW 0x07 ;Отключили ноги от компаратора
MOVWF CMCON ;чтобы он не мешал
===-------------------============================
К ногам GP0, GP1 и GP4 (AN3) подаю попеременно напряжение через резисторик (и без пробовал тоже) в итоге на 3хразрядном 7сегментном LCD всегда нули. Суть программы в том, что производится АЦП попеременно с ног GP0, GP1, GP4, значение в десятичном формате выводится на LCD и в зависимости от выбранной ноги ставится десятичная точка в соответствующем разряде. Но в итоге - всегда получаем 000. Вот такая бякость. ПОможите, кто чем может.
===================-------------------------==========================
LOOP:
bsf ADCON0, GO
WAIT_ADC:
btfsc ADCON0, GO
goto WAIT_ADC
movf ADRESH,w
movwf Y
CALL LCD_PREP ; процедура, перелопачивает 8бит в 3 BCD
movlw 0x03
xorwf ANALOG,w
btfss STATUS, Z
goto $+2
;Сюда попадаем, если ANALOG=0x03
bcf LCD1,5 ; Это мы так точку десятичную на LCD ставим
movlw 0x02
xorwf ANALOG,w
btfss STATUS, Z
goto $+2
;Сюда попадаем, если ANALOG=0x02
bcf LCD2,5
movlw 0x01
xorwf ANALOG,w
btfss STATUS, Z
goto $+2
;Сюда попадаем, если ANALOG=0x01
bcf LCD3,5
CALL LCD ; Выводим содержимое регистра Y ; на LCd
CALL DELAY_500 ;(задержка 500 мс)
decfsz ANALOG,f
goto $+3
movlw 0x03
movwf ANALOG
movlw 0x03
xorwf ANALOG,w
btfss STATUS, Z
goto $+3
;Сюда попадаем, если ANALOG=0x03
bsf ADCON0, 0x02
bsf ADCON0, 0x03
movlw 0x02
xorwf ANALOG,w
btfss STATUS, Z
goto $+3
;Сюда попадаем, если ANALOG=0x02
bcf ADCON0, 0x02
bcf ADCON0, 0x03
movlw 0x01
xorwf ANALOG,w
btfss STATUS, Z
goto $+3
;Сюда попадаем, если ANALOG=0x01
bsf ADCON0, 0x02
bcf ADCON0, 0x03
CALL DELAY_500
goto LOOP