Свежие обсуждения
Консультации

Глюки PIC16F876

1 3

Не хочет работать как надо PIC16F876.
Прошивается отлично с первого раза без ошибок,но не работает.
Генератор генерит-смотрел осцилографом.Все порты у меня на выход.
Порт С должен управлять м/с последовательной загрузки 74HC595 для семисегментных индикаторов .
На выходах PORTC 1,2,3 нет импульсов.
На MCLR через диод и резистор 10ком подаю +5вольт.
ПортА прописан.
MOVLW 0X06
MOVWF ADCON1^80 ; каналы PORTA - цифровые входы/выходы

Пробовал загнать тестовую программу. Включить_выключить все порты.Работает,но до сброса через MCLR.
После сброса молчок.Для повторного запуска надо отключить и включать питание.
Кварц 4мгц-керамика.Емкости 47пф.

Я,правда,не уверен в процессорах(у меня два)
Они уже побывали в различных конструкциях и не помню,чтоб работали(просто не помню)
До PIC16F876 эта программа прекрасно работала в PIC16F628,но не хватило памяти и решил перейти на PIC16F876

Мож кто что посоветует.Первый раз встречаю такое.

 

99% проблема в программе - отладчиком хоть проганяли? в конце концов протеус никто не отменял. 1% оставил на проблему с железом (для самоуспокоения)

 

А порты сконфигурированы нормально?

 

DDR: 99% проблема в программе - отладчиком хоть проганяли? в конце концов протеус никто не отменял. 1% оставил на проблему с железом (для самоуспокоения)
Прогонял в PIC Simulator IDE Все ОК.Осциллограммы как надо.
http://itmages.pro-radio.ru/h_1268016517_06e000e64b.jpg
pictele: До PIC16F876 эта программа прекрасно работала в PIC16F628,но не хватило памяти и решил перейти на PIC16F876

.
Splav56: А порты сконфигурированы нормально?
Вроде да...

Все INIT у меня B'00000000'

Init
bank1
MOVLW 0X06
MOVWF ADCON1^80 ; каналы PORTA - цифровые входы/выходы
movlw INIT_PORTA
MOVWF TRISA^80
movlw INIT_PORTB
movwf TRISB^80h
movlw INIT_PORTC
movwf TRISC^80h

movlw INIT_OPTION
movwf OPTION_REG^80
bank0
movlw INIT_INTCON
movwf INTCON
CLRF PORTA
CLRF PORTB
CLRF PORTC

return

 

А у Вас в программе нет определения причины сброса питание/собака?
PWM, I2C/SPI,UART всю периферию точно отключили?
После сброса пропадают импульсы на всех портах или только на С?

PS На 876 делал 2а проекта подобных глюков замечено не было.

 

Забыл, попробуйте в код добавить такую конструкцию (это из примеров микрочипа)
ORG 0x0000 ; Вектор сброса
clrf PCLATH ; Сброс "hi" счетчика комманд
goto main ; Переход на основную программу

 

Когда начинаешь программировать новый проц, надо сначала изучить его. т.е. что при подаче питания включено, а что выключено, а потом решаешь что надо включить что выключить. Я с 876 не работал, а для 876А, чтобы все порты были цифровые надо
movlw b'00001011' ;
movwf TRISA ; настройка порта А все на выход
clrf TRISB ; настройка порта В все на выход
clrf TRISC ;

movlw 0x06 ; настройка выводов АЦП
movwf ADCON1 ; настроить все выводы портов используемые АЦП как цифровые
movlw 0x07 ; 0x07 код
movwf CMCON ; отключить компараторы
clrf CVRCON ;
BANKSEL PORTA ; выбрать банк портов
clrf PORTA ; очистить порты
clrf PORTB ;
clrf PORTC ;
отключить АЦП и отключить компараторы

 

AlexAlcoa: А у Вас в программе нет определения причины сброса питание/собака?
Собаку не ставил.

AlexAlcoa: После сброса пропадают импульсы на всех портах или только на С?
На всех портах.

AlexAlcoa: clrf PCLATH ; Сброс "hi" счетчика комманд
Добавил.Все тоже.

Catcatcat: Когда начинаешь программировать новый проц, надо сначала изучить его
Согласен,но сейчас в край некогда.
Программа-то у меня простая-только места много занимает.
Очень много переменных.
Никакие PWM, I2C/SPI,UART мне не нужны.
В PIC16F876 нет АЦП,Да они отключены по умолчанию.

Вот вся инициализация,которую я делаю.
Поправьте плз,если чего не хватает...

Все INIT у меня B'00000000'

INIT
bank1
MOVLW 0X06
MOVWF ADCON1^80 ; каналы PORTA - цифровые входы/выходы
movlw INIT_PORTA
MOVWF TRISA^80
movlw INIT_PORTB
movwf TRISB^80h
movlw INIT_PORTC
movwf TRISC^80h

movlw INIT_OPTION
movwf OPTION_REG^80
bank0
movlw INIT_INTCON
movwf INTCON
CLRF PORTA
CLRF PORTB
CLRF PORTC

 

Catcatcat: надо сначала изучить его. т.е. что при подаче питания включено, а что выключено, а потом решаешь что надо включить что выключить
Я думаю, лучше самому все явно задать (что вкл., а что выкл.), чтобы избежать неясностей.

pictele: movlw INIT_PORTA
MOVWF TRISA^80

В данном случае можно записать так: clrf TRISA вместо двух строчек выше.

pictele: В PIC16F876 нет АЦП
есть у него АЦП!

Чем заканчивается программа? goto $?

 

А банальный "хелло ворд" всеми пинами после сброса работает?