Mari-999 0 31 октября, 2006 Опубликовано 31 октября, 2006 · Жалоба помогите, пожалуйста с пиком 16f84А, лаба заключается в следующем на любой вывод подключить светодиод, когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду...и так цикл, прогу надо написать на ассемблере, и подробно опишите пожалуйста, чтоб разобраться, спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 5 1 ноября, 2006 Опубликовано 1 ноября, 2006 · Жалоба помогите, пожалуйста с пиком 16f84А, лаба заключается в следующем на любой вывод подключить светодиод, когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду...и так цикл, прогу надо написать на ассемблере, и подробно опишите пожалуйста, чтоб разобраться, спасибо Здесь спроси: http://www.microchip.ru/phorum/list.php?f=2 Там это часто повторяется... Или вот: http://nag.ru/goodies/shema/prochee07.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
napper 0 4 ноября, 2006 Опубликовано 4 ноября, 2006 · Жалоба помогите, пожалуйста с пиком 16f84А, лаба заключается в следующем на любой вывод подключить светодиод, когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду...и так цикл, прогу надо написать на ассемблере, и подробно опишите пожалуйста, чтоб разобраться, спасибо Это делается очень просто. Сформулируй конкретно задание, помогу. Что значит ? когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду Где эти нолики-единички? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
upc2 0 6 ноября, 2006 Опубликовано 6 ноября, 2006 · Жалоба [ Что значит ? когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду Где эти нолики-единички? 0 -это значит светодиод надо включать катодом в ножку пика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
napper 0 6 ноября, 2006 Опубликовано 6 ноября, 2006 · Жалоба Схема то хоть такая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
upc2 0 6 ноября, 2006 Опубликовано 6 ноября, 2006 · Жалоба Схема то хоть такая? Ценный труд.Разберитесь когда светятся светодиоды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
napper 0 6 ноября, 2006 Опубликовано 6 ноября, 2006 · Жалоба Действительно непонятно: если на ноге 0, то светодиод как раз светиться и НЕ будет! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
upc2 0 7 ноября, 2006 Опубликовано 7 ноября, 2006 · Жалоба Действительно непонятно: если на ноге 0, то светодиод как раз светиться и НЕ будет! Вас за язык никто не тянул.Если можете, то помогите студенту.2 секунды на ноге 0. 1 секунда на ноге 1. Для меня это сложно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
napper 0 7 ноября, 2006 Опубликовано 7 ноября, 2006 · Жалоба Условий Вашей задачи я не знаю, поэтому генератор взял 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
upc2 0 8 ноября, 2006 Опубликовано 8 ноября, 2006 · Жалоба napper Написана Си и компилятор выдал аsm- файл.Для начинающих сложновато. Если все работает, то для этого примера подойдет ваша схема.Только светодиод надо включить как я показал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
napper 0 8 ноября, 2006 Опубликовано 8 ноября, 2006 · Жалоба napper Написана Си и компилятор выдал аsm- файл. Ничего подобного!!! Я сам писал, ручками! Запускал в MPLAB, все работает. Я изначально учился программировать пики в ассемблере, поэтому знаю что говорю. И чего тут сложного? Куда уж проще? Как раз я и написал наиболее простой вариант, где все просто и понятно. Или вы можете предложить что-то лучше? P.S. Насчет светодиода согласен... А куда пропал автор темы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
upc2 0 8 ноября, 2006 Опубликовано 8 ноября, 2006 · Жалоба Тогда приношу свои извинения. Куда делся автор не важно.Не ему, так другому понадобится. Польза будет.Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edmundo 0 9 ноября, 2006 Опубликовано 9 ноября, 2006 · Жалоба Е-мое, форум не поддерживает форматирование, табуляция сбилась. Форум поддерживает форматирование, если использовать 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mari-999 0 10 ноября, 2006 Опубликовано 10 ноября, 2006 · Жалоба 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 сек, чтоб мигал, а потом перестал!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
napper 0 10 ноября, 2006 Опубликовано 10 ноября, 2006 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться