打印

人生第一个程序

[复制链接]
1932|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hhseng|  楼主 | 2007-4-25 21:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是初学PIC的,下面是我个人第一个程序,不过哪个延时子程序是在网上下的
请拍磚指教.

;红绿蓝LED循環控制
  LIST P=16F877A
  INCLUDE "P16F877A.INC"
COUNTER EQU 25H ;定義25H为計數器
  ORG 0000H
  NOP
主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  BSF STATUS,5 ;选择体1
  MOVLW 0F8H ;設置RC低3位为輸出
  MOVWF TRISC
  MOVLW 04H ;設置RB2为输入
  MOVWF TRISB
  BCF STATUS,5 ;选择体0
  MOVLW 00H ;設置RC低3位初始化后为0
  MOVWF PORTC
  MOVLW 0FFH ;設置RB2位初始化后为1
  CLRF COUNTER ;計數器清0
CYC
  CALL SWITCH ;调用開關控制子程序
  GOTO CYC ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
按键控制子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SWITCH
  BTFSC PORTB,2 ;檢測RB2有否按下,有跳过下一条指令
  GOTO BO ;否,繼續檢測
  PAGESEL TIME10MS ;转入TIME10MS延时子程序页
  CALL TIME10MS ;调用TIME10MS延時子程序
  PAGESEL SWITCH ;转回SWITCH程序页
  BTFSC PORTB,2 ;再次檢測RB2有否按下,有跳过下一条指令
  GOTO BO ;否,继续檢測
TOFF
  BTFSS PORTB,2 ;檢測RB2有否放开,有跳过下一条指令
  GOTO TOFF ;否,繼續檢測
  PAGESEL TIME10MS ;转入TIME10MS延时子程序页
  CALL TIME10MS ;调用TIME10MS延時子程序
  PAGESEL SWITCH ;转回SWITCH程序页
  BTFSS PORTB,2 ;再檢測RB2有否放开,有跳过下一条指令
  GOTO TOFF ;否,繼續檢測
  INCF COUNTER ;計數器加1为0跳过下一条指令 
  MOVLW 03H ;屏蔽計數器高6位
  ANDWF COUNTER,W ;檢測計數器
  ADDWF PCL,F ;根据計數器值狀態调用相應子程序
  GOTO LED4
  GOTO LED1
  GOTO LED2
  GOTO LED3
BO
  NOP
  RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
第1种亮灯模式子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED1
  MOVLW 04H ;点亮RED LED
  MOVWF PORTC 
  PAGESEL TIME1S ;转入TIME1S延时子程序页
  CALL TIME1S ;延時1秒
  PAGESEL LED1 ;转回LED1程序页 
  CALL SWITCH ;檢測按键狀態
  GOTO LED1 ;繼續返回点亮RED LED
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
第2种亮灯模式子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED2
  MOVLW 02H ;点亮GREEN LED
  MOVWF PORTC 
  PAGESEL TIME1S ;转入TIME1S延时子程序页
  CALL TIME1S ;延時1秒
  PAGESEL LED2 ;转回LED2程序页 
  CALL SWITCH ;檢測按键狀態
  GOTO LED2 ;繼續返回点亮GREEM LED
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
第3种亮灯模式子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED3
  MOVLW 01H ;点亮BLUE LED
  MOVWF PORTC
  PAGESEL TIME1S ;转入TIME1S延时子程序页
  CALL TIME1S ;延時1秒
  PAGESEL LED3 ;转回LED3程序页 
  CALL SWITCH ;檢測按键狀態
  GOTO LED3 ;繼續返回点亮BLUE LED
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
第4种亮灯模式子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED4
  INCF PORTC ;順序点亮B,G,B+G,R,R+B,R+G
  PAGESEL TIME1S ;转入TIME1S延时子程序页
  CALL TIME1S ;延時1秒
  PAGESEL LED4 ;转回LED4程序页 
  CALL SWITCH ;檢測按键狀態
  GOTO LED4 ;繼續順序点亮B,G,B+G,R,R+B,R+G
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
延時10MS子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME10MS
  MOVLW 04H ;
  MOVWF 23H
L1
  MOVLW 0FFH
  MOVWF 24H
L2       
    DECFSZ 24H
  GOTO L2
  DECFSZ 23H
  GOTO L1
  RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
延時1S子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME1S
  MOVLW 06H
  MOVWF 20H
LOOP1
  MOVLW 0EBH
  MOVWF 21H
LOOP2
  MOVLW 0ECH
  MOVWF 22H
LOOP3
  DECFSZ 22H
  GOTO LOOP3
  CALL SWITCH
  DECFSZ 21H
  GOTO LOOP2
  DECFSZ 20H
  GOTO LOOP1
  RETURN
  END
  
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

483

帖子

0

粉丝