51单片机20秒定时报警如何写

要求20秒定时报警(倒计时)19.18.17....00
(2)20秒显示(时间间隔0.5S)
(3)00之后马上报警(00不消失)
报警,单音即可
必需有注释和流程图
满意的可以追加分数
谢谢各位了
单片机型号是89S51
倒数:(肯定有错,高手可以修改修改)
START:MOV R0,#20
MOV DPTR,#TABLE
LOOP:ACALL DISPLAY
DEC R0
CJNE R0,#0,LOOP
JMP START
DISPLAY:MOV A,R0
MOV B,#10
DIV AB
MOV R1,A
MOV R2,B
MOV R3,#50
LOOP1:MOV A,R2
ACALL CHANG
CLR P2.0
ACALL DLY 10ms
SETB P2.0
MOV A,R1
ACALL CHANG
CLR P2.1
ACALL DLY 10ms
SETB P2.1
DJNZ R3,LOOP1
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H
DB 8EH,0BFH,8CH,0FFH
CHANG:MOVC A,@A+DPTR
MOV P0,A
RET
END ]
报警(一样肯定有错)
START:CLR P3.4
ACALL D1
SETB P3.4
ACALL D1
DMP START
D1:MOV R6#250
DJNZ R6,$
RET
END
图片地址: http://

START:CLR P3.4
ACALL D1
SETB P3.4
ACALL D1
DMP START -------要改成 sjmp start
D1:MOV R6#250 ------改成 mov r6,#250
DJNZ R6,$
RET
END -------- 一个程序只要最后 1 个end.其他地方的del掉

START:MOV R0,#20
MOV DPTR,#TABLE
LOOP:ACALL DISPLAY
DEC R0
CJNE R0,#0,LOOP
JMP START
DISPLAY:MOV A,R0
MOV B,#10
DIV AB
MOV R1,A
MOV R2,B
MOV R3,#50
LOOP1:MOV A,R2
ACALL CHANG
CLR P2.0
ACALL DLY 10ms -----改成dly10ms 不能空格
SETB P2.0
MOV A,R1
ACALL CHANG
CLR P2.1
ACALL DLY 10ms -------改成dly10ms
SETB P2.1
DJNZ R3,LOOP1
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H
DB 8EH,0BFH,8CH,0FFH
CHANG:MOVC A,@A+DPTR
MOV P0,A
RET
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-21
你这程序里有2个START,肯定会出问题的;把报警的那个Start改为alarm之类的吧!另外没看出来你的定时时间是怎么来的?建议在定时器里做定时,比如定时100ms,然后计数10次是1秒!本回答被提问者采纳
第2个回答  2009-06-29
C的可以做个,汇编很久没用,不熟练
第3个回答  2009-06-21
要C程序吗?
第4个回答  2009-06-21
这图看不清楚啊!换一张看看