Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 06.08.2007, 07:04  
nhudan
Прохожий
 
Регистрация: 22.02.2006
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
nhudan на пути к лучшему
По умолчанию Помогите переводить код с pic16f84 в 18f242!

Я написал код для pic16f84, сейчас хочу поменять на pic18f242. Попробовал но не получилось. Помогите плиз переводить этот код к 18f242 соответственно.
Огромное спасибо!


list p=16F84
include ‹P16F84.INC›
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;переменные регистр.............
.............................
org 0x000 ;вектор сброса процессора
goto main ;переход на начало основной программы
;___________начало обработки прерывания_______________
org 0x004 ;вектор прерывания
movwf w_tmp ;сохранение текущего значения аккумулятора W
movf STATUS,w ;перенос значения регистра STATUS в W
movwf st_tmp ;сохранение значения регистра STATUS
;___________подпрограмма прерывания_______________
..............................
movf st_tmp,w ;перенос копии регистра STATUS в W
movwf STATUS ;восстановление прежнего значения STATUS
swapf w_tmp,f
swapf w_tmp,w ;восстановление прежнего значения W
bcf INTCON,INTF ;сброс флага прерывания по RB0/INT
retfie ;возврат из прерывания
;___________окочание обработки прерывания_______________
main clrf PORTA
clrf PORTB
bsf STATUS, RP0 ;включили банк 1
movlw b'00000011' ;настроили на ввод
movwf PORTA ;RA0,RA1 на ввод, остальные на вывод
movlw b'00000001' ;настроили порт B
movwf PORTB ;RB0 на ввод, остальные на вывод
movlw b'00111111' ;включаем подтягивающие резисторы
movwf OPTION_REG ;и прерывание по спаду уровня
movlw b'10010000' ;разрешаем прерывание по входу
movwf INTCON ;RB0/INT,остальные прерывания запрещаем
bcf STATUS,RP0 ;включили банк 0

bcf STATUS,C
rlf Bn,w
movwf PORTB


end
Реклама:
nhudan вне форума  
Непрочитано 06.08.2007, 07:49  
stri
Прописка
 
Аватар для stri
 
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
stri на пути к лучшему
По умолчанию

а почему не получилось-не компилится, или компилится но не работает?
Для начала наверно надо list p=16F84 и include ‹P16F84.INC› поменять на 18f242 соответственно?
Я делал порт проги с PIC16F877 на PIC18F452. Скачал с сайта микрочипа доку, "Migrating Designs from PIC16C74A/74B to PIC18C442", и прям пошагово правил код (он был на ASM). Все получилось.
stri вне форума  
Непрочитано 06.08.2007, 08:12  
nhudan
Прохожий
 
Регистрация: 22.02.2006
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
nhudan на пути к лучшему
По умолчанию

Вот это соответствуюий листинг на PIC18f242. Кажется я не правильно настроил порты. Я симулировал на Протеусе но после запуска кроме RB0, все остальные RB1-RB7 оказались "серыми"(не так я хотел как выводы)


list p=18f242
include ‹P18f242.INC›

bnk equ 0x14
STATUS_TEMP equ 0x15
w_temp equ 0x16
BSR_TEMP equ 0x17
org 0x000 ;вектор сброса процессора
goto main ;переход на начало основной программы
;___________начало обработки прерывания_______________
org 0x0008 ;вектор прерывания
movwf w_temp ;сохранение текущего значения аккумулятора W
movff STATUS, STATUS_TEMP ;перенос значения регистра STATUS в W
movff BSR, BSR_TEMP ;сохранение значения регистра STATUS

;подпрограмма прерывания.........

movff BSR_TEMP, BSR ;перенос копии регистра STATUS в W
movf w_temp, w ;восстановление прежнего значения STATUS
movff STATUS_TEMP, STATUS
bcf INTCON,INT0IF ;сброс флага прерывания по RB0/INT
retfie ;возврат из прерывания
;___________окочание обработки прерывания_______________
main clrf PORTA
clrf LATA
movlw b'00000011' ;настроили на ввод
movwf TRISA ;RA0,RA1 на ввод, остальные на вывод
clrf PORTB
clrf LATB
movlw b'00000001' ;настроили порт B
movwf TRISB ;RB0 на ввод, остальные на вывод

movlw b'10111111' ;настроили порт B
movwf INTCON2

movlw b'11010000' ;разрешаем прерывание по входу
movwf INTCON ;RB0/INT,остальные прерывания запрещаем
clrf BSR

rlncf bnk,w
movwf PORTB
end
nhudan вне форума  
Непрочитано 06.08.2007, 09:17  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

А перед end прогу зациклить goto $ никак ?
urry вне форума  
Непрочитано 06.08.2007, 09:28  
stri
Прописка
 
Аватар для stri
 
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
stri на пути к лучшему
По умолчанию

А зачем сдвигать bnk, там ведь 0, поэтому в порт B всегда 0? И что делает программа когда доходит до END?
Я добавил загрузку bnk и сброс watchdog, в протеусе все работает.
ЗЫ: на вход MCLR надо подать единицу.

movlw d'1'
movwf bnk


rlncf bnk,w
movwf PORTB
WAIT
CLRWDT
goto WAIT
END
stri вне форума  
Непрочитано 07.08.2007, 05:20  
nhudan
Прохожий
 
Регистрация: 22.02.2006
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
nhudan на пути к лучшему
По умолчанию

Спасибка! Да точно не работала схема из-за не поключил MCLR. Но все такие не так хотел. Посмотрите простую схему счетчика прерывания. Каждый раз когда нажимать кнопку, 7-сегмен должен увеличиться на 1. Но не так?
Помогите пожалуйста!

list p=18f242
include ‹P18f242.INC›

bnk equ 0x1C
w_temp equ 0x1D
STATUS_TEMP equ 0x1E
BSR_TEMP equ 0x1F
org 0x000 ;вектор сброса процессора
goto main ;переход на начало основной программы
;___________начало обработки прерывания_______________
org 0x0008 ;вектор прерывания
movwf w_temp ;сохранение текущего значения аккумулятора W
movff STATUS, STATUS_TEMP ;перенос значения регистра STATUS в W
movff BSR, BSR_TEMP ;сохранение значения регистра STATUS
;___________определить иф.бит _______________

incf bnk,f,0
movff BSR_TEMP, BSR ;перенос копии регистра STATUS в W
movf w_temp, w ;восстановление прежнего значения STATUS
movff STATUS_TEMP, STATUS
bcf INTCON,INT0IF ;сброс флага прерывания по RB0/INT0
retfie ;возврат из прерывания
;___________окочание обработки прерывания_______________
main clrf PORTA
clrf LATA
movlw b'00000001' ;настроили на ввод
movwf TRISA ;RA0 на ввод, остальные на вывод
clrf PORTB
clrf LATB
movlw b'00000001' ;настроили порт B
movwf TRISB ;RB0 на ввод, остальные на вывод
movlw b'00111111' ;включаем подтягивающие резисторы(NOT_RBPU)
movwf INTCON2 ;и прерывание по спаду уровня(NOT_INTEDG0)

movlw b'10010000' ;разрешаем прерывание по входу
movwf INTCON ;RB0/INT0 (GIE,INT0IE),остальные прерывания запрещаем
clrf BSR

clrf bnk
rlncf bnk,w
movwf PORTB
WAIT CLRWDT
goto WAIT

end
‹center›
-- Прилагается рисунок: --
[img]nuke/users_images/07082007/1481802.jpg[/img]‹/center›
nhudan вне форума  
Непрочитано 07.08.2007, 08:10  
stri
Прописка
 
Аватар для stri
 
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
stri на пути к лучшему
По умолчанию

ну правильно, bnk в прерывании увеличивается, но в порт Б не копируется. надо метку WAIT передвинуть.

Код:
WAIT 
rlncf bnk,w 
movwf PORTB 

CLRWDT 
goto WAIT
ЗЫ: подключите протеус в MPLAB, если еще не сделали, там такие вещи за 5 минут вылавливаются
stri вне форума  
Непрочитано 07.08.2007, 11:40  
nhudan
Прохожий
 
Регистрация: 22.02.2006
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
nhudan на пути к лучшему
По умолчанию

Сообщение от stri
ну правильно, bnk в прерывании увеличивается, но в порт Б не копируется. надо метку WAIT передвинуть.

Код:
WAIT 
rlncf bnk,w 
movwf PORTB 

CLRWDT 
goto WAIT
ЗЫ: подключите протеус в MPLAB, если еще не сделали, там такие вещи за 5 минут вылавливаются
Спасибо! Но еще вопрос Вам мешаю:
Мне надо определить состояние выхода генератора и отображать его на порт Б после того как происходил пререывание от CLKOUT генератора. Но у меня не получилось.
Большое Спасибо!

list p=18f242
include ‹P18f242.INC›

bnk equ 0x14
w_temp equ 0x15
STATUS_TEMP equ 0x16
BSR_TEMP equ 0x17

org 0x000 ;вектор сброса процессора
goto main ;переход на начало основной программы
;___________начало обработки прерывания_______________
org 0x0008 ;вектор прерывания
movwf w_temp ;сохранение текущего значения аккумулятора W
movff STATUS, STATUS_TEMP ;перенос значения регистра STATUS в W
movff BSR, BSR_TEMP ;сохранение значения регистра STATUS
;___________определить иф.бит _______________

movf PORTA,w ;читение PORTA
andlw b'00000001';обнуляем все биты W кроме инф.бита
movwf bnk

movff BSR_TEMP, BSR ;перенос копии регистра STATUS в W
movf w_temp, w ;восстановление прежнего значения STATUS
movff STATUS_TEMP, STATUS
bcf INTCON,INT0IF ;сброс флага прерывания по RB0/INT0
retfie ;возврат из прерывания
;___________окочание обработки прерывания_______________
main clrf PORTA
clrf LATA
movlw b'00000001' ;настроили на ввод
movwf TRISA ;RA0 на ввод, остальные на вывод
clrf PORTB
clrf LATB
movlw b'00000001' ;настроили порт B
movwf TRISB ;RB0 на ввод, остальные на вывод
movlw b'00111111' ;включаем подтягивающие резисторы(NOT_RBPU)
movwf INTCON2 ;и прерывание по спаду уровня(NOT_INTEDG0)
movlw b'10010000' ;разрешаем прерывание по входу
movwf INTCON ;RB0/INT0(GIE,INT0IE),остальные прерывания запрещаем
clrf BSR

WAIT rlncf bnk,w
movwf PORTB
CLRWDT
goto WAIT

end
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/07082007/9146790.jpg" frameborder="0" name="fr154454" scrolling="yes" width="470" height="633" align="bottom"›[img]nuke/users_images/07082007/9146790.jpg[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.

‹/IFRAME›
‹/center›
nhudan вне форума  
Непрочитано 08.08.2007, 07:11  
nhudan
Прохожий
 
Регистрация: 22.02.2006
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
nhudan на пути к лучшему
По умолчанию

Кто нибудь помогите пожалуйста в чем ошибка к меня в проге!!!!
nhudan вне форума  
Непрочитано 10.08.2007, 03:38  
nhudan
Прохожий
 
Регистрация: 22.02.2006
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
nhudan на пути к лучшему
По умолчанию

Проблемма в том что порт А я не правильно настроил как ввод, МК не читает порт А. Я попробовал подавать на RA0 постоянно либо 0 либо 1 но вопше МК не принимать порт А как ввод!!. Подскажите пожалуйста как настроил что бы МК может читать из порт А?
nhudan вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите расшифровать код dizzy Цифровые сигнальные процессоры 7 27.05.2009 20:55
преобразователь код-код zazan111 TTL и CMOS логика 18 05.01.2009 06:11
код во флэш? zl3p Микроконтроллеры, АЦП, память и т.д 6 15.06.2008 12:30
Помогите написать программу для микросхемы pic16f84 lexacs Микроконтроллеры, АЦП, память и т.д 0 27.01.2005 00:45
Помогите с кнопками PIC16f84 Olegas Микроконтроллеры, АЦП, память и т.д 7 12.06.2004 21:01


Часовой пояс GMT +4, время: 21:05.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot