loop:
b loop
; --==*[ sendByte - ROUTINE ]*==--
sendByte: ; send byte (which is stored in W)
sendByte_l0: ; wait until new data arrived in txreg
btfss PIR1, TXIF ; (inDICated via transmit interrupt flag bit: txif)
b sendByte_l0
sendByte_l1:
MOVwf TXREG ; send new data
return
; --==*[ INTERRUPT HANDLING ROUTINE ]*==--
int_handler:
btfsc RCSTA, OERR ; overflow error occured, handle it
b err_Overflow
btfsc RCSTA, FERR ; framing error occured, handle it
b err_Frame
btfsc PIR1, RCIF ; receive interrupt: rcif
b int_USART_receive
btfsc INTCON, RBIF ; pin interrupt: rbif
b int_RB_change
btfsc INTCON, T0IF ; tmr0 interrupt: t0if
b int_timer0_reset
retfie
int_RB_change:
incf tickL, 1 ; increment ticks (low byte)
btfsc STATUS, Z
incf tickH, 1 ; increment ticks on overflow (high byte)
incf winkelL, 1 ; same as tick, but will not be reset (eichungswert)
btfsc STATUS, Z
incf winkelH, 1
MOVwf wtemp1 ; save W
MOVfw PORTB
MOVwf newb ; newb = PORTB
MOVlw b’00110000’ ; and mask
andwf oldb, 1 ; reset all bits except 4 and 5
andwf newb, 1 ; reset all bits except 4 and 5
clrf quad ; reset quad value
clrw ; oldb == 00 ?
subwf oldb, W
bz o00
MOVlw b’00010000’ ; oldb == 01 ?
subwf oldb, W
bz o01
MOVlw b’00100000’ ; oldb == 10 ?
subwf oldb, W
bz o10
b o11 ; else, oldb == 11
o00:
MOVlw b’00010000’ ; newb == 01 ?
subwf newb, W
bnz quit
bsf quad, 7 ; left
b quit
o01:
MOVlw b’00110000’ ; newb == 11 ?
subwf newb, W
bnz quit
bsf quad, 7 ; left
b quit
o10:
clrw ; newb == 00 ?
subwf newb, W
bnz quit
bsf quad, 7 ; left
b quit
o11:
MOVlw b’00100000’ ; newb == 10 ?
subwf newb, W
bnz quit
bsf quad, 7 ; left
上一页 [1] [2] [3] [4] [5] [6] 下一页
本文关键字:步进电机 程序 PIC单片机,单片机-工控设备 - PIC单片机