Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/46: Рейтинг темы: голосов - 46, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 13

Система зажигания на PIC16F876A

05.02.2014, 20:13. Показов 9819. Ответов 79
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил собрать зажигание на PIC16F876A, электронную часть собрал, а вот с программной частью проблемы. Дело в том что исходник написан для трамблера с 4 прорезями в шторке, а у меня будет 2 прорези, то есть программа при вычислении оборотов берет 4 импульса от датчика холла за 4 оборота коленвала, у меня же получается 2 импульса приходится на 4 оборота коленвала. Так как в программировании совсем ничего не понимаю, прошу Вашей помощи. Нутром понимаю поправить нужно всего лишь одну циферку в программе, но прочитать код не могу (не умею). Помогите поправить программу.


взято отсюда


А это текст исходника:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
; Процессор --------------------------------------------------------------------------------------
LIST    p=16f876
#define PIC16F876
 
;--------------------------------------------------------------------------------------------------
;       Register Definitions
;--------------------------------------------------------------------------------------------------
 
W                            EQU     H'0000'
F                            EQU     H'0001'
 
;----- Register Files------------------------------------------------------
 
INDF                         EQU     H'0000'
TMR0                         EQU     H'0001'
PCL                          EQU     H'0002'
STATUS                       EQU     H'0003'
FSR                          EQU     H'0004'
PORTA                        EQU     H'0005'
PORTB                        EQU     H'0006'
PORTC                        EQU     H'0007'
PCLATH                       EQU     H'000A'
INTCON                       EQU     H'000B'
PIR1                         EQU     H'000C'
PIR2                         EQU     H'000D'
TMR1L                        EQU     H'000E'
TMR1H                        EQU     H'000F'
T1CON                        EQU     H'0010'
TMR2                         EQU     H'0011'
T2CON                        EQU     H'0012'
SSPBUF                       EQU     H'0013'
SSPCON                       EQU     H'0014'
CCPR1L                       EQU     H'0015'
CCPR1H                       EQU     H'0016'
CCP1CON                      EQU     H'0017'
RCSTA                        EQU     H'0018'
TXREG                        EQU     H'0019'
RCREG                        EQU     H'001A'
CCPR2L                       EQU     H'001B'
CCPR2H                       EQU     H'001C'
CCP2CON                      EQU     H'001D'
ADRESH                       EQU     H'001E'
ADCON0                       EQU     H'001F'
 
OPTION_REG                   EQU     H'0081'
TRISA                        EQU     H'0085'
TRISB                        EQU     H'0086'
TRISC                        EQU     H'0087'
PIE1                         EQU     H'008C'
PIE2                         EQU     H'008D'
PCON                         EQU     H'008E'
SSPCON2                      EQU     H'0091'
PR2                          EQU     H'0092'
SSPADD                       EQU     H'0093'
SSPSTAT                      EQU     H'0094'
TXSTA                        EQU     H'0098'
SPBRG                        EQU     H'0099'
CMCON                        EQU     H'009C'
CVRCON                       EQU     H'009D'
ADRESL                       EQU     H'009E'
ADCON1                       EQU     H'009F'
 
EEDATA                       EQU     H'010C'
EEADR                        EQU     H'010D'
EEDATH                       EQU     H'010E'
EEADRH                       EQU     H'010F'
 
EECON1                       EQU     H'018C'
EECON2                       EQU     H'018D'
 
;----- STATUS Bits --------------------------------------------------------
 
IRP                          EQU     H'0007'
RP1                          EQU     H'0006'
RP0                          EQU     H'0005'
NOT_TO                       EQU     H'0004'
NOT_PD                       EQU     H'0003'
Z                            EQU     H'0002'
DC                           EQU     H'0001'
C                            EQU     H'0000'
 
;----- INTCON Bits --------------------------------------------------------
 
GIE                          EQU     H'0007'
PEIE                         EQU     H'0006'
T0IE                         EQU     H'0005'
TMR0IE                       EQU     H'0005'
INTE                         EQU     H'0004'
RBIE                         EQU     H'0003'
T0IF                         EQU     H'0002'
TMR0IF                       EQU     H'0002'
INTF                         EQU     H'0001'
RBIF                         EQU     H'0000'
 
;----- PIR1 Bits ----------------------------------------------------------
 
ADIF                         EQU     H'0006'
RCIF                         EQU     H'0005'
TXIF                         EQU     H'0004'
SSPIF                        EQU     H'0003'
CCP1IF                       EQU     H'0002'
TMR2IF                       EQU     H'0001'
TMR1IF                       EQU     H'0000'
 
;----- PIR2 Bits ----------------------------------------------------------
 
CMIF                 EQU     H'0006'
EEIF                         EQU     H'0004'
BCLIF                        EQU     H'0003'
CCP2IF                       EQU     H'0000'
 
;----- T1CON Bits ---------------------------------------------------------
 
T1CKPS1                      EQU     H'0005'
T1CKPS0                      EQU     H'0004'
T1OSCEN                      EQU     H'0003'
NOT_T1SYNC                   EQU     H'0002'
T1INSYNC                     EQU     H'0002'    ; Backward compatibility only
T1SYNC                       EQU     H'0002'
TMR1CS                       EQU     H'0001'
TMR1ON                       EQU     H'0000'
 
;----- T2CON Bits ---------------------------------------------------------
 
TOUTPS3                      EQU     H'0006'
TOUTPS2                      EQU     H'0005'
TOUTPS1                      EQU     H'0004'
TOUTPS0                      EQU     H'0003'
TMR2ON                       EQU     H'0002'
T2CKPS1                      EQU     H'0001'
T2CKPS0                      EQU     H'0000'
 
;----- SSPCON Bits --------------------------------------------------------
 
WCOL                         EQU     H'0007'
SSPOV                        EQU     H'0006'
SSPEN                        EQU     H'0005'
CKP                          EQU     H'0004'
SSPM3                        EQU     H'0003'
SSPM2                        EQU     H'0002'
SSPM1                        EQU     H'0001'
SSPM0                        EQU     H'0000'
 
;----- CCP1CON Bits -------------------------------------------------------
 
CCP1X                        EQU     H'0005'
CCP1Y                        EQU     H'0004'
CCP1M3                       EQU     H'0003'
CCP1M2                       EQU     H'0002'
CCP1M1                       EQU     H'0001'
CCP1M0                       EQU     H'0000'
 
;----- RCSTA Bits ---------------------------------------------------------
 
SPEN                         EQU     H'0007'
RX9                          EQU     H'0006'
RC9                          EQU     H'0006'    ; Backward compatibility only
NOT_RC8                      EQU     H'0006'    ; Backward compatibility only
RC8_9                        EQU     H'0006'    ; Backward compatibility only
SREN                         EQU     H'0005'
CREN                         EQU     H'0004'
ADDEN                        EQU     H'0003'
FERR                         EQU     H'0002'
OERR                         EQU     H'0001'
RX9D                         EQU     H'0000'
RCD8                         EQU     H'0000'    ; Backward compatibility only
 
;----- CCP2CON Bits -------------------------------------------------------
 
CCP2X                        EQU     H'0005'
CCP2Y                        EQU     H'0004'
CCP2M3                       EQU     H'0003'
CCP2M2                       EQU     H'0002'
CCP2M1                       EQU     H'0001'
CCP2M0                       EQU     H'0000'
 
;----- ADCON0 Bits --------------------------------------------------------
 
ADCS1                        EQU     H'0007'
ADCS0                        EQU     H'0006'
CHS2                         EQU     H'0005'
CHS1                         EQU     H'0004'
CHS0                         EQU     H'0003'
GO                           EQU     H'0002'
NOT_DONE                     EQU     H'0002'
GO_DONE                      EQU     H'0002'
ADON                         EQU     H'0000'
 
;----- OPTION_REG Bits -----------------------------------------------------
 
NOT_RBPU                     EQU     H'0007'
INTEDG                       EQU     H'0006'
T0CS                         EQU     H'0005'
T0SE                         EQU     H'0004'
PSA                          EQU     H'0003'
PS2                          EQU     H'0002'
PS1                          EQU     H'0001'
PS0                          EQU     H'0000'
 
;----- PIE1 Bits ----------------------------------------------------------
 
ADIE                         EQU     H'0006'
RCIE                         EQU     H'0005'
TXIE                         EQU     H'0004'
SSPIE                        EQU     H'0003'
CCP1IE                       EQU     H'0002'
TMR2IE                       EQU     H'0001'
TMR1IE                       EQU     H'0000'
 
;----- PIE2 Bits ----------------------------------------------------------
 
CMIE                 EQU     H'0006'
EEIE                         EQU     H'0004'
BCLIE                        EQU     H'0003'
CCP2IE                       EQU     H'0000'
 
;----- PCON Bits ----------------------------------------------------------
 
NOT_POR                      EQU     H'0001'
NOT_BO                       EQU     H'0000'
NOT_BOR                      EQU     H'0000'
 
;----- SSPCON2 Bits --------------------------------------------------------
 
GCEN                         EQU     H'0007'
ACKSTAT                      EQU     H'0006'
ACKDT                        EQU     H'0005'
ACKEN                        EQU     H'0004'
RCEN                         EQU     H'0003'
PEN                          EQU     H'0002'
RSEN                         EQU     H'0001'   
SEN                          EQU     H'0000'   
 
;----- SSPSTAT Bits -------------------------------------------------------
 
SMP                          EQU     H'0007'
CKE                          EQU     H'0006'
D                            EQU     H'0005'
I2C_DATA                     EQU     H'0005'
NOT_A                        EQU     H'0005'
NOT_ADDRESS                  EQU     H'0005'
D_A                          EQU     H'0005'
DATA_ADDRESS                 EQU     H'0005'
P                            EQU     H'0004'
I2C_STOP                     EQU     H'0004'
S                            EQU     H'0003'
I2C_START                    EQU     H'0003'
R                            EQU     H'0002'
I2C_READ                     EQU     H'0002'
NOT_W                        EQU     H'0002'
NOT_WRITE                    EQU     H'0002'
R_W                          EQU     H'0002'
READ_WRITE                   EQU     H'0002'
UA                           EQU     H'0001'
BF                           EQU     H'0000'
 
;----- TXSTA Bits ---------------------------------------------------------
 
CSRC                         EQU     H'0007'
TX9                          EQU     H'0006'
NOT_TX8                      EQU     H'0006'    ; Backward compatibility only
TX8_9                        EQU     H'0006'    ; Backward compatibility only
TXEN                         EQU     H'0005'
SYNC                         EQU     H'0004'
BRGH                         EQU     H'0002'
TRMT                         EQU     H'0001'
TX9D                         EQU     H'0000'
TXD8                         EQU     H'0000'    ; Backward compatibility only
 
 
;----- CMCON Bits ---------------------------------------------------------
C2OUT                        EQU     H'0007'
C1OUT                        EQU     H'0006'
C2INV                        EQU     H'0005'
C1INV                        EQU     H'0004'
CIS                          EQU     H'0003'
CM2                          EQU     H'0002'
CM1                          EQU     H'0001'
CM0                          EQU     H'0000'
 
;----- CVRCON Bits --------------------------------------------------------
CVREN                        EQU     H'0007'
CVROE                        EQU     H'0006'
CVRR                         EQU     H'0005'
CVR3                         EQU     H'0003'
CVR2                         EQU     H'0002'
CVR1                         EQU     H'0001'
CVR0                         EQU     H'0000'
 
;----- ADCON1 Bits --------------------------------------------------------
 
ADFM                         EQU     H'0007'
ADCS2                        EQU     H'0006'
PCFG3                        EQU     H'0003'
PCFG2                        EQU     H'0002'
PCFG1                        EQU     H'0001'
PCFG0                        EQU     H'0000'
 
;----- EECON1 Bits --------------------------------------------------------
 
EEPGD                        EQU     H'0007'
WRERR                        EQU     H'0003'
WREN                         EQU     H'0002'
WR                           EQU     H'0001'
RD                           EQU     H'0000'
 
;==========================================================================
;
;       RAM Definition
;
;==========================================================================
 
        __MAXRAM H'1FF'
        __BADRAM H'8F'-H'90', H'95'-H'97', H'9A'-H'9B'
        __BADRAM H'105', H'107'-H'109'
        __BADRAM H'185', H'187'-H'189', H'18E'-H'18F'
 
;==========================================================================
;
;       Configuration Bits
;
;==========================================================================
 
_CP_ALL                      EQU     H'1FFF'
_CP_OFF                      EQU     H'3FFF'
_DEBUG_OFF                   EQU     H'3FFF'
_DEBUG_ON                    EQU     H'37FF'
_WRT_OFF                     EQU     H'3FFF'    ; No prog memmory write protection
_WRT_256                     EQU     H'3DFF'    ; First 256 prog memmory write protected
_WRT_1FOURTH                 EQU     H'3BFF'    ; First quarter prog memmory write protected
_WRT_HALF                    EQU     H'39FF'    ; First half memmory write protected
_CPD_OFF                     EQU     H'3FFF'
_CPD_ON                      EQU     H'3EFF'
_LVP_ON                      EQU     H'3FFF'
_LVP_OFF                     EQU     H'3F7F'
_BODEN_ON                    EQU     H'3FFF'
_BODEN_OFF                   EQU     H'3FBF'
_PWRTE_OFF                   EQU     H'3FFF'
_PWRTE_ON                    EQU     H'3FF7'
_WDT_ON                      EQU     H'3FFF'
_WDT_OFF                     EQU     H'3FFB'
_RC_OSC                      EQU     H'3FFF'
_HS_OSC                      EQU     H'3FFE'
_XT_OSC                      EQU     H'3FFD'
_LP_OSC                      EQU     H'3FFC'
 
; Конфигурация ------------------------------------------------------------------------------------
 
    __config _CP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC & _LVP_OFF
    
;------------------------------------------------------------------
jz  macro   LBL ;переход, если результат равен нулю
    btfsc   STATUS,Z
    goto    LBL
    endm
jnz macro   LBL ;переход, если результат не равен нулю
    btfss   STATUS,Z
    goto    LBL
    endm
bank0   macro
        bcf     STATUS,RP0
    bcf STATUS,RP1
        endm
bank1   macro
        bsf     STATUS,RP0
    bcf STATUS,RP1
        endm
bank2   macro
        bcf     STATUS,RP0
    bsf STATUS,RP1
        endm
bank3   macro
        bsf     STATUS,RP0
    bsf STATUS,RP1
        endm
let macro   aa,bb   ;присвоить регистру aa значение bb (через W)
    movlw   bb
    movwf   aa
    endm
;------------------------------------------------------------------
    cblock  10
w_temp,status_temp,pclath_temp,fsr_temp
zzh,zzl,ob1,tmr,vak,ob,st,zl,str,rxx
    endc
;------------------------------------------------------------------
    org 0
    goto    start
;------------------------------------------------------------------
        org     4
    btfsc   INTCON,T0IF
    goto    t0
    btfsc   INTCON,INTF
    goto    ign
;------------------------------------------------------------------ 
t0  incf    ob1,F
    movlw   2
    xorwf   ob1,W
    jnz t1
    decf    ob1,F
    movlw   0ff
    movwf   TMR0
t1  bcf INTCON,T0IF
    retfie
;------------------------------------------------------------------ 
ign movfw   TMR0
    movwf   tmr
    clrf    TMR0
 
    btfss   INTCON,T0IF ;проверяем флаг TMR0
    goto    ign1        ;не установлен - по метке
 
    bcf INTCON,T0IF ;установлен - сбрасываем,
    movf    tmr,F       ;проверяем, что записалось в tmr
    jnz ign1        ;если не 0 - идем по метке
    movlw   1       ;иначе ob1=1
    movwf   ob1
 
ign1    call    ob_min      ;меряем обороты
    movwf   ob
;------------------------------------------------------------   
;вычисляем расход воздуха, в vak записываем старший адрес нужной
;таблицы опережения (0ah - 019h) 10 - 25
    btfsc   ADCON0,GO
    goto    kl0
    movfw   ADRESH
    bsf ADCON0,GO
    call    dad
    movwf   vak
;------------------------------------------------------------
kl0 btfsc   PORTB,7     ;концевик разомкнут?
    goto    kl3     ;да - по метке
 
kl1 movlw   d'21'       ;выше 2100 ? 
    subwf   ob,W
    btfsc   STATUS,C
    bcf PORTC,5     ;выключаем клапан
    
kl2 movlw   d'19'       ;ниже 1900 ?
    subwf   ob,W
    btfss   STATUS,C    
kl3 bsf PORTC,5     ;включаем клапан
;------------------------------------------------------------
tm0 movf    ob,F        ;обороты меньше 600?
    jnz tm1     ;нет - по метке
    btfsc   str,0       ;флаг стартера сброшен?
    goto    tm01        ;нет - по метке
    let ob,6        ;да - уст. обороты 600
    goto    tm11        ;и идем дальше
tm01    clrf    st      ;обнуляем счетчик об. стартера
    let zzh,03      ;ставим максимальную задержку
    let zzl,0ff
    call    zader
    bsf PORTC,6     ;импульс зажигания
    movlw   20
    movwf   tmr 
    call    zadimp
    bcf PORTC,6
    movlw   20
    movwf   tmr 
    call    zadimp
    bsf PORTC,6     ;импульс зажигания
    movlw   20
    movwf   tmr 
    call    zadimp
    bcf PORTC,6
    movlw   20
    movwf   tmr 
    call    zadimp
    bsf PORTC,6     ;импульс зажигания
    movlw   20
    movwf   tmr 
    call    zadimp
    bcf PORTC,6
    movlw   20
    movwf   tmr 
    call    zadimp
    bsf PORTC,6     ;импульс зажигания
    movlw   20
    movwf   tmr 
    call    zadimp
    bcf PORTC,6
    movlw   20
    movwf   tmr 
    call    zadimp
    bsf PORTC,6     ;импульс зажигания
    movlw   20
    movwf   tmr 
    call    zadimp
    bcf PORTC,6
    clrf    ob1
    bcf     INTCON,INTF     ;сброс флага прерывания
    retfie                  ;выходим
;------------------------------------------------------------
tm1 incf    st,F
    btfss   st,2
    goto    tm11
    bcf PORTC,4     ;выкл. стартер
    bcf str,0       ;сброс флага стартера
;-----------------------
tm11    btfss   PORTB,7     ;концевик замкнут ?
    goto    xx1     ;да - на регулировку хх
tm  movlw   1
    movwf   zl
;-----------------------
    movfw   ob
    call    op_z        ;вычисляем задержку зажигания
tm2 call    zader       ;задержка зажигания
    bsf PORTC,6     ;импульс зажигания
    btfss   ob1,0
    goto    tm3
    movlw   0ff
    movwf   tmr 
tm3 call    zadimp      ;равный трети паузы
    bcf PORTC,6
    clrf    ob1
    bcf     INTCON,INTF     ;сброс флага прерывания
    retfie                  ;выходим
;------------------------------------------------------------
xx1 movlw   d'15'       ;выше 1500 ?
    subwf   ob,W
    btfsc   STATUS,C
    bcf     rxx,0       ;сбрасываем флаг хх
    movlw   d'14'       ;ниже 1400 ?
    subwf   ob,W
    btfss   STATUS,C
    bsf rxx,0       ;устанавливаем флаг хх
 
    btfss   rxx,0       ;флаг хх установлен?
    goto    tm      ;нет - по метке
 
    movlw   d'8'        ;выше 800 ? 
    subwf   ob,W
    btfss   STATUS,C
    goto    xx2     ;нет - по метке
    incf    zl,F        ;да - уменьшаем опережение
    btfsc   STATUS,Z
    decf    zl,F
    goto    xx3
xx2 decf    zl,F        ;увеличиваем опережение
    btfsc   STATUS,Z
    incf    zl,F
xx3 movlw   1
    movwf   zzh 
    movfw   zl
    movwf   zzl
    goto    tm2     
;------------------------------------------------------------------
;           Программа
;------------------------------------------------------------------
start   bank1
    let TRISA,b'00000001'
    let TRISB,b'10000001'
    let TRISC,b'00000000'
        let OPTION_REG,b'10000110'
    let ADCON1,b'00001110'
    bank0
    let ADCON0,b'00000001'
    bsf     INTCON,INTE     ;разрешение прерывания от INT
    bsf INTCON,T0IE
        bsf     INTCON,GIE      ;разрешаем прерывания
    let vak,d'10'   ;расход - минимальный
    let zl,1        ;хх - на максимум
    bsf str,0       ;уст. флаг стартера
    let PORTC,b'00110000' ;клапан и стартер вкл.
    clrf    ob1
 
m1  goto    m1
;------------------------------------------------------------------
;           ПОДПРОГРАММЫ
;------------------------------------------------------------------
ob_min  ;перевод tmr в обороты
    ;вход: ob1:tmr
    ;выход: W
    movfw   ob1
    bank2
    movwf   EEADRH
    movlw   8
    addwf   EEADRH,F
    bank0
    movfw   tmr
    bank2
    movwf   EEADR
    
    bank3
    bsf EECON1,EEPGD
    bsf EECON1,RD
    nop
    nop
    bank2
    movfw   EEDATA
    bank0
    return
;---------------------------------------------------------
op_z    ;перевод оборотов в задержку зажигания
    ;вход: vak:W
    ;выход: zzh:zzl
    bank2
    movwf   EEADR
    bank0
    movfw   vak
    bank2
    movwf   EEADRH
    
    bank3
    bsf EECON1,EEPGD
    bsf EECON1,RD
    nop
    nop
    bank2
    movfw   EEDATA
    bank0
    movwf   zzl
    bank2
    movfw   EEDATH
    bank0
    movwf   zzh
    return
;------------------------------------------------------------------
zader   incf    zzh,F       ;задержка зажигания 16 мкс * zzh:zzl
zader1  nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    decfsz  zzl,F
    goto    zader1
    decfsz  zzh,F
    goto    zader1
    return
 
zadimp  nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    decfsz  tmr,F
    goto    zadimp
    return
;-------------------------------------------------------------------------------------------------------------
    org 1fc
dad clrf    PCLATH
    incf    PCLATH,F
    incf    PCLATH,F
    addwf   PCL,F
 
    dt  d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10'
    dt  d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10'
    dt  d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10'
    dt  d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10'
 
    dt  d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11'
    dt  d'12',d'12',d'12',d'12',d'12',d'12',d'12',d'12',d'12',d'12',d'12',d'12'
    dt  d'13',d'13',d'13',d'13',d'13',d'13',d'13',d'13',d'13',d'13',d'13',d'13'
    dt  d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'14'
    dt  d'15',d'15',d'15',d'15',d'15',d'15',d'15',d'15',d'15',d'15',d'15',d'15'
    dt  d'16',d'16',d'16',d'16',d'16',d'16',d'16',d'16',d'16',d'16',d'16',d'16'
    dt  d'17',d'17',d'17',d'17',d'17',d'17',d'17',d'17',d'17',d'17',d'17',d'17'
    dt  d'18',d'18',d'18',d'18',d'18',d'18',d'18',d'18',d'18',d'18',d'18',d'18'
    dt  d'19',d'19',d'19',d'19',d'19',d'19',d'19',d'19',d'19',d'19',d'19',d'19'
    dt  d'20',d'20',d'20',d'20',d'20',d'20',d'20',d'20',d'20',d'20',d'20',d'20'
    dt  d'21',d'21',d'21',d'21',d'21',d'21',d'21',d'21',d'21',d'21',d'21',d'21'
    dt  d'22',d'22',d'22',d'22',d'22',d'22',d'22',d'22',d'22',d'22',d'22',d'22'
    dt  d'23',d'23',d'23',d'23',d'23',d'23',d'23',d'23',d'23',d'23',d'23',d'23'
    dt  d'24',d'24',d'24',d'24',d'24',d'24',d'24',d'24',d'24',d'24',d'24',d'24'
 
    dt  d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25'
    dt  d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25',d'25'
    
    org 300
    dt  0ff
;-------------------------------------------------------------------------------------------------------------
    org 800     ;обороты дв./100
    dw  d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50'
    dw  d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50'
    dw  d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'50',d'49'
    dw  d'48',d'47',d'46',d'45',d'44',d'43',d'43',d'42',d'41',d'40',d'40',d'39',d'38',d'38',d'37',d'37'
    dw  d'36',d'36',d'35',d'34',d'34',d'33',d'33',d'33',d'32',d'32',d'31',d'31',d'30',d'30',d'30',d'29'
    dw  d'29',d'29',d'28',d'28',d'28',d'27',d'27',d'27',d'26',d'26',d'26',d'25',d'25',d'25',d'25',d'24'
    dw  d'24',d'24',d'24',d'23',d'23',d'23',d'23',d'23',d'22',d'22',d'22',d'22',d'22',d'21',d'21',d'21'
    dw  d'21',d'21',d'20',d'20',d'20',d'20',d'20',d'20',d'19',d'19',d'19',d'19',d'19',d'19',d'18',d'18'
    dw  d'18',d'18',d'18',d'18',d'18',d'17',d'17',d'17',d'17',d'17',d'17',d'17',d'17',d'17',d'16',d'16'
    dw  d'16',d'16',d'16',d'16',d'16',d'16',d'16',d'15',d'15',d'15',d'15',d'15',d'15',d'15',d'15',d'15'
    dw  d'15',d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'14',d'13',d'13',d'13'
    dw  d'13',d'13',d'13',d'13',d'13',d'13',d'13',d'13',d'13',d'13',d'13',d'12',d'12',d'12',d'12',d'12'
    dw  d'12',d'12',d'12',d'12',d'12',d'12',d'12',d'12',d'12',d'12',d'12',d'11',d'11',d'11',d'11',d'11'
    dw  d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'11',d'10'
    dw  d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10',d'10'
    dw  d'10',d'10',d'10',d'10',d'10',d'10',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9'
    dw  d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9',d'9'
    dw  d'9',d'9',d'9',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8'
    dw  d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8'
    dw  d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'8',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7'
    dw  d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7'
    dw  d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7'
    dw  d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'7',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6'
    dw  d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6'
    dw  d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6'
    dw  d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6'
    dw  d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6'
    dw  d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6'
    dw  d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6'
    dw  d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6'
    dw  d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6'
    dw  d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'6',d'0'
;------------------------------------------------------------------
    ;maxungle = 40.5 
    org 0a06
    dw  d'515',d'422',d'348',d'292',d'248',d'209',d'177',d'149',d'126',d'105',d'88',d'74',d'64',d'55',d'48'
    dw  d'42',d'38',d'33',d'30',d'28',d'26',d'24',d'22',d'21',d'19',d'18',d'17',d'16',d'15',d'15'
    dw  d'14',d'13',d'12',d'12',d'11',d'10',d'9',d'9',d'8',d'7',d'7',d'7',d'6',d'6',d'6'
    org 0b06
    dw  d'489',d'394',d'322',d'264',d'217',d'184',d'154',d'127',d'104',d'88',d'73',d'62',d'52',d'44',d'38'
    dw  d'34',d'31',d'28',d'26',d'24',d'22',d'20',d'19',d'18',d'17',d'16',d'16',d'15',d'14',d'13'
    dw  d'12',d'12',d'11',d'10',d'9',d'9',d'8',d'7',d'7',d'6',d'6',d'5',d'5',d'5',d'4'
    org 0c06
    dw  d'446',d'356',d'294',d'246',d'206',d'171',d'143',d'120',d'100',d'83',d'68',d'56',d'46',d'38',d'33'
    dw  d'30',d'27',d'24',d'22',d'21',d'19',d'18',d'16',d'15',d'14',d'13',d'12',d'12',d'11',d'11'
    dw  d'10',d'10',d'9',d'9',d'8',d'7',d'7',d'6',d'5',d'5',d'4',d'4',d'3',d'3',d'3'
    org 0d06
    dw  d'428',d'342',d'285',d'242',d'206',d'174',d'146',d'119',d'97',d'81',d'67',d'55',d'44',d'34',d'28'
    dw  d'25',d'22',d'19',d'18',d'17',d'16',d'16',d'15',d'13',d'12',d'12',d'11',d'10',d'9',d'9'
    dw  d'8',d'7',d'7',d'6',d'6',d'5',d'5',d'4',d'4',d'4',d'3',d'3',d'2',d'2',d'2'
    org 0e06
    dw  d'437',d'349',d'292',d'248',d'212',d'182',d'154',d'127',d'104',d'86',d'71',d'58',d'48',d'39',d'32'
    dw  d'28',d'25',d'22',d'20',d'19',d'18',d'18',d'16',d'15',d'13',d'12',d'11',d'10',d'9',d'9'
    dw  d'8',d'7',d'7',d'6',d'5',d'5',d'4',d'4',d'3',d'3',d'2',d'2',d'1',d'1',d'1'
    org 0f06
    dw  d'454',d'358',d'303',d'257',d'217',d'186',d'159',d'133',d'111',d'95',d'80',d'67',d'57',d'47',d'41'
    dw  d'37',d'34',d'31',d'29',d'27',d'25',d'23',d'22',d'20',d'18',d'17',d'16',d'15',d'14',d'13'
    dw  d'12',d'12',d'11',d'10',d'9',d'8',d'7',d'6',d'6',d'5',d'4',d'4',d'3',d'3',d'3'
    org 1006
    dw  d'507',d'396',d'331',d'280',d'238',d'202',d'172',d'145',d'123',d'107',d'92',d'80',d'70',d'60',d'53'
    dw  d'48',d'44',d'40',d'37',d'35',d'33',d'31',d'29',d'27',d'25',d'24',d'22',d'21',d'19',d'18'
    dw  d'17',d'16',d'15',d'14',d'13',d'12',d'12',d'11',d'10',d'10',d'9',d'8',d'7',d'6',d'6'
    org 1106
    dw  d'559',d'441',d'370',d'315',d'269',d'228',d'195',d'168',d'145',d'127',d'112',d'98',d'84',d'72',d'63'
    dw  d'57',d'52',d'47',d'44',d'41',d'39',d'37',d'35',d'33',d'31',d'29',d'27',d'25',d'24',d'23'
    dw  d'22',d'20',d'19',d'18',d'17',d'16',d'15',d'15',d'14',d'13',d'12',d'11',d'11',d'10',d'9'
    org 1206
    dw  d'593',d'483',d'409',d'352',d'305',d'264',d'229',d'197',d'171',d'149',d'129',d'112',d'97',d'83',d'74'
    dw  d'67',d'61',d'56',d'53',d'50',d'47',d'45',d'42',d'40',d'38',d'35',d'34',d'32',d'30',d'28'
    dw  d'26',d'25',d'23',d'22',d'21',d'20',d'19',d'18',d'17',d'16',d'16',d'15',d'14',d'14',d'13'
    org 1306
    dw  d'611',d'516',d'441',d'381',d'332',d'291',d'255',d'221',d'193',d'168',d'146',d'128',d'112',d'97',d'86'
    dw  d'78',d'71',d'65',d'61',d'58',d'55',d'52',d'50',d'47',d'45',d'42',d'40',d'38',d'36',d'35'
    dw  d'33',d'32',d'30',d'29',d'28',d'26',d'25',d'24',d'23',d'22',d'21',d'21',d'20',d'19',d'19'
    org 1406
    dw  d'628',d'538',d'461',d'396',d'342',d'300',d'265',d'237',d'212',d'187',d'165',d'146',d'129',d'114',d'102'
    dw  d'92',d'84',d'76',d'72',d'67',d'64',d'60',d'57',d'55',d'52',d'50',d'48',d'46',d'44',d'43'
    dw  d'41',d'40',d'38',d'37',d'35',d'34',d'33',d'32',d'30',d'29',d'28',d'27',d'27',d'26',d'25'
    org 1506
    dw  d'645',d'546',d'463',d'401',d'353',d'315',d'283',d'253',d'227',d'204',d'184',d'165',d'148',d'132',d'120'
    dw  d'110',d'101',d'92',d'86',d'80',d'75',d'70',d'66',d'63',d'60',d'57',d'55',d'53',d'51',d'49'
    dw  d'47',d'45',d'44',d'42',d'41',d'40',d'38',d'37',d'36',d'35',d'34',d'33',d'32',d'32',d'31'
    org 1606
    dw  d'663',d'555',d'474',d'412',d'364',d'325',d'291',d'261',d'235',d'214',d'195',d'178',d'161',d'146',d'133'
    dw  d'122',d'112',d'103',d'96',d'90',d'84',d'78',d'74',d'70',d'67',d'64',d'61',d'59',d'56',d'54'
    dw  d'52',d'50',d'48',d'46',d'45',d'43',d'41',d'40',d'39',d'37',d'36',d'35',d'35',d'34',d'33'
    org 1706
    dw  d'663',d'561',d'476',d'417',d'373',d'328',d'293',d'266',d'243',d'221',d'202',d'184',d'168',d'153',d'141'
    dw  d'130',d'119',d'110',d'103',d'96',d'90',d'84',d'79',d'74',d'69',d'65',d'61',d'59',d'56',d'54'
    dw  d'52',d'50',d'48',d'46',d'45',d'43',d'41',d'40',d'39',d'37',d'36',d'35',d'35',d'34',d'33'
    org 1806
    dw  d'663',d'561',d'485',d'424',d'374',d'331',d'297',d'270',d'247',d'226',d'208',d'190',d'174',d'159',d'146'
    dw  d'136',d'126',d'117',d'109',d'101',d'94',d'88',d'82',d'77',d'73',d'69',d'65',d'62',d'59',d'56'
    dw  d'54',d'52',d'49',d'48',d'46',d'45',d'43',d'42',d'41',d'40',d'39',d'38',d'37',d'36',d'35'
    org 1906
    dw  d'663',d'561',d'485',d'426',d'379',d'336',d'301',d'274',d'250',d'228',d'208',d'191',d'175',d'161',d'149'
    dw  d'138',d'128',d'119',d'111',d'103',d'96',d'90',d'84',d'80',d'76',d'72',d'68',d'65',d'62',d'59'
    dw  d'57',d'54',d'52',d'50',d'49',d'47',d'46',d'44',d'43',d'42',d'41',d'40',d'39',d'38',d'37'
;------------------------------------------------------------------
    end
Вложения
Тип файла: pdf pic16f876a-i_sp.pdf (4.27 Мб, 49 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2014, 20:13
Ответы с готовыми решениями:

Адаптация цифровой шкалы А. Денисова RA3RBE к PIC16F628A, PIC16F876A
Как адаптировать цифровую шкалу А. Денисова RA3RBE к контроллерам PIC16F628A, PIC16F876A (с доработкой схемы ) ? Процессоры ...

Самодельная система зажигания
Всем привет, я тут у вас первый раз. Задумываюсь над тем, чтобы сделать самодельную систему зажигания для двигателя своей машины. ...

Самодельная система электронного зажигания
Нашел сегодня ночью. Может кому будет интересно. http://secu-3.org/ Система электронного зажигания SECU-3 полностью открытый проект,...

79
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
13.02.2014, 16:15
Студворк — интернет-сервис помощи студентам
Размещение переменных смогу только дома проверить..
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
14.02.2014, 09:25
На данный момент пришёл к выводу что либо
А. Я чего то глобально не догоняю
Б. Программа имеет грубую ошибку
Итак.
1. Расчёты строятся на измерении интервалов между двумя фронтами при помощи таймера с предделителем 128
2. На предделитель тактовая частота поступает с CLKO (= FOSC/4) т.е. итого мы имеем предделение от тактовой частоты 512. Один оборот двигателя это 2 отсечки на искру. При замеряемых оборотах от 600 до 5000 об.мин это от 390 до 46 тиков
3. Поскольку счётчик таймера 8 разрядный, имеется обработка прерывания переполнения. Переполнения больше одного не учитываются. Флагом переполнения в программе служит переменная ob1
4. Обороты находятся таблично где H_adr - ob1+8 т.е. принимает значение 8 или 9, а L_adr - счётчик тиков таймера и может принимать значение 0-255. Т.е. диапазон адресов таблицы 800h-9FFh. Расположена по адресу org 800 значение таблицы размером в байт при выходе из ПП расчёта оборотов через W передаётся в переменную ob и в дальнейшем используется для расчётов по задержке зажигания.

А теперь собственно то, что меня смущает. В виду того что счётчик таймера может принять любое значение от 0 до 255 мы имеем случайным образом выбираемую ячейку с шагом в 1 байт А таблица оборотов имеет размерность в одно слово DW где значение оборотов занимает только младший байт Т.е. с вероятностью 50% таймер будет выдавать нам адрес где число оборотов равно нулю. Что в дальнейшем приведёт к ошибке в расчётах угла опережения.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
14.02.2014, 14:09
Цитата Сообщение от Полный 30h Посмотреть сообщение
3. Поскольку счётчик таймера 8 разрядный, имеется обработка прерывания переполнения. Переполнения больше одного не учитываются. Флагом переполнения в программе служит переменная ob1
Переменная ob1 - не совсем флаг, лучще сказать расширение разрядности счетчика таймера 0.
Цитата Сообщение от Полный 30h Посмотреть сообщение
А теперь собственно то, что меня смущает. В виду того что счётчик таймера может принять любое значение от 0 до 255 мы имеем случайным образом выбираемую ячейку с шагом в 1 байт А таблица оборотов имеет размерность в одно слово DW где значение оборотов занимает только младший байт Т.е. с вероятностью 50% таймер будет выдавать нам адрес где число оборотов равно нулю. Что в дальнейшем приведёт к ошибке в расчётах угла опережения.
Там таблица первая правильная и занимает ровно 256 байт.
1
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
14.02.2014, 14:25
Цитата Сообщение от korsaj Посмотреть сообщение
Переменная ob1 - не совсем флаг, лучще сказать расширение разрядности счетчика таймера 0.
Ну тут наверное да, твоё определение правильное. Ассоциировал с флагом я её лишь потому что эта переменная (если я правильно разобрал алгоритм) может принимать только значение 0 и значение 1. Правда в прерывании по переполнению она может стать двойкой, но по выходу из оного всё равно минусуется до единицы.
Цитата Сообщение от korsaj Посмотреть сообщение
Там таблица первая правильная и занимает ровно 256 байт.
Таблица оборотов это вторая таблица
org 800 ;обороты дв./100
dw d'50',d'50',d'50',d'50',d'50',d'50',d'50 ',d'50',d'50',d'50',d'50',d'50',d'50',d' 50',d'50',d'50'
dw d'50',d'50',d'50',d'50', и так далее
размерностью элемента два байта, старший всегда ноль. А адресация при выборке из неё побайтовая.
Поправь меня где я не прав.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
14.02.2014, 17:36
Точно, вторая таблица отвечает за обороты. НО алгоритм считывания ее уже другой. Используется механизм считывания памяти программ. Адресуется память двумя регистрами EEADRH:EEADRH, а считывается регитрами DATAH: DATAL. Используется только младший байт. Адрес сфораирован двумя регистрами ob1:tmr = 512 байт.
1
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
14.02.2014, 22:21
korsaj, да, но после считывания через W передаётся 1 байт в переменную ob. Ведь что W что ob имеют размер в один байт, так ещё и шаг счётчика (таймера) тоже побайтный.

Т.е. имея массив (привожу кусок из хекса)

00320032003200320032003200320032
00320032003200320032003200320032
00320032003200320032003200320032
00320032003200320032003200320032

мы с вероятностью 50% зацепим байт с нулём какой бы временной отрезок не натикало.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
14.02.2014, 23:11
Вот эта подпрограмма
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ob_min  ;перевод tmr в обороты
    ;вход: ob1:tmr
    ;выход: W
    movfw   ob1
    bank2
    movwf   EEADRH
    movlw   8
    addwf   EEADRH,F
    bank0
    movfw   tmr
    bank2
    movwf   EEADR
    
    bank3
    bsf EECON1,EEPGD
    bsf EECON1,RD
    nop
    nop
    bank2
    movfw   EEDATA
    bank0
    return
считывает два байта, см пост #65 или даташит стр 36, EXAMPLE 3-3: FLASH PROGRAM READ
1
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
18.02.2014, 14:59
Всё, подвязываю с ковырянием данного алгоритма. Сегодня попробовал исходник в протеусе с концевиком ХХ погонять, на предмет принудительного ХХ, так он мне по нему опережение сдвинул. То ли в прошивке всё же что то не то, то ли в протеусе, то ли я не догоняю чего то. Разбираться дальше буду, но весьма неспешно.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
18.02.2014, 18:16
По идее он и должен сдвигать опережение. Какие обороты были на входе?
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
18.02.2014, 21:47
Цитата Сообщение от korsaj Посмотреть сообщение
По идее он и должен сдвигать опережение. Какие обороты были на входе?
Он сдвигал не по оборотам ,а по концевику. По концевку не должен. Система ПХХ не имеет обратной связи на систему зажигание, она только по оборотам клапаном ХХ клацает. А у меня присутствовал при симуляции сдвиг. Такого быть не должно.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
19.02.2014, 12:45
Мк узнает о режиме холостых оборотов только по концевику. Если заслонка карбюратора опущена, значит нужно поддерживать ХХ. Вот в этот момент происходит регулировка угла для поддерживания заданных оборотов.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
19.02.2014, 14:01
korsaj, о холостых оборотах МК узнаёт из времени следования импульсов. Концевик же сигнал к тому что педаль газа отпущена. И если при этом обороты выше определённого порога происходит отсечка подачи топлива в систему ХХ стоящим на ней клапаном. Но опять же повторюсь, это не повод менять УОЗ. УОЗ меняется по двум параметрам 1. обороты двигателя. 2 разряжение за дроссельной заслонкой.
0
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 13
19.02.2014, 15:54  [ТС]
Цитата Сообщение от Полный 30h Посмотреть сообщение
korsaj, о холостых оборотах МК узнаёт из времени следования импульсов. Концевик же сигнал к тому что педаль газа отпущена. И если при этом обороты выше определённого порога происходит отсечка подачи топлива в систему ХХ стоящим на ней клапаном. Но опять же повторюсь, это не повод менять УОЗ. УОЗ меняется по двум параметрам 1. обороты двигателя. 2 разряжение за дроссельной заслонкой.
Я думаю что korsaj прав, ведь в описании написано "Поддерживает обороты ХХ на уровне 800 об/мин" а как он их может поддерживать если нет привода на дроссель? - только регулировкой УОЗ, сам замечал не раз что когда крутишь трамблер в какой то точке обороты повышаются, а в других положениях уменьшаются... вот как то так
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
19.02.2014, 16:15
Цитата Сообщение от jek666 Посмотреть сообщение
Я думаю что korsaj прав, ведь в описании написано "Поддерживает обороты ХХ на уровне 800 об/мин" а как он их может поддерживать если нет привода на дроссель? - только регулировкой УОЗ, сам замечал не раз что когда крутишь трамблер в какой то точке обороты повышаются, а в других положениях уменьшаются... вот как то так
ХХ поддерживается топливной системой, УОЗ подстраивается исходя из оборотов двигателя. То что они меняются от поворота трамблёра это естественно, ты уводишь УОЗ из оптимальной зоны для ХХ и КПД движка падает, а с ним и обороты. А клапан ХХ служит для грубой отсечки топлива по системе ХХ для двух случаев 1. после выключения зажигания. для исключения работы двигателя в калильном режиме. 2. при торможении двигателем. Т.е. когда мы тормозим двигателем наш двигатель по сути заглушен, искра идёт, топливо нет до 1500 (цифра приблизительно) об.мин. т.е. что то там крутить в зажигании смысла нет. Однако оно уходит, при том здорово. Опять же от вакуума оно почему то работаетна три фиксированных позиции, хотя должно смещатся плавно, по мере поворота потенциометра. Т.е. на стадии имитации идёт какая то хрень, быть может это издержки симуляции протеусом. А алгоритм я не могу востановить, опыта программирования PIC у меня нет. Вот и отписался чтоб в мой адрес надежд не питал. Прошивку я не брошу, буду в учебных целях по мере сил раскручивать для себя. Но какие то сроки называть не берусь.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
19.02.2014, 17:34
Цитата Сообщение от Полный 30h Посмотреть сообщение
korsaj, о холостых оборотах МК узнаёт из времени следования импульсов...
Из времени следования импульсов узнает об оборотах двигателя, а по состоянию концевого о режиме работы двигателя (ХХ или мощьностной режим).
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
19.02.2014, 19:39
Цитата Сообщение от korsaj Посмотреть сообщение
Из времени следования импульсов узнает об оборотах двигателя, а по состоянию концевого о режиме работы двигателя (ХХ или мощьностной режим).
Для трамблёрных систем зажигания нет отдельно выделенного режима ХХ.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
19.02.2014, 23:34
А тут сделали.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
20.02.2014, 00:08
Цитата Сообщение от korsaj Посмотреть сообщение
А тут сделали.
Поскольку я в своё время изучал устройство автомобиля и сносно разбираюсь в его узлах и агрегатах, то сбольшим сомнением отношусь к подобного рода ноу хау. Я мог бы понять пьезодатчик имитирующий датчик детонации по которому адаптируются на горючку, мог бы понять коррекцию по температуре. но подобного рода фенечки это что то сродни завихрителям воздуха под карб. Одно время модными были. Закрытую заслонку обслуживает вакуумный корректор ОУЗ. А всче эти штучки дрючки с концевиками от лукавого.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
20.02.2014, 14:07
Абсолютно согласен. ХХ должны быть отрегулированы один раз при настройке карбюратора и резкое изменение их в момент эксплуатации свидетельствует о неисправности.
1
Невский 619
12.05.2014, 02:14
Цитата Сообщение от korsaj Посмотреть сообщение
ХХ должны быть отрегулированы один раз при настройке карбюратора
Неправильно. При правильной настройке зажигания и карбюратора, если увеличить УОЗ то обороты холостого хода поднимутся. В зависимости от модели двигателя может быть и +200 и +300.
чего вполне достаточно при условии закнутого концевика ХХ и оборотов КВ около 800.

Баг( или не баг) был в работе ДАД, сопровождалось пропуском искры.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.05.2014, 02:14

Система зажигания.
Сиерра 1987г., 2л (не факт - машину видно сильно перебирали), электронное зажигание. Нет искры. На коммутаторе (Motorcraft...

Система зажигания топлива
Встал у меня такой вопрос. Как сделать систему зажигания паров топлива. Мне например показалось что есть разница между детонацией и...

Переделка зажигания.
Кто подскажет как изменить код программы чтобы фуоз формировал опережение до 15 000 оборотов? Примерный код...сайт автора уже и не помню..

Балластный резистор зажигания.
На схеме Ford Sierra указан этот девайс.( Что за оно? Где оно находится, как выглядит?

Опережение зажигания на PIC
Помогите понять принцип. Задача простая сделать опережение зажигания для двигателя от 5 до 30 градусов в зависимости от оборотов от 1000 до...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru