Страница 1 из 2

PIC16F630 не работает программа

Добавлено: Чт янв 12, 2012 23:18:51
dr.faust

Код: Выделить всё

;***********************************************************************************************
; Multi.asm
; Автоколебательный  мультивибратор.
; PIC16F84A      Кварц 4 мГц.
;=======================
            LIST        p=16F84A    ; Установка типа микроконтроллера.
            __CONFIG    03FF1H      ; Бит защиты выключен, WDT выключен, 
                                    ; стандартный XT - генератор.
;=======================
; Определение  положения  регистров  специального  назначения.
;=======================
Status      equ         03h         ; Регистр выбора банка.
TrisB       equ         06h         ; Регистр выбора направления работы выводов порта В.
PortB       equ         06h         ; Регистр управления защелками порта В.
;=======================
; Определение  названия  и  положения  регистров  общего  назначения.
;=======================
Sec         equ         0Ch         ; Счетчик времени полупериода.
;=======================
; Определение места размещения результатов операций.
;=======================
F           equ         1           ; Результат направить в регистр.
;=======================
            org         0           ; Начать выполнение программы с адреса 0 PC.
            goto        Start       ; Переход в ПП Start.


;***********************************************************************************************
;                          Текст рабочей части программы.
;***********************************************************************************************
; Установка направления работы RB0 - на выход.
;-----------------------------------------------------------------------------------------------
Start       bsf         Status,5    ; Перейти в 1-й банк (установить в 1 5-й бит
                                    ; регистра Status).
            movlw       .0          ; Записать константу 0 в аккумулятор (W).
            movwf       TrisB       ; Скопировать 0 из W в регистр TrisB.

            bcf         Status,5    ; Перейти в 0-й банк (установить в 0 5-й бит
                                    ; регистра Status).
;-----------------------------------------------------------------------------------------------
; Определение времени полупериода (закладка константы в регистр Sec).
;-----------------------------------------------------------------------------------------------
            movlw       .32         ; Записать в регистр W константу .32
            movwf       Sec         ; Скопировать .32 из W в регистр Sec.
;-----------------------------------------------------------------------------------------------
; Формирование на выводе RB0 нулевого уровня.
;-----------------------------------------------------------------------------------------------
            bcf         PortB,0     ; Установить на выходе защелки RB0 ноль.

            nop                     ; Калибровочный машинный цикл.
            nop                     ; -------------"--------------
Pause_1     decfsz      Sec,F       ; Декремент содержимого регистра Sec с помещением резуль-
            goto        Pause_1     ; тата декремента в этот же регистр.
                                    ; Если этот результат не=0, то осуществляется переход
                                    ; в ПП Pause_1 ("закольцовка" в этой ПП).
                                    ; Если =0, то программа исполняется далее.
;-----------------------------------------------------------------------------------------------
; Определение времени полупериода (закладка константы в регистр Sec).
;-----------------------------------------------------------------------------------------------
            movlw       .30         ; Записать в регистр W константу .30
            movwf       Sec         ; Скопировать .30 из W в регистр Sec.
;-----------------------------------------------------------------------------------------------
; Формирование на выводе RB0 единичного уровня.
;-----------------------------------------------------------------------------------------------
            bsf         PortB,0     ; Установить на выходе защелки RB0 единицу.

            nop                     ; То же самое, что и для нулевого уровня,
            nop                     ; только "закольцовка" происходит в ПП Pause_2.
Pause_2     decfsz      Sec,F       ; ------------------"-------------------
            goto        Pause_2     ; ------------------"-------------------

            goto        Start       ; Переход на новый полный цикл программы.
;***********************************************************************************************                        
            end                     ; Директива конца программы (всегда последняя снизу).                              
Изначально программа для PIC16F84A. Я переопределил регистры и заменил идентификатор процессора, но в Протеусе ничего не работает. Среда - MPLAB. На 16F84 все прекрасно работает. Что исправить? В MPLAB процессор выставлен f630, на встроенном симуляторе все отрабатывает как и должно.

Re: PIC16F630 не работает программа

Добавлено: Чт янв 12, 2012 23:30:55
uldemir
первая грубая ошибка, что бросилась в глаза (дальше даже не смотрел):

Код: Выделить всё

Sec         equ         0Ch         ; Счетчик времени полупериода.
у 630-го микроконтроллера там нет ОЗУ. Прежде чем "переносить" программу на другой микроконтроллер потрудитесь почитать даташит на него. Еще посмотрите какая периферия у него наличествует. Возможно, перед тем как выводы использовать как цыфровые, надо сделать дополнительные телодвижения... итд.

p.s. и кстати, у него даже нет порта B :shock:

Re: PIC16F630 не работает программа

Добавлено: Чт янв 12, 2012 23:31:39
dr.faust
Спасибо, пробую. :)

UPD: PortB обозвал PortC, адреса его

Re: PIC16F630 не работает программа

Добавлено: Чт янв 12, 2012 23:34:03
otest
в Протеусе ничего не работает.
Если Протеус не работает ,то тема в другом разделе
Что исправить?
А что именно не работает?

Re: PIC16F630 не работает программа

Добавлено: Чт янв 12, 2012 23:36:56
dr.faust
В железе еще не проверял, в Протеусе выходы отмечены серыми квадратами (вроде так обозначается работа на вход).
Биты trisC по-всякому пробовал выставлять, не в них проблема.

Регистр Sec определил как 21h, все так же

Re: PIC16F630 не работает программа

Добавлено: Чт янв 12, 2012 23:52:03
alex_p_82
Покажите исправленный исходник

Re: PIC16F630 не работает программа

Добавлено: Чт янв 12, 2012 23:52:48
dr.faust

Код: Выделить всё

#include p16f630.inc
            LIST        p=16F630    
            __CONFIG    03FF1H      
                                    

Status      equ         03h         
TrisC       equ         07h         
PortC       equ         07h        

Sec         equ         21h        
F           equ         1          

            org         0           
            goto        Start     

Start       bsf         Status,5                              
            bcf	        TrisC,4		
            bcf         Status,5                                    
            movlw       .32         
            movwf       Sec         
            bcf         PortC,0 
            nop                     
            nop                     
Pause_1     decfsz      Sec,F       
            goto        Pause_1                                    
            movlw       .30         
            movwf       Sec         
            bsf         PortC,0 
            nop                     
            nop                     
Pause_2     decfsz      Sec,F       
            goto        Pause_2     
            goto        Start       
            end

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:02:50
alex_p_82
Вы понимаете смысл этой строчки?

Код: Выделить всё

bcf           TrisC,4

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:04:44
dr.faust
Да. Установить бит 4 регистра TrisC в ноль > сделать RC4 работающим на вход. Пробовал менять на bsf, ничего.

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:06:18
alex_p_82
А работаете вы с каким битом?

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:07:07
dr.faust
Исправил на рабочий бит. Все так же.

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:11:36
alex_p_82
Мой вам совет , возьмите скачайте даташит на pic16f630, откройте страницу 28, и посмотрите как делается инициализация порта С.

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:14:39
dr.faust

Код: Выделить всё

bcf STATUS,RP0 ;Bank 0
clrf PORTC ;Init PORTC
bsf STATUS,RP0 ;Bank 1
movlw 0Ch ;Set RC<3:2> as inputs
movwf TRISC ;and set RC<5:4,1:0>
;as outputs
bcf STATUS,RP0 ;Bank 0
Делал так. Не помогает.

Код: Выделить всё

#include p16f630.inc
            LIST        p=16F630    
            __CONFIG    03FF1H      
                                    

Status      equ         03h         
TrisC       equ         07h         
PortC       equ         07h
ANSEL	    equ         91h        

Sec         equ         21h        
F           equ         1          

            org         0           
            goto        Start     

Start	    bcf 	STATUS,5 	;Bank 0
	    clrf 	PORTC 		;Init PORTC
	    bsf 	STATUS,5 	;Bank 1
	    movlw 	01h 		;Set RC<3:2> as inputs
	    movwf 	TRISC 		;and set RC<5:4,1:0>
					;as outputs
	    bcf 	STATUS,5 	;Bank 0                                    
            movlw       .32         
            movwf       Sec         
            bcf         PortC,0 
            nop                     
            nop                     
Pause_1     decfsz      Sec,F       
            goto        Pause_1                                    
            movlw       .30         
            movwf       Sec         
            bsf         PortC,0 
            nop                     
            nop                     
Pause_2     decfsz      Sec,F       
            goto        Pause_2     
            goto        Start       
            end  

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:18:41
alex_p_82
Одну строчку потеряли (самую важную), посмотрите еще раз.

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:19:50
dr.faust

Код: Выделить всё

clrf ANSEL ;digital I/O
только в 16F676 есть.

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:20:31
uldemir
может у вас проблемы с протеусом. вроде криминала больше не вижу. только хочу добавить если пишете

Код: Выделить всё

#include p16f630.inc
то это писать совсем не нужно

Код: Выделить всё

Status      equ         03h         
TrisC       equ         07h         
PortC       equ         07h       
F           equ         1         
оно там уже написано
alex_p_82 писал(а):Одну строчку потеряли (самую важную), посмотрите еще раз.
у 630-го нет АЦП - она не нужна.

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:22:08
dr.faust
uldemir, я тоже так думаю. Сейчас таки прошью, посмотрю, работает ли в железе.

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:25:51
alex_p_82
Ёлы палы :facepalm: , почему 1 , а не 0

Код: Выделить всё

 movlw    01h       ;Set RC<3:2> as inputs
       movwf    TRISC       ;and set RC<5:4,1:0>

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:27:59
dr.faust
так же.

Re: PIC16F630 не работает программа

Добавлено: Пт янв 13, 2012 00:31:15
alex_p_82
Что также?