第1个回答 2013-10-23
试试看
;fosc=12MHz
CNT0 EQU 20H
CNT1 EQU 21H
CNT2 EQU 22H
ORG 0000H
AJMP MAIN
ORG 001BH
DJNZ CNT0,ENDT0
MOV CNT0,#200 ;250us×200=50ms
DJNZ CNT1,ENDT0
MOV CNT1,#10 ;计数10次=500ms
CPL P3.1
DJNZ CNT2,ENDT0
MOV CNT2,#202 ;1秒等于两次500ms,200次+2次=202次
ENDT0:
MOV A,CNT2
SUBB A,#2
MOV P3.2,C ;报警,假设P3.2为报警端口,当次数≤2时报警
RETI
MAIN:
MOV CNT0,#200
MOV CNT1,#10
MOV CNT2,#202
MOV TMOD,#20H
MOV TH1,#06 ;基本定时250us
MOV TL1,#06
SETB ET1
SETB EA
SETB TR1
SLEEP:
MOV PCON,#01
NOP
SJMP SLEEP
END
附问,你的200次是指:
200次50ms =50ms*200=10s
200次P3.1翻转 =500ms*200=100s ,(我是按照这编写的程序)
200次P3.1完成高低变化 =500ms*2*200=200s
第2个回答 2013-10-24
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP T1ISR
ORG 0030H
MAIN:
MOV TMOD,#10H
MOV TH1,#HIGH(65536-50000)
MOV TL1,#LOW(65536-50000)
SETB TR1
SETB ET1
SETB EA
CLR A
CLR 00H
CLR 01H
MOV R0,#10
SJMP $
T1ISR:
CLR TR1
MOV TH1,#HIGH(65536-50000)
MOV TL1,#LOW(65536-50000)
SETB TR1
INC A
CJNE A,#10,T1E
CLR A
JNB 00H,T11
CLR ALARM
CPL 01H
JB 01H,T1E
CLR 00H
T11:
CPL P3.1
DJNZ R0,T1E
MOV R0,#10
SETB 00H
T1E:
RETI
END本回答被网友采纳
第3个回答 2013-10-26
如下即可:
ORG 0000H
SJMP START
ORG 001BH
SJMP T1_INT
START:
MOV TMOD, #10H
MOV TH1, #HIGH(65536-50000)
MOV TL1, #LOW(65536-50000)
SETB TR1
MOV IE, #88H
MOV R2, #10
MOV R3, #20
SJMP $
T1_INT:
MOV TH1, #HIGH(65536-50000)
MOV TL1, #LOW(65536-50000)
DJNZ R2, T1_END
MOV R2, #10
CPL P3.1
CPL F0
JB F0, NEXT
SETB P3.2 ;关闭报警
NEXT:
DJNZ R3, T1_END
MOV R3, #20
CLR P3.2 ;低电平报警
CLR F0
T1_END:
RETI
END
已经经过测试,符合要求。