; Inkremental-Drehgeber auslesen und per WebUSB ausgeben
; Erst mal ohne Interpolation
radix dec
list n=0,st=off
nolist
include "p16f1454.inc"
nolist
include "mymacros.i15"
list
;Hardware: PIC16F1454 + LM339 (Vierfach-Komparator)
;(13) RA0/D+ USB D+
;(12) RA1/D- USB D-
; (4) RA3/!MCLR Reset (ungenutzt, Lo springt zum Urlader)
; (3) RA4/IOC Digital-Spur A vom LM339, interner Pullup
; (2) RA5/IOC Digital-Spur B vom LM339, interner Pullup
;(10) RC0/AN4 Spur A+
; (9) RC1/AN5 Spur A-
; (8) RC2/AN6 Spur B+
; (7) RC3/AN7 Spur B-
; (6) RC4 L = Stromfresser aktivieren, H = USB-Sleep (Ausgang)
; (5) RC5 Digital-Spur 0 vom LM339, externer Pullup
E0_SSH equ 3 ;EP0: 1<<3 = 8 Byte
E1I_SSH equ 3 ;EP3IN: 8 Byte
;Exy_STA bits
BSTALL equ 2
DTSEN equ 3
DTS equ 6
UOWN equ 7
;list of Bank0 RAM variables, starting with BDT
cblock 0x20 ;Bank 0 (completely full)
E0O_STA ;@0x20
E0O_CNT
E0O_ADR:2
E0I_STA
E0I_CNT
E0I_ADR:2
; Der Platz für Endpoint 1 Out wird für Arbeitsvariablen imn Bank 0 missbraucht
USB_STATE ;@0x28: Einige Flags
SETUPDAT_CNT ;Bytes die noch zu senden oder empfangen sind
SETUPDAT_PTR:2 ;Datenzeiger
E1I_STA
E1I_CNT
E1I_ADR:2
E0_BUF:1<<E0_SSH ;@0x30: Shared für EP0 Setup-, Out-, und In-Transfer
E1I_BUF:1<<E1I_SSH
endc
cblock 0x70 ;Nicht-Bank-Register
CL ;Zählregister, 3. Argument
saveP ;für ISR: Gefangene Portpins am Anfang
saveX ;für ISR: alter/neuer 2-Bit-Zählerstand
report:4 ;Input-Report
endc
bmRequestType equ E0_BUF+0
bRequest equ E0_BUF+1
wValueL equ E0_BUF+2
wValueH equ E0_BUF+3
wLengthL equ E0_BUF+6
wLengthH equ E0_BUF+7
;Lineare (und zusammenhängende) Pufferadressen
LIN_E0_BUF equ 0x2010 ;bis 0x2017
LIN_E1I_BUF equ 0x2018 ;bis 0x201F
org 0x200
banksel PCON ;Bank1
bsf PCON,NOT_RMCLR ; clear !MCLR reset reason for next onReset
goto onReset
nop
include "io.i15"
onReset
call ioInit
call usbInit
;Hauptschleife
_loop call ioPoll
call usbPoll
bra _loop
include "usb.i15"
include "flash.i15"
include "descriptors.i15"
end
| Detected encoding: UTF-8 | 0
|