Свежие обсуждения
Микроконтроллеры

помогите начинающиму

1 3

rubilnik: prigim1 Movlw .3 ; Сколько раз повторять процесс работы прижима
Movwf Reg_4 ; если не дойдёт за 10 сек до концевика.
prigim0 Btfss PortD,4 ; Опрос концевика прижим впереди
Goto b0 ; если впереди идём дальше.
Call Adreb ; антидребизг
Btfss PortD,4 ; Опрос концевика прижим впереди
Goto b0 ; если впереди идём дальше.
Bsf PortD,0 ; включить селеноид прижим вперёд
Bsf PortA,3 ; включить селеноид 80 бар(медленно)
Bsf PortA,2 ; включить селеноид 200 бар
;Goto Pause2 ; Идем на измерения времени хода прижима.
Ostop1 Btfsc PortD,4 ; Опрос концевика прижим впереди
Goto Ostop1
Call Adreb ; антидребизг
pst Btfsc PortD,4 ; Опрос концевика прижим впереди
Goto Ostop1
Bcf PortA,2 ; выключить селеноид 200 бар
Bcf PortA,2 ; выключить селеноид 80 бар.
Bcf PortD,0 ; выключить селеноид прижим вперёд
b0 Return

Это типа как пару строк из Евгения Онегина выдрать и попросить дописать поэму...
Не нужно врать, что писали проги на асме. Это чужая прога и вы даже не знаете откуда в ней растут ноги.
Так что копите для pictele деньги, он вам напишет. А на халяву никто вам этого делать не будет.

rubilnik: посмотри кусок программы.
И фамильярничать не стоит, мы с вами на брудершафт не пили.

 

Splav56: И фамильярничать не стоит, мы с вами на брудершафт не пили.Да вроде в интернете не принято на вы

Splav56: Не нужно врать, что писали проги на асме. Это чужая прога и вы даже не знаете откуда в ней растут ноги. Не спешите с выводами. Посмотрите пожалуйста вот здесь архив. http://upload.com.ua/get/902910415/1.rar

 

Действительно лабуда какая-то.
Нет иницилизации портов А и В.
У меня новый компьютер с Вин_7.
Купил недавно и еще не писал на нем.
Как не пытался не смог запустить в MPLABе симулятор.
Короче взял свой старый файл и переписал все туда.
Теперь поехало.
Пробуйте.

list p=16f877a
#include <p16f877a.inc>
ERRORLEVEL -302, -305
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

;========================================================================================
; Определение положения регистров специального назначения.
;========================================================================================
Status equ 03h ; Регистр выбора банка.
TrisA equ 05h
TrisB equ 06h
TrisC equ 07h
TrisD equ 08h
TrisE equ 09h

PortA equ 05h
PortB equ 06h
PortC equ 07h
PortD equ 08h
PortE equ 09h
OptionR equ 01h
;========================================================================================
; Определение названия и положения регистров общего назначения.
;========================================================================================
Reg_1 equ 20h
Reg_2 equ 21h
Reg_3 equ 22h
Reg_4 equ 23h
Reg_5 equ 24h
Reg_6 equ 25h
Reg_7 equ 26h
;****************************************************************************************
; Текст рабочей части программы.
;****************************************************************************************

org 0x000
goto Start

Start
bsf STATUS,RP0
movlw 0x06
movwf ADCON1
clrf PCLATH ;Перестраховываемся, выбираем Bank 0 Памяти Программ
CLRF STATUS ; Bank 0
CLRF INTCON ; все прерывания запрещены
bsf STATUS,RP0 ; BANK1
CLRF PIE1 ; запретить прерывания
bcf STATUS,RP0 ; Bank 0
CLRF PORTA ; очистить все порты.
CLRF PORTB ;
CLRF PORTC ;
CLRF PORTD
CLRF PORTE
clrf T1CON ; Таймер 1 не изменять
bsf STATUS,RP0 ; Bank 1
MOVLW b'00000000' ;
MOVWF TRISA ;
MOVLW b'00000000' ;
MOVWF TRISB ; RB0-RB7 - выходы
MOVLW b'00000000' ;
MOVWF TRISC ; все - выход,
MOVLW b'00000000' ;
MOVWF TRISD ; все - выход
MOVLW b'00000000' ;
MOVWF TRISE ; все - выход
bcf STATUS,RP0 ; Bank 0
;Проверим инициализацию портов
;Потом закомментировать
MOVLW b'11111111' ;
MOVWF PORTA
MOVLW b'11111111' ;
MOVWF PORTB
MOVLW b'11111111' ;
MOVWF PORTC
MOVLW b'11111111' ;
MOVWF PORTD
MOVLW b'11111111' ;
MOVWF PORTE
;Очистим порты
MOVLW b'00000000' ;
MOVWF PORTA
MOVLW b'00000000' ;
MOVWF PORTB
MOVLW b'00000000' ;
MOVWF PORTC
MOVLW b'00000000' ;
MOVWF PORTD
MOVLW b'00000000' ;
MOVWF PORTE

;----------------------------------------------------------------------------------------
; Рабочая часть программы завершина.
;----------------------------------------------------------------------------------------
; Програма опрос кнопок
;----------------------------------------------------------------------------------------
; прижим вперёд ( 1 столб линия А)
;----------------------------------------------------------------------------------------
knopka1A Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,6 ; выключить 3 столб в 1.
Bsf PortB,5 ; выключить 2 столб в 1.
Bcf PortB,4 ; включить 1 столб в 0.
Btfsc PortB,0 ; Опрос кнопки прижим вперёд
Goto knopka1B
Call Adreb ; антидребизг
Btfsc PortB,0 ; Опрос кнопки прижим вперёд
Goto knopka1B
Call prigim1 ;
;----------------------------------------------------------------------------------------
; прижим назад ( 1 столб линия B)
;----------------------------------------------------------------------------------------
knopka1B Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,6 ; выключить 3 столб в 1.
Bsf PortB,5 ; выключить 2 столб в 1.
Bcf PortB,4 ; включить 1 столб в 0.
Btfsc PortB,1 ; Опрос кнопки прижим назад
Goto knopka1C
Call Adreb ; антидребизг
Btfsc PortB,1 ; Опрос кнопки прижим назад
Goto knopka1C
Call prigim2
;----------------------------------------------------------------------------------------
; конвеер включить ( 1 столб линия C)
;----------------------------------------------------------------------------------------
knopka1C Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,6 ; выключить 3 столб в 1.
Bsf PortB,5 ; выключить 2 столб в 1.
Bcf PortB,4 ; включить 1 столб в 0.
Btfsc PortB,2 ; Опрос кнопки конвеер включить
Goto knopka1D
Call Adreb ; антидребизг
Btfsc PortB,4 ; Опрос кнопки конвеер включить
Goto knopka1D
Bsf PortA,5 ; включить конвеер

;----------------------------------------------------------------------------------------
; конвеер выключить ( 1 столб линия D)
;----------------------------------------------------------------------------------------
knopka1D Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,6 ; выключить 3 столб в 1.
Bsf PortB,5 ; выключить 2 столб в 1.

Bcf PortB,4 ; включить 1 столб в 0.
Btfsc PortB,3 ; Опрос кнопки конвеер выключить .
Goto knopka2A
Call Adreb ; антидребизг
Btfsc PortB,3 ; Опрос кнопки конвеер выключить .
Goto knopka2A
Bcf PortA,5 ; выключить конвеер
;----------------------------------------------------------------------------------------
; пресс вперёд ( 2 столб линия А)
;----------------------------------------------------------------------------------------
knopka2A Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,6 ; выключить 3 столб в 1.
Bsf PortB,4 ; выключить 1 столб в 1
Bcf PortB,5 ; включить 2 столб в 0
Btfsc PortB,0 ; Опрос кнопки -пресс вперёд-.
Goto knopka2B
Call Adreb ; антидребизг
Btfsc PortB,0 ; Опрос кнопки -пресс вперёд-.
Goto knopka2B
Call press1 ; Пресс в перёд.
;----------------------------------------------------------------------------------------
; пресс назад ( 2 столб линия B)
;----------------------------------------------------------------------------------------
knopka2B Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,6 ; выключить 3 столб в 1.
Bsf PortB,4 ; выключить 1 столб в 1
Bcf PortB,5 ; включить 2 столб в 0
Btfsc PortB,1 ; Опрос кнопки -пресс назад-.
Goto knopka2C
Call Adreb ; антидребизг
Btfsc PortB,1 ; Опрос кнопки -пресс назад-.
Goto knopka2C
Call igla2 ; Иглы в исходное.
Call press2 ; Пресс назад.
;----------------------------------------------------------------------------------------
; разравниватель вкл ( 2 столб линия C)
;----------------------------------------------------------------------------------------
knopka2C Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,6 ; выключить 3 столб в 1.
Bsf PortB,4 ; выключить 1 столб в 1
Bcf PortB,5 ; включить 2 столб в 0
Btfsc PortB,2 ; Опрос кнопки разравниватель вкл.
Goto knopka2D
Call Adreb ; антидребизг
Btfsc PortB,2 ; Опрос кнопки разравниватель вкл.
Goto knopka2D
;Bsf PortE,0 ; Разравниватель вкл.
;-----------------------------------------------------------------------------------------
; разравниватель выкл ( 2 столб линия D)
;-----------------------------------------------------------------------------------------
knopka2D Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,6 ; выключить 3 столб в 1.
Bsf PortB,4 ; выключить 1 столб в 1
Bcf PortB,5 ; включить 2 столб в 0
Btfsc PortB,3 ; Опрос кнопки разравниватель выкл.
Goto knopka3A
Call Adreb ; антидребизг
Btfsc PortB,3 ; Опрос кнопки разравниватель выкл.
Goto knopka3A
; Bcf PortE,0 ; Разравниватель выкл.
;----------------------------------------------------------------------------------------
; иглы вперёд ( 3 столб линия А)
;----------------------------------------------------------------------------------------
knopka3A Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,4 ; выключить 1 столб в 1
Bsf PortB,5 ; выключить 2 столб в 1
Bcf PortB,6 ; включить 3 столб в 0
Btfsc PortB,0 ; Опрос кнопки -иглы вперёд-.
Goto knopka3B
Call Adreb ; антидребизг
Btfsc PortB,0 ; Опрос кнопки -иглы вперёд-.
Goto knopka3B
Call igla1
;----------------------------------------------------------------------------------------
; иглы в исходное ( 3 столб линия B)
;----------------------------------------------------------------------------------------
knopka3B Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,4 ; выключить 1 столб в 1
Bsf PortB,5 ; выключить 2 столб в 1
Bcf PortB,6 ; включить 3 столб в 0
Btfsc PortB,1 ; Опрос кнопки -иглы в исходное-.
Goto knopka3C
Call Adreb ; антидребизг
Btfsc PortB,1 ; Опрос кнопки -иглы в исходное-.
Goto knopka3C
Call igla2
;---------------------------------------------------------------------------------------
; ( 3 столб линия C)
;---------------------------------------------------------------------------------------
knopka3C Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,4 ; выключить 1 столб в 1
Bsf PortB,5 ; выключить 2 столб в 1
Bcf PortB,6 ; включить 3 столб в 0
Btfsc PortB,2 ; Опрос кнопки-A- .
Goto knopka3D
Call Adreb ; антидребизг
Btfsc PortB,2 ; Опрос кнопки-A- .
Goto knopka3D
;---------------------------------------------------------------------------------------
; ( 3 столб линия D)
;---------------------------------------------------------------------------------------
knopka3D Bsf PortB,7 ; выключить 4 столб в 1.
Bsf PortB,4 ; выключить 1 столб в 1
Bsf PortB,5 ; выключить 2 столб в 1
Bcf PortB,6 ; включить 3 столб в 0
Btfsc PortB,3 ; Опрос кнопки .
Goto knopka4A
Call Adreb ; антидребизг
Btfsc PortB,3 ; Опрос кнопки .
Goto knopka4A
;---------------------------------------------------------------------------------------
; закрутка вперёд ( 4 столб линия А)
;---------------------------------------------------------------------------------------
knopka4A
Bsf PortB,4 ; выключить 1 столб в 1
Bsf PortB,5 ; выключить 2 столб в 1
Bsf PortB,6 ; выключить 3 столб в 1
Bcf PortB,7 ; включить 4 столб в 0
Btfsc PortB,0 ; Опрос кнопки Обвязкака вперёд- .
Goto knopka4B
Call Adreb ; антидребизг
Btfsc PortB,0 ; Опрос кнопки Обвязкака вперёд- .
Goto knopka4B
Call zakr1
;--------------------------------------------------------------------------------------
; закрутка в исходное ( 4 столб линия B)
;--------------------------------------------------------------------------------------
knopka4B Bsf PortB,4 ; выключить 1 столб в 1
Bsf PortB,5 ; выключить 2 столб в 1
Bsf PortB,6 ; выключить 3 столб в 1
Bcf PortB,7 ; включить 4 столб в 0
Btfsc PortB,1 ; Опрос кнопки Обвязкака в исходное-.
Goto knopka4C
Call Adreb ; антидребизг
Btfsc PortB,1 ; Опрос кнопки Обвязкака в исходное-.
Goto knopka4C
Call zakr2
;--------------------------------------------------------------------------------------
; Завязка тюка ( 4 столб линия C)
;--------------------------------------------------------------------------------------
knopka4C Bsf PortB,4 ; выключить 1 столб в 1
Bsf PortB,5 ; выключить 2 столб в 1
Bsf PortB,6 ; выключить 3 столб в 1
Bcf PortB,7 ; включить 4 столб в 0
Btfsc PortB,2 ; Опрос
Goto knopka4D
Call Adreb ; антидребизг
Btfsc PortB,2 ; Опрос
Goto knopka4D
Call obvjzkaR
;---------------------------------------------------------------------------------------
; Включения автоматического режима. ( 4 столб линия D)
;---------------------------------------------------------------------------------------
knopka4D Bsf PortB,4 ; выключить 1 столб в 1
Bsf PortB,5 ; выключить 2 столб в 1
Bsf PortB,6 ; выключить 3 столб в 1
Bcf PortB,7 ; включить 4 столб в 0
Btfsc PortB,3 ; Опрос кнопки автоматический режим.
Goto knopka1A
Call Adreb ; антидребизг
Btfsc PortB,3 ; Опрос кнопки автоматический режим.
Goto knopka1A
Goto avto

;---------------------------------------------------------------------------------------
; прижим вперёд
;---------------------------------------------------------------------------------------
prigim1 Movlw .3 ; Сколько раз повторять процесс работы прижима
Movwf Reg_4 ; если не дойдёт за 10 сек до концевика.
prigim0 Btfss PortD,4 ; Опрос концевика прижим впереди
Goto b0 ; если впереди идём дальше.
Call Adreb ; антидребизг
Btfss PortD,4 ; Опрос концевика прижим впереди
Goto b0 ; если впереди идём дальше.

Bsf PortD,0 ; включить селеноид прижим вперёд
Bsf PortA,3 ; включить селеноид 80 бар(медленно)
Bsf PortA,2 ; включить селеноид 200 бар
;Goto Pause2 ; Идем на измерения времени хода прижима.
Ostop1 Btfsc PortD,4 ; Опрос концевика прижим впереди
Goto Ostop1
Call Adreb ; антидребизг
pst Btfsc PortD,4 ; Опрос концевика прижим впереди
Goto Ostop1
Bcf PortA,2 ; выключить селеноид 200 бар
Bcf PortA,2 ; выключить селеноид 80 бар.
Bcf PortD,0 ; выключить селеноид прижим вперёд
b0 Return

;---------------------------------------------------------------------------------------
; прижим назад.
;---------------------------------------------------------------------------------------
prigim2
Btfss PortD,5 ; Опрос концевика прижим исходное.
Goto b1 ; если 1 идём на b1 .
Call Adreb ; антидребизг
Btfss PortD,5 ; Опрос концевика прижим исходное.
Goto b1 ; если если 1 идём на b1 .

Bsf PortD,1 ; включить селеноид прижим назад.
Bsf PortA,2 ; включить селеноид 200 бар (медленно)
;Bsf PortA,3 ; включить селеноид 80 бар (быстро)
Ostop2 Btfsc PortD,5 ; Опрос концевика прижим исходное.
Goto Ostop2

Btfsc PortD,5 ; Опрос концевика прижим исходное.
Goto Ostop2

Bcf PortA,2 ; выключить селеноид 80 бар.
Bcf PortA,3 ; выключить селеноид 200 бар
Bcf PortD,1 ; выключить селеноид прижим назад
b1 Return
;---------------------------------------------------------------------------------------
; пресс вперёд !!!! Когда пресс впереди конечник выдаёт -0-
;---------------------------------------------------------------------------------------
press1 Btfsc PortC,7 ; Опрос концевика пресс впереди.
Goto p0 ; если впереди идём дальше.
Call Adreb ; антидребизг
Btfsc PortC,7 ; Опрос концевика пресс впереди.
Goto p0 ; если впереди идём дальше.
p00 Btfss PortC,5 ; Опрос концевика -иглы впереди-.
Goto p00
Call Adreb ; антидребизг
Btfss PortC,5 ; Опрос концевика -иглы впереди-.
Goto p00

Call igla2 ; Иглы в исходное
Bsf PortC,2 ; включить селеноид пресс вперёд.
Bsf PortA,2 ; включить селеноид 200 бар
Bsf PortA,3 ; включить селеноид 80 бар

; Goto Pause ; Если пресс за 40 сек не дошёл до концевика
; то всё отключаем.
Ostop3 Btfss PortC,7 ; Опрос концевика пресс впереди.
Goto Ostop3
Call Adreb ; антидребизг
Btfss PortC,7 ; Опрос концевика пресс впереди ещё раз.
Goto Ostop3

Bcf PortA,2 ; выключить селеноид 200 бар.
Bcf PortA,3 ; выключить селеноид 80 бар.
Bcf PortC,2 ; выключить селеноид пресс вперёд.
p0 Return
;---------------------------------------------------------------------------------------
; пресс в исходное
;---------------------------------------------------------------------------------------
press2 Btfss PortC,6 ; Опрос концевика -пресс исходное-.
Goto p1 ; если в исходном идём дальше.
Call Adreb ; антидребизг
Btfss PortC,6 ; Опрос концевика -пресс исходное-.
Goto p1 ; если в исходном идём дальше.

p11 Btfss PortC,5 ; Опрос концевика -иглы впереди-.
Goto p11
Call Adreb ; антидребизг
Btfss PortC,5 ; Опрос концевика -иглы впереди-.
Goto p11

Call igla2 ; Иглы в исходное

Bsf PortC,3 ; включить селеноид -пресс назад-.
Bsf PortA,2 ; включить селеноид 200 бар(медленно)
Bsf PortA,3 ; включить селеноид 80 бар
; Goto Pause1 ; Если пресс за 40 сек не дошёл до концевика
; то всё отключаем.
Ostop4 Btfsc PortC,6 ; Опрос концевика -пресс исходное-.
Goto Ostop4
Call Adreb ; антидребизг
Btfsc PortC,6 ; Опрос концевика -пресс исходное-.
Goto Ostop4

Bcf PortA,2 ; выключить селеноид 200 бар
Bcf PortA,3 ; выключить селеноид 80 бар.
Bcf PortC,3 ; выключить селеноид пресс назад
p1 Return
;----------------------------------------------------------------------------------------
; иглы вперёд
;----------------------------------------------------------------------------------------
igla1 Btfss PortC,5 ; Опрос концевика -иглы впереди-.
Goto a0 ; если иглы впереди то идём дальше.
Call Adreb ; антидребизг
Btfss PortC,5 ; Опрос концевика -иглы впереди-.
Goto a0 ; если иглы впереди то идём дальше.

Call press1 ; Пресс вперёд.
Call zakr2 ; завязка в исходное.

Bsf PortC,0 ; включить селеноид -иглы вперёд-.
Bsf PortA,2 ; включить селеноид 200 бар(медленно)
Ostop5 Btfsc PortC,5 ; Опрос концевика -иглы впереди-.
Goto Ostop5
Call Adreb ; антидребизг
Btfsc PortC,5 ; Опрос концевика -иглы впереди-.
Goto Ostop5
Bcf PortA,2 ; выключить селеноид 200 бар
Bcf PortC,0 ; выключить селеноид-иглы вперёд-.
a0 Return
;---------------------------------------------------------------------------------------
; иглы в исходное
;---------------------------------------------------------------------------------------
igla2 Btfss PortC,4 ; Опрос концевика -иглы исходное-.
Goto a1 ; если иглы в иходном то идём дальше.
Call Adreb ; антидребизг
Btfss PortC,4 ; Опрос концевика -иглы исходное-.
Goto a1 ; если иглы в иходном то идём дальше.

Call press1 ; Пресс вперёд.
Call zakr2 ; завязка в исходное.

Bsf PortC,1 ; включить селеноид -иглы в исходное-
Bsf PortA,2 ; включить селеноид 200 бар(медленно)
Ostop6 Btfsc PortC,4 ; Опрос концевика -иглы исходное-.
Goto Ostop6
Call Adreb ; антидребизг
Btfsc PortC,4 ; Опрос концевика -иглы исходное-.
Goto Ostop6

Bcf PortA,2 ; выключить селеноид 200 бар
Bcf PortC,1 ; выключить селеноид -иглы в исходное-
a1 Return
;--------------------------------------------------------------------------------------
; Обвязкака вперёд
;--------------------------------------------------------------------------------------
zakr1
zakrpc Btfss PortD,3 ; Опрос концевика Обвязкака в переди-.
Goto c1 ; если впереди идём дальше.
Call Adreb ; антидребизг
Btfss PortD,3 ; Опрос концевика Обвязкака в переди-.
Goto c1 ; если впереди идём дальше.
Bsf PortE,2 ; включить селеноид Обвязкака вперёд-
Bsf PortA,2 ; включить селеноид 200 бар(медленно)
Ostop7 Btfsc PortD,3 ; Опрос концевика Обвязкака в переди-.
Goto Ostop7
Call Adreb ; антидребизг
Btfsc PortD,3 ; Опрос концевика Обвязкака в переди-.
Goto Ostop7

Bcf PortA,2 ; выключить селеноид 200 бар
Bcf PortE,2 ; выключить селеноид Обвязкака вперёд-
c1 Return
;-------------------------------------------------------------------------------------
; Обвязкака в исходное
;-------------------------------------------------------------------------------------
zakr2
Btfss PortD,2 ; Опрос концевика - Обвязкака исходное- .
Goto c2 ; если в исходном идём дальше.
Call Adreb ; антидребизг
Btfss PortD,2 ; Опрос концевика - Обвязкака исходное- .
Goto c2 ; если в исходном идём дальше.

zakrpc1 Bsf PortE,1 ; включить селеноид Обвязкака исходное-
Bsf PortA,2 ; включить селеноид 200 бар(медленно)
Ostop8 Btfsc PortD,2 ; Опрос концевика - Обвязкака исходное- .
Goto Ostop8
Call Adreb ; антидребизг
Btfsc PortD,2 ; Опрос концевика - Обвязкака исходное- .
Goto Ostop8
Bcf PortA,2 ; выключить селеноид 200 бар
Bcf PortE,1 ; выключить селеноид Обвязкака в исходное-.
c2 Return
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
;=======================================================================================
; Автоматический режим.
;=======================================================================================
avto Call press2 ; пресс в исходное
Call prigim2 ; прижим в исходное
Call zasipka ; Опросить фотосенсор и засыпать бункер.
Call prigim1 ; прижим вперёд
Call press1 ; пресс вперёд
Call obvjzkaA ; опросить счётчик и завязать кипу.
Goto avto ; повторить процес
;---------------------------------------------------------------------------------------
; Опрос счётчика - Обвязкака .
;---------------------------------------------------------------------------------------
obvjzkaA
Btfsc PortD,7 ; опрос счётчика
Goto on
Call Adreb ; антидребизг
Btfsc PortD,7 ; опрос счётчика
Goto on
obvjzkaR Call prigim1 ; прижим впрёд
Call press1 ; пресс впрёд
Call igla1 ; иглы впрёд
Call zakr1 ; закрутка впрёд
Call zakr2 ; закрутка назад
Call igla2 ; иглы назад
on Return

;----------------------------------------------------------------------------------------
; Опрос фотодатчика - засыпка.
;----------------------------------------------------------------------------------------
zasipka Bsf PortA,5 ; включить конвеер
F1 Btfsc PortD,6 ; Опрос фотосенсора если 1 то на F2
; Goto F2

Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек

Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
Btfsc PortD,6 ; Опрос фотосенсора.
Goto F1 ; если 0 то вернутся на F1
Call foto1 ; опросить ещё раз через0.1 сек
F2 Bcf PortA,5 ; выключить конвеер
Return

;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
;========================================================================================
; Подпрограммы задержек.
;========================================================================================
;----------------------------------------------------------------------------------------
; Время задержки(антидребизг).0.05 сек
;----------------------------------------------------------------------------------------
;delay = 30'000 machine cycles
Adreb movlw .245
movwf Reg_1
movlw .39
movwf Reg_2
wr decfsz Reg_1, F
goto wr
decfsz Reg_2, F
goto wr
Return

;----------------------------------------------------------------------------------------
; Время задержки для фотодатчика 0.1 сек
;----------------------------------------------------------------------------------------
;delay = 100'000 machine cycles
foto1 movlw .221
movwf Reg_1
movlw .130
movwf Reg_2
wr000 decfsz Reg_1, F
goto wr000
decfsz Reg_2, F
goto wr000
nop
nop
Return
;
;--------------------------------------------------------------------------------------
;end ; Вот и всё

;----------------------------------------------------------------------------------------
;----------------------------------------------------------------------------------------
; Время работы пресс вперёд примерно 40 сек
;----------------------------------------------------------------------------------------

Pause movlw .162
movwf Reg_1
movlw .39
movwf Reg_2
movlw .125 ;
movwf Reg_3

wr1 Btfsc PortC,7 ; Опрос концевика пресс впереди.
; Если пресс впереди конечник разомкнут.
Goto Ostop3 ; если пресс впереди то выключаем селеноиды и .
; если пресс не в переди то выключаем селеноиды
; через 4о сек.
decfsz Reg_1, F
goto wr1
decfsz Reg_2, F
goto wr1
decfsz Reg_3, F
goto wr1
Bcf PortA,2 ; выключить селеноид 200 бар.
Bcf PortC,2 ; выключить селеноид пресс вперёд.
Goto knopka1A
;----------------------------------------------------------------------------------------
; Время работы пресс в исходное примерно 40 сек
;----------------------------------------------------------------------------------------

Pause1 movlw .162
movwf Reg_1
movlw .39
movwf Reg_2
movlw .125 ;
movwf Reg_3

wr2 Btfss PortC,6 ; Опрос концевика пресс в исходном
Goto Ostop4 ; если пресс в исходном то выключаем селеноиды и .
; если пресс не в исходном то выключаем селеноиды
; через 4о сек.
decfsz Reg_1, F
goto wr2
decfsz Reg_2, F
goto wr2
decfsz Reg_3, F
goto wr2
Bcf PortA,2 ; выключить селеноид 200 бар.
Bcf PortA,3 ; выключить селеноид 80 бар.
Bcf PortC,3 ; выключить селеноид пресс в исходное.
Goto knopka1A

ROS Bsf PortE,0 ; Реле общий стоп вкл.

Ostop Clrf PortA
Clrf PortB
Clrf PortC
Clrf PortD
Clrf PortE

;========================================================================================
; .
;========================================================================================
cikl
call prigim2 ; прижим в исходное
Decfsz Reg_4, F ; Считаем уменьшаем циклы.
Tstf Reg_4 ; Проверяем регистр на 0 если0 то ROS
Call prigim0 ; прижим вперёд
call prigim2 ; прижим в исходное
;========================================================================================
; Подпрограмма задержики время на ход прижима.
;========================================================================================
;delay = 10'000'000 machine cycles =10 сек
Pause2 movlw .223
movwf Reg_1
movlw .187
movwf Reg_2
movlw .51
movwf Reg_3
wr00 decfsz Reg_1, F
;Btfsc PortD,4 ; Опрос концевика прижим впереди
;Goto pst ; Если прижим уже впереди.
goto wr00
decfsz Reg_2, F
goto wr00
decfsz Reg_3, F
goto wr00
nop
nop
Bcf PortA,2 ; выключить селеноид 200 бар
Bcf PortA,2 ; выключить селеноид 80 бар.
Bcf PortD,0 ; выключить селеноид прижим вперёд
Bsf PortE,0 ; Реле общий стоп вкл.
;Goto cikl ; Делаем прижимы.
;Return

END

 

.hex заодно.На всякий пожарный.

:020000040000FA
:100000000128831606309F008A0183018B01831625
:100010008C01831285018601870188018901900185
:1000200083160030850000308600003087000030E5
:100030008800003089008312FF308500FF30860081
:10004000FF308700FF308800FF30890000308500D6
:1000500000308600003087000030880000308900C2
:10006000861706178616061206183A2897210618CC
:100070003A28CD20861706178616061286184428B9
:10008000972186184428E020861706178616061240
:1000900006194E289721061A4E2885168617061728
:1000A000861606128619582897218619582885120F
:1000B0008617061706168612061862289721061854
:1000C0006228EF20861706170616861286186D28F6
:1000D000972186186D282E210621861706170616E9
:1000E000861206197628972106197628861706178C
:1000F0000616861286197F28972186197F2886176B
:1001000006168616061306188928972106188928C8
:100110001D21861706168616061386189328972122
:10012000861893282E21861706168616061306199A
:100130009C28972106199C288617061686160613F2
:100140008619A52897218619A5280616861606174A
:1001500086130618AF2897210618AF283F210616E8
:100160008616061786138618B92897218618B92887
:100170004E2106168616061786130619C3289721E0
:100180000619C328692106168616061786138619CE
:1001900030289721861930285D290330A300081ED6
:1001A000DF289721081EDF28081485150515081A71
:1001B000D7289721081AD72805110511081008001B
:1001C000881EEE289721881EEE2888140515881AA7
:1001D000E728881AE7280511851188100800871B71
:1001E00005299721871B0529871EF4289721871E3B
:1001F000F4282E21071505158515871FFD28972141
:10020000871FFD280511851107110800071F1C29EC
:100210009721071F1C29871E0B299721871E0B2951
:100220002E21871505158515071B14299721071BF6
:1002300014290511851187110800871E2D29972182
:10024000871E2D29EF204E2107140515871A262910
:100250009721871A2629051107100800071E3E2935
:100260009721071E3E29EF204E2187140515071AF6
:1002700037299721071A3729051187100800881D8B
:100280004D299721881D4D290915051588194629DD
:10029000972188194629051109110800081D5C29B4
:1002A0009721081D5C2989140515081955299721DE
:1002B000081955290511891008000621E020702130
:1002C000CD20EF2064215D29881B6F299721881B91
:1002D0006F29CD20EF201D213F214E212E21080026
:1002E0008516081B7129A021081B7129A021081B54
:1002F0007129A021081B7129A021081B7129A021A7
:10030000081B7129A021081B7129A021081B712934
:10031000A021081B7129A021081B7129A021081BFD
:100320007129A021081B7129A02185120800F53030
:10033000A0002730A100A00B9B29A10B9B2908003E
:10034000DD30A0008230A100A00BA429A10BA429BC
:10035000000000000800A230A0002730A1007D307E
:10036000A200871BFD28A00BB129A10BB129A20B6C
:10037000B129051107113028A230A0002730A100B3
:100380007D30A200071F1429A00BC229A10BC2298E
:10039000A20BC22905118511871130280914850186
:1003A0008601870188018901E020A30BA308CF20E3
:1003B000E020DF30A000BB30A1003330A200A00B52
:1003C000DF29A10BDF29A20BDF29000000000511A6
:0603D000051108100914DC
:02400E00313F40
:00000001FF

 

pictele: Действительно лабуда какая-то.
Нет иницилизации портов А и В.
А зачем это нужно;

pictele: ;end ; Вот и всё Здесь конец программы всё что за ней это мои пробы здесь надо убратьточку с запятой

pictele: Действительно лабуда какая-то. Почему лабуда? Может для программиста и лабуда но я начинающий . А пресс уже работает.
Подскажите что не так сделано.

 

pictele: .hex заодно.На всякий пожарный.А какие здесь изменеия в прграмме? У меня и так всё работало.Посмотрите в PROTEUSE

pictele: ;---------------------------------------------------------------------------------------
; прижим вперёд
;---------------------------------------------------------------------------------------
prigim1 Movlw .3 ; Сколько раз повторять процесс работы прижима
Movwf Reg_4 ; если не дойдёт за 10 сек до концевика.
prigim0 Btfss PortD,4 ; Опрос концевика прижим впереди
Goto b0 ; если впереди идём дальше.
Call Adreb ; антидребизгP
Btfss PortD,4 ; Опрос концевика прижим впереди
Goto b0 ; если впереди идём дальше.

Bsf PortD,0 ; включить селеноид прижим вперёд
Bsf PortA,3 ; включить селеноид 80 бар(медленно)
Bsf PortA,2 ; включить селеноид 200 бар
;Goto Pause2 ; Идем на измерения времени хода прижима. !!!! А ВОТ ЗДЕСЬ Я закомментировал потому что неполучается!!!!!
Ostop1 Btfsc PortD,4 ; Опрос концевика прижим впереди
Goto Ostop1
Call Adreb ; антидребизг
pst Btfsc PortD,4 ; Опрос концевика прижим впереди
Goto Ostop1
Bcf PortA,2 ; выключить селеноид 200 бар
Bcf PortA,2 ; выключить селеноид 80 бар.
Bcf PortD,0 ; выключить селеноид прижим вперёд
b0 Return

Мне надо вэтой подпрограмме прежим включился вперёд и если он не дошёл до концевика впереди за 10 сек выключился.
Селеноид 80 бар. селеноид 200 бар.вкл гидронасосы их надо отключить.Компелятор использую MPLAB(R) IDE v5.70.40

 

Понял.Вот.Что надо измените. 9.989555 секунд.

;Заряжаем регистры паузы.
movlw .30
movwf Reg_1
movlw .113
movwf Reg_2
movlw .31
movwf Reg_3
BSF PORTB,3
knop
Btfss PORTB,3 ; Опрос кнопки конвеер выключить .
GOTO knopka2A ;На выключение

Pause
decfsz Reg_1, F
GOTO knop
decfsz Reg_2, F
GOTO knop
decfsz Reg_3, F
GOTO knop
Goto knopka2A ;Выключаем принудительно

 

pictele: Проверим инициализацию портовЗачем все это всё нужно? Вот я могу объяснить зачем нужна любая команда и строка в моей программе .Вы представляете где работает эта программа? Это 40 тонный горизонтальный пресс для прессовки макулатуры. И если я
открою все порты выставлю

MOVLW b'11111111' ;
MOVWF PORTA
MOVLW b'11111111' ;
MOVWF PORTB
MOVLW b'11111111' ;
MOVWF PORTC
MOVLW b'11111111' ;
MOVWF PORTD
MOVLW b'11111111' ;
MOVWF PORTE
то откроются все золотники гидравлики сразу .И что тогда будет??
давайте всё по порядку. Подпрограммы - прижим вперёд- ,-прижим назад- ,-пресс вперёд- , -пресс назад- и тд, подают сигнал на открытия или закрытия золотников гидроцилиндров. Это у меня всё работает нормально. Мне надо сделать такой алгоритм . Вкл селеноид открылись клапана, гидроцилиндр прижима пошёл вперёд. гидроцилиндр при достижении конечного выключателя остановился ( программа выкл селеноиды золотников). Но если гидроцилиндр не дошёл до конечника за 10 сек, то селеноиды золотников отключились по таймеру.
Вот и вся логика. У всех подпрограмм время на отключение по таймеру должно быть разное. Надо, наверное, применить прерывания по таймеру, но лучше без прерываний. Пока не могу сам по этому прошу помочи, поскольку мне надо побыстрей.

pictele: Понял.Вот.Что надо измените. 9.989555 секунд.. И всё что ниже это куда вставить и зачем, объясни?

 

Деньги меня не интересуют совсем.Я столько зарабатываю...
Ну.Вобщем письмом.Договорились.

 

pictele: Понял.Вот.Что надо измените. 9.989555 секунд.

;Заряжаем регистры паузы.
movlw .30
movwf Reg_1
movlw .113
movwf Reg_2
movlw .31
movwf Reg_3
BSF PORTB,3
knop
Btfss PORTB,3 ; Опрос кнопки конвеер выключить .
GOTO knopka2A ;На выключение

Pause
decfsz Reg_1, F
GOTO knop
decfsz Reg_2, F
GOTO knop
decfsz Reg_3, F
GOTO knop
Goto knopka2A ;Выключаем принудительно

Это также как и у меня

;----------------------------------------------------------------------------------------
; Время работы пресс вперёд примерно 40 сек
;----------------------------------------------------------------------------------------

Pause movlw .162
movwf Reg_1
movlw .39
movwf Reg_2
movlw .125 ;
movwf Reg_3

wr1 Btfsc PortC,7 ; Опрос концевика пресс впереди.
; Если пресс впереди конечник разомкнут.
Goto Ostop3 ; если пресс впереди то выключаем селеноиды и .
; если пресс не в переди то выключаем селеноиды
; через 4о сек.
decfsz Reg_1, F
goto wr1
decfsz Reg_2, F
goto wr1
decfsz Reg_3, F
goto wr1
Bcf PortA,2 ; выключить селеноид 200 бар.
Bcf PortC,2 ; выключить селеноид пресс вперёд.
Goto knopka1A
Просто я задал большую задержку и при проверке недождался конца.Спасибо всем ,тему можно закрыть

 
1 3