;emouse.pic - electronic mouse ;stand-alone 16F84 program to generate mouse data ;joecolquitt@clear.net.nz ; org 211298 ; rev 31.12.98 ; rev 09.01.99 ;Microsoft Mouse, 3 byte data stream ;1200 bps, 7 data bits, 1 stop bit, no parity ;1200 bps = 833.3us / bit = 8333 instruction cycles ;bit 7 6 5 4 3 2 1 0 ; ;Byte 1 0 0 L R Y7 Y6 X7 X6 ;Byte 2 0 0 Y5 Y4 Y3 Y2 Y1 Y0 ;Byte 3 0 0 X5 X4 X3 X2 X1 X0 ; ;X7 = 1 = left X7 = 0 = right ;Y7 = 1 = up Y7 = 0 = down ; L = 1 = left button ; R = 1 = right ; ;Other bits are speed ; ;First 20 movement instructions are for 1 pixel, after that ;4 pixels. Counter is reset when pushbutton is released status equ 03h carry equ status0 zero equ status2 porta equ 05h portb equ 06h mov !OPTION, W trisa equ 85h trisb equ 86h ram equ 0ch lin equ portb0 ;pushbutton for left rin equ portb1 ; right uin equ portb2 ; up din equ portb3 ; down bin equ portb4 ; left button comm equ portb5 ;data to PC start equ 00h w equ 0 ;instruction suffix = w = accumulator f equ 1 ; = f = register orgdata ram data rb ;byte to send bit equ data7 ;bit to send bcnt rb ;bit counter tdc1 rb ;time delay counter move rb ;pixel movement counter pixel rb ;movement rate counter pflags rb ;change movement rate flags lfl equ pflags0 rfl equ pflags1 ufl equ pflags2 dfl equ pflags3 config 0f2h ;10MHz crystal xxxx xx10 ;watchdog timer disabled xxxx x0xx ;power-up timer enabled xxxx 0xxx ;code not protected xxx1 xxxx org start jmp entry entry mov W, #00h ;Porta unused o/p ;*** WARNING: TRIS expanded in two instructions. Check if previous instruction is a skip instruction. ; tris porta mov W, #1fh ;Portb = oooi iiii ;*** WARNING: TRIS expanded in two instructions. Check if previous instruction is a skip instruction. ; tris portb clr Ra ;clear data latches clr Rb mov W, #80h ;Portb pull-ups off mov !OPTION, W setb comm ;idle ;---- main loop main sb lin ;look for direction pushbuttons jmp left sb rin jmp right sb uin jmp up sb din jmp down mov W, #14h ;reset movement counter mov pixel, W clr pflags ;reset rate change flags sb bin ;mouse button jmp button jmp main ;---- data output setups left snb lfl ;if high-rate is set then 4pixel move jmp left4 decsz pixel ;else decrement counter until 0 jmp left1 setb lfl ;then set flag jmp left4 left1 mov W, #9eh ;1001 1110 call send mov W, #20h ;0010 0000 (24) call send mov W, #4fh ;0100 1111 call send mov W, #0f0h ;1111 0000 call send jmp main right snb rfl jmp right4 decsz pixel jmp right1 setb rfl jmp right4 right1 mov W, #0feh ;1111 1110 call send mov W, #2fh ;0010 1111 (2b) call send mov W, #0cfh ;1100 1111 call send mov W, #0f0h ;1111 0000 call send jmp main up snb ufl jmp up4 decsz pixel jmp up1 setb ufl jmp up4 up1 mov W, #0e6h ;1110 0110 call send mov W, #3fh ;0011 1111 call send mov W, #0c8h ;1100 1000 (c9) call send mov W, #10h ;0001 0000 call send jmp main down snb dfl jmp down4 decsz pixel jmp down1 setb dfl jmp down4 down1 mov W, #0feh ;1111 1110 call send mov W, #3fh ;0011 1111 call send mov W, #0cbh ;1100 1011 (ca) call send mov W, #0f0h ;1111 0000 call send jmp main left4 mov W, #9eh ;1001 1110 call send mov W, #24h ;0010 0100 (20) call send mov W, #4fh ;0100 1111 call send mov W, #0f0h ;1111 0000 call send jmp main right4 mov W, #0feh ;1111 1110 call send mov W, #2bh ;0010 1011 (2f) call send mov W, #0cfh ;1100 1111 call send mov W, #0f0h ;1111 0000 call send jmp main up4 mov W, #0e6h ;1110 0110 call send mov W, #3fh ;0011 1111 call send mov W, #0c9h ;1100 1001 (c8) call send mov W, #10h ;0001 0000 call send jmp main down4 mov W, #0feh ;1111 1110 call send mov W, #3fh ;0011 1111 call send mov W, #0cah ;1100 1010 (cb) call send mov W, #0f0h ;1111 0000 call send jmp main button mov W, #0fch ;1111 1100 call send mov W, #3fh ;0011 1111 call send mov W, #0cfh ;1100 1111 call send mov W, #0f0h ;1111 0000 call send bhold sb bin ;wait for button release jmp bhold out mov W, #0feh ;1111 1110 call send mov W, #3fh ;0011 1111 call send mov W, #0cfh ;1100 1111 call send mov W, #0f0h ;1111 0000 call send jmp main ;---- ouput data bits send mov data, W mov W, #08h mov bcnt, W sbit sb bit ;test jmp b0 b1 clrb comm ;'1' call bitdel jmp newbit b0 setb comm ;'0' call bitdel newbit rl data decsz bcnt jmp sbit ret ;---- comms timing delay bitdel mov W, #00h ;bit-length delay mov tdc1, W lp1 decsz tdc1 jmp lp1 mov W, #00h mov tdc1, W lp2 decsz tdc1 jmp lp2 mov W, #0ach mov tdc1, W lp3 decsz tdc1 jmp lp3 ret
file: /Techref/scenix/lib/io/dev/mouse/emouse2_sx.htm, 5KB, , updated: 2001/12/9 18:49, local time: 2025/8/2 20:41,
216.73.216.82,10-2-164-33:LOG IN
|
©2025 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://techref.massmind.org/techref/scenix/lib/io/dev/mouse/emouse2_sx.htm"> emouse</A> |
Did you find what you needed? |
Welcome to massmind.org! |
Welcome to techref.massmind.org! |
.