Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 04.01.2008, 01:20   #1
Аександр
Member
 
Регистрация: 03.01.2008
Адрес: Нижневартовск
Возраст: 36
Сообщений: 50
Вес репутации: 91/0
Аександр will become famous soon enough
Отправить сообщение для Аександр с помощью ICQ
По умолчанию Написал программу а места не хватает на МК

Написал программу на pic16f84a Алгоритм работы предпускового подогревателя! Создал действующюю модель всё работает на ура но одно но у меня сканирование датчиков происходит чере каждые 40 секунд
так памяти микроконтроллера хватило всего на 12 циклов помогите,Помогите оптимизировать код программы я можно сказать ламер в этом деле это моя первая попытка програмировать, зато с паяльником я очень дружу вот захотелось чего новенького попробовать
вот и сам текст Программы :
Код:
	processor 16f84a
	list p=16f84A, f=inhx8m

	#include <p16f84a.inc>
	__config  _XT_OSC & _WDT_OFF & _PWRTE_ON




as
	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	nop
	clrf	d1
	clrf	d2
	clrf	d3
Pause_as    
	    movlw       .93
            movwf       d1
            movlw       .38
            movwf       d2
            movlw       .11
            movwf       d3
wr_as       decfsz      d1, F
            goto        wr_as
            decfsz      d2, F
            goto        wr_as
            decfsz      d3, F
            goto        wr_as
            nop
            nop
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	
	call	sle	
	btfsc	gp,sw2
	call	start
	call	sle


start

	call	vent_start
	call	DELAY
	call	DELAY
	call	svecha_start
	call	DELAY
	call	nasos
	call	DELAY
	call	svecha_stop
	call	DELAY
	call	DELAY
	call	DELAY
	call	restart

time_13
	
	clrf	d1
	clrf	d2
	clrf	d3

     
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_13       decfsz      d1, F
            goto        wr_13
            decfsz      d2, F
            goto        wr_13
            decfsz      d3, F
            goto        wr_13

        
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	
	call	sle	
	btfsc	gp,sw2	
	call	start	
	bsf     STATUS,RP0     
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	call	time
time_12
	
	clrf	d1
	clrf	d2
	clrf	d3

     
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_12       decfsz      d1, F
            goto        wr_12
            decfsz      d2, F
            goto        wr_12
            decfsz      d3, F
            goto        wr_12

        nop
	nop
        nop
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	
	call	sle	
	btfsc	gp,sw2	
	call	start	
	bsf     STATUS,RP0     
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	call	time_13
time_11
	
	clrf	d1
	clrf	d2
	clrf	d3

       
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_11       decfsz      d1, F
            goto        wr_11
            decfsz      d2, F
            goto        wr_11
            decfsz      d3, F
            goto        wr_11

        nop
	nop
        nop
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	
	call	sle	
	btfsc	gp,sw2	
	call	start	
	bsf     STATUS,RP0     
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	call	time_12	
time_10

	clrf	d1
	clrf	d2
	clrf	d3

      
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_10       decfsz      d1, F
            goto        wr_10
            decfsz      d2, F
            goto        wr_10
            decfsz      d3, F
            goto        wr_10

        nop
	nop
        nop
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	
	call	sle	
	btfsc	gp,sw2	
	call	start	
	bsf     STATUS,RP0     
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	call	time_11
time_9
	
	clrf	d1
	clrf	d2
	clrf	d3
     
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_9        decfsz      d1, F
            goto        wr_9
            decfsz      d2, F
            goto        wr_9
            decfsz      d3, F
            goto        wr_9

        nop
	nop
        nop
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	
	call	sle	
	btfsc	gp,sw2	
	call	start	
	bsf     STATUS,RP0     
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	call	time_10
time_8

	clrf	d1
	clrf	d2
	clrf	d3

      
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_8        decfsz      d1, F
            goto        wr_8
            decfsz      d2, F
            goto        wr_8
            decfsz      d3, F
            goto        wr_8

        nop
	nop
        nop
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	
	call	sle	
	btfsc	gp,sw2	
	call	start	
	bsf     STATUS,RP0     
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	call	time_9
time_5

	clrf	d1
	clrf	d2
	clrf	d3

    
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_5        decfsz      d1, F
            goto        wr_5
            decfsz      d2, F
            goto        wr_5
            decfsz      d3, F
            goto        wr_5

        nop
	nop
        nop
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	;если на входе лог 0 то пропускаем следующую команду
	call	sle	;если 1 выполняем
	btfsc	gp,sw2	;если на входе лог 0 то пропускаем следующую команду
	call	start	;если 1 выполняем воспламенение 1 нет воспламенения рестарт
	bsf     STATUS,RP0     
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	call	time_8

time_2

	
	clrf	d1
	clrf	d2
	clrf	d3
   
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_3        decfsz      d1, F
            goto        wr_3
            decfsz      d2, F
            goto        wr_3
            decfsz      d3, F
            goto        wr_3
           
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	;если на входе лог 0 то пропускаем следующую команду
	call	sle	;если 1 выполняем
	btfsc	gp,sw2	;если на входе лог 0 то пропускаем следующую команду
	call	start	;если 1 выполняем воспламенение 1 нет воспламенения рестарт
	bsf     STATUS,RP0     
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	call	time_5


time

	clrf	d1
	clrf	d2
	clrf	d3

   	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_1w        decfsz      d1, F
            goto        wr_1w
            decfsz      d2, F
            goto        wr_1w
            decfsz      d3, F
            goto        wr_1w
            nop
            nop

	clrf	d1
	clrf	d2
	clrf	d3		
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_1        decfsz      d1, F
            goto        wr_1
            decfsz      d2, F
            goto        wr_1
            decfsz      d3, F
            goto        wr_1
            nop
            nop
	  call	      sle	

cykl	
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000110'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB		
	call	time_2

restart
	clrf	TRISB
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	;если на входе лог 0 то пропускаем следующую команду
	call	sle	;если 1 выполняем
	btfsc	gp,sw2	;если на входе лог 0 то пропускаем следующую команду
	call	sts	;если 1 выполняем воспламенение 1 нет воспламенения рестарт
	call	cykl
	


	
svecha_stop
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000110'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA		
	return
nasos
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001111'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA		
	return

svecha_start
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001101'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA		
	return

vent_start
	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	nop	
	return

	
DELAY	
	clrf	d1
	clrf	d2
	clrf	d3
Pause 
	 movlw       .135
         movwf       d1
         movlw       .50
         movwf       d2
         movlw       .49
         movwf       d3
wr       decfsz      d1, F
         goto        wr
         decfsz      d2, F
         goto        wr
         decfsz      d3, F
         goto        wr
         nop	
       	 return
 

sts2

	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	nop	
	



	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001101'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr15      decfsz      d1, F
         goto        wr15
         decfsz      d2, F
         goto        wr15
         decfsz      d3, F
         goto        wr15

	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	nop	

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr14       decfsz      d1, F
         goto        wr14
         decfsz      d2, F
         goto        wr14
         decfsz      d3, F
         goto        wr14
	
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001101'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr13       decfsz      d1, F
         goto        wr13
         decfsz      d2, F
         goto        wr13
         decfsz      d3, F
         goto        wr13


	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001110'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .110
         movwf       d1
         movlw       .94
         movwf       d2
         movlw       .26
         movwf       d3
wr12       decfsz      d1, F
         goto        wr12
         decfsz      d2, F
         goto        wr12
         decfsz      d3, F
         goto        wr12

	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA


	clrf	d1
	clrf	d2
	clrf	d3

	 movlw       .110
         movwf       d1
         movlw       .94
         movwf       d2
         movlw       .26
         movwf       d3
wr11       decfsz      d1, F
         goto        wr11
         decfsz      d2, F
         goto        wr11
         decfsz      d3, F
         goto        wr11

	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001110'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3

	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr10      decfsz      d1, F
         goto        wr10
         decfsz      d2, F
         goto        wr10
         decfsz      d3, F
         goto        wr10
	
	clrf	d1
	clrf	d2
	clrf	d3

	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr9       decfsz      d1, F
         goto        wr9
         decfsz      d2, F
         goto        wr9
         decfsz      d3, F
         goto        wr9
	clrf	TRISB
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	;если на входе лог 0 то пропускаем следующую команду
	call	sle	;если 1 выполняем
	btfsc	gp,sw2	;если на входе лог 0 то пропускаем следующую команду
	call	sle	;если 1 выполняем воспламенение 1 нет воспламенения рестарт
	call	cykl
sts

	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	nop	
	

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr1       decfsz      d1, F
         goto        wr1
         decfsz      d2, F
         goto        wr1
         decfsz      d3, F
         goto        wr1
	
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001101'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3

	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr2       decfsz      d1, F
         goto        wr2
         decfsz      d2, F
         goto        wr2
         decfsz      d3, F
         goto        wr2

	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	nop	

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr3       decfsz      d1, F
         goto        wr3
         decfsz      d2, F
         goto        wr3
         decfsz      d3, F
         goto        wr3
	
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001101'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3

	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr4       decfsz      d1, F
         goto        wr4
         decfsz      d2, F
         goto        wr4
         decfsz      d3, F
         goto        wr4


	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001111'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .110
         movwf       d1
         movlw       .94
         movwf       d2
         movlw       .26
         movwf       d3
wr5       decfsz      d1, F
         goto        wr5
         decfsz      d2, F
         goto        wr5
         decfsz      d3, F
         goto        wr5

	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA


	clrf	d1
	clrf	d2
	clrf	d3
	 movlw       .110
         movwf       d1
         movlw       .94
         movwf       d2
         movlw       .26
         movwf       d3
wr6       decfsz      d1, F
         goto        wr6
         decfsz      d2, F
         goto        wr6
         decfsz      d3, F
         goto        wr6

	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000110'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr7      decfsz      d1, F
         goto        wr7
         decfsz      d2, F
         goto        wr7
         decfsz      d3, F
         goto        wr7	
	clrf	d1
	clrf	d2
	clrf	d3
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr8       decfsz      d1, F
         goto        wr8
         decfsz      d2, F
         goto        wr8
         decfsz      d3, F
         goto        wr8
	clrf	TRISB
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	;если на входе лог 0 то пропускаем следующую команду
	call	sle	;если 1 выполняем
	btfsc	gp,sw2	;если на входе лог 0 то пропускаем следующую команду
	call	sts2	;если 1 выполняем воспламенение 1 нет воспламенения рестарт
	call	cykl
sle

	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA	
	clrf	TRISB
	decfsz	count
	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB	
	clrf	d1
	clrf	d2
	clrf	d3
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_2        decfsz      d1, F
            goto        wr_2
            decfsz      d2, F
            goto        wr_2
            decfsz      d3, F
            goto        wr_2	
	clrf	d1
	clrf	d2
	clrf	d3

      
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_2a       decfsz      d1, F
            goto        wr_2a
            decfsz      d2, F
            goto        wr_2a
            decfsz      d3, F
            goto        wr_2a
	nop
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA	
	clrf	TRISB
	decfsz	count
	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	
	clrf	d1
	clrf	d2
	clrf	d3      
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_7        decfsz      d1, F
            goto        wr_7
            decfsz      d2, F
            goto        wr_7
            decfsz      d3, F
            goto        wr_7
	clrf	TRISA
	clrf	TRISB
	sleep
		

	end
Аександр вне форума   Ответить с цитированием
Старый 04.01.2008, 01:40   #2
LordN
Senior Member
 
Регистрация: 25.02.2007
Адрес: Томск
Возраст: 51
Сообщений: 783
Вес репутации: 896/65
LordN is a splendid one to beholdLordN is a splendid one to beholdLordN is a splendid one to beholdLordN is a splendid one to beholdLordN is a splendid one to beholdLordN is a splendid one to beholdLordN is a splendid one to behold
Отправить сообщение для LordN с помощью ICQ
По умолчанию Re: Написал программу а места не хватает на МК

Александр, надо самому искать решение. ключевое слово - цикл.
LordN вне форума   Ответить с цитированием
Старый 04.01.2008, 01:46   #3
Аександр
Member
 
Регистрация: 03.01.2008
Адрес: Нижневартовск
Возраст: 36
Сообщений: 50
Вес репутации: 91/0
Аександр will become famous soon enough
Отправить сообщение для Аександр с помощью ICQ
По умолчанию Re: Написал программу а места не хватает на МК

Так я понимаю что цикл это хорошо но каким образом реализовать временные задержки и сканирование датчиков одновременно а к тому-же этот девайс должен работать ещё и тридцать минут и попутно поддерживать на выходе rb7 единицу что-бы питание не обрубилось я таким образом организовал выключение после выполнения всей процедуры это видно в самом начале а такк----------------же на ra1-3 у меня весит вся периферия , помпа вентилятор свеча накала топливный насос а порт rb6 это индикатор горения rb0-1
входы датчика пламени и датчика температуры!!

Последний раз редактировалось Аександр; 04.01.2008 в 01:56.
Аександр вне форума   Ответить с цитированием
Старый 04.01.2008, 02:45   #4
=AVR=
Banned
 
Регистрация: 10.04.2007
Адрес: Москва
Сообщений: 656
Вес репутации: 161/0
=AVR= has a spectacular aura about=AVR= has a spectacular aura about
По умолчанию Re: Написал программу а места не хватает на МК

Твою программу невозможно оптимизировать - ее можно только переписать заново с нуля, настолько она неоптимальна и нефункциональна. Она похожа на установку в авто не одного, а 365 предпусковых подогревателей - по одному на каждый день в году. Как ты думаешь - это оптимально?

На беглый взгляд, твой код можно сократить в десятки раз - я не шучу. Чтобы это сделать, ты должен усвоить и неукоснительно соблюдать хотя бы следующие правила:

1. Подробно и содержательно комментируй код. Комментарии типа "пропускаем следующую команду, если бит равен нулю" - бессодержательны, равно как и их полное отсутствие. Без комментариев через неделю ты забудешь, что делал твой код, и это будет равносильно впустую потраченному на его написание времени.

2. Избегай использования численных констант - присвой этим численным значениям осмысленные символические имена и пользуйся только ими.

3. Грамотно пользуйся подпрограммами, и называй их осмысленными, достаточно длинными именами. У тебя вся программа состоит из многократно повторяющихся похожих кусков кода, различающихся лишь значениями констант - так оформи же такой кусок в виде подпрограммы, а константы передавай в него из вызывающей части программы в виде параметров. Например, movlw 80/call delay_sec, или movlw 192/call delay_sec, а не по отдельному куску кода на каждую требуемую задержку. Не забывай ставить в конце каждой подпрограммы return, и помни о максимальной вложенности вызовов в 7 уровней плюс прерывание.

4. Чтобы не тратить все время МК в пустых циклах задержки, научись пользоваться таймерами. С их помощью ты сможешь во время ожидания окончания задержки выполнять еще массу полезных действий.

5. Соблюдай четкую и понятную себе и другим структуру программы. Она должна состоять минимум из:
- кода инициализации регистров, портов и периферии МК
- основного цикла (последовательности вызовов подпрограмм и анализа состояний датчиков и т.д.)
- самих подпрограмм (задержки, манипуляции с портами и т.д.)
- подпрограмм обработки прерываний (если прерывания используются).

Для начала с тебя будет достаточно и этих правил. Выучи их назубок, перепиши свою жуткую программу заново, и покажи опять, что получилось - я уверен, что получится гораздо короче, а значит, и надежнее, и эффективнее - увидишь сам.
=AVR= вне форума   Ответить с цитированием
Старый 04.01.2008, 03:16   #5
Аександр
Member
 
Регистрация: 03.01.2008
Адрес: Нижневартовск
Возраст: 36
Сообщений: 50
Вес репутации: 91/0
Аександр will become famous soon enough
Отправить сообщение для Аександр с помощью ICQ
По умолчанию Re: Написал программу а места не хватает на МК

Большое спасибо за совет попробуем а каким образом таймером воспользоваться? да ещё и на 30 минут? может подскажете кусочком кода в пример
Аександр вне форума   Ответить с цитированием
Старый 04.01.2008, 03:31   #6
=AVR=
Banned
 
Регистрация: 10.04.2007
Адрес: Москва
Сообщений: 656
Вес репутации: 161/0
=AVR= has a spectacular aura about=AVR= has a spectacular aura about
По умолчанию Re: Написал программу а места не хватает на МК

Берешь даташит, читаешь внимательно, после этого включаешь таймер с предделителем на 256, что даст тебе генератор таймерных прерываний с периодом в 65536 машинных циклов (Fxtal/4). Затем изучаешь работу системы прерываний, и пишешь простенький обработчик таймерского прерывания, который, например, делает програмные таймеры с тиком в минуту и в секунду. После этого все твои программы задержки будут сводиться к примитивным проверкам - а не наступило ли еще требуемое время в секундах, или минутах, или минутах с секундами - да хоть бы и в годах, собственно
=AVR= вне форума   Ответить с цитированием
Старый 04.01.2008, 09:03   #7
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Могу дать еще один совет.

Цитата:
Сообщение от Аександр Посмотреть сообщение
Большое спасибо за совет попробуем а каким образом таймером воспользоваться? да ещё и на 30 минут? может подскажете кусочком кода в пример
Читайте чужие коды программ, и побольше. Это здорово помогает в понимании собственных кодов.
И еще, "о пользе программисткой косметики": http://onembedding.bialix.com/articles/makeup/

Последний раз редактировалось Bill; 04.01.2008 в 09:19.
Bill вне форума   Ответить с цитированием
Старый 04.01.2008, 09:37   #8
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/105
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Скорее рановато пока, но все же пробуй OS

Цитата:
Сообщение от Аександр Посмотреть сообщение
Написал программу на pic16f84a Алгоритм работы предпускового подогревателя! Создал действующюю модель всё работает на ура но одно но у меня сканирование датчиков происходит чере каждые 40 секунд
так памяти микроконтроллера хватило всего на 12 циклов помогите,Помогите оптимизировать код программы я можно сказать ламер в этом деле это моя первая попытка програмировать, зато с паяльником я очень дружу вот захотелось чего новенького попробовать
вот и сам текст Программы :
Главное не бояться пробуй эту jacOs великолепную OS и учись думать в категории задач, процессов, потоков ...
DL36 вне форума   Ответить с цитированием
Старый 04.01.2008, 10:55   #9
Аександр
Member
 
Регистрация: 03.01.2008
Адрес: Нижневартовск
Возраст: 36
Сообщений: 50
Вес репутации: 91/0
Аександр will become famous soon enough
Отправить сообщение для Аександр с помощью ICQ
Smile Re: Написал программу а места не хватает на МК

А вот и получасовой труд над своими ошибками чего ещё посоветуете оптимизировать ? а не подскажете возможно-ли через одну ногу передавать бинарный код на другой МК что-бы он его анализировал и выводил на жк дисплей а так-же что- бы через эту-же ногу передавать команды на МК обратно и как это реализовать?
Код:
	processor 16f84a
	list p=16f84A, f=inhx8m

	#include <p16f84a.inc>
	__config  _XT_OSC & _WDT_OFF & _PWRTE_ON


    


goto    OTHER_RESET        ;НЕТ, WDT или сброс MCLR

;Подпрограмма обработки прерываний перифирийных устройств
;Определяется источник прерывания. Разрешены следующие

;    Прерывание по переполнению TMR1
;
INT_VECTOR    org    0x004        ;Адрес первичного вектора прерываний
        
VECTOR_INT


    bcf     STATUS, RP0    ;Банк 0
    btfss    STATUS, NOT_TO;
    goto    ERROR_WDT    ;Сработал сторожевой таймер

    btfsc    INTCON, T0IF;Переполнение таймера 1?
    goto    T1_Overfl    ;ДА, обслуживание

    
                
T1_Overfl
    movlw    sys_k        ;Загрузить таймер  
    movwf    TMR0        ;
    clrf    sys_t        ;Сбрасываем флаг





    bcf        INTCON, T0IF	;Переполнение таймера 1?
    call	sle               ;Выходим, с разрешением прерываний

;main org
;// Обработка ошибок
ERROR_WDT
    clrf    STATUS        ;
    clrf    INTCON        ;Запретить 
                        ;прерывания
    clrwdt                ;
    goto $-1            ;Зациклить на ошибке


;Проверка типа сброса
OTHER_RESET     
    btfss STATUS, NOT_TO;Сброс WDT?
    WDT_TIMEOUT
    goto ERROR_WDT  ;Да, превышение WDT.
    goto as           ;Внешний сброс 
    goto ERROR_WDT
ERROR1 
    nop
    nop
    goto ERROR1            


as
	bsf     STATUS,RP0     
	clrf	TRISB		; выводим единицу на rb7
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB


	clrf	d1
	clrf	d2
	clrf	d3
	 movlw       .173	;задержка
         movwf       d1		;1000000 машинных циклов
         movlw       .19
         movwf       d2
         movlw       .6
         movwf       d3
qq      decfsz      d1, F
         goto        qq
         decfsz      d2, F
         goto        qq
         decfsz      d3, F
         goto        qq


	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh		;инициализируем порт б как вход
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1	;СКАНИРУЕМ ПОРТЫ
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	;
	sleep		;
	btfsc	gp,sw2	;ВЫПОЛНЯЕМ ПЕРЕХОТ В ЗАВИСИМОСТИ ОТ 
	call    start	;ПОЛУЧЕННЫХ ДАННЫХ
	sleep


start
	call	vent_start
	call	DELAY
	call	DELAY		;АЛГОРИТМ ВЫПОЛНЕНИЯ 
	call	svecha_start
	call	DELAY		;ПРОГРАММЫ ССЫЛКИ К ИСПОЛНИТЕЛЬНЫМ ЧАСТЯМ
	call	nasos
	call	DELAY
	call	svecha_stop
	call	DELAY
	call	DELAY
	call	DELAY
	call	restart



time


        clrf     TMR0        
        clrf     INTCON        
	movlw    b'11000111'        	;ИНИЦИАЛИЗИРУЕМ ТАЙМЕР
        banksel    OPTION_REG   
        movwf    OPTION_REG    
        movlw    sys_k        
        banksel TMR0        
        movwf    TMR0
	banksel    INTCON        
	bsf        INTCON, T0IE		
	bsf        INTCON, GIE    

	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	;
	call	sle	;
	btfsc	gp,sw2	;
	call	start	;
	bsf     STATUS,RP0     
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	call	time
	


	

cykl	
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000110'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'11100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB		
	call	time

restart
	clrf	TRISB
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	;
	call	sle	;
	btfsc	gp,sw2	;
	call	sts	;
	call	cykl
	


	
svecha_stop
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000110'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA		
	return
nasos
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001111'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA		
	return

svecha_start
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001101'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA		
	return

vent_start
	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
return

	
DELAY	
	clrf	d1
	clrf	d2
	clrf	d3
Pause 
	 movlw       .135
         movwf       d1
         movlw       .50
         movwf       d2
         movlw       .49	;ЗАДЕРЖКА НА 8500000 ЦИКЛОВ
         movwf       d3
wr       decfsz      d1, F
         goto        wr
         decfsz      d2, F
         goto        wr
         decfsz      d3, F
         goto        wr
         nop	
       	 return
 

sts2

	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	nop	
	



	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001101'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr15      decfsz      d1, F
         goto        wr15
         decfsz      d2, F
         goto        wr15
         decfsz      d3, F
         goto        wr15

	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	nop	

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr14       decfsz      d1, F
         goto        wr14
         decfsz      d2, F
         goto        wr14
         decfsz      d3, F
         goto        wr14
	
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001101'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr13       decfsz      d1, F
         goto        wr13
         decfsz      d2, F
         goto        wr13
         decfsz      d3, F
         goto        wr13


	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001110'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .110
         movwf       d1
         movlw       .94
         movwf       d2
         movlw       .26
         movwf       d3
wr12       decfsz      d1, F
         goto        wr12
         decfsz      d2, F
         goto        wr12
         decfsz      d3, F
         goto        wr12

	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA


	clrf	d1
	clrf	d2
	clrf	d3

	 movlw       .110
         movwf       d1
         movlw       .94
         movwf       d2
         movlw       .26
         movwf       d3
wr11       decfsz      d1, F
         goto        wr11
         decfsz      d2, F
         goto        wr11
         decfsz      d3, F
         goto        wr11

	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001110'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3

	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr10      decfsz      d1, F
         goto        wr10
         decfsz      d2, F
         goto        wr10
         decfsz      d3, F
         goto        wr10
	
	clrf	d1
	clrf	d2
	clrf	d3

	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr9       decfsz      d1, F
         goto        wr9
         decfsz      d2, F
         goto        wr9
         decfsz      d3, F
         goto        wr9
	clrf	TRISB
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	;
	call	sle	;
	btfsc	gp,sw2	;
	call	sle	;
	call	cykl
sts	;

	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	nop	
	

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr1       decfsz      d1, F
         goto        wr1
         decfsz      d2, F
         goto        wr1
         decfsz      d3, F
         goto        wr1
	
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001101'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3

	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr2       decfsz      d1, F
         goto        wr2
         decfsz      d2, F
         goto        wr2
         decfsz      d3, F
         goto        wr2

	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10000000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA
	nop	

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr3       decfsz      d1, F
         goto        wr3
         decfsz      d2, F
         goto        wr3
         decfsz      d3, F
         goto        wr3
	
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001101'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3

	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr4       decfsz      d1, F
         goto        wr4
         decfsz      d2, F
         goto        wr4
         decfsz      d3, F
         goto        wr4


	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001111'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3
 
	 movlw       .110
         movwf       d1
         movlw       .94
         movwf       d2
         movlw       .26
         movwf       d3
wr5       decfsz      d1, F
         goto        wr5
         decfsz      d2, F
         goto        wr5
         decfsz      d3, F
         goto        wr5

	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA


	clrf	d1
	clrf	d2
	clrf	d3
	 movlw       .110
         movwf       d1
         movlw       .94
         movwf       d2
         movlw       .26
         movwf       d3
wr6       decfsz      d1, F
         goto        wr6
         decfsz      d2, F
         goto        wr6
         decfsz      d3, F
         goto        wr6

	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000110'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA

	clrf	d1
	clrf	d2
	clrf	d3
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr7      decfsz      d1, F
         goto        wr7
         decfsz      d2, F
         goto        wr7
         decfsz      d3, F
         goto        wr7	
	clrf	d1
	clrf	d2
	clrf	d3
	 movlw       .215
         movwf       d1
         movlw       .31
         movwf       d2
         movlw       .44
         movwf       d3
wr8       decfsz      d1, F
         goto        wr8
         decfsz      d2, F
         goto        wr8
         decfsz      d3, F
         goto        wr8
	clrf	TRISB
	movlw	b'00000011'
	tris	PORTB
	movlw	0FFh
	movwf	PORTB
	bcf	portb,scan1
	bcf	portb,scan2
	movlw	b'00000011'
	andwf	portb,0
	bcf	portb,scan1
	bcf	portb,scan2
        movwf	gp
	clrf	TRISB
	btfsc	gp,sw1	;если на входе лог 0 то пропускаем следующую команду
	call	sle	;если 1 выполняем
	btfsc	gp,sw2	;если на входе лог 0 то пропускаем следующую команду
	call	sts2	;если 1 выполняем воспламенение 1 нет воспламенения рестарт
	call	cykl
sle

	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00001100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA	
	clrf	TRISB
	decfsz	count
	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB	
	clrf	d1
	clrf	d2
	clrf	d3
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_2        decfsz      d1, F
            goto        wr_2
            decfsz      d2, F
            goto        wr_2
            decfsz      d3, F
            goto        wr_2	
	clrf	d1
	clrf	d2
	clrf	d3

      
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_2a       decfsz      d1, F
            goto        wr_2a
            decfsz      d2, F
            goto        wr_2a
            decfsz      d3, F
            goto        wr_2a
	nop
	bsf     STATUS,RP0     
	clrf	TRISA
	bcf     STATUS,RP0
	movlw	b'00000100'
	comf	PORTA
	movwf	count
	movf	count,w
	movwf	PORTA	
	clrf	TRISB
	decfsz	count
	bsf     STATUS,RP0     
	clrf	TRISB
	bcf     STATUS,RP0
	movlw	b'10100000'
	comf	PORTB
	movwf	count
	movf	count,w
	movwf	PORTB
	
	clrf	d1
	clrf	d2
	clrf	d3      
	    movlw       .101
            movwf       d1
            movlw       .167
            movwf       d2
            movlw       .254
            movwf       d3
wr_7        decfsz      d1, F
            goto        wr_7
            decfsz      d2, F
            goto        wr_7
            decfsz      d3, F
            goto        wr_7
	clrf	TRISA
	clrf	TRISB
	sleep
		

	end
Аександр вне форума   Ответить с цитированием
Старый 04.01.2008, 10:58   #10
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,189
Вес репутации: 2934/110
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: Написал программу а места не хватает на МК

Цитата:
Сообщение от =AVR= Посмотреть сообщение
Твою программу невозможно оптимизировать - ее можно только переписать заново с нуля, настолько она неоптимальна и нефункциональна. Она похожа на установку в авто не одного, а 365 предпусковых подогревателей - по одному на каждый день в году. Как ты думаешь - это оптимально?

На беглый взгляд, твой код можно сократить в десятки раз - я не шучу. Чтобы это сделать, ты должен усвоить и неукоснительно соблюдать хотя бы следующие правила:

1. Подробно и содержательно комментируй код. Комментарии типа "пропускаем следующую команду, если бит равен нулю" - бессодержательны, равно как и их полное отсутствие. Без комментариев через неделю ты забудешь, что делал твой код, и это будет равносильно впустую потраченному на его написание времени.

2. Избегай использования численных констант - присвой этим численным значениям осмысленные символические имена и пользуйся только ими.

3. Грамотно пользуйся подпрограммами, и называй их осмысленными, достаточно длинными именами. У тебя вся программа состоит из многократно повторяющихся похожих кусков кода, различающихся лишь значениями констант - так оформи же такой кусок в виде подпрограммы, а константы передавай в него из вызывающей части программы в виде параметров. Например, movlw 80/call delay_sec, или movlw 192/call delay_sec, а не по отдельному куску кода на каждую требуемую задержку. Не забывай ставить в конце каждой подпрограммы return, и помни о максимальной вложенности вызовов в 7 уровней плюс прерывание.

4. Чтобы не тратить все время МК в пустых циклах задержки, научись пользоваться таймерами. С их помощью ты сможешь во время ожидания окончания задержки выполнять еще массу полезных действий.

5. Соблюдай четкую и понятную себе и другим структуру программы. Она должна состоять минимум из:
- кода инициализации регистров, портов и периферии МК
- основного цикла (последовательности вызовов подпрограмм и анализа состояний датчиков и т.д.)
- самих подпрограмм (задержки, манипуляции с портами и т.д.)
- подпрограмм обработки прерываний (если прерывания используются).

Для начала с тебя будет достаточно и этих правил. Выучи их назубок, перепиши свою жуткую программу заново, и покажи опять, что получилось - я уверен, что получится гораздо короче, а значит, и надежнее, и эффективнее - увидишь сам.
Тоже самое - спасибо (причем самое большое!) за такой труд и то что делитесь опытом и тратите свое время! Остается надеяться, что это поможет(на самом деле все-таки поможет) автору темы с его "программой"-монстром. Честно говоря тут только настоящий мазохист в ней стал бы подробно разбираться и оптимзировать ее как-то, а когда смотришь на этот "код" такая тоска приходит, что разбить что-нибудь хочется как минимум(шутка ). А тут - и просмотрел человек и комментарии написал. Все-таки не каждый сможет(хотя не всегда Ваши ответы читать можно).
AleksBak вне форума   Ответить с цитированием
Старый 04.01.2008, 11:04   #11
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,336
Вес репутации: 4234/123
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Написал программу а места не хватает на МК

Алекс, а чего Вы так мизантропически сегодня настроены? АВР дал отличные советы и совершенно без сарказма... Просто автор пока их невнимательно прочел.
Марк вне форума   Ответить с цитированием
Старый 04.01.2008, 11:09   #12
=AVR=
Banned
 
Регистрация: 10.04.2007
Адрес: Москва
Сообщений: 656
Вес репутации: 161/0
=AVR= has a spectacular aura about=AVR= has a spectacular aura about
По умолчанию Re: Написал программу а места не хватает на МК

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

Цитата:
чего ещё посоветуете оптимизировать ?
Всё!
=AVR= вне форума   Ответить с цитированием
Старый 04.01.2008, 11:09   #13
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Работайте дальше

Bill вне форума   Ответить с цитированием
Старый 04.01.2008, 11:13   #14
=AVR=
Banned
 
Регистрация: 10.04.2007
Адрес: Москва
Сообщений: 656
Вес репутации: 161/0
=AVR= has a spectacular aura about=AVR= has a spectacular aura about
По умолчанию Re: Написал программу а места не хватает на МК

Цитата:
Алекс, а чего Вы так мизантропически сегодня настроены?
Эээ... ИМХО ты полярность перепутал. Try again
=AVR= вне форума   Ответить с цитированием
Старый 04.01.2008, 11:14   #15
Аександр
Member
 
Регистрация: 03.01.2008
Адрес: Нижневартовск
Возраст: 36
Сообщений: 50
Вес репутации: 91/0
Аександр will become famous soon enough
Отправить сообщение для Аександр с помощью ICQ
По умолчанию Re: Написал программу а места не хватает на МК

Цитата:
Сообщение от Марк Посмотреть сообщение
Алекс, а чего Вы так мизантропически сегодня настроены? АВР дал отличные советы и совершенно без сарказма... Просто автор пока их невнимательно прочел.
Почему невнимательно? Вы наверное не читали с самого начала это моя первая в жизни программа до этого я не писал ничего да и языков програмирования не знаю решил попробовать написал зделал готовый образец собрал подогреватель запустил проверил во всех режимах и на всё про все ушло чуть меньше недели !!! так что и код получился ужастный а на мой взгляд он с начала был вроде даже ничего но теперь начинаю понимать что сильно ошибался надеюсь на вашу помощь заранее спасибо
Аександр вне форума   Ответить с цитированием
Старый 04.01.2008, 11:17   #16
Аександр
Member
 
Регистрация: 03.01.2008
Адрес: Нижневартовск
Возраст: 36
Сообщений: 50
Вес репутации: 91/0
Аександр will become famous soon enough
Отправить сообщение для Аександр с помощью ICQ
По умолчанию Re: Написал программу а места не хватает на МК

Цитата:
Сообщение от =AVR= Посмотреть сообщение
Это мартышкин труд. Ты не удосужился прислушаться ни к одному пункту из тех, что тебе рекомендовали, и поэтому лишь наплодил новых ошибок.

Всё!
зачем мне в программе писать коды инициаллизации регистров??? Я их в конфигурационном файле прописываю
Аександр вне форума   Ответить с цитированием
Старый 04.01.2008, 11:18   #17
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,189
Вес репутации: 2934/110
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: Написал программу а места не хватает на МК

Похоже ни фига не помогли советы. Тут не "получасовой труд" нужен - тут заново, как минимум писать программу надо и продумать перед этим раз десять(как минимум) оптимальный алгоритм программы. Ради интереса, заметил в последнем коде кусок:
Код:
 
movwf PORTB
 bcf portb,scan1
 bcf portb,scan2
 movlw b'00000011'
 andwf portb,0
 bcf portb,scan1
 bcf portb,scan2
Он повторился 5(!) раз. И это еще далеко не все! Попробуйте, прочитав еще раз совет от АВР, сделать новую программу следуя этим советам(правилам программирования).
AleksBak вне форума   Ответить с цитированием
Старый 04.01.2008, 11:20   #18
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Я повторюсь, но

мой совет - читайте чужие коды и разбирайтесь в них. Обратите внимание на их оформление, стиль. Попробуйте для начала написать свою простенькую программу. Прочитайте внимательно то, что Вам написал =AVR= и будет Вам счастье.
Bill вне форума   Ответить с цитированием
Старый 04.01.2008, 11:44   #19
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,189
Вес репутации: 2934/110
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: Написал программу а места не хватает на МК

Цитата:
Сообщение от Марк Посмотреть сообщение
Алекс, а чего Вы так мизантропически сегодня настроены? АВР дал отличные советы и совершенно без сарказма... Просто автор пока их невнимательно прочел.
Не знаю пока как "мизантропически" быть настроенным(в смысле настроение такое бывает). Но хотел сказать, что все написанное в посту от АВР абсолютно верно и точно. А автору нужно покамест читать этот пост(первый пост в теме от АВР) перед сном каждый день и каждый раз когда он приступает к написанию программы. И в возможных перерывах при написании программы, также читать этот пост каждый раз. А программу нужно преписать, ИМХО, заново, но прочитав перед этим, раз десять, тот первый пост(правила программирования) от АВР-а. С уважением, Алексей.
AleksBak вне форума   Ответить с цитированием
Старый 04.01.2008, 11:47   #20
=AVR=
Banned
 
Регистрация: 10.04.2007
Адрес: Москва
Сообщений: 656
Вес репутации: 161/0
=AVR= has a spectacular aura about=AVR= has a spectacular aura about
По умолчанию Re: Написал программу а места не хватает на МК

Цитата:
(правила программирования) от АВР-а
Это не от меня, а от здравого смысла правила
=AVR= вне форума   Ответить с цитированием
Старый 04.01.2008, 11:58   #21
vitalka
Super Moderator
 
Аватар для vitalka
 
Регистрация: 19.03.2007
Адрес: Львов
Возраст: 45
Сообщений: 3,334
Вес репутации: 2341/106
vitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond repute
По умолчанию Re: Написал программу а места не хватает на МК

Цитата:
Сообщение от =AVR= Посмотреть сообщение
Это не от меня, а от здравого смысла правила
там скобочки стоят, пост от тебя, а не правила
хотя лизнул так, что мыться уже не нужно
vitalka вне форума   Ответить с цитированием
Старый 04.01.2008, 12:05   #22
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,189
Вес репутации: 2934/110
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: Написал программу а места не хватает на МК

Цитата:
Сообщение от vitalka Посмотреть сообщение
там скобочки стоят, пост от тебя, а не правила
хотя лизнул так, что мыться уже не нужно
Может быть согласен(насчет лизания). Но если бы ты такое написал(ничего, что на "ты"?), то результат был бы абсолютно таким же(в смысле тоже самое написал бы). Может, действительно настроение какое-то сегодня мезантропическое.
AleksBak вне форума   Ответить с цитированием
Старый 04.01.2008, 12:14   #23
vitalka
Super Moderator
 
Аватар для vitalka
 
Регистрация: 19.03.2007
Адрес: Львов
Возраст: 45
Сообщений: 3,334
Вес репутации: 2341/106
vitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond repute
По умолчанию Re: Написал программу а места не хватает на МК

Цитата:
Сообщение от AleksBak Посмотреть сообщение
Может быть согласен(насчет лизания). Но если бы ты такое написал(ничего, что на "ты"?), то результат был бы абсолютно таким же(в смысле тоже самое написал бы). Может, действительно настроение какое-то сегодня мезантропическое.
я, просто, к тому, что за прописные истины благодарить не нужно - им нужно следовать
ты же не будешь говорить спасибо, если тебе скажут, что для вождения машины нужно нажимать педали и крутить руль, а не пробивать ногами днище и мелко семенить
vitalka вне форума   Ответить с цитированием
Старый 04.01.2008, 12:30   #24
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,189
Вес репутации: 2934/110
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: Написал программу а места не хватает на МК

Цитата:
Сообщение от vitalka Посмотреть сообщение
...ты же не будешь говорить спасибо, если тебе скажут, что для вождения машины нужно нажимать педали и крутить руль, а не пробивать ногами днище и мелко семенить
Вот именно, одно дело говорить(или болтать), а совсем другое дело сесть и написать целый рассказ для кого-то, "незнаюкто" и потратить свое время к тому же(как и я сейчас и ты кстати тоже) и учить еще его. Но это уже оффтоп помоему, но в связи с праздниками такое можно наверно(и автору полезно это почитать).
AleksBak вне форума   Ответить с цитированием
Старый 04.01.2008, 13:11   #25
xepp
Senior Member
 
Аватар для xepp
 
Регистрация: 24.04.2007
Адрес: Kazan
Возраст: 42
Сообщений: 570
Вес репутации: 1108/66
xepp has much to be proud ofxepp has much to be proud ofxepp has much to be proud ofxepp has much to be proud ofxepp has much to be proud ofxepp has much to be proud ofxepp has much to be proud ofxepp has much to be proud ofxepp has much to be proud of
Отправить сообщение для xepp с помощью ICQ
По умолчанию Пожелание, которое почему-то никто не сделал...

Не пишите на ассемблере просто так! Пишите в Си, Паскале, Бейсике, в чем угодно. Только бы это был язык высокого уровня. Лучше Си, поскольку он стандартизован. Только когда сильно припрет по ресурсам - скорости, пишите на асме. Предварительно убедившись, что другого выхода у Вас нет. Делая прогу в Си, Вы будете следовать большинству советов от АВР, хотите того или нет. Так устроен язык. Хотя выданный компилятором код можно будет ужать в 1.1-1.5 раза, грамотно периписав его на асме, но он будет в разы меньше того, что уже есть у Вас.
Еще одна причина, наверное, самая главная. Ассемблер привязан к определенному семейству контроллеров, которое быстро уходит в прошлое. А Си остается одинаковым, что для 8-битников, что для 32-битников. Скажите, кому сейчас сильно нужны ассемблеристы 4040, 8080, Z80, К1810ВМ1, 8051 и прочих процов, на которых работало много чего 20 лет назад? Знаю одного консерватора, упрямо писавшего на асме для 8051. Крутые проги, по 100 кБ текстовые исходники и по 3-8 таких исходников в проекте. Если посмотреть со стороны, то делал он иногда вещи такие, которые восьмибитники тянуть вообще не должны. Красиво! Но он не может слезть с 8051. Голова забита этим уникальным для 8051 асмом, места больше нет. А сейчас 2008 год. 64-битники с гектарами флеша и мегабайтами оперативки на борту на подходе. Там на асме только компилятор Си имеет смысл писать.
xepp вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем/как отлаживать код написаный на Си в WinAVR Yokel Микроконтроллеры других производителей 49 30.09.2014 09:48
Присоветуйте тип и способ управления MOSFETом "верхнего" плеча dr_Sash Источники питания и силовая электроника 37 08.09.2012 18:50
Нужна ли МК ОС? syv Инструментарий 179 22.01.2009 10:59
подключение магнитолы Sergey1 Общетехнические вопросы 10 27.12.2007 22:39


Часовой пояс GMT +3, время: 06:55.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot