• No results found

PIC Code

In document PIC Wireless Weather Station (Page 28-42)

28/11/2008 Time 11:10am location PF 46

Appendix 2: PIC Code

list p=16f877A

include <p16f877A.inc>

DelayCount1 equ 0x20 DelayCount2 equ 0x21

Temp equ 0x22

Temp1 equ 0x23

Temp2 equ 0x24

Temp3 equ 0x25

Temp4 equ 0x26

Temp5 equ 0x27

Temp6 equ 0x28

Temp7 equ 0x29

Temp8 equ 0x30

Temp9 equ 0x31

org 0x00 goto start org 0x04 goto ISR org 0x10

start: clrf PORTB bsf STATUS,RP0

bsf PORTB,0 ;CLK high (start up, while data is high toggle bsf PORTB,1 ;DATA high (clk 9 or more times,reset) call softdelay

bcf PORTB,0 ;CLK low bsf PORTB,1 ;DATA high call softdelay

bsf PORTB,0 ;CLK high bsf PORTB,1 ;DATA high call softdelay

bcf PORTB,0 ;CLK low bsf PORTB,1 ;DATA high

call softdelay

bsf PORTB,0 ;CLK high bsf PORTB,1 ;DATA high call softdelay

bcf PORTB,0 ;CLK low bsf PORTB,1 ;DATA high call softdelay

bsf PORTB,0 ;CLK high bsf PORTB,1 ;DATA high call softdelay

bcf PORTB,0 ;CLK low bsf PORTB,1 ;DATA high call softdelay

bsf PORTB,0 ;CLK high bsf PORTB,1 ;DATA high call softdelay

bcf PORTB,0 ;CLK low ******9th time bsf PORTB,1 ;DATA high

call softdelay

bcf PORTB,1 ;DATA low, before clock change******

bsf PORTB,0 ;CLK high, now clock changes call softdelay

bsf PORTB,0 ;CLK high ;transmission start bsf PORTB,1 ;DATA high

call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bcf PORTB,0 ;CLK low bcf PORTB,1 ;DATA low call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bsf PORTB,0 ;CLK high bsf PORTB,1 ;DATA high call softdelay

bcf PORTB,0 ;CLK low bsf PORTB,1 ;DATA high call softdelay

bcf PORTB,1 ;DATA low, before clock change******

bsf PORTB,0 ;CLK high, now clock changes call softdelay

bcf PORTB,0 ;CLK low bcf PORTB,1 ;DATA low

call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bcf PORTB,0 ;CLK low bcf PORTB,1 ;DATA low call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bcf PORTB,0 ;CLK low bcf PORTB,1 ;DATA low call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bcf PORTB,0 ;CLK low

bsf PORTB,1 ;DATA high humidity '000001..' call softdelay

bsf PORTB,0 ;CLK high bsf PORTB,1 ;DATA high call softdelay

bcf PORTB,0 ;CLK low

bcf PORTB,1 ;DATA low humidity '0000010.' call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bcf PORTB,0 ;CLK low

bsf PORTB,1 ;DATA high humidity '00000101' call softdelay

bsf PORTB,0 ;CLK high bsf PORTB,1 ;DATA high call softdelay

bsf STATUS,RP0 ;PORTB set for input movlw 0x02 ;*******************

movwf TRISB ;*******************

bcf STATUS,RP0 ;*******************

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low call softdelay

bcf PORTB,0 ;CLK low \\\\changed here 4clock off//// 

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bcf PORTB,0 ;CLK low call softdelay

bcf PORTB,0 ;CLK low call softdelay

bcf PORTB,0 ;CLK low call softdelay

bcf PORTB,0 ;CLK low call softdelay

bcf PORTB,0 ;CLK low call softdelay

bcf PORTB,0 ;CLK low \\\\\\\\resume clock///////// 

call softdelay movlw 0x08 movwf Temp3 clrw

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

clrf TRISB ; FOR OUTPUT

bcf STATUS,RP0 ;*****************

call softdelay

bcf PORTB,1 ;pull data line low for acknowledge bsf PORTB,0 ;CLK high*** acknowledge pulse (9th) call softdelay

bcf PORTB,0 ;CLK low

bsf STATUS,RP0 ;*******************

movlw 0x02 ; SET PORTB movwf TRISB ; FOR INPUT

bcf STATUS,RP0 ;*******************

clrf Temp

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low

call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low

clrf PORTB ;******************

bsf STATUS,RP0 ; SET PORTB clrf TRISB ; FOR OUTPUT

bcf STATUS,RP0 ;*****************

bcf PORTB,1 ;pull data line low for acknowledge call softdelay

bsf PORTB,0 ;CLK high*** acknowledge pulse (9th) call softdelay

bcf PORTB,0 ;CLK low

bsf STATUS,RP0 ;*******************

movlw 0x02 ; SET PORTB movwf TRISB ; FOR INPUT

bcf STATUS,RP0 ;*******************

call softdelay

; call sendout

call sendout ;send last 8bits to TX

bsf PORTB,0 ;CLK high...check sum first pulse call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high..end of check sum (8th pulse) call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low goto readtemp

Loop: btfss PORTB,0 ;store the first 8 bits

bcf STATUS,C ;***************************

movfw PORTB ;***************************

andlw 0x02 ;***************************

movwf Temp ;***************************

rrf Temp,0 ;***************************

andlw 0x0F ;***************************

iorwf Temp2,1 ;***************************

decf Temp3 ;***************************

btfss STATUS,Z ;***************************

rlf Temp2,1 ;***************************

return

Loop2: btfss PORTB,0 ;store the second 8 bits

bcf STATUS,C ;***************************

movfw PORTB ;***************************

andlw 0x02 ;***************************

movwf Temp ;***************************

rrf Temp,0 ;**********************

andlw 0x01 ;***************************

iorwf Temp4,1 ;***************************

decf Temp3 ;***************************

btfss STATUS,Z ;***************************

rlf Temp4,1 ;*************************

return

softdelay: clrf DelayCount1 movlw 0xC0

movwf DelayCount2 Delayloop: decfsz DelayCount1,F

goto smalldelay goto exitdelay

smalldelay: decfsz DelayCount2,F goto smalldelay

goto Delayloop exitdelay: Return

TXsetup: bsf STATUS,RP0

movlw .207 ;1200 baud rate

movwf SPBRG ;load value into SPBRG movlw b'10100100' ;async high baud rate movwf TXSTA ;transmit config register bcf STATUS,RP0

movlw b'10000000' ;Enable serial port open movwf RCSTA

return

sendout: bcf STATUS,RP0

movfw Temp2 ;move temp2 to w-reg movwf TXREG ;move w-reg to tx nop nop

bsf STATUS,RP0 ;switch to bank1 bsf TXSTA,TXEN ;enable transmission nop

bcf STATUS,RP0 ;switch to bank0 btfss PIR1,TXIF ;check tx empty goto $-1

nop

movfw Temp4 ;Same code again movwf TXREG ;only this time its for nop ;sending second byte

nop

movlw 'X' ; character sent out to make up 8 bits movwf TXREG

nop nop

movlw 'X' ; character sent out to make up 8 bits movwf TXREG

nop nop

movlw 'X' ; character sent out to make up 8 bits movwf TXREG

nop nop

movlw 'X' ; character sent out to make up 8 bits movwf TXREG

nop nop return

bsf STATUS,RP0 ;switch to bank1 bsf TXSTA,TXEN ;enable transmission nop

bcf STATUS,RP0 ;swictch to bank0 btfss PIR1,TXIF ;check tx empty goto $-1

nop

movfw Temp9 ;Same code again movwf TXREG ;only this time its for nop ;sending second byte

nop readtemp: clrf PORTB

bsf STATUS,RP0

bsf PORTB,0 ;CLK high ;transmission start bsf PORTB,1 ;DATA high

call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bcf PORTB,0 ;CLK low bcf PORTB,1 ;DATA low call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bsf PORTB,0 ;CLK high bsf PORTB,1 ;DATA high call softdelay

bcf PORTB,0 ;CLK low bsf PORTB,1 ;DATA high

call softdelay

bcf PORTB,1 ;DATA low, before clock change******

bsf PORTB,0 ;CLK high, now clock changes call softdelay

bcf PORTB,0 ;CLK low bcf PORTB,1 ;DATA low call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bcf PORTB,0 ;CLK low bcf PORTB,1 ;DATA low call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bcf PORTB,0 ;CLK low bcf PORTB,1 ;DATA low call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bcf PORTB,0 ;CLK low bcf PORTB,1 ;DATA low call softdelay

bsf PORTB,0 ;CLK high bcf PORTB,1 ;DATA low call softdelay

bcf PORTB,0 ;CLK low

bsf PORTB,1 ;DATA High Temperature command call softdelay

bsf PORTB,0 ;CLK high

bsf PORTB,1 ;DATA low temperature command bit high call softdelay

bcf PORTB,0 ;CLK low

bsf PORTB,1 ;DATA high temperature command line stays high call softdelay

bsf PORTB,0 ;CLK high

bsf PORTB,1 ;DATA high temprature line still high (final bit) call softdelay

bsf STATUS,RP0 ;PORTB set for input movlw 0x02 ;*******************

movwf TRISB ;*******************

bcf STATUS,RP0 ;*******************

bcf PORTB,0 ;CLK low bsf PORTB,0 ;CLK high

call softdelay

bcf PORTB,0 ;CLK lo call softdelay

bcf PORTB,0 ;CLK low call softdelay

bcf PORTB,0 ;CLK lo call softdelay

bcf PORTB,0 ;CLK low call softdelay

bcf PORTB,0 ;CLK lo call softdelay

bcf PORTB,0 ;CLK low \\\\\\\\resume clock///////// 

call softdelay

movlw 0x08 ;move 8 into w-reg

movwf Temp3 ;move w-reg to Temp3 to count number of bits saved clrw

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high

call Loop call softdelay

bcf PORTB,0 ;CLK low

clrf PORTB ;******************

bsf STATUS,RP0 ; SET PORTB clrf TRISB ; FOR OUTPUT

bcf STATUS,RP0 ;*****************

call softdelay

bcf PORTB,1 ;pull data line low for acknowledge

bsf PORTB,0 ;CLK high********** acknowledge pulse (9th) call softdelay

bcf PORTB,0 ;CLK low

bsf STATUS,RP0 ;*******************

movlw 0x02 ; SET PORTB movwf TRISB ; FOR INPUT

bcf STATUS,RP0 ;*******************

clrf Temp

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call Loop2

call softdelay

bcf PORTB,0 ;CLK low

clrf PORTB ;******************

bsf STATUS,RP0 ; SET PORTB clrf TRISB ; FOR OUTPUT

bcf STATUS,RP0 ;*****************

bcf PORTB,1 ;pull data line low for acknowledge call softdelay

bsf PORTB,0 ;CLK high********** acknowledge pulse (9th) call softdelay

bcf PORTB,0 ;CLK low

bsf STATUS,RP0 ;*******************

movlw 0x02 ; SET PORTB movwf TRISB ; FOR INPUT

bcf STATUS,RP0 ;*******************

call softdelay

call sendout ;send bits to TX

bsf PORTB,0 ;CLK high...check sum first pulse call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low

call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high...end of check sum (8th pulse) call softdelay

bcf PORTB,0 ;CLK low call softdelay

bsf PORTB,0 ;CLK high call softdelay

bcf PORTB,0 ;CLK low goto start ;Loop back to start

ISR: retfie ;Dummy interruptservice routine End

In document PIC Wireless Weather Station (Page 28-42)

Related documents