|
| |
Пост N: 1
Зарегистрирован: 24.01.15
Рейтинг:
0
|
|
Отправлено: 24.01.15 15:11. Заголовок: Проблемы с OPTION_REG
Please, прошу помощи!!! Осваиваю PIC12F629. Написал простейшую программу - мигание светодиода. Работает крайне неустойчиво. Работа зависит от емкостных наводок - подносишь палец к "камню", меняется режим работы - то мигает, то горит непрерывно или вообще гаснет. Долго разбирался, в результате заметил такую особенность: после включения Debagger -> MPLAB SIM и трансляции ассемблерной программы все биты регистра OPTION_REG устанавливаются в "1" и никакими силами перенастроить этот регистр не удается. Привожу исходный текст программы с внесенными изменениями, которыми сбросить хотя бы один бит регистра. Эффект равен нулю. Все команды по регистру OPTION_REG игнорируются. List P=PIC12F629 __CONFIG 00FB5h ;CONFIG _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON ;************* ПЕРЕМЕННЫЕ *********************** CBLOCK 0x20 Reg_1 Reg_2 Reg_3 ENDC PRO equ 5 STATUS equ 03h ; Регистр выбора банка. (банк любой) GPIO equ 05h ; Регистр управления защелками порта. (банк 0) CMCON equ 19h ; настройка каналов GPIO end на цифровые вх/вых (банк 0) TRISIO equ 05h ; Регистр выбора направления работы выводов порта. (банк 1) INTCON equ 8Bh ; Регистр разрешения(1)/запрета(0) прерываний (любой банк) OSCCAL equ 10h ; Регистр хранения калибровочной константы (банк 1) OPTION_REG equ 11h ; настройка подтгивающих резисторов (банк 1) WPU equ 15h ; настройка подтгивающих резисторов побитово (банк 1) ;****** Калибровка Генератора ****************************************************** org 0 bsf STATUS,5 ; Выбор банка 1 clrf OPTION_REG Call 3FFh ; Загрузить калибровочную константу в w movlw 20h ; загрузка константы в W movwf OSCCAL movlw 0x0E ; загрузка константы в W movwf OPTION_REG clrf OPTION_REG bsf OPTION_REG,7 bsf OPTION_REG,6 bsf OPTION_REG,5 bsf OPTION_REG,4 bsf OPTION_REG,0 bsf OPTION_REG,0 bsf OPTION_REG,0 bsf OPTION_REG,0 ;******** Установка направления работы ног ****************************** bcf STATUS,5 ; включен банк О clrf INTCON ; запретить все прерывания clrf GPIO ; ИНИЦИАЛИЗАЦИЯ ЗАЩЕЛОК GPIO ;bcf GPIO,2 ; сбросить бит GP2 (5-я нога) movlw 0x07 ; загрузка константы в W movwf CMCON ; каналы GPIO – цифровые входы/выходы bsf STATUS,5 ; включен банк 1 movlw b'111011' ; загрузка константы в W movwf TRISIO ; инициализация направления каналов GPIO Clrw ; очистить W clrf WPU ; настройка подтягивающих R movlw 0xFF ; загрузка константы в W movwf WPU ; настройка подтягивающих R movlw b'00001111' ; загрузка константы в W movwf OPTION_REG ; настройка регистра OPTION_REG bcf OPTION_REG,7 ; загрузка константы в W bcf STATUS,5 ; включен банк О ;********** Основная программа ******************************************* m1 clrwdt ; сброс сторожевого таймера bsf GPIO,2 ; установить бит GP2 call Pause ; переход на метку (с возвратом) bcf GPIO,2 ; сбросить бит GP2 call Pause ; переход на метку (с возвратом) goto m1 ;delay = 500000 machine cycles Pause movlw .01 ;85 movwf Reg_1 movlw .01 ;138 movwf Reg_2 movlw .01 ;3 movwf Reg_3 wr decfsz Reg_1, F goto wr decfsz Reg_2, F goto wr decfsz Reg_3, F goto wr clrwdt ; сброс сторожевого таймера return end ; конец программы
|
|
| moderator
|
Пост N: 176
Зарегистрирован: 01.03.11
Рейтинг:
0
|
|
Отправлено: 24.01.15 17:19. Заголовок: PRO - нет такого бит..
PRO - нет такого бита. Опечатка в русском переводе. Есть бит RP0. Не надо прописывать адреса регистров спец назначения. Закомментируйте их или удалите. А вместо этого вставьте в программу после list p=12F675 строчку #include <P12f629.inc>. Тем самым вы подключаете к проекту файл .inc с названиями и адресами всех регистров спец назначения и их битов. Кстати, правильное написание и тех и других можно посмотреть в этом же файле. И всё будет работать.
|