|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我初学单片机,想实验在按下p1.0口后每一秒改变p0/p2口输出状态,用伟福6000绿色版模拟似乎没问题,但是将它烧到单片机后运行好象就不行的,输出口状态不会改变,请教师傅下面是哪个地方出问题了?谢谢!
KEY_CHANG EQU 20H
KEY_OK EQU 20H.0 ;按键成功标志位
SEC_OK EQU 20H.1 ;秒到标志
LONG_TIME EQU 7FH
SHORT_TIME EQU 7EH
;
;p1/p3是输入口;p0/p2是输出口
ORG 000H
LJMP START
ORG 00BH
LJMP TIME
START:
MOV P0,#00H ;关闭所有口
MOV P1,#00H
MOV P2,#00H
MOV P3,#00H
MOV P0,#0AAH
MOV P2,#55H
MOV TH0,#0D8H
MOV TL0,#0F0H
MOV TMOD,#01H ;16位定时器,开始定时
CLR KEY_OK ;
SETB EA ;开中断
SETB ET0 ;允许定时器1
SETB TR0 ;开定时器1
CYC: LJMP CYC
TIME: MOV TH0,#0F0H
MOV TL0,#0D6H
INC LONG_TIME ;长定时加1FT
MOV A,LONG_TIME
CJNE A,#64H,LOOP1 ;
MOV LONG_TIME,#00H ;
SETB SEC_OK ;
LOOP1:
JBC P1.0,KEY_EST ;有键按下吗
RETI ;没有按下键,返回
;如果P0.0按下,输出状态取反,否则推出
PART_CHANG:
MOV A,LONG_TIME
JBC SEC_OK,PART_OK ;到1秒?
RETI
PART_OK:
CLR KEY_OK ;到,改变输出口状态
MOV A,P0 ;将输出口取反
CPL A ;
MOV P0,A
MOV A,P2 ;
CPL A
MOV P2,A ;
MOV LONG_TIME,#00H ;清掉当前计时
RETI
KEY_EST:
JBC KEY_OK,PART_CHANG ;有,原来按下过?
SETB KEY_OK ;没有,设置标志
PART_SUCC: ;
RETI
|
|