📄 control.lst
字号:
MPASM 4.02 Released CONTROL.ASM 5-11-2006 20:48:14 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001
00002 ;操作说明:上电后,默认的4个输出通道输出的都是1号输入信号
00003 ;不停的按动信号选择键,则相应的输出通道输出1号输入信号→2号输入信号→3号输入信号→4号输入信号→1号输入信
号
00004 ;*******************************************************************************
00005 ;************************** 4路输入/输出型VGA切换程序 **************************
00006 ;*******************************************************************************
00007 #INCLUDE "P16F628.INC"
00001 LIST
00002 ; P16F628.INC Standard Header File, Version 1.01 Microchip Technology, Inc.
00261 LIST
00000086 00008 IN_OUT_DDR EQU TRISB
00000006 00009 IN_OUT_PORT EQU PORTB
00000000 00010 RB0 EQU 0H
00000001 00011 RB1 EQU 1H
00000002 00012 RB2 EQU 2H
00000003 00013 RB3 EQU 3H
00000004 00014 RB4 EQU 4H
00000005 00015 RB5 EQU 5H
00000006 00016 RB6 EQU 6H
00000007 00017 RB7 EQU 7H
00000000 00018 RA0 EQU 0H
00000001 00019 RA1 EQU 1H
00000002 00020 RA2 EQU 2H
00000003 00021 RA3 EQU 3H
00000004 00022 RA4 EQU 4H
00000005 00023 RA5 EQU 5H
00000006 00024 RA6 EQU 6H
00000007 00025 RA7 EQU 7H
00026 ;定义按键脚
00000007 00027 KEY0 EQU RB7
00000006 00028 KEY1 EQU RB6
00000005 00029 KEY2 EQU RB5
00000004 00030 KEY3 EQU RB4
00031 ;******************************************************************************
00032 ;定义信号输入/输出控制脚
00000002 00033 IN_SEL0 EQU RB2
00000003 00034 IN_SEL1 EQU RB3
00000000 00035 OUT_SEL0 EQU RB0
00000001 00036 OUT_SEL1 EQU RB1
00037 ;******************************************************************************
00000085 00038 CONTROL_DDR EQU TRISA
00000005 00039 CONTROL_PORT EQU PORTA
00040 ;定义数据锁存/写入脚
00000001 00041 LATCH EQU RA1
00000000 00042 WRITE EQU RA0
00043 ;******************************************************************************
00044 ;定义按键去抖动延迟时间
00000030 00045 TIMER15S1 EQU 30H
00000031 00046 TIMER15S2 EQU 31H
00000032 00047 TIMER15S3 EQU 32H
00000033 00048 TIMER15S4 EQU 33H
00049 ;******************************************************************************
MPASM 4.02 Released CONTROL.ASM 5-11-2006 20:48:14 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00050 ;定义各按键轮流次序寄存器
00000034 00051 out_reg0 EQU 34H
00000035 00052 out_reg1 EQU 35H
00000036 00053 out_reg2 EQU 36H
00000037 00054 out_reg3 EQU 37H
00055 ;******************************************************************************
00056 ;定义要操作的输入/输出通道号
00000038 00057 in_numble EQU 38H
00000039 00058 out_numble EQU 39H
00059 ;******************************************************************************
00060
0000 00061 ORG 0H ;复位入口
0000 2877 00062 GOTO MAIN
00063 ;******************************************************************************
00064 ;中断子程序
00065 ;65ms中断,里面设置了4个以65ms为单位的按键去抖动时间
00066 ;******************************************************************************
0004 00067 ORG 4H ;中断入口
0004 1D0B 00068 BTFSS INTCON,T0IF ;
0005 0009 00069 RETFIE ;
0006 110B 00070 BCF INTCON,T0IF ;
0007 0AB0 00071 INCF TIMER15S1,F ;
0008 0AB1 00072 INCF TIMER15S2,F ;
0009 0AB2 00073 INCF TIMER15S3,F ;
000A 0AB3 00074 INCF TIMER15S4,F ;
000B 0009 00075 RETFIE
00076 ;******************************************************************************
00077 ;操作子程序
00078 ;入口in_numble:选择的输入信号通道号,从0到3代表1到4号输入通道号。
00079 ;入口out_numble:选择从哪个通道输出,从0到3代表1到4号输出通道号。
00080 ;出口:无
00081 ;******************************************************************************
000C 00082 SEL_INX_OUTY:
000C 0064 00083 CLRWDT ;
000D 00084 CHECK_IN0:
000D 3000 00085 MOVLW 0H ;
000E 0638 00086 XORWF in_numble,W ;检测是否选择了1号输入通道
000F 1D03 00087 BTFSS STATUS,Z ;
0010 2814 00088 GOTO CHECK_IN1
0011 1106 00089 BCF IN_OUT_PORT,IN_SEL0
0012 1186 00090 BCF IN_OUT_PORT,IN_SEL1
0013 2829 00091 GOTO CHECK_OUT0 ;
0014 00092 CHECK_IN1:
0014 3001 00093 MOVLW 1H ;
0015 0638 00094 XORWF in_numble,W ;检测是否选择了2号输入通道
0016 1D03 00095 BTFSS STATUS,Z ;
0017 281B 00096 GOTO CHECK_IN2
0018 1506 00097 BSF IN_OUT_PORT,IN_SEL0
0019 1186 00098 BCF IN_OUT_PORT,IN_SEL1
001A 2829 00099 GOTO CHECK_OUT0 ;
001B 00100 CHECK_IN2:
001B 3002 00101 MOVLW 2H ;
001C 0638 00102 XORWF in_numble,W ;检测是否选择了3号输入通道
MPASM 4.02 Released CONTROL.ASM 5-11-2006 20:48:14 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
001D 1D03 00103 BTFSS STATUS,Z ;
001E 2822 00104 GOTO CHECK_IN3
001F 1106 00105 BCF IN_OUT_PORT,IN_SEL0
0020 1586 00106 BSF IN_OUT_PORT,IN_SEL1
0021 2829 00107 GOTO CHECK_OUT0 ;
0022 00108 CHECK_IN3:
0022 3003 00109 MOVLW 3H ;
0023 0638 00110 XORWF in_numble,W ;检测是否选择了4号输入通道
0024 1D03 00111 BTFSS STATUS,Z ;
0025 0008 00112 RETURN ;
0026 1506 00113 BSF IN_OUT_PORT,IN_SEL0
0027 1586 00114 BSF IN_OUT_PORT,IN_SEL1
0028 2829 00115 GOTO CHECK_OUT0 ;
0029 00116 CHECK_OUT0:
0029 3000 00117 MOVLW 0H ;
002A 0639 00118 XORWF out_numble,W ;检测是否选择了1号输出通道
002B 1D03 00119 BTFSS STATUS,Z ;
002C 2830 00120 GOTO CHECK_OUT1 ;
002D 1006 00121 BCF IN_OUT_PORT,OUT_SEL0
002E 1086 00122 BCF IN_OUT_PORT,OUT_SEL1
002F 2845 00123 GOTO SEND_DATA ;
0030 00124 CHECK_OUT1:
0030 3001 00125 MOVLW 1H ;
0031 0639 00126 XORWF out_numble,W ;检测是否选择了2号输出通道
0032 1D03 00127 BTFSS STATUS,Z ;
0033 2837 00128 GOTO CHECK_OUT2 ;
0034 1406 00129 BSF IN_OUT_PORT,OUT_SEL0
0035 1086 00130 BCF IN_OUT_PORT,OUT_SEL1
0036 2845 00131 GOTO SEND_DATA ;
0037 00132 CHECK_OUT2:
0037 3002 00133 MOVLW 2H ;
0038 0639 00134 XORWF out_numble,W ;检测是否选择了3号输出通道
0039 1D03 00135 BTFSS STATUS,Z ;
003A 283E 00136 GOTO CHECK_OUT3 ;
003B 1006 00137 BCF IN_OUT_PORT,OUT_SEL0
003C 1486 00138 BSF IN_OUT_PORT,OUT_SEL1
003D 2845 00139 GOTO SEND_DATA ;
003E 00140 CHECK_OUT3:
003E 3003 00141 MOVLW 3H ;
003F 0639 00142 XORWF out_numble,W ;检测是否选择了4号输出通道
0040 1D03 00143 BTFSS STATUS,Z ;
0041 0008 00144 RETURN ;
0042 1406 00145 BSF IN_OUT_PORT,OUT_SEL0
0043 1486 00146 BSF IN_OUT_PORT,OUT_SEL1
0044 2845 00147 GOTO SEND_DATA ;
0045 00148 SEND_DATA: ;写入数据
0045 1005 00149 BCF CONTROL_PORT,WRITE
0046 0000 00150 NOP
0047 0000 00151 NOP
0048 1405 00152 BSF CONTROL_PORT,WRITE
0049 0000 00153 NOP
004A 0000 00154 NOP
004B 1005 00155 BCF CONTROL_PORT,WRITE
MPASM 4.02 Released CONTROL.ASM 5-11-2006 20:48:14 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
004C 0000 00156 NOP
004D 0000 00157 NOP
00158 ;锁存数据
004E 1085 00159 BCF CONTROL_PORT,LATCH
004F 0000 00160 NOP
0050 0000 00161 NOP
0051 1485 00162 BSF CONTROL_PORT,LATCH
0052 0000 00163 NOP
0053 0000 00164 NOP
0054 1085 00165 BCF CONTROL_PORT,LATCH
0055 0000 00166 NOP
0056 0000 00167 NOP
0057 0008 00168 RETURN
00169 ;******************************************************************************
00170 ;初始化子程序
00171 ;入口:无
00172 ;出口:无
00173 ;功能:初始化IO,并让所有的输出通道选择1号输入信号
00174 ;******************************************************************************
0058 00175 INIT_PORT:
0058 1683 00176 BSF STATUS,RP0 ;
0059 3007 00177 MOVLW 7H
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
005A 0081 00178 MOVWF OPTION_REG ;使能RB口的弱上拉功能,并使定时器0有1:256的前分频器
005B 30FC 00179 MOVLW 0FCH
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
005C 0085 00180 MOVWF CONTROL_DDR ;设置LATCH/WRITE为输出,其余为输入
005D 30F0 00181 MOVLW 0F0H
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
005E 0086 00182 MOVWF IN_OUT_DDR ;设置KEY0-KEY3为输入,其余为输出
00183
005F 1283 00184 BCF STATUS,RP0 ;
0060 0185 00185 CLRF CONTROL_PORT
0061 0186 00186 CLRF IN_OUT_PORT ;
00187
0062 3000 00188 MOVLW 0H
0063 00B8 00189 MOVWF in_numble ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -