单片机编程问题(着急,谢谢大家帮忙)

来源:百度知道 编辑:UC知道 时间:2024/07/03 23:53:22
这是一个自动关窗器的单片机设计程序(所选的片子是80C51)
实现的功能:平时P1.0口是高电平单片机不工作,当低电平信号输入时
P2.0 P2.1 P2.2 P2.3 输出高电平并延时20ms 。之后P0.0 P0.1 P0.2 P0.3输出高电平,车窗上升,并延时15s停止。
流程图如下
P1.0口低电平 →(否)→结束
↓(是)
P2.0 P2.1 P2.2 P2.3口输出高电平

延时20ms (中断)

P0.0 P0.1 P0.2 P0.3口输出高电平

延时15ms

结束 (中断)
这已有一编好的程序,希望帮忙改正一下(不对的话帮忙给写一个,本人新注册的,没有多少积分,只有这么多,希望大家帮忙)
ORG 0000H
LTMP START
ORG 0070H
LTMP MAIN
ORG 001BH
ATMP SERVE
START: JB P1.0 , ST
MOV P2 , #0FH
MOV R0 , #0FH
MOV R1, #0D8H
MOV B, #02H
LCALL MAIN
MOV P0,#0FH
MOV R0,#0B0H
MOV R1,#3CH
MOV B,#96H
LCALL MAIN
MAIN:MOV TM0D,#01H
MOV TL0,R0
MOV TH0,R1
SETB TR0
SETB ET0

看来楼主的程序没有经过调试,有一些不完美的地方,如下:
ORG 0000H
LTMP START ;这里应该为LJMP,下同
ORG 0070H ;这是高址,应该在001B的后面.
LTMP MAIN
ORG 001BH ;应和0070调换位置
ATMP SERVE ;这里应该为AJMP SERUE,下同.
START: JB P1.0 , ST;ST有错.错误在后面.
MOV P2 , #0FH ;
MOV R0 , #0FH ;应该为0F0才对,假如晶振是12的话.
MOV R1, #0D8H
MOV B, #02H
LCALL MAIN ;这里执行这一条.程序会转到MIAN去执行,执行完后,在里面等,不会再返回,后面的程序执行不了.
MOV P0,#0FH ;以下这些程序不会被执行.
MOV R0,#0B0H ;不会
MOV R1,#3CH ;不会
MOV B,#96H ;不会
LCALL MAIN ;不会被执行
MAIN:MOV TM0D,#01H ;这里应该为TMOD.不是零
MOV TL0,R0
MOV TH0,R1
SETB TR0
SETB ET0
SETB EA
STMP $
SERUE: MOV TL0,R0
MOV TH0,R1
DTNZ B,LOOP
OLR TR0;应该为CLR才对
LOOP: RETI
END ;编译到此.END是伪指令.不代表程序结束,只代表程序段到此,应该是SJMP $,动态结束.
ST: END;这条程序编译不会通过;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
以下是我编的程序的.还是用定时器延时.
调试通过.供楼主参考,希望对楼主有帮助
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;