Ik weet niet hoe ik de titel moet uitleggen, ik wil namenlijk een 8 segment klok met een DCF55 C51! eraan op een PIC (16f690) .
de DCF stuurt elke seconde de Meinberg Timestring 32 bytes.
Mijn idee is om de data in een interrupt te ontvangen, en in het EEPROM neer te zetten, en dan in de hoofdroutine de EEPROM uitlezen en op het display laten zien.
nu heb ik het al geprobeerd met verschillende snelheden (600,1200,2400,4800,9600)
bij 9600 staat er 1 van de 3 bytes in de EEPROM dus D 1 0 . ipv D:31.05.07 (zowel op 4 als op 16 mhz!)
en bij de tragere snelheden knippert het display tijdens het ontvangen.
wie heeft er suggesties voor mij hoe ik dit kan oplossen, ook snap ik dit niet (einde van het interrupt):
;swapf w_temp,f
;swapf w_temp,w ; restore pre-isr W register contents
waarom kan dat niet zijn MOVF w_temp,w
BVD
Offtopic: Weet er iemand een alternatieve omgeving voor MPLAB, waar je we de MPASM compiler in kan zetten ? (liefst opensource)
de DCF stuurt elke seconde de Meinberg Timestring 32 bytes.
Mijn idee is om de data in een interrupt te ontvangen, en in het EEPROM neer te zetten, en dan in de hoofdroutine de EEPROM uitlezen en op het display laten zien.
nu heb ik het al geprobeerd met verschillende snelheden (600,1200,2400,4800,9600)
bij 9600 staat er 1 van de 3 bytes in de EEPROM dus D 1 0 . ipv D:31.05.07 (zowel op 4 als op 16 mhz!)
en bij de tragere snelheden knippert het display tijdens het ontvangen.
wie heeft er suggesties voor mij hoe ik dit kan oplossen, ook snap ik dit niet (einde van het interrupt):
;swapf w_temp,f
;swapf w_temp,w ; restore pre-isr W register contents
waarom kan dat niet zijn MOVF w_temp,w
code:
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
| movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf PCLATH,w ; move pclath register into W register
movwf pclath_temp ; save off contents of PCLATH register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;find corrosponding interrupt ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO Received
GOTO EOI
;;;;;;;;;;;;;;;;;;;;;;;;;
;; Interrupt Functions ;;
;;;;;;;;;;;;;;;;;;;;;;;;;
Received
BTFSC FLAGS,RCFlag; Al aan het ontvangen ? ga dan naar RtoE
goto RtoE
MOVFW RCREG
BCF STATUS,Z
XORLW 0x02
BTFSS STATUS,Z
GOTO EOI ; Ontvangst is geen H'02', Flag is ook niet hoog, dus verlaat de interrupt
BSF FLAGS,RCFlag
CLRF Eaddr
GOTO EOI
RtoE
MOVFW RCREG
BCF STATUS,Z
XORLW 0x03 ; Ontvangst = eindbyte => ga naar EndOfReceiving
BTFSC STATUS,Z
GOTO EOR ; END OF RECEIVING
MOVFW Eaddr
BANKSEL EEADR
MOVWF EEADR
BANKSEL RCREG
MOVFW RCREG
BANKSEL EEDAT
MOVWF EEDAT
BANKSEL EECON1
BCF EECON1,EEPGD
BSF EECON1, WREN
;;; REQUIRED!!!!!!!!!
MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1,WR
;;; END!!!!!
BCF EECON1,WREN
BANKSEL Eaddr
INCF Eaddr,F
; MOVFW RCREG ; dit is een alternatieve manier, hierbij blijft hij in de interrupt tot hij een 03h tegenkomt
; BCF STATUS,Z
; XORLW 0x03
; BTFSC STATUS,Z
; GOTO EOR ; END OF RECEIVING
; BCF PIR1,RCIF
; BTFSS PIR1,RCIF
; GOTO $-1
; GOTO RtoE
GOTO EOI
;;;;;;;;;;;;;;;;;;;;
EOR
BCF FLAGS,RCFlag
EOI
BCF PIR1,RCIF
movf pclath_temp,w ; retrieve copy of PCLATH register
movwf PCLATH ; restore pre-isr PCLATH register contents
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
;swapf w_temp,f
;swapf w_temp,w ; restore pre-isr W register contents
MOVWF w_temp
retfie ; return from interrupt |
BVD
Offtopic: Weet er iemand een alternatieve omgeving voor MPLAB, waar je we de MPASM compiler in kan zetten ? (liefst opensource)