⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 light control.asm

📁 基于16F877A的路灯控制系统的设计
💻 ASM
📖 第 1 页 / 共 5 页
字号:
         CALL   IFSTORE
         CALL   GETADKEY
         MOVLW  0X30
         XORWF  KEYRES,W
         BTFSC  STATUS,Z
         GOTO   TESTKEY1_7
TESTKEY2_7
         DECFSZ COUNTLINE,F     ;循环判断键值,以防止有干扰或是误判
         GOTO   TESTKEY2_7
         MOVF   KEYRES,W
         MOVWF  KEYRES_B        ;将KEYRES的值转存到KEYRES_B
                                ;以防止在监测键盘是否弹起时将其覆盖
TESTKEY3_7
         CALL   GETADKEY        ;直到键盘弹击再进行下一步
         MOVLW  0X30
         XORWF  KEYRES,W
         BTFSS  STATUS,Z
         GOTO   TESTKEY3_7
;***************************************
         MOVLW  39H             ;检测键值是否为9,是则返回MENU
         BCF    STATUS,Z
         XORWF  KEYRES_B,W
         BTFSC  STATUS,Z
         GOTO   MENU
         GOTO   TESTKEY1_7





         



;***************************************
ALLON                           ;所有的路灯开启子程序
         BSF    PORTB,0
         BSF    PORTB,6
         BSF    PORTB,7
         BSF    PORTC,3
         BSF    PORTC,4
         BSF    PORTC,5
         MOVLW  0FFH
         MOVWF  PORTD
         BSF    PORTE,1
         BSF    PORTE,2
         MOVLW  01H
         MOVWF  STATE
         RETURN
;***************************************
ALLOFF                          ;所有路灯关闭
         BCF    PORTB,0
         BCF    PORTB,6
         BCF    PORTB,7
         BCF    PORTC,3
         BCF    PORTC,4
         BCF    PORTC,5
         MOVLW  00H
         MOVWF  PORTD
         BSF    PORTE,1
         BSF    PORTE,2
         MOVLW  00H
         MOVWF  STATE
         RETURN





;***************************************
;初始化程序
;***************************************
INITIO
;****************************************
;设置I/O口的输入输出方向
         BSF    STATUS,RP0
         MOVLW  3FH             ;即00111111,RA5为LCD读写使能控制(出)
         MOVWF  TRISA           ;RA2为光敏电阻输入,RA0为键盘输入,其余接路灯输出
                                ;RA1为测220V电压的模拟输入,RA4为测交流电流的模拟通道
         MOVLW  00H             ;RB5-RB2为与LCD的数据线,RB1为数据指令控制线
         MOVWF  TRISB           ;都应为输出
         MOVLW  83H             ;即10000011,RC7为串行输入,RC6为串行输出,      
         MOVWF  TRISC           ;RC1,RC0为TMR1的自带震荡输入,RC2为背光控制
         MOVLW  00H             ;PORTD,PORE都用来控制路灯
         MOVWF  TRISD
         MOVLW  01H
         MOVWF  TRISE
         BCF    STATUS,RP0
         RETURN
;***************************************
;设置定时器TMR1
INITMR1
         clrf	TMR1L
	     movlw	0x80
	     movwf	TMR1H
	     movlw	0x0F            ;即00001111,分频比0:0,外部时钟源,不同步
	     movwf	T1CON
         BSF    STATUS,RP0
         BSF    PIE1,TMR1IE
         BCF    STATUS,RP0
       	 RETURN
;***************************************
;初始化TMR2,将其设定在延时可调的周期性定时器
;完成每1ms产生一次中断,以对电压或电流电路的采样
INITMR2
        
        BSF     STATUS,RP0
        BSF     PIE1,TMR2IE
        MOVLW   64H
        MOVWF   PR2             ;PR2的值设为100
        BCF     STATUS,RP0
        MOVLW   28H             ;即00101000,后分频比为1:10,预分频比为1:1并启动
        MOVWF   T2CON
        RETURN
;***************************************
;设置参数初始值
INITVALUE
         MOVLW  00H             ;设置时钟的初始值为00:00:00
         MOVWF  SECOND
         MOVWF  MINUTE
         MOVWF  HOUR
         MOVLW  00H
         CALL   READEEPROM
         BSF    STATUS,RP0
         BSF    STATUS,RP1
         BTFSC  EECON1,RD
         GOTO   $-1
         BCF    STATUS,RP0
         BCF    STATUS,RP1
         BCF    STATUS,IRP
         MOVWF  MODE
         MOVLW  01H             ;设置定时开关时间的初始值,首先从
         CALL   READEEPROM      ;存储器中读取,然后检测是不是都是0FF
         BSF    STATUS,RP0      ;如果都是0FF则表示是程序第一次运行,
         BSF    STATUS,RP1      ;则设开初始值为6点,关初始值为18点
         BTFSC  EECON1,RD
         GOTO   $-1
         BCF    STATUS,RP0
         BCF    STATUS,RP1
         MOVWF  HOUR1
         MOVLW  02H
         CALL   READEEPROM
         BSF    STATUS,RP0
         BSF    STATUS,RP1
         BTFSC  EECON1,RD
         GOTO   $-1
         BCF    STATUS,RP0
         BCF    STATUS,RP1
         MOVWF  MINUTE1
         MOVLW  03H
         CALL   READEEPROM
         BSF    STATUS,RP0
         BSF    STATUS,RP1
         BTFSC  EECON1,RD
         GOTO   $-1
         BCF    STATUS,RP0
         BCF    STATUS,RP1
         MOVWF  HOUR2
         MOVLW  04H
         CALL   READEEPROM
         BSF    STATUS,RP0
         BSF    STATUS,RP1
         BTFSC  EECON1,RD
         GOTO   $-1
         BCF    STATUS,RP0
         BCF    STATUS,RP1
         MOVWF  MINUTE2
         MOVLW  0FFH
         BCF    STATUS,Z
         XORWF  HOUR1,W
         BTFSS  STATUS,Z
         GOTO   REMIAN
         MOVLW  0FFH
         BCF    STATUS,Z
         XORWF  MINUTE1,W
         BTFSS  STATUS,Z
         GOTO   REMIAN
         MOVLW  0FFH
         BCF    STATUS,Z
         XORWF  HOUR2,W
         BTFSS  STATUS,Z
         GOTO   REMIAN
         MOVLW  0FFH
         BCF    STATUS,Z
         XORWF  MINUTE2,W
         BTFSS  STATUS,Z
         GOTO   REMIAN
         MOVLW  01H
         MOVWF  MODE            ;默认模式为光控模式
         MOVLW  06H             ;说明是第一运行,因为都是0
         MOVWF  HOUR1
         CLRF   MINUTE1
         MOVLW  12H
         MOVWF  HOUR2
         CLRF   MINUTE2
         CLRF   IFCOUNT
         CLRF   ADVCOUNT
         CLRF   ADICOUNT
         CLRF   WHICHV
         MOVLW  0AH
         MOVWF  DELAYAD
         MOVLW  01H
         MOVWF  VORI
         MOVLW  25H 
         MOVWF  ADSTORE         ;设置光敏电阻A/D转换的限值
         MOVLW  0AH
         MOVWF  ADCOUNT
         MOVLW  55H
         MOVWF  FSR             ;初始化FSR,使接收从55开始
         CLRF   IFTIMEDIS
         CLRF   IFMINC
         CLRF   ADCTMER
         CLRF   BACKLIGHT
         MOVLW  01H
         MOVWF  IFCHANGE
REMIAN
         RETURN



;**************************************
; 以下是关于读写EEPROM数据存储器的子程序。
;存储单元安排如下00H:模式参数MODE的值01H:HOUR1
;02H:MINUTE1 03H:HOUR2 04H:MINUTE2 
;**************************************
;**************************************
;读EEPROM数据存储器的子程序
;**************************************
;入口参数:W,用于存放欲访问的存储单元的地址
;出口参数:WREG,用于存放读取到的数据值
READEEPROM
        BSF    STATUS,RP1
        BCF    STATUS,RP0
        MOVWF  EEADR
        BSF    STATUS,RP0
        BCF    EECON1,EEPGD
        BSF    EECON1,RD
        BCF    STATUS,RP0
        MOVF   EEDATA,W
        BCF    STATUS,RP1
        RETURN
;**************************************
;写EEPROM数据存储器的子程序
;**************************************
;入口参数:ADDR:存放存储单元的地址
;         VALUE:欲写入的值
;出口参数:无
WRITEEEPROM
        BSF    STATUS,RP1
        BSF    STATUS,RP0
        BTFSC  EECON1,WR
        GOTO   $-1
        BCF    STATUS,RP1
        BCF    STATUS,RP0
        MOVF   ADDR,W
        BSF    STATUS,RP1
        MOVWF  EEADR
        BCF    STATUS,RP1
        BCF    STATUS,RP0
        MOVF   VALUE,W
        BSF    STATUS,RP1
        MOVWF  EEDATA
        BSF    STATUS,RP0
        BCF    EECON1,EEPGD
        BSF    EECON1,WREN
        BCF    INTCON,GIE
        MOVLW  55H
        MOVWF  EECON2
        MOVLW  0AAH
        MOVWF  EECON2
        BSF    EECON1,WR
        BSF    INTCON,GIE
        BCF    EECON1,WREN
        BCF    STATUS,RP1
        BCF    STATUS,RP0
        RETURN

STORE1
        MOVLW  02H
        MOVWF  ADDR
        MOVF   HOUR1,W
        MOVWF  VALUE
        CALL   WRITEEEPROM
        MOVLW  03H
        MOVWF  ADDR
        MOVF   MINUTE1,W
        MOVWF  VALUE    
        CALL   WRITEEEPROM
        RETURN
STORE2
        MOVLW  04H
        MOVWF  ADDR
        MOVF   HOUR2,W
        MOVWF  VALUE
        CALL   WRITEEEPROM
        MOVLW  05H
        MOVWF  ADDR
        MOVF   MINUTE2,W
        MOVWF  VALUE    
        CALL   WRITEEEPROM
        RETURN



;**********************************
;判断计算机是否通过串行口对模式和定时时间进行了调整
;如果是,则在EEPROM中存储新值
;**********************************
IFSTORE
       CLRW
       XORWF   ADCTMER,W
       BTFSC   STATUS,Z
       GOTO    OVERIFSTORE      
       MOVLW   01H
       XORWF   ADCTMER,W
       BTFSC   STATUS,Z
       GOTO    MSTORE
       MOVLW   02H
       XORWF   ADCTMER,W
       BTFSC   STATUS,Z
       GOTO    WCSTORE
       MOVLW   03H
       XORWF   STATUS,Z
       GOTO    TMRONSTORE
       MOVLW   04H
       XORWF   ADCTMER,W
       BTFSC   STATUS,Z
       GOTO    TMROFFSTORE
       GOTO    OVERIFSTORE
MSTORE
       MOVLW   01H
       MOVWF   ADDR
       MOVF    MODE,W
       MOVWF   VALUE
       CALL    WRITEEEPROM
       GOTO    OVERIFSTORE
WCSTORE
       MOVLW   06H
       MOVWF   ADDR
       CLRF    VALUE
       CALL    WRITEEEPROM
       INCF    ADDR,F
       CALL    WRITEEEPROM
       GOTO    OVERIFSTORE
TMRONSTORE
       MOVLW   02H
       MOVWF   ADDR
       MOVF    HOUR1,W
       MOVWF   VALUE
       CALL    WRITEEEPROM
       INCF    ADDR,F
       MOVF    MINUTE1,W
       MOVWF   VALUE
       CALL    WRITEEEPROM
       GOTO    OVERIFSTORE
TMROFFSTORE
       MOVLW   04H
       MOVWF   ADDR
       MOVF    HOUR2,W
       MOVWF   VALUE
       CALL    WRITEEEPROM
       INCF    ADDR,F
       MOVF    MINUTE2,W
       MOVWF   VALUE
       CALL    WRITEEEPROM
       GOTO    OVERIFSTORE
OVERIFSTORE
       CLRF    ADCTMER
       RETURN


;*************************************
;LCD显示子程序
;*************************************
;LCD的MENU显示子程序
;显示如下MENU 1-MC 2-TD ?
;        3TA 4TRA 5H 6W ?
;*************************************
INITIALLCD
        CALL   CLRLCD
        MOVLW  80H
        CALL   SENDCMD
        MOVLW  'M'
        CALL   PUTCLCD
        MOVLW  'E'
        CALL   PUTCLCD
        MOVLW  'N'
        CALL   PUTCLCD
        MOVLW  'U'
        CALL   PUTCLCD
        MOVLW  ' '
        CALL   PUTCLCD
        MOVLW  '1'
        CALL   PUTCLCD
        MOVLW  '-'
        CALL   PUTCLCD
        MOVLW  'M'
        CALL   PUTCLCD
        MOVLW  'C'
        CALL   PUTCLCD
        MOVLW  ' '
        CALL   PUTCLCD
        MOVLW  '2'
        CALL   PUTCLCD
        MOVLW  '-'
        CALL   PUTCLCD
        MOVLW  'T'
        CALL   PUTCLCD
        MOVLW  'D'
        CALL   PUTCLCD
        MOVLW  ' '
        CALL   PUTCLCD
        MOVLW  30H
        ADDWF  MODE,W
        CALL   PUTCLCD
        MOVLW  0X0C0
        CALL   SENDCMD
        MOVLW  '3'
        CALL   PUTCLCD
        MOVLW  'T'
        CALL   PUTCLCD
        MOVLW  'A'
        CALL   PUTCLCD
        MOVLW  ' '
        CALL   PUTCLCD
        MOVLW  '4'
        CALL   PUTCLCD
        MOVLW  'T'
        CALL   PUTCLCD
        MOVLW  'R'
        CALL   PUTCLCD
        MOVLW  'A'
        CALL   PUTCLCD
        MOVLW  ' '
        CALL   PUTCLCD
        MOVLW  '5'
        CALL   PUTCLCD
        MOVLW  'H'
        CALL   PUTCLCD
        MOVLW  ' '
        CALL   PUTCLCD
        MOVLW  '6'
        CALL   PUTCLCD
        MOVLW  'W'
        CALL   PUTCLCD
        MOVLW   ' '
        CALL   PUTCLCD
        MOVLW  30H
        ADDWF  STATE,W
        CALL   PUTCLCD
        RETURN

;*********************************
;1-MC,模式选择显示子程序
;显示如下:MODE CHOOSE    ?
;          1-LC 2-TC 3-HC ?
MODECHOOSELCD
        CALL   CLRLCD
        MOVLW  0X080
        CALL   SENDCMD
        MOVLW  'M'
        CALL   PUTCLCD
        MOVLW  'O'
        CALL   PUTCLCD
        MOVLW  'D'
        CALL   PUTCLCD
        MOVLW  'E'
        CALL   PUTCLCD
        MOVLW  ' '
        CALL   PUTCLCD
        MOVLW  'C'
        CALL   PUTCLCD
        MOVLW  'H'
        CALL   PUTCLCD
        MOVLW  'O'
        CALL   PUTCLCD
        MOVLW  'O'
        CALL   PUTCLCD

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -