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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> очень нужна помощь с пиком
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
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
napper
сообщение Nov 10 2006, 20:36
Сообщение #16


Участник
*

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



Я думаю подпрограмму мигания надо организовать вот так:
Код
R1_VD2M                  ;подпрограмма мигания светодиода
   BTFSS     TEMPA,4      
   GOTO      V1          ;перейти на V1
   MOVLW     0x09
   MOVWF     COUNT      
;СЧЕТЧИК МИГАНИЙ 9 РАЗ ГОРИТ, 9 - НЕ ГОРИТ, ИТОГО 18 СЕК (ЧАСТОТА МИГАНИЙ 1 ГЕРЦ, ЗНАЧИТ 1
;МИГАНИЕ/НЕМИГАНИЕ В СЕКУНДУ), ПОСЛЕДНЕЕ НЕМИГАНИЕ НЕ УЧИТЫВАЕМ - ПОЛУЧАЕМ 17 СЕК
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
   GOTO      V1          ;перейти на V1
   DECFSZ    COUNT,F
   GOTO      V0
V1
   BCF       VD2         ;
   RETURN                ;возврат из под программы

END


Надеюсь паузы в подпрограмме DELAY_E вы подобрали правильно

P.S. Не забудьте объявить переменную COUNT в начале программы!!!
Go to the top of the page
 
+Quote Post
dosikus
сообщение Nov 11 2006, 09:57
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 5-02-05
Из: Russia Ярославль
Пользователь №: 2 447



Цитата(Mari-999 @ Nov 10 2006, 22:39) *
а на RA1 (18 ножка) через резистор подключен диод, катодом в плюс питание.


Вы уверены?
Светодиод катодом к плюсу?
И чего вы ожидаете ?
Go to the top of the page
 
+Quote Post
Mari-999
сообщение Nov 11 2006, 22:43
Сообщение #18


Участник
*

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



Цитата(dosikus @ Nov 11 2006, 12:57) *
Цитата(Mari-999 @ Nov 10 2006, 22:39) *


Вы уверены?
Светодиод катодом к плюсу?


нет не уверена
Go to the top of the page
 
+Quote Post
Mari-999
сообщение Nov 14 2006, 12:31
Сообщение #19


Участник
*

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



[quote name='napper' date='Nov 10 2006, 23:36' post='174600']
Я думаю подпрограмму мигания надо организовать вот так:
Код
R1_VD2M                 ;подпрограмма мигания светодиода
   BTFSS     TEMPA,4      
   GOTO      V1         ;перейти на V1
   MOVLW     0x09
   MOVWF     COUNT      
;СЧЕТЧИК МИГАНИЙ 9 РАЗ ГОРИТ, 9 - НЕ ГОРИТ, ИТОГО 18 СЕК (ЧАСТОТА МИГАНИЙ 1 ГЕРЦ, ЗНАЧИТ 1
;МИГАНИЕ/НЕМИГАНИЕ В СЕКУНДУ), ПОСЛЕДНЕЕ НЕМИГАНИЕ НЕ УЧИТЫВАЕМ - ПОЛУЧАЕМ 17 СЕК
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
   GOTO      V1         ;перейти на V1
   DECFSZ    COUNT,F
   GOTO      V0
V1
   BCF       VD2        ;
   RETURN            ;возврат из под программы

END


Надеюсь паузы в подпрограмме DELAY_E вы подобрали правильно

P.S. Не забудьте объявить переменную COUNT в начале программы!!!
[/quot]
не работает даже не компилиться
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 14 2006, 13:07
Сообщение #20


Участник
*

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



Цитата(Mari-999 @ Nov 14 2006, 15:31) *
не работает даже не компилиться

Читайте внимательнее, это ПОДпрограмма!
Замените в своей программе, начиная с метки R1_VD2M на мою.
Go to the top of the page
 
+Quote Post
Mari-999
сообщение Nov 14 2006, 13:52
Сообщение #21


Участник
*

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



Цитата(napper @ Nov 14 2006, 16:07) *
Цитата(Mari-999 @ Nov 14 2006, 15:31) *

не работает даже не компилиться

Читайте внимательнее, это ПОДпрограмма!
Замените в своей программе, начиная с метки R1_VD2M на мою.

Да, именно так и сделала (это то я поняла конечно, что это подпрограмма smile.gif ), заменила, она не работает и ругаеться на строчки MOVLW 0x09 и GOTO V0
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 14 2006, 19:06
Сообщение #22


Участник
*

Группа: Новичок
Сообщений: 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
    COUNT1    EQU    0x0E
    COUNT2    EQU    0x0F

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

    ORG 0
INIT_PORTS            ;подпрограмма инициализации портов
    BSF        STATUS,RP0;переход на банк 1
    MOVLW        0x1C    ;настройка линий RA0 и RA1 на вывод, другие на ввод
    MOVWF        TRISA
    MOVLW        0x01    ;настройка линии RB0 на ввод, другие на вывод  
    MOVWF        TRISB
    BCF        STATUS,RP0;возврат в банк 0
;
LOOP
    MOVF        PORTA,W;чтение состояния порта A в W
    MOVWF        TEMPA    ;пересылка W в TEMPA
    BTFSS        TEMPA,4
    GOTO        LOOP    ;перейти на LOOP
    MOVLW        0x09
    MOVWF        COUNT
;СЧЕТЧИК МИГАНИЙ 9 РАЗ ГОРИТ, 9 - НЕ ГОРИТ, ИТОГО 18 СЕК
;(ЧАСТОТА МИГАНИЙ 1 ГЕРЦ, ЗНАЧИТ 1 МИГАНИЕ/НЕМИГАНИЕ В СЕКУНДУ),
;ПОСЛЕДНЕЕ НЕМИГАНИЕ НЕ УЧИТЫВАЕМ - ПОЛУЧАЕМ 17 СЕК;-)
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
    DECFSZ    COUNT,F
    GOTO        V0
    GOTO        LOOP    ;переход к метке LOOP

DELAY_E            ;подпрограмма формирования задержки

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

END

О результатах сообщите
Go to the top of the page
 
+Quote Post
Mari-999
сообщение Nov 16 2006, 04:15
Сообщение #23


Участник
*

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



Цитата(napper @ Nov 14 2006, 22:06) *
О результатах сообщите

не работает две ошибки
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Nov 16 2006, 05:20
Сообщение #24


Мастер
****

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



Цитата(Mari-999 @ Nov 16 2006, 07:15) *
не работает две ошибки

Небось, компиляторы разные... В чем компилируете?


--------------------
شامل
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 16 2006, 05:39
Сообщение #25


Участник
*

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



Цитата(Mari-999 @ Nov 16 2006, 07:15) *
не работает две ошибки

Давайте разбираться. Что пишет компилятор, на что ругается?
Цитата(Edmundo @ Nov 16 2006, 08:20) *
Небось, компиляторы разные... В чем компилируете?

А причем здесь компилятор? Вроде это стандартный ассемблер для PICов...
Go to the top of the page
 
+Quote Post
Mari-999
сообщение Nov 16 2006, 06:53
Сообщение #26


Участник
*

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



Цитата(napper @ Nov 16 2006, 08:39) *
Цитата(Mari-999 @ Nov 16 2006, 07:15) *
не работает две ошибки

Давайте разбираться. Что пишет компилятор, на что ругается?
Цитата(Edmundo @ Nov 16 2006, 08:20) *
Небось, компиляторы разные... В чем компилируете?

А причем здесь компилятор? Вроде это стандартный ассемблер для PICов...

MPASM выдает 5 ошибок, одну нашла не объявлена переменная COUNT, остальные не знаю
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 16 2006, 07:46
Сообщение #27


Участник
*

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



Цитата(Mari-999 @ Nov 16 2006, 09:53) *
MPASM выдает 5 ошибок, одну нашла не объявлена переменная COUNT, остальные не знаю

Что за ошибки? Я же не ясновидящий!.. Скопируйте их сюда
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Nov 16 2006, 09:23
Сообщение #28


Мастер
****

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



Цитата(napper @ Nov 16 2006, 08:39) *
А причем здесь компилятор? Вроде это стандартный ассемблер для PICов...

Для PICов не знаю, но для других МК бывает. Синтаксис макросов в частности разный.


--------------------
شامل
Go to the top of the page
 
+Quote Post
upc2
сообщение Nov 16 2006, 09:38
Сообщение #29


Знающий
****

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



MPASM старенький компилятор. Пора переходить на MPLAB или использовать
его MPASMWIN.
Go to the top of the page
 
+Quote Post
Mari-999
сообщение Nov 19 2006, 07:06
Сообщение #30


Участник
*

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



Цитата(napper @ Nov 16 2006, 10:46) *
Цитата(Mari-999 @ Nov 16 2006, 09:53) *

MPASM выдает 5 ошибок, одну нашла не объявлена переменная COUNT, остальные не знаю

Что за ошибки? Я же не ясновидящий!.. Скопируйте их сюда

У нас mpasmwin, он когда переводишь в hex выдает 5 ошибок, одну нашла не обьявлена перем.count, осталось три, он не указывает какие, но когда комментируешь те две строки MOVLW 0x09 и GOTO V0,
он выдает 0 ошибок, я посмотрела, но так прога не работает

Сообщение отредактировал Mari-999 - Nov 19 2006, 07:08
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Nov 19 2006, 11:51
Сообщение #31


Мастер
****

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



Цитата(Mari-999 @ Nov 19 2006, 10:06) *
У нас mpasmwin, он когда переводишь в hex выдает 5 ошибок, одну нашла не обьявлена перем.count, осталось три, он не указывает какие, но когда комментируешь те две строки MOVLW 0x09 и GOTO V0,
он выдает 0 ошибок, я посмотрела, но так прога не работает

5 - 1 = 3, интересная арифметика...

2napper, сорри что влезаю smile.gif, но может быть так...

1. Объявите переменную COUNT, она там действительно не объявлена.
2. Переименуйте метку V0 во что-нибудь не буквенно-цифровое, например VZERO, и поставьте соответственно GOTO VZERO


--------------------
شامل
Go to the top of the page
 
+Quote Post
napper
сообщение Nov 19 2006, 15:01
Сообщение #32


Участник
*

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



Цитата(Edmundo @ Nov 19 2006, 14:51) *
5 - 1 = 3, интересная арифметика...

2napper, сорри что влезаю smile.gif, но может быть так...

1. Объявите переменную COUNT, она там действительно не объявлена.
2. Переименуйте метку V0 во что-нибудь не буквенно-цифровое, например VZERO, и поставьте соответственно GOTO VZERO

Edmundo, нет проблем! smile.gif Я ведь тоже могу ошибаться, поэтому только за, если кто-то меня поправит. Вот про переменную забыл...
Код
    #include P16F84A.inc
TEMPA    EQU    0x0C
TEMPB    EQU    0x0D
COUNT    EQU    0x0E
COUNT1    EQU    0x0F
COUNT2    EQU    0x10

    #DEFINE    VD2    PORTA,1;светодиод VD2
    #DEFINE    R1    PORTA,4;резистор

    ORG 0
INIT_PORTS            ;подпрограмма инициализации портов
    BSF        STATUS,RP0;переход на банк 1
    MOVLW        0x1C    ;настройка линий RA0 и RA1 на вывод, другие на ввод
    MOVWF        TRISA
    MOVLW        0x01    ;настройка линии RB0 на ввод, другие на вывод  
    MOVWF        TRISB
    BCF        STATUS,RP0;возврат в банк 0
;
LOOP
    MOVF        PORTA,W;чтение состояния порта A в W
    MOVWF        TEMPA    ;пересылка W в TEMPA
    BTFSS        TEMPA,4
    GOTO        LOOP    ;перейти на LOOP
    MOVLW        0x09
    MOVWF        COUNT
;СЧЕТЧИК МИГАНИЙ 9 РАЗ ГОРИТ, 9 - НЕ ГОРИТ, ИТОГО 18 СЕК
;(ЧАСТОТА МИГАНИЙ 1 ГЕРЦ, ЗНАЧИТ 1 МИГАНИЕ/НЕМИГАНИЕ В СЕКУНДУ),
;ПОСЛЕДНЕЕ НЕМИГАНИЕ НЕ УЧИТЫВАЕМ - ПОЛУЧАЕМ 17 СЕК;-)
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
    DECFSZ    COUNT,F
    GOTO        V0
    GOTO        LOOP    ;переход к метке LOOP

DELAY_E            ;подпрограмма формирования задержки

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

Что я исправил:
1. Объявил переменную COUNT
2. Добавил команду "#include P16F84A.inc" вместо "LIST p=16F84" (У меня MPLAB на это ругается, а разбираться лень)
3. По поводу меток все нормально, имена допустимые.
4. Убрал объявление стандартных регистров.
Откомпилировал в MPLAB, все ОК, ошибок 0
P.S. Версия MPLAB 7.30
Go to the top of the page
 
+Quote Post
MariSev
сообщение Nov 21 2006, 21:03
Сообщение #33


Участник
*

Группа: Новичок
Сообщений: 37
Регистрация: 10-11-06
Из: Питер
Пользователь №: 22 178



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

Если нужна еще программа, я могу помочь..., (а вообще то это мой любимый ник tongue.gif)


--------------------
Даешь Xmultiple России!!! :)
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 Текстовая версия Сейчас: 28th July 2025 - 05:54
Рейтинг@Mail.ru


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