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

📄 qdq_8.lst

📁 多功能八路抢答器
💻 LST
📖 第 1 页 / 共 2 页
字号:

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 1





       MCS-51 Family Cross Assembler   A S E M - 5 1   V 1.2
       =====================================================



	Source File:	QDQ_8.ASM
	Object File:	QDQ_8.HEX
	List File:	QDQ_8.LST



 Line  I  Addr  Code            Source

    1:				;============================================================
    2:				;================    八路抢答器程序   =======================
    3:				;================        李方方       =======================
    4:				;================    2008  年  6 月   =======================
    5:				;============================================================
    6:		N      0020	        OK EQU 20H;抢答开始标志位
    7:
    8:		N      0022	        RING EQU 22H;响铃标志位
    9:
   10:		N      0000	        ORG 0000H
   11:
   12:	  0000	01 40		        AJMP MAIN
   13:
   14:		N      0003	        ORG 0003H
   15:
   16:	  0003	01 BB		        AJMP INT0SUB
   17:
   18:		N      000B	        ORG 000BH
   19:
   20:	  000B	41 93		        AJMP T0INT
   21:
   22:		N      0013	        ORG 0013H
   23:
   24:	  0013	01 F0		        AJMP INT1SUB
   25:
   26:		N      001B	        ORG 001BH
   27:
   28:	  001B	41 9F		        AJMP T1INT
   29:
   30:		N      0040	        ORG 0040H
   31:
   32:	  0040	79 1E		MAIN:   MOV R1,#30;初设抢答时间为30s
   33:
   34:	  0042	7A 3C		        MOV R2,#60;初设答题时间为60s
   35:
   36:	  0044	75 89 11	        MOV TMOD,#11H;设置未定时器/模式1
   37:
   38:	  0047	75 8C F0	        MOV TH0,#0F0H
   39:
   40:	  004A	75 8A FF	        MOV TL0,#0FFH;越高发声频率越高,越尖
   41:
   42:	  004D	75 8D 3C	        MOV TH1,#3CH
   43:

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 2



 Line  I  Addr  Code            Source

   44:	  0050	75 8B B0	        MOV TL1,#0B0H;50ms为一次溢出中断
   45:
   46:	  0053	D2 AF		        SETB EA
   47:
   48:	  0055	D2 A9		        SETB ET0
   49:
   50:	  0057	D2 AB		        SETB ET1
   51:
   52:	  0059	D2 A8		 SETB EX0
   53:
   54:	  005B	D2 AA		 SETB EX1;允许四个中断,T0/T1/INT0/INT1
   55:
   56:	  005D	C2 20		        CLR OK
   57:
   58:	  005F	C2 22		 CLR RING
   59:
   60:	  0061	D2 8E		         SETB TR1
   61:
   62:	  0063	D2 8C		         SETB TR0;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了
   63:
   64:				;=====查询程序=====
   65:
   66:	  0065	7D 0B		START:   MOV R5,#0BH
   67:
   68:	  0067	7C 0B		         MOV R4,#0BH
   69:
   70:	  0069	7B 0B		         MOV R3,#0BH
   71:
   72:	  006B	51 1E		 ACALL DISPLAY;未开始抢答时候显示FFF
   73:
   74:	  006D	20 B0 11	         JB P3.0,NEXT;ddddddd
   75:
   76:	  0070	51 61		         ACALL DELAY
   77:
   78:	  0072	20 B0 0C	         JB P3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
   79:
   80:	  0075	51 8A		         ACALL BARK;按键发声
   81:
   82:	  0077	E9		         MOV A,R1
   83:
   84:	  0078	FE		  MOV R6,A;送R1->R6,因为R1中保存了抢答时间
   85:
   86:	  0079	D2 20		     SETB OK;抢答标志位,用于COUNT只程序中判断是否查询抢答
   87:
   88:	  007B	7F 01		     MOV R7,#01H  ;读抢答键数据信号标志,这里表示只读一次有用信号
   89:
   90:	  007D	7B 0A		     MOV R3,#0AH;抢答只显示计时,灭号数
   91:
   92:	  007F	21 29		        AJMP COUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面
   93:
   94:	  0081	30 90 17	NEXT:   JNB P1.0,FALSE1
   95:
   96:	  0084	30 91 18	    JNB P1.1,FALSE2
   97:
   98:	  0087	30 92 19	    JNB P1.2,FALSE3
   99:

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 3



 Line  I  Addr  Code            Source

  100:	  008A	30 93 1A	    JNB P1.3,FALSE4
  101:
  102:	  008D	30 94 1B	    JNB P1.4,FALSE5
  103:
  104:	  0090	30 95 1C	    JNB P1.5,FALSE6
  105:
  106:	  0093	30 96 1D	    JNB P1.6,FALSE7
  107:
  108:	  0096	30 97 1E	    JNB P1.7,FALSE8
  109:
  110:	  0099	01 65		    AJMP START
  111:
  112:				;=====非法抢答处理程序=====
  113:
  114:	  009B	7B 01		FALSE1: MOV R3,#01H
  115:
  116:	  009D	21 EA		        AJMP ERROR
  117:
  118:	  009F	7B 02		FALSE2: MOV R3,#02H
  119:
  120:	  00A1	21 EA		        AJMP ERROR
  121:
  122:	  00A3	7B 03		FALSE3: MOV R3,#03H
  123:
  124:	  00A5	21 EA		        AJMP ERROR
  125:
  126:	  00A7	7B 04		FALSE4: MOV R3,#04H
  127:
  128:	  00A9	21 EA		        AJMP ERROR
  129:
  130:	  00AB	7B 05		FALSE5: MOV R3,#05H
  131:
  132:	  00AD	21 EA		        AJMP ERROR
  133:
  134:	  00AF	7B 06		FALSE6: MOV R3,#06H
  135:
  136:	  00B1	21 EA		        AJMP ERROR
  137:
  138:	  00B3	7B 07		FALSE7: MOV R3,#07H
  139:
  140:	  00B5	21 EA		        AJMP ERROR
  141:
  142:	  00B7	7B 08		FALSE8: MOV R3,#08H
  143:
  144:	  00B9	21 EA		        AJMP ERROR
  145:
  146:
  147:				;=====INT0(抢答时间R1调整程序)=====
  148:
  149:	  00BB	E9		INT0SUB:MOV A,R1
  150:
  151:	  00BC	75 F0 0A	        MOV B,#0AH
  152:
  153:	  00BF	84		         DIV AB
  154:
  155:	  00C0	FD		         MOV R5,A

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 4



 Line  I  Addr  Code            Source

  156:
  157:	  00C1	AC F0		         MOV R4,B
  158:
  159:	  00C3	7B 0A		         MOV R3,#0AH
  160:
  161:	  00C5	51 1E		         ACALL DISPLAY;先在两个时间LED上显示R1
  162:
  163:	  00C7	30 B4 08	         JNB P3.4,INC0;P3.4为+1s键,如按下跳到INCO
  164:
  165:	  00CA	30 B5 14	         JNB P3.5,DEC0;P3.5为-1s键,如按下跳到DECO
  166:
  167:	  00CD	30 B1 1F	         JNB P3.1,BACK0;P3.1为确定键,如按下跳到BACKO
  168:
  169:	  00D0	01 BB		    AJMP INT0SUB
  170:
  171:	  00D2	E9		INC0:   MOV A,R1
  172:
  173:	  00D3	B4 63 06	CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
  174:
  175:	  00D6	79 00		        MOV R1,#00H
  176:
  177:	  00D8	51 58		        ACALL DELAY1
  178:
  179:	  00DA	01 BB		AJMP INT0SUB
  180:
  181:	  00DC	09		ADD0:   INC R1
  182:
  183:	  00DD	51 58		        ACALL DELAY1
  184:
  185:	  00DF	01 BB		        AJMP INT0SUB
  186:
  187:	  00E1	E9		DEC0:   MOV A,R1
  188:
  189:	  00E2	60 05		    JZ SETR1;如果R1为0, R1就置99,
  190:
  191:	  00E4	19		    DEC R1
  192:
  193:	  00E5	51 58		    ACALL DELAY1
  194:
  195:	  00E7	01 BB		    AJMP INT0SUB
  196:
  197:	  00E9	79 63		SETR1:  MOV R1,#63H
  198:
  199:	  00EB	51 58		        ACALL DELAY1
  200:
  201:	  00ED	01 BB		        AJMP INT0SUB
  202:
  203:	  00EF	32		BACK0:  RETI
  204:
  205:				;=====INT1(回答时间R2调整程序)=====
  206:
  207:	  00F0	EA		INT1SUB:MOV A,R2
  208:
  209:	  00F1	75 F0 0A	        MOV B,#0AH
  210:
  211:	  00F4	84		    DIV AB

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 5



 Line  I  Addr  Code            Source

  212:
  213:	  00F5	FD		MOV R5,A
  214:
  215:	  00F6	AC F0		    MOV R4,B
  216:
  217:	  00F8	7B 0A		    MOV R3,#0AH
  218:
  219:	  00FA	51 1E		    ACALL DISPLAY
  220:
  221:	  00FC	30 B4 08	    JNB P3.4,INC1
  222:
  223:	  00FF	30 B5 14	    JNB P3.5,DEC1
  224:
  225:	  0102	30 B1 1F	    JNB P3.1,BACK1
  226:
  227:	  0105	01 F0		    AJMP INT1SUB
  228:
  229:	  0107	EA		INC1:   MOV A,R2
  230:
  231:	  0108	B4 63 06	    CJNE A,#63H,ADD1
  232:
  233:	  010B	7A 00		        MOV R2,#00H
  234:
  235:	  010D	51 58		        ACALL DELAY1
  236:
  237:	  010F	01 F0		AJMP INT1SUB
  238:
  239:	  0111	0A		ADD1:   INC R2
  240:
  241:	  0112	51 58		        ACALL DELAY1
  242:
  243:	  0114	01 F0		        AJMP INT1SUB
  244:
  245:	  0116	EA		DEC1:   MOV A,R2
  246:
  247:	  0117	60 05		    JZ SETR2
  248:
  249:	  0119	1A		    DEC R2
  250:
  251:	  011A	51 58		    ACALL DELAY1
  252:
  253:	  011C	01 F0		    AJMP INT1SUB
  254:
  255:	  011E	7A 63		SETR2:  MOV R2,#63H
  256:
  257:	  0120	51 58		        ACALL DELAY1
  258:
  259:	  0122	01 F0		        AJMP INT1SUB
  260:
  261:	  0124	32		BACK1:  RETI
  262:
  263:				;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=====
  264:
  265:	  0125	EA		REPEAT:MOV A,R2     ;使用锦囊时重新计时
  266:
  267:	  0126	FE		       MOV R6,A

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 6



 Line  I  Addr  Code            Source

  268:
  269:	  0127	C2 22		       CLR RING
  270:
  271:	  0129	78 00		COUNT:  MOV R0,#00H;重置定时器中断次数
  272:
  273:	  012B	75 8D 3C	        MOV TH1,#3CH
  274:
  275:	  012E	75 8B B0	        MOV TL1,#0B0H;重置定时器
  276:
  277:	  0131	EE		RECOUNT:MOV A,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6
  278:
  279:	  0132	75 F0 0A	        MOV B,#0AH
  280:
  281:	  0135	84		    DIV AB;除十分出个位/十位
  282:
  283:	  0136	F5 30		    MOV 30H,A;十位存于(30H)
  284:
  285:	  0138	85 F0 31	    MOV 31H,B;个位存于(31H)
  286:
  287:	  013B	AD 30		    MOV R5,30H;取十位
  288:
  289:	  013D	AC 31		    MOV R4,31H;取个位
  290:
  291:	  013F	EE		    MOV A,R6
  292:
  293:	  0140	94 07		    SUBB A,#07H
  294:
  295:	  0142	50 15		    JNC LARGER;大于5s跳到LARGER,小于等于5s会提醒
  296:
  297:	  0144	E8		    MOV A,R0
  298:
  299:	  0145	B4 0A 04	        CJNE A,#0AH,FULL;1s中0.5s向下运行

⌨️ 快捷键说明

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