《匠人手记》推荐网上购书渠道:
  互动出版网(china-pub)   >>>
  当当网(dangdang)   >>>
  卓越亚马逊网    >>>
  淘宝网(taobao)   >>>
  更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴新100贴

载入中...

广告3号位
百宝日历
载入中...

百宝专栏

说明:请先返回首页,再点击下列专栏即可进入。
  • 首页 相册 标签
  • 匠人公告(87)
  • 匠人笔记(144)
  • 匠人文集(167)
  • 写书近况(189)
  • 团队撰写(96)
  • 与非门专栏(566)
  • 比尔熊专栏(12)
  • 网络酷文(492)
  • 程序宝典(477)
  • 程序算法(28)
  • 编程技巧(482)
  • 资料宝藏(280)
  • 硬件技术(178)
  • 汽车电子(52)
  • 藏经宝阁(47)
  • 项目管理(15)
  • 趣味设计(6)
  • 社区热贴(5)
  • 开发工具(19)
  • 电脑应用(66)
  • 供需信息(24)
  • 最新货色

    载入中...

    粉丝评论

    载入中...

    载入中...



    百宝信息

    载入中...

    百宝流量

    (2006-07-01开始)


    匠人手记

    购书攻略勘误表

    开发板专卖——淘宝店

     编程技巧: 优质代码的十诫

    PIC:一个MOUSE 程序
    程序匠人 发表于 2005-6-2 21:03:00  阅读全文 | 回复(0) | 引用通告 | 编辑

     TITLE " MOUSE "
     LIST   P=16C54,R=O
    ;
    ;*******************************************
    ;*                                         *
    ;*   MOUSE CONTROLLER                      *
    ;*                                         *
    ;*   VERSION : 25 APRIL, 1990              *
    ;*                                         *
    ;*   PIC MODE = PIC16C54XT   CLK=4.0MHZ    *
    ;*******************************************
    ;
    ;-------------------------------------------
    ;       FILES ASSIGNMENT
    ;-------------------------------------------
    ;
    STATUS EQU 3            ;STATUS REGISTER
    RA EQU 5                ;I/O PORT A
    RB EQU 6                ;I/O PORT B
    TIMER1 EQU 10           ;COUNTER FOR DELAY
    CSTAT EQU 14            ;CO-ORDINATE STATUS
    BSTAT EQU 15            ;BUTTON STATUS
    DATA0 EQU 16            ; 
    DATA1 EQU 17            ;
    DATA2 EQU 20            ;5 BYTE RS232 DATA
    DATA3 EQU 21            ;
    DATA4 EQU 22            ;
    FLAGA EQU 23            ;GENERAL PURPOSE FLAG
    XCOUNT EQU 24           ;X-MOVEMENT COUNTER
    YCOUNT EQU 25           ;Y-MOVEMENT COUNTER
    FLAGB EQU 26            ;GENERAL PURPOSE FLAG
    COUNT EQU 30            ;GENERAL PURPOSE COUNTER
    DATA_AREA EQU 31             ;FOR TEMP. STORAGE
    ;
    ;------------------------------------------
    ;       BIT ASSIGNMENT
    ;------------------------------------------
    ;
    YC EQU 0                ;Y-CLOCK PIN
    YD EQU 1                ;Y-DATA PIN
    UP EQU 1                ;MOVING UP FLAG
    XC EQU 2                ;X-CLOCK PIN
    XD EQU 3                ;X-DATA PIN
    RI EQU 3                ;MOVING RIGHT FLAG
    BU1 EQU 0               ;BUTTON #1 PIN
    BU2 EQU 2               ;BUTTON #2 PIN
    CA EQU 0                ;CARRY FLAG
    RD EQU 7                ;RECEIVED DATA PIN TO RS232
    ZERO_AREA EQU 2              ;ZERO FLAG
    TR EQU 2                ;TIGGER FLAG
    ;
    ;===========================================
    ;       SUBROUTINES
    ;===========================================
    ;
    ;*******************************************
     ORG 0
    ;*******************************************
    ;
    ;===========================================
    ; DELAY A BIT TIME AND CHECK XC & YC STATUS
    ;===========================================
    BIT
     BTFSS RA,XC            ;XC = 1 ?
     GOTO BIT0
     BTFSC CSTAT,XC         ;(XC=1)
     GOTO BITY              ;(XC ALWAYS = 1)
     INCF XCOUNT            ;(XC --|__)
     BCF FLAGB,RI           ;DEFAULT LEFT
     BTFSS RA,XD            ;LEFT / RIGHT ?
     GOTO BITY
     BSF FLAGB,RI
     GOTO BITY
    BIT0
     BTFSS CSTAT,XC         ;(XC=0)
     GOTO BITY              ;(XC ALWAYS = 0)
     INCF XCOUNT            ;(XC __|--)
     BCF FLAGB,RI           ;DEFAULT LEFT
     BTFSC RA,XD            ;LEFT / RIGHT ?
     GOTO BITY
     BSF FLAGB,RI
    BITY
     BTFSS RA,YC            ;YC = 1 ?
     GOTO BITY0
     BTFSC CSTAT,YC         ;(YC=1)
     GOTO BITDY             ;(YC ALWAYS = 1)
     INCF YCOUNT            ;(YC --|__)
     BCF FLAGB,UP           ;DEFAULT DOWN
     BTFSS RA,YD            ;DOWN / UP ?
     GOTO BITDY
     BSF FLAGB,UP
     GOTO BITDY
    BITY0
     BTFSS CSTAT,YC         ;(YC=0)
     GOTO BITDY             ;(YC ALWAYS = 0)
     INCF YCOUNT            ;(YC __|--)
     BCF FLAGB,UP           ;DEFAULT DOWN
     BTFSC RA,YD            ;DOWN / UP ?
     GOTO BITDY
     BSF FLAGB,UP
    BITDY
     MOVF RA,W              ;SAVE COOR. STATUS
     MOVWF CSTAT
     MOVLW 193D             ;0.833 MS DELAY
     MOVWF TIMER1
    BITD0
     NOP
     DECFSZ TIMER1
     GOTO BITD0
     RETLW 0
    ;
    ;=================================================
    ;
    ;************************************************
    ;*      SUBROUTINE TO SEND A BYTE               *
    ;*      AS RS232C FORMAT 8,N,1                  *
    ;************************************************
    ;
    BYTE
     CLRF COUNT             ;RESET 8 BIT COUNT
     BTFSS FLAGA,TR         ;ANY TRIGGER
     GOTO BYTE0
     BCF RB,RD              ;LOW RD FOR START BIT
    BYTE0
     CALL BIT
    BYTE1
     BTFSS FLAGA,TR         ;ANY TRIGGER ?
     GOTO BYTE3
     RRF DATA_AREA               ;SHIFT DATA TO CARRY
     BTFSS STATUS,CA        ;0 / 1 ?
     GOTO BYTE2
     BSF RB,RD              ;SEND A 1
     GOTO BYTE3
    BYTE2
     BCF RB,RD              ;SEND A 0
    BYTE3
     CALL BIT
     INCF COUNT
     BTFSS COUNT,3          ;COUNT = 8 ?
     GOTO BYTE1
     BTFSS FLAGA,TR         ;ANY TRIGGER ?
     GOTO BYTE4
     BCF RB,RD              ;SEND SENT BIT
     CALL BIT
     BSF RB,RD
     CALL BIT
     GOTO BYTE5
    BYTE4
     CALL BIT
     CALL BIT
    BYTE5
     RETLW 0
    ;
    ;============================================
    ;       RESET ENTRY
    ;============================================
    ;
    INIT
     MOVLW B'11000001'      ;DISABLE WATCH DOG
     OPTION
     MOVLW B'00001111'      ;INIT RB0~3 BE INPUTS
     TRIS RB                ;RB4~7 BE OUTPUTS
     MOVLW B'11111111'      ;INIT RA0~3 BE INPUTS
     TRIS RA
     BSF RB,RD              ;HIGH RD PIN
     COMF RB,W              ;GET INIT BUTTON INPUTS
     ANDLW B'00000101'
     IORLW B'10000000'
     MOVWF BSTAT
     MOVWF DATA0           
     MOVF RA,W
     MOVWF CSTAT
     CLRF FLAGA             ;CLEAR TR FLAG
     CLRF XCOUNT            ;RESET XCOUNT & YCOUNT
     CLRF YCOUNT
    SCAN
     CLRF DATA1             ;UPDATE X,Y MOVEMENT DATA
     CLRF DATA2
     CLRF DATA3
     CLRF DATA4
     MOVF XCOUNT,W          ;XCOUNT = 0 ?
     BTFSS STATUS,ZERO_AREA
     GOTO WRITX
    SCANA
     MOVF YCOUNT,W          ;YCOUNT = 0 ?
     BTFSS STATUS,ZERO_AREA
     GOTO WRITY
    SCANB
     COMF RB,W              ;BUTTON STATUS CHANGE ?
     ANDLW B'00000101'
     IORLW B'10000000'
     SUBWF BSTAT
     BTFSC STATUS,ZERO_AREA      ;IF CHANGE THEN TRIGGER
     GOTO SCANC             ;(NO CHANGE)
     BSF FLAGA,TR           ;(CHANGE) SET TRIGGER FLAG
     COMF RB,W              ;FORMAT BUTTON STATUS DATA
     ANDLW B'00000101'
     IORLW B'10000000'
     MOVWF DATA0
    SCANC
     COMF RB,W
     ANDLW B'00000101'
     IORLW B'10000000'
     MOVWF BSTAT
     MOVF DATA0,W           ;SEND DATA0,1,2,3,4 TO HOST
     MOVWF DATA_AREA
     CALL BYTE
     MOVF DATA1,W
     MOVWF DATA_AREA
     CALL BYTE
     MOVF DATA2,W
     MOVWF DATA_AREA
     CALL BYTE
     MOVF DATA3,W
     MOVWF DATA_AREA
     CALL BYTE
     MOVF DATA4,W
     MOVWF DATA_AREA
     CALL BYTE
     BCF FLAGA,TR           ;CLEAR TRIGGER FLAG
     GOTO SCAN
    ;
    WRITX
     BSF FLAGA,TR           ;SET TRIGGER FLAG
     MOVLW 40H              ;IF XCOUNT > 64 THEN XCOUNT <-64
     SUBWF XCOUNT,W
     BTFSC STATUS,CA
     GOTO WRITR
    WRITS
     BTFSS FLAGB,RI         ;LEFT / RIGHT ?
     GOTO WRITL
     COMF XCOUNT            ;(RIGHT) NEG XCOUNT
     INCF XCOUNT,W
    WRITA
     MOVWF DATA1
     MOVWF DATA3
     CLRF XCOUNT            ;RESET XCOUNT
     GOTO SCANA
    ;
    WRITR
     MOVLW 40H              ;XCOUNT <- 64
     MOVWF XCOUNT
     GOTO WRITS
    ;
    WRITL
     MOVF XCOUNT,W          ;(LEFT)
     GOTO WRITA
    ;
    WRITY
     BSF FLAGA,TR           ;SET TRIGGER FLAG
     MOVLW 40H              ;IF YCOUNT > 64 THEN YCOUNT <-64
     SUBWF YCOUNT,W
     BTFSC STATUS,CA
     GOTO WRITV
    WRITW
     BTFSS FLAGB,UP         ;DOWN / UP ?
     GOTO WRITD
     COMF YCOUNT            ;(UP) NEG YCOUNT
     INCF YCOUNT,W
    WRITB
     MOVWF DATA2
     MOVWF DATA4
     CLRF YCOUNT            ;RESET YCOUNT
     GOTO SCANB
    ;
    WRITV
     MOVLW 40H              ;YCOUNT <- 64
     MOVWF YCOUNT
     GOTO WRITW
    ;
    WRITD
     MOVF YCOUNT,W          ;(DOWN)
     GOTO WRITB
    ;
    ;===========================================
    ;       RESET ENTRY
    ;===========================================
    ;
     ORG 777
     GOTO INIT              ;JUMP TO PROGRAM STARTING
    ;
     END
    ;
    ;********************************************

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    发表评论:
    载入中...

    芯片专题

    器件专题

    软件专题

    硬件专题

    综合专题

    项目专题

    原创专题

    器件检测
    LCD LED
    按键 触摸键
    E2PROM
    电池 电机
    电阻 电容 电感

    指令系统
    软件算法
    编程规范
    滤波算法
    串行通讯

    PCB设计
    I2C PWM
    红外遥控
    充电技术
    中断 ADC 

    匠人手记
    匠人夜话
    网络心路
    一周热点串烧
    从零开始玩PIC
    DIY旋转时钟

    广告5号位 [投放]

    广告3号位 [投放]

    站内搜索


    站外搜索


    百度  google
    mp3  歌词 
    图片  FLASH 
    知道  文档
    新闻  词典 
    地图  mp3 
    软件  天网 
    雅虎  爱问 
    搜狗  讯雷 
    网讯  华军 
    天空 

    21IC器件搜索
    百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》废站
  • 《匠人的百宝箱》土豆视频站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     

    推荐阅读

     

    友情连接

     [更多酷站连接]

     

     

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [hotpower 的水潭]

    [八楼的呼吸]

    [柔月阁]

    [PIC论坛]

    [SMARTCODE电子书斋]

    [阿摆手记]

    [电子伙伴]

    [xwj的文君阁]

    [所长的BLOG]

    [海边淘沙]

    [单片机开发联盟]

    [数字电视之家]

    [软件开发之窗]

    [unaided的笔记]

    [小飞的笔记]

    [ICC AVR开发网]

    [我爱研发网]

    [infernal的笔记]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [水牛的仓库]

    [逍遥电子]

    [ningpanda的博客]

    [雄鹰的空中加油站]

    [一网见天下]

    [Armoric]

    [股剩是怎样炼成的]

    [嵌入式365]

    [C-Design]

    [AVR猎手的地盘]

    [中国高校自动化网]

    [SunK]

    [工控365网]

    [煮透社]

    [白沙的香烟盒]

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    大学生电子网 

     

     

     

     

     

     

     

     《匠人的百宝箱》