|
очень нужна помощь с пиком |
|
|
|
Nov 1 2006, 06:24
|

Гуру
     
Группа: Модераторы
Сообщений: 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
|
|
|
|
|
Nov 4 2006, 22:38
|

Участник

Группа: Новичок
Сообщений: 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 секунду Где эти нолики-единички?
|
|
|
|
|
Nov 6 2006, 05:29
|
Знающий
   
Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063

|
Цитата(napper @ Nov 5 2006, 01:38)  [ Что значит ? Цитата(Mari-999 @ Nov 1 2006, 00:07)  когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду Где эти нолики-единички? 0 -это значит светодиод надо включать катодом в ножку пика.
|
|
|
|
|
Nov 7 2006, 05:25
|
Знающий
   
Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063

|
Цитата(napper @ Nov 6 2006, 18:58)  Действительно непонятно: если на ноге 0, то светодиод как раз светиться и НЕ будет! Вас за язык никто не тянул.Если можете, то помогите студенту.2 секунды на ноге 0. 1 секунда на ноге 1. Для меня это сложно.
|
|
|
|
|
Nov 7 2006, 16:14
|

Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Nov 8 2006, 05:42
|

Участник

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

|
Цитата(upc2 @ Nov 8 2006, 08:34)  napper Написана Си и компилятор выдал аsm- файл. Ничего подобного!!! Я сам писал, ручками! Запускал в MPLAB, все работает. Я изначально учился программировать пики в ассемблере, поэтому знаю что говорю. И чего тут сложного? Куда уж проще? Как раз я и написал наиболее простой вариант, где все просто и понятно. Или вы можете предложить что-то лучше? P.S. Насчет светодиода согласен... А куда пропал автор темы?
|
|
|
|
|
Nov 9 2006, 09:35
|

Мастер
   
Группа: Свой
Сообщений: 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
--------------------
شامل
|
|
|
|
|
Nov 10 2006, 19:39
|
Участник

Группа: Новичок
Сообщений: 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 сек, чтоб мигал, а потом перестал!!!
|
|
|
|
|
Nov 10 2006, 20:23
|

Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Nov 10 2006, 20:36
|

Участник

Группа: Новичок
Сообщений: 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 в начале программы!!!
|
|
|
|
|
Nov 11 2006, 09:57
|

Участник

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

|
Цитата(Mari-999 @ Nov 10 2006, 22:39)  а на RA1 (18 ножка) через резистор подключен диод, катодом в плюс питание. Вы уверены? Светодиод катодом к плюсу? И чего вы ожидаете ?
|
|
|
|
|
Nov 11 2006, 22:43
|
Участник

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

|
Цитата(dosikus @ Nov 11 2006, 12:57)  Цитата(Mari-999 @ Nov 10 2006, 22:39)  Вы уверены? Светодиод катодом к плюсу? нет не уверена
|
|
|
|
|
Nov 14 2006, 12:31
|
Участник

Группа: Новичок
Сообщений: 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] не работает даже не компилиться
|
|
|
|
|
Nov 14 2006, 13:07
|

Участник

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

|
Цитата(Mari-999 @ Nov 14 2006, 15:31)  не работает даже не компилиться Читайте внимательнее, это ПОДпрограмма! Замените в своей программе, начиная с метки R1_VD2M на мою.
|
|
|
|
|
Nov 14 2006, 13:52
|
Участник

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

|
Цитата(napper @ Nov 14 2006, 16:07)  Цитата(Mari-999 @ Nov 14 2006, 15:31)  не работает даже не компилиться
Читайте внимательнее, это ПОДпрограмма! Замените в своей программе, начиная с метки R1_VD2M на мою. Да, именно так и сделала (это то я поняла конечно, что это подпрограмма  ), заменила, она не работает и ругаеться на строчки MOVLW 0x09 и GOTO V0
|
|
|
|
|
Nov 14 2006, 19:06
|

Участник

Группа: Новичок
Сообщений: 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 О результатах сообщите
|
|
|
|
|
Nov 16 2006, 04:15
|
Участник

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

|
Цитата(napper @ Nov 14 2006, 22:06)  О результатах сообщите не работает две ошибки
|
|
|
|
|
Nov 16 2006, 05:39
|

Участник

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

|
Цитата(Mari-999 @ Nov 16 2006, 07:15)  не работает две ошибки Давайте разбираться. Что пишет компилятор, на что ругается? Цитата(Edmundo @ Nov 16 2006, 08:20)  Небось, компиляторы разные... В чем компилируете? А причем здесь компилятор? Вроде это стандартный ассемблер для PICов...
|
|
|
|
|
Nov 16 2006, 06:53
|
Участник

Группа: Новичок
Сообщений: 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, остальные не знаю
|
|
|
|
|
Nov 16 2006, 07:46
|

Участник

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

|
Цитата(Mari-999 @ Nov 16 2006, 09:53)  MPASM выдает 5 ошибок, одну нашла не объявлена переменная COUNT, остальные не знаю Что за ошибки? Я же не ясновидящий!.. Скопируйте их сюда
|
|
|
|
|
Nov 19 2006, 07:06
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Nov 19 2006, 11:51
|

Мастер
   
Группа: Свой
Сообщений: 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, интересная арифметика... 2 napper, сорри что влезаю  , но может быть так... 1. Объявите переменную COUNT, она там действительно не объявлена. 2. Переименуйте метку V0 во что-нибудь не буквенно-цифровое, например VZERO, и поставьте соответственно GOTO VZERO
--------------------
شامل
|
|
|
|
|
Nov 19 2006, 15:01
|

Участник

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

|
Цитата(Edmundo @ Nov 19 2006, 14:51)  5 - 1 = 3, интересная арифметика... 2 napper, сорри что влезаю  , но может быть так... 1. Объявите переменную COUNT, она там действительно не объявлена. 2. Переименуйте метку V0 во что-нибудь не буквенно-цифровое, например VZERO, и поставьте соответственно GOTO VZERO Edmundo, нет проблем!  Я ведь тоже могу ошибаться, поэтому только за, если кто-то меня поправит. Вот про переменную забыл... Код #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
|
|
|
|
|
Nov 21 2006, 21:03
|
Участник

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

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