基于PIC16F877A单片机的八路抢答器

2020-02-08 09:18发布

本人初学PIC,只会汇编语言,呵呵。现在把我写的八路抢答器源程序贡献出来与各位坛友一起分享。错误或不妥之处,还请见谅。本程序已经在我的PIC开发板上实际验证通过了。
汇编源程序如下:
;开机默认显示0,表示没有选手按下。
;若只要当其中有一名选手最先按下,则显示相应选手的号码值,同时并伴有蜂鸣音,已提示之作用。
;其余选手再按,均无效。只有当主持人复位后,方可进行下一轮的抢答。
      #INCLUDE<P16F877A.INC>
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
;调试模式关闭,写保护,一半ROM可在线改写,EEPROM加密,低压编程关闭,掉电检测关闭,上电延时开,看门狗关,4M晶振XT振荡
      ORG  0000H
START:
      CLRF    PORTD                                 
      BSF     STATUS,RP0           
      CLRF    TRISD            
      BCF     STATUS,RP0      
      MOVLW   0                  
      CALL    TABLE
      MOVWF   PORTD

LOOP1:
      BTFSC   PORTC,0
      GOTO    LOOP2
      CALL    DELAY
      BTFSC   PORTC,0
      GOTO    LOOP2
      MOVLW   1                  
      CALL    TABLE
      MOVWF   PORTD
      CALL    BEEP
      GOTO    $
      
LOOP2:
      BTFSC   PORTC,1
      GOTO    LOOP3
      CALL    DELAY
      BTFSC   PORTC,1
      GOTO    LOOP3
      MOVLW   2                  
      CALL    TABLE
      MOVWF   PORTD
      CALL    BEEP
      GOTO    $
             
LOOP3:
      BTFSC   PORTC,2
      GOTO    LOOP4
      CALL    DELAY
      BTFSC   PORTC,2
      GOTO    LOOP4
      MOVLW   3                  
      CALL    TABLE
      MOVWF   PORTD
      CALL    BEEP
      GOTO    $
      
LOOP4:
      BTFSC   PORTC,3
      GOTO    LOOP5
      CALL    DELAY
      BTFSC   PORTC,3
      GOTO    LOOP5
      MOVLW   4                  
      CALL    TABLE
      MOVWF   PORTD
      CALL    BEEP
      GOTO    $

LOOP5:
      BTFSC   PORTC,4
      GOTO    LOOP6
      CALL    DELAY
      BTFSC   PORTC,4
      GOTO    LOOP6
      MOVLW   5                  
      CALL    TABLE
      MOVWF   PORTD
      CALL    BEEP
      GOTO    $

LOOP6:
      BTFSC   PORTC,5
      GOTO    LOOP7
      CALL    DELAY
      BTFSC   PORTC,5
      GOTO    LOOP7
      MOVLW   6                  
      CALL    TABLE
      MOVWF   PORTD
      CALL    BEEP
      GOTO    $

LOOP7:
      BTFSC   PORTC,6
      GOTO    LOOP8
      CALL    DELAY
      BTFSC   PORTC,6
      GOTO    LOOP8
      MOVLW   7                  
      CALL    TABLE
      MOVWF   PORTD
      CALL    BEEP
      GOTO    $

LOOP8:
      BTFSC   PORTC,7
      GOTO    START
      CALL    DELAY
      BTFSC   PORTC,7
      GOTO    START
      MOVLW   8                  
      CALL    TABLE
      MOVWF   PORTD
      CALL    BEEP
      GOTO    $
TABLE:
      ADDWF   PCL,1               
      RETLW   3FH                                            
      RETLW   06H                 
      RETLW   5BH                 
      RETLW   4FH
      RETLW   66H                                            
      RETLW   6DH                 
      RETLW   7DH                 
      RETLW   07H
      RETLW   7FH                 
      RETLW   6FH
BEEP:
      BSF    STATUS,RP0     
      CLRF   TRISB         
      BCF    STATUS,RP0        
      BSF    PORTB,0
      CALL   DELAY1S
      CLRF   PORTB
      RETURN
DELAY1S:
      MOVLW  06H            
      MOVWF  30H            
LOOOP1:
      MOVLW  0EBH           
      MOVWF  31H            
LOOOP2:
      MOVLW  0ECH           
      MOVWF  32H            
LOOOP3:
      DECFSZ 32H            
      GOTO   LOOOP3         
      DECFSZ 31H
      GOTO   LOOOP2
      DECFSZ 30H
      GOTO   LOOOP1
      RETURN      
DELAY:
      MOVLW  02H            
      MOVWF  30H            
LOP1:
      MOVLW  0A5H           
      MOVWF  31H                     
LOP2:
      DECFSZ 31H            
      GOTO   LOP2         
      DECFSZ 30H
      GOTO   LOP1
      RETURN
      END
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。