Цитата(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 сек, чтоб мигал, а потом перестал!!!