PIC 16F84A ZAMANLAMA

ceceli79

Üye
Katılım
7 Şub 2010
Mesajlar
21
Puanları
1
devremin bir saatlik bir gecıkme yapmasını istiyorum herşey tamam ama gecıkme bölümü sadece saniyelerle oluyor yani 1 saat olması için 2160 adet call gecıkme cağırmam gerek bu da cok satır cok işlem demek

1 saatlık gecıkme icin bunu kullanıyorum

SAAT
MOVLW D'27'
MOVWF ISLEM
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP

GEL
DECFSZ ISLEM,F
GOTO GEL

bu tek call saat komutunda 27 saniyelik bir gecıkme yapıyor. 1 saat olması için
134000 kusur call saat cağırmam gerek bu işlemcimi çok yormazmı
daha kullanışlı bir iki satırlık asm kodu yokmu
------------------------------------------
GECIKME
MOVLW D'45'
MOVWF SAYAC1
DON1
MOVLW D'35'
MOVWF SAYAC2
DON2
MOVLW D'20'
MOVWF SAYAC3
DON3

DECFSZ SAYAC3,F
GOTO DON3
DECFSZ SAYAC2,F
GOTO DON2
DECFSZ SAYAC1,F
GOTO DON1
RETURN
END

bu gecıkmeyide buton arkı ve sayac arasında görünme esnasında bekleme için kullanıyorum

yardımcı olursanız sevinirim
 
ben bu kodu c de yazıp derledim işini görürmü bilmiyorum ama 4 mhz kristal de bir saatlik zaman gecikmesi devrenin tamamıni anlatırsan yardımcı olabilirim

include "P16F84A.inc"
; Heap block 0, size:29 (0x00000032 - 0x0000004E)
__HEAP_BLOCK0_BANK EQU 0x00000000
__HEAP_BLOCK0_START_OFFSET EQU 0x00000032
__HEAP_BLOCK0_END_OFFSET EQU 0x0000004E
; Heap block 1, size:0 (0x00000000 - 0x00000000)
__HEAP_BLOCK1_BANK EQU 0x00000000
__HEAP_BLOCK1_START_OFFSET EQU 0x00000000
__HEAP_BLOCK1_END_OFFSET EQU 0x00000000
; Heap block 2, size:0 (0x00000000 - 0x00000000)
__HEAP_BLOCK2_BANK EQU 0x00000000
__HEAP_BLOCK2_START_OFFSET EQU 0x00000000
__HEAP_BLOCK2_END_OFFSET EQU 0x00000000
; Heap block 3, size:0 (0x00000000 - 0x00000000)
__HEAP_BLOCK3_BANK EQU 0x00000000
__HEAP_BLOCK3_START_OFFSET EQU 0x00000000
__HEAP_BLOCK3_END_OFFSET EQU 0x00000000
gbl_status EQU 0x00000003 ; bytes:1
gbl_16_LSR EQU 0x0000000C ; bytes:4
gbl_float_detect_tininess EQU 0x00000025 ; bytes:1
gbl_float_rounding_mode EQU 0x00000026 ; bytes:1
gbl_float_exception_flags EQU 0x00000027 ; bytes:1
gbl_17_gbl_aSig EQU 0x00000010 ; bytes:4
gbl_17_gbl_bSig EQU 0x00000014 ; bytes:4
gbl_17_gbl_zSig EQU 0x00000018 ; bytes:4
gbl_17_gbl_aExp EQU 0x00000028 ; bytes:1
gbl_17_gbl_bExp EQU 0x00000029 ; bytes:1
gbl_17_gbl_zExp EQU 0x00000023 ; bytes:2
gbl_17_gbl_aSign EQU 0x0000002A ; bytes:1
gbl_17_gbl_bSign EQU 0x0000002B ; bytes:1
gbl_17_gbl_zSign EQU 0x0000002C ; bytes:1
gbl_17_gbl_zSigZero EQU 0x0000002D ; bytes:1
gbl_17_gbl_ret EQU 0x0000001C ; bytes:4
gbl_indf EQU 0x00000000 ; bytes:1
gbl_tmr0 EQU 0x00000001 ; bytes:1
gbl_pcl EQU 0x00000002 ; bytes:1
gbl_fsr EQU 0x00000004 ; bytes:1
gbl_porta EQU 0x00000005 ; bytes:1
gbl_portb EQU 0x00000006 ; bytes:1
gbl_eedata EQU 0x00000008 ; bytes:1
gbl_eeadr EQU 0x00000009 ; bytes:1
gbl_pclath EQU 0x0000000A ; bytes:1
gbl_intcon EQU 0x0000000B ; bytes:1
gbl_option_reg EQU 0x00000081 ; bytes:1
gbl_trisa EQU 0x00000085 ; bytes:1
gbl_trisb EQU 0x00000086 ; bytes:1
gbl_eecon1 EQU 0x00000088 ; bytes:1
gbl_eecon2 EQU 0x00000089 ; bytes:1
gbl_FCV_SAY EQU 0x0000002E ; bytes:1
CompTempVar2206 EQU 0x0000002F ; bytes:1
delay_ms_00000_arg_del EQU 0x00000031 ; bytes:1
delay_s_00000_arg_del EQU 0x00000030 ; bytes:1
Int1Context EQU 0x0000004F ; bytes:1
Int1BContext EQU 0x00000020 ; bytes:3
ORG 0x00000000
GOTO _startup
ORG 0x00000004
MOVWF Int1Context
SWAPF STATUS, W
BCF STATUS, RP0
MOVWF Int1BContext
SWAPF PCLATH, W
MOVWF Int1BContext+D'1'
SWAPF FSR, W
MOVWF Int1BContext+D'2'
BCF PCLATH,3
BCF PCLATH,4
GOTO interrupt
ORG 0x00000010
delay_ms_00000
; { delay_ms ; function begin
MOVF delay_ms_00000_arg_del, F
BTFSS STATUS,Z
GOTO label1
RETURN
label1
MOVLW 0xF9
label2
ADDLW 0xFF
BTFSS STATUS,Z
GOTO label2
NOP
DECFSZ delay_ms_00000_arg_del, F
GOTO label1
RETURN
; } delay_ms function end

ORG 0x0000001C
delay_s_00000
; { delay_s ; function begin
label3
MOVLW 0xFA
MOVWF delay_ms_00000_arg_del
CALL delay_ms_00000
MOVLW 0xFA
MOVWF delay_ms_00000_arg_del
CALL delay_ms_00000
MOVLW 0xFA
MOVWF delay_ms_00000_arg_del
CALL delay_ms_00000
MOVLW 0xFA
MOVWF delay_ms_00000_arg_del
CALL delay_ms_00000
DECFSZ delay_s_00000_arg_del, F
GOTO label3
RETURN
; } delay_s function end

ORG 0x0000002B
FCM_bekle_00000
; { FCM_bekle ; function begin
MOVLW 0xFF
BCF STATUS, RP0
MOVWF delay_s_00000_arg_del
CALL delay_s_00000
MOVLW 0xFF
MOVWF delay_s_00000_arg_del
CALL delay_s_00000
MOVLW 0xFF
MOVWF delay_s_00000_arg_del
CALL delay_s_00000
MOVLW 0x87
MOVWF delay_s_00000_arg_del
CALL delay_s_00000
RETURN
; } FCM_bekle function end

ORG 0x00000039
main
; { main ; function begin
MOVLW 0xC0
BSF STATUS, RP0
MOVWF gbl_option_reg
MOVLW 0x04
BCF STATUS, RP0
MOVWF gbl_FCV_SAY
label4
CLRF CompTempVar2206
INCF CompTempVar2206, F
MOVF gbl_FCV_SAY, F
BTFSS STATUS,Z
BCF CompTempVar2206,0
MOVF CompTempVar2206, F
BTFSS STATUS,Z
GOTO label5
CALL FCM_bekle_00000
DECF gbl_FCV_SAY, W
MOVWF gbl_FCV_SAY
GOTO label4
label5
GOTO label5
; } main function end

ORG 0x0000004C
_startup
MOVLW 0xD5
BCF STATUS, RP0
MOVWF gbl_16_LSR
MOVLW 0xC4
MOVWF gbl_16_LSR+D'1'
MOVLW 0xBB
MOVWF gbl_16_LSR+D'2'
MOVLW 0xDC
MOVWF gbl_16_LSR+D'3'
CLRF gbl_17_gbl_aSig
CLRF gbl_17_gbl_aSig+D'1'
CLRF gbl_17_gbl_aSig+D'2'
CLRF gbl_17_gbl_aSig+D'3'
CLRF gbl_17_gbl_bSig
CLRF gbl_17_gbl_bSig+D'1'
CLRF gbl_17_gbl_bSig+D'2'
CLRF gbl_17_gbl_bSig+D'3'
CLRF gbl_17_gbl_zSig
CLRF gbl_17_gbl_zSig+D'1'
CLRF gbl_17_gbl_zSig+D'2'
CLRF gbl_17_gbl_zSig+D'3'
CLRF gbl_17_gbl_aExp
CLRF gbl_17_gbl_bExp
CLRF gbl_17_gbl_zExp
CLRF gbl_17_gbl_zExp+D'1'
CLRF gbl_17_gbl_aSign
CLRF gbl_17_gbl_bSign
CLRF gbl_17_gbl_zSign
CLRF gbl_17_gbl_zSigZero
CLRF gbl_17_gbl_ret
CLRF gbl_17_gbl_ret+D'1'
CLRF gbl_17_gbl_ret+D'2'
CLRF gbl_17_gbl_ret+D'3'
CLRF gbl_float_rounding_mode
CLRF gbl_float_exception_flags
CLRF gbl_float_detect_tininess
BCF PCLATH,3
BCF PCLATH,4
GOTO main
ORG 0x00000073
interrupt
; { interrupt ; function begin
BCF STATUS, RP0
SWAPF Int1BContext+D'2', W
MOVWF FSR
SWAPF Int1BContext+D'1', W
MOVWF PCLATH
SWAPF Int1BContext, W
MOVWF STATUS
SWAPF Int1Context, F
SWAPF Int1Context, W
RETFIE
; } interrupt function end

ORG 0x00002007
DW 0x3FFB
END
 
Son düzenleme:
Şunu deneyin (4MHz kristal ile):


Kod:
bekle_1_saat
			;3599999998 cycle
	movlw	0xFF
	movwf	sayac1
	movlw	0x84
	movwf	sayac2
	movlw	0xD8
	movwf	sayac3
	movlw	0x18
	movwf	sayac4
Bekle_0
	decfsz	sayac1, f
	goto	$+2
	decfsz	sayac2, f
	goto	$+2
	decfsz	sayac3, f
	goto	$+2
	decfsz	sayac4, f
	goto	Bekle_0

			;2 cycles
	nop
        nop
 
Son düzenleme:
Şunu deneyin (4MHz kristal ile):


Kod:
bekle_1_saat
			;3599999998 cycle
	movlw	0xFF
	movwf	sayac1
	movlw	0x84
	movwf	sayac2
	movlw	0xD8
	movwf	sayac3
	movlw	0x18
	movwf	sayac4
Bekle_0
	decfsz	sayac1, f
	goto	$+2
	decfsz	sayac2, f
	goto	$+2
	decfsz	sayac3, f
	goto	$+2
	decfsz	sayac4, f
	goto	Bekle_0

			;2 cycles
	nop
        nop

evet bu gayet mantıklı olmuş,
 
Şunu deneyin (4MHz kristal ile):


Kod:
bekle_1_saat
			;3599999998 cycle
	movlw	0xFF
	movwf	sayac1
	movlw	0x84
	movwf	sayac2
	movlw	0xD8
	movwf	sayac3
	movlw	0x18
	movwf	sayac4
Bekle_0
	decfsz	sayac1, f
	goto	$+2
	decfsz	sayac2, f
	goto	$+2
	decfsz	sayac3, f
	goto	$+2
	decfsz	sayac4, f
	goto	Bekle_0

			;2 cycles
	nop
        nop

bu ola bilir fakat ben
SAYAC EQU H'0C'
SAYAC1 EQU H'0D'
SAYAC2 EQU H'0E'
SAYAC3 EQU H'0F'
ISLEM EQU 0X022

halinde adresleme yaptım yani sayac 4 ekleye bilirmiyimn
daha doğrusu 16f84a da kaçtane equ deyimi ile adresleme yapa bilirm
 
registerlerinin sayısı kadar yapabilirsin
 
registerlerinin sayısı kadar yapabilirsin

TŞKLER

16f84a azemi registerlerinin sayısı kaç


15 tane yaza biliyormuşuz

bana
SAYAC EQU H'0C'
SAYAC1 EQU H'0D'
SAYAC2 EQU H'0E'
SAYAC3 EQU H'0F'
SAYAC4 EQU 0X025
ISLEM EQU 0X022

yazmaçlarını düzeltirimisinz galiba yanlış bir adresleme var

sayac yazmaçlarıyla 1 saatlik bir bekleme süresi

işlem yazmaçıylada
BEK
MOVLW D'16'
MOVWF ISLEM
GEL
DECFSZ ISLEM,F
GOTO GEL

display artışında ekranda görünmesi için biraz bekleme kodunu cağırıyorum.

fakat galiba yanlış adresleme var kod calışmıyor
 
Son düzenleme:
list p=16f84a
#include "p16f84a.inc"

__CONFIG _CP_ON & _WDT_OFF & _PWRTE_OFF & _XT_OSC


SETZ1 EQU h'000C'
SETZ2 EQU 0Dh
SETZ3 EQU 0EH
GIRIS EQU 0FH
EKR1 EQU 10H
EKR2 EQU 11H
EKR3 EQU 12H
EKR4 EQU 13H
CEVIR EQU 14H
PRGZ1 EQU 15H
PRGZ2 EQU 16H
PRGZ3 EQU 17H
P1 EQU 18H
P10 EQU 19H
P100 EQU 1AH
P1000 EQU 1BH
S1 EQU 1CH
S10 EQU 1DH
S100 EQU 1EH
S1000 EQU 1FH
FONKSION EQU 20H
OUTT EQU 21H
CAL EQU 22H
FLASHZ1 EQU 23H
FLASHZ2 EQU 24H
CALBIR EQU 25H
CALON EQU 26H
KIYAS EQU 27H
T_OUT1 EQU 28H
T_OUT2 EQU 29H
T_OUT3 EQU 2AH
ROLEZ1 EQU 2BH
ROLEZ2 EQU 2CH
ROUT EQU 2DH
ROL1 EQU 2EH
ROL2 EQU 2FH
KURULDU EQU 30H
BEKLE EQU 31H
BEKLE1 EQU H'0032'
BEKLE2 EQU H'0033'


#DEFINE KRLD KURULDU,0
#DEFINE CLK1 PORTA,0
#DEFINE DATAIN PORTA,1
#DEFINE D_LAÇ PORTA,2
#DEFINE HIF PORTA,3

#DEFINE ENRJ GIRIS,0
#DEFINE HRES GIRIS,1
#DEFINE B_4 GIRIS,2
#DEFINE B_3 GIRIS,3
#DEFINE B_2 GIRIS,4
#DEFINE B_1 GIRIS,5
#DEFINE CRY STATUS,0

#DEFINE PR FONKSION,0
#DEFINE AR FONKSION,1
#DEFINE FR FONKSION,2
#DEFINE EEY FONKSION,3
#DEFINE DON FONKSION,4
#DEFINE PRGOUT FONKSION,5

#DEFINE DP1 PORTB,0
#DEFINE DP2 PORTB,1
#DEFINE DP3 PORTB,2
#DEFINE DP4 PORTB,3
#DEFINE DATA PORTB,4
#DEFINE CLK PORTB,5
#DEFINE LATCH PORTB,6
#DEFINE ROLE PORTB,7
;***********************************
;***********************************
;***********************************
GOTO AYAR

say bakalım kaçtane.
bu çalışan bir kodun bir kısmı...
 

Forum istatistikleri

Konular
129,808
Mesajlar
930,303
Kullanıcılar
452,610
Son üye
rockman41

Yeni konular

Geri
Üst