реклама на сайте
подробности

 
 
> очень нужна помощь с пиком
Mari-999
сообщение Oct 31 2006, 20:07
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 16
Регистрация: 14-01-06
Пользователь №: 13 171



помогите, пожалуйста с пиком 16f84А, лаба заключается в следующем на любой вывод подключить светодиод, когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду...и так цикл, прогу надо написать на ассемблере, и подробно опишите пожалуйста, чтоб разобраться, спасибо
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 14)
Herz
сообщение Nov 1 2006, 06:24
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(Mari-999 @ Oct 31 2006, 22:07) *
помогите, пожалуйста с пиком 16f84А, лаба заключается в следующем на любой вывод подключить светодиод, когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду...и так цикл, прогу надо написать на ассемблере, и подробно опишите пожалуйста, чтоб разобраться, спасибо

Здесь спроси: http://www.microchip.ru/phorum/list.php?f=2
Там это часто повторяется...
Или вот: http://nag.ru/goodies/shema/prochee07.html
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 4 2006, 22:38
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 36
Регистрация: 26-10-06
Из: Волгоград
Пользователь №: 21 685



Цитата(Mari-999 @ Nov 1 2006, 00:07) *
помогите, пожалуйста с пиком 16f84А, лаба заключается в следующем на любой вывод подключить светодиод, когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду...и так цикл, прогу надо написать на ассемблере, и подробно опишите пожалуйста, чтоб разобраться, спасибо

Это делается очень просто. Сформулируй конкретно задание, помогу.
Что значит ?
Цитата(Mari-999 @ Nov 1 2006, 00:07) *
когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду
Где эти нолики-единички?
Go to the top of the page
 
+Quote Post
upc2
сообщение Nov 6 2006, 05:29
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



Цитата(napper @ Nov 5 2006, 01:38) *
[
Что значит ?
Цитата(Mari-999 @ Nov 1 2006, 00:07) *
когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду
Где эти нолики-единички?


0 -это значит светодиод надо включать катодом в ножку пика.
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 6 2006, 12:27
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 36
Регистрация: 26-10-06
Из: Волгоград
Пользователь №: 21 685



Схема то хоть такая?
Go to the top of the page
 
+Quote Post
upc2
сообщение Nov 6 2006, 14:03
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



Цитата(napper @ Nov 6 2006, 15:27) *
Схема то хоть такая?


Ценный труд.Разберитесь когда светятся светодиоды.
Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 6 2006, 15:58
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 36
Регистрация: 26-10-06
Из: Волгоград
Пользователь №: 21 685



Действительно непонятно: если на ноге 0, то светодиод как раз светиться и НЕ будет!
Go to the top of the page
 
+Quote Post
upc2
сообщение Nov 7 2006, 05:25
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



Цитата(napper @ Nov 6 2006, 18:58) *
Действительно непонятно: если на ноге 0, то светодиод как раз светиться и НЕ будет!


Вас за язык никто не тянул.Если можете, то помогите студенту.2 секунды на ноге 0. 1 секунда
на ноге 1. Для меня это сложно.
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 7 2006, 16:14
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 36
Регистрация: 26-10-06
Из: Волгоград
Пользователь №: 21 685



Условий Вашей задачи я не знаю, поэтому генератор взял RC и частоту 4 МГц, выводим на 0 ногу порта B:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

LIST p=16F84A ;объявляем тип используемого МК
include "P16F877a.inc"
__CONFIG _RC_OSC & _CP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF
;_RC_OSC -тип генератора
;_CP_OFF -бит защиты отключен
;_BODEN_OFF -запретить МК делать сброс при снижении напряжения питания
;_PWRTE_ON -разрешаем таймер включения питания
;_WDT_OFF -запрещаем сторожевой таймер

CBLOCK 0x0C
Count1 ;старший байт счетчика
Count2 ;средний байт счетчика
Count3 ;младший байт счетчика
ENDC

ORG 0x0000
goto Start

Start
bsf STATUS,RP0
bcf STATUS,RP1 ;переключаемся на Банк 1
clrf OPTION_REG ;конфигурация МК
clrf TRISA
clrf TRISB ;все ноги на вывод
bcf STATUS,RP0 ;переключаемся на Банк 0
Blink1 ;метка 1
clrf PORTB ;выставляем 0 на всех ножках порта В
movlw 0xFF
movwf Count3 ;устанавливаем счетчик на 2 секунды
movlw 0x30
movwf Count2
movlw 0x0B
movwf Count1
Blink2 ;метка2
decfsz Count3,f
goto Blink2
decfsz Count2,f
goto Blink2
decfsz Count1,f
goto Blink2 ;декрементируем (уменьшаем) счетчик и проверяем, если он стал нулевым,
movlw b'00000001' ;то выставляем на нужной ноге 1
movwf PORTB
movlw 0xFF
movwf Count3 ;устанавливаем счетчик на 1 секунду
movlw 0x15
movwf Count2
movlw 0x06
movwf Count1
Blink3 ;метка 3
decfsz Count3,f ;опять декрементируем счетчик с той же целью
goto Blink3
decfsz Count2,f
goto Blink3
decfsz Count1,f
goto Blink3
goto Blink1 ;счетчик = 0, переходим на метку 1

end

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

P.S. Счетчик выставил не совсем точно - ноль на ноге 2,008 сек, единица - 1,002 сек
...Лень было подгонять



Е-мое, форум не поддерживает форматирование, табуляция сбилась.
Если программа все еще нужна, пишите, пришлю по e-mail
Go to the top of the page
 
+Quote Post
upc2
сообщение Nov 8 2006, 05:34
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



napper
Написана Си и компилятор выдал аsm- файл.Для начинающих сложновато.
Если все работает, то для этого примера подойдет ваша схема.Только светодиод
надо включить как я показал.
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 8 2006, 05:42
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 36
Регистрация: 26-10-06
Из: Волгоград
Пользователь №: 21 685



Цитата(upc2 @ Nov 8 2006, 08:34) *
napper
Написана Си и компилятор выдал аsm- файл.

Ничего подобного!!! Я сам писал, ручками! Запускал в MPLAB, все работает.
Я изначально учился программировать пики в ассемблере, поэтому знаю что говорю.
И чего тут сложного? Куда уж проще? Как раз я и написал наиболее простой вариант, где все просто и понятно. Или вы можете предложить что-то лучше?

P.S. Насчет светодиода согласен...

А куда пропал автор темы?
Go to the top of the page
 
+Quote Post
upc2
сообщение Nov 8 2006, 06:10
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



Тогда приношу свои извинения.
Куда делся автор не важно.Не ему, так другому понадобится.
Польза будет.Спасибо.
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Nov 9 2006, 09:35
Сообщение #13


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Цитата(napper @ Nov 7 2006, 19:14) *
Е-мое, форум не поддерживает форматирование, табуляция сбилась.

Форум поддерживает форматирование, если использовать BB-тэг code (кнопка ):

Код
    LIST    p=16F84A;объявляем тип используемого МК
    include "P16F877a.inc"
        __CONFIG _RC_OSC & _CP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF    
;_RC_OSC -тип генератора
;_CP_OFF -бит защиты отключен
;_BODEN_OFF -запретить МК делать сброс при снижении напряжения питания
;_PWRTE_ON -разрешаем таймер включения питания
;_WDT_OFF -запрещаем сторожевой таймер

    CBLOCK 0x0C
Count1;старший байт счетчика
Count2;средний байт счетчика
Count3;младший байт счетчика
    ENDC

    ORG    0x0000
    goto    Start

Start
    bsf    STATUS,RP0
    bcf    STATUS,RP1;переключаемся на Банк 1
    clrf    OPTION_REG;конфигурация МК
    clrf    TRISA        
    clrf    TRISB;все ноги на вывод
    bcf    STATUS,RP0;переключаемся на Банк 0
Blink1    ;метка 1
    clrf    PORTB;выставляем 0 на всех ножках порта В
    movlw    0xFF
    movwf    Count3;устанавливаем счетчик на 2 секунды
    movlw    0x30
    movwf    Count2
    movlw    0x0B
    movwf    Count1
Blink2    ;метка2
    decfsz Count3,f
    goto    Blink2
    decfsz Count2,f
    goto    Blink2
    decfsz Count1,f
    goto    Blink2;декрементируем (уменьшаем) счетчик и проверяем, если он стал нулевым,
    movlw    b'00000001';то выставляем на нужной ноге 1
    movwf    PORTB
    movlw    0xFF
    movwf    Count3;устанавливаем счетчик на 1 секунду
    movlw    0x15
    movwf    Count2
    movlw    0x06
    movwf    Count1
Blink3    ;метка 3
    decfsz Count3,f;опять декрементируем счетчик с той же целью
    goto    Blink3
    decfsz Count2,f
    goto    Blink3
    decfsz Count1,f
    goto    Blink3
    goto    Blink1;счетчик = 0, переходим на метку 1
    
    end


--------------------
شامل
Go to the top of the page
 
+Quote Post
Mari-999
сообщение Nov 10 2006, 19:39
Сообщение #14


Участник
*

Группа: Новичок
Сообщений: 16
Регистрация: 14-01-06
Пользователь №: 13 171



Цитата(napper @ Nov 8 2006, 08:42) *
Цитата(upc2 @ Nov 8 2006, 08:34) *

napper
Написана Си и компилятор выдал аsm- файл.

Ничего подобного!!! Я сам писал, ручками! Запускал в MPLAB, все работает.
Я изначально учился программировать пики в ассемблере, поэтому знаю что говорю.
И чего тут сложного? Куда уж проще? Как раз я и написал наиболее простой вариант, где все просто и понятно. Или вы можете предложить что-то лучше?

P.S. Насчет светодиода согласен...

А куда пропал автор темы?

Добрый всем!
Спасибо за помощь!!!!!!!
Я здесь! Извиниюсь за не корректное задание. Задание состоит в следующем на RA4 (3 нога) повесили резистор, подключенный к питанию (если резистор подключен к питанию, то на RA4 будет 1), а на RA1 (18 ножка) через резистор подключен диод, катодом в плюс питание. Так вот когда на RA4 у нас единичка, то светодиод мигает с частотой 1 Гц, причем мигает 17 сек, а потом гаснет, если резистор отпаять, то на RA4 будет ноль и светодиод не горит.
Я набросала программку, но она работает не так 1-мигает с частотой 1 Гц, 0- светодиод горит и не смогла разобраться, как сделать, чтобы мигал 17 сек (кварц на 8МГц)
Вот программа
LIST p=16F84
INTCON EQU 0x0B
OPTION EQU 0x81
TMR0 EQU 0x01
INTF EQU 1
T0IF EQU 5
PCL EQU 0x02
STATUS EQU 0x03
RP0 EQU 5
PORTA EQU 0x05
PORTB EQU 0x06
TRISA EQU 0x05
TRISB EQU 0x06
W EQU 0
F EQU 1
TEMPA EQU 0x0C
TEMPB EQU 0x0D



#DEFINE Z STATUS,2 ;бит нулевого результата
#DEFINE VD2 PORTA,1 ;светодиод VD2
#DEFINE R1 PORTA,4 ;резистор


ORG 0
GOTO BEGIN
;
ORG 100h
BEGIN
CALL INIT_PORTS ;вызов подпрограммы
;инициализации портов
INIT_PORTS ;подпрограмма инициализации портов

MOVLW 0xFF ;установка линий портов А В в единичное состояние
MOVWF PORTA
MOVWF PORTB
BSF STATUS,RP0 ;переход на банк 1
MOVLW 0x1C ;настройка линий RA0 и RA1 на вывод, другие на ввод
MOVWF TRISA

MOVLW 0x01 ;настройка линии RB0 на ввод, другие на вывод
MOVWF TRISB

BCF STATUS,RP0 ;возврат в банк 0
;RETURN ;возврат из подпрограммы
;
LOOP
CLRWDT ;сброс сторожевого таймера
CALL GET_RA ;вызов подпрограммы GET_RA
CALL R1_VD2M ;вызов подпрограммы R1_VD2M мигание светодиода

GOTO LOOP ;переход к метке LOOP для
DELAY_E ;подпрограмма формирования задержки

MOVWF COUNT2 ;загрузка W в регистр COUNT2
CLRF COUNT1 ;сброс содержимого регистра COUNT1
LOOPD
NOP ;пустая команда
DECFSZ COUNT1,F ;декремент COUNT1
GOTO LOOPD ;повторение цикла 256 раз
CLRWDT ;сброс сторожевого таймера
DECFSZ COUNT2,F ;декремент COUNT2
GOTO LOOPD ;повторение цикла
RETURN ;возврат из подпрограммы
;

GET_RA ;подпрограмма чтения состояния порта А

MOVF PORTA,W ;чтение состояния порта A в W
MOVWF TEMPA ;пересылка W в TEMPA
RETURN ;возврат из подпрограммы

;
R1_VD2M ;подпрограмма мигания светодиода
;VD2 при при наличии резистора пропустить команду если TEMPA,4=0 резистор подключен
BTFSC TEMPA,4

GOTO V0 ;перейти на V0
BSF VD2 ;зажечь светодиод VD2
MOVLW 0xF3 ;пересылка константы
;H'F3' = .243 в W
CALL DELAY_E ;вызов подпрограммы DELAY_E
BCF VD2 ; светодиод мигает
MOVLW 0xF3 ;пересылка константы
;H'F3' = .243 в W
CALL DELAY_E ;вызов подпрограммы DELAY_E
V0
BTFSS TEMPA,4 ;пропустить команду, если TEMPA,4=1 резистор не подключен

GOTO V1 ;перейти на V1
BCF VD2 ;светодиод не горит -а он горит!!!!!
V1
RETURN ; возврат из под программы


END
и нужна подпрограмма на 17 сек, чтоб мигал, а потом перестал!!!
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 10 2006, 20:23
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 36
Регистрация: 26-10-06
Из: Волгоград
Пользователь №: 21 685



Код
LIST p=16F84
INTCON    EQU         0x0B
  OPTION    EQU         0x81
  TMR0      EQU         0x01
  INTF      EQU         1
  T0IF      EQU         5
   PCL       EQU         0x02
   STATUS    EQU         0x03
   RP0       EQU         5
   PORTA     EQU         0x05
   PORTB     EQU         0x06
   TRISA     EQU         0x05
   TRISB     EQU         0x06
   W         EQU         0
   F         EQU         1
   TEMPA     EQU         0x0C
   TEMPB     EQU         0x0D
    
  

   #DEFINE   Z           STATUS,2 ;бит нулевого результата
   #DEFINE   VD2         PORTA,1  ;светодиод VD2
   #DEFINE   R1          PORTA,4  ;резистор
  

        ORG     0
        GOTO    BEGIN
;
        ORG     100h
   BEGIN

CALL INIT_PORTS ;вызов подпрограммы
;инициализации портов
Здесь у вас дважды вызывается подпрограмма инициализации портов, поэтому либо уберите "CALL INIT_PORTS", либо перенесите саму подпрограмму в другое место

Код
   INIT_PORTS                       ;подпрограмма инициализации портов
                          
   MOVLW    0xFF         ;установка линий портов А В в единичное состояние
   MOVWF    PORTA        
   MOVWF    PORTB

Зачем нужны предыдущие 3 строки я что-то не понял

Код
   BSF      STATUS,RP0   ;переход на банк 1
   MOVLW    0x1C         ;настройка линий RA0 и RA1 на вывод, другие на ввод
   MOVWF    TRISA        
                          
   MOVLW    0x01         ;настройка линии RB0 на ввод, другие на вывод  
   MOVWF    TRISB        
                          
   BCF      STATUS,RP0   ;возврат в банк 0                
  ;RETURN                ;возврат из подпрограммы
;
LOOP
   CLRWDT                ;сброс сторожевого таймера
   CALL      GET_RA      ;вызов подпрограммы GET_RA
   CALL      R1_VD2M     ;вызов подпрограммы R1_VD2M мигание светодиода
                          
   GOTO      LOOP        ;переход к метке LOOP для
   DELAY_E               ;подпрограмма формирования задержки
                          
   MOVWF      COUNT2     ;загрузка W в регистр COUNT2
   CLRF       COUNT1     ;сброс содержимого регистра COUNT1
   LOOPD
   NOP                   ;пустая команда
   DECFSZ     COUNT1,F   ;декремент COUNT1
   GOTO       LOOPD      ;повторение цикла 256 раз
   CLRWDT                ;сброс сторожевого таймера
   DECFSZ     COUNT2,F   ;декремент COUNT2
   GOTO       LOOPD      ;повторение цикла
   RETURN                ;возврат из подпрограммы
;

GET_RA                   ;подпрограмма чтения состояния порта А
                          
   MOVF     PORTA,W      ;чтение состояния порта A в W
   MOVWF    TEMPA        ;пересылка W в TEMPA
   RETURN               ;возврат из подпрограммы

;
R1_VD2M                  ;подпрограмма мигания светодиода
                         ;VD2 при при наличии резистора пропустить команду если TEMPA,4=0 резистор подключен
   BTFSC     TEMPA,4

Если TEMPA,4=1, то выполняется следующая команда! Нам надо зажечь VD2!

Код
  GOTO      V0          ;перейти на V0

А у вас здесь наоборот!

Код
   BSF       VD2         ;зажечь светодиод VD2
   MOVLW     0xF3        ;пересылка константы
                         ;H'F3' = .243 в W
   CALL      DELAY_E     ;вызов подпрограммы DELAY_E
   BCF       VD2         ; светодиод мигает
   MOVLW     0xF3        ;пересылка константы
                         ;H'F3' = .243 в W
   CALL      DELAY_E     ;вызов подпрограммы DELAY_E
V0
   BTFSS     TEMPA,4     ;пропустить команду, если TEMPA,4=1 резистор не подключен
                          
   GOTO      V1          ;перейти на V1
   BCF       VD2         ;светодиод не горит -а он горит!!!!!
V1
   RETURN                ; возврат из под программы


END
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 21:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016