;***********************************************************************************************
; 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, на встроенном симуляторе все отрабатывает как и должно.
Господа, [url=http://google.ru/][b]это[/b][/url] - не стыдно.
у 630-го микроконтроллера там нет ОЗУ. Прежде чем "переносить" программу на другой микроконтроллер потрудитесь почитать даташит на него. Еще посмотрите какая периферия у него наличествует. Возможно, перед тем как выводы использовать как цыфровые, надо сделать дополнительные телодвижения... итд.
p.s. и кстати, у него даже нет порта B
Последний раз редактировалось uldemir Чт янв 12, 2012 23:32:48, всего редактировалось 1 раз.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
В железе еще не проверял, в Протеусе выходы отмечены серыми квадратами (вроде так обозначается работа на вход).
Биты trisC по-всякому пробовал выставлять, не в них проблема.
Регистр Sec определил как 21h, все так же
Господа, [url=http://google.ru/][b]это[/b][/url] - не стыдно.