ORG 0000H
LJMP START
ORG 001BH
LJMP INT_0
ORG 0040H
START:
mov tmod,#00100110B;t1定时器模式2,t0计数器模式2,最大计数255
mov th0,#0
mov tl0,#0
mov th1,#9ch;100微秒定时,初值156
mov tl1,#9ch
mov ie,#10001000B;EA=1,ET1=1,允许T1中断
MOV 30H,#27H;10000次计数共一秒
MOV 31H,#10H
SETB TR1
SETB TR0
MOV P1,#0FFH
DENGDAI:
JB P1.1,DENGDAI
tongxun:
MOV SCON,#50H ;设置成串口1方式 :说明:下位机接收到AF后,进入发送状态,把R3中的数据发送出去
MOV TMOD,#20H ;波特率发生器T1工作在模式2上
MOV TH1,#0FDH ;波特率9600
MOV TL1,#0FDH
SETB TR1 ;启动定时器T1
;以上完成通讯初始化设置
L3:JNB RI,L3
CLR RI
MOV A,SBUF
CJNE A,#0AFH,L3
L2:MOV A,r3 ;将16进制的字符64发送到串口
MOV SBUF,A ;将AF通过串口发送出去
L1:JNB TI,L1
CLR TI
acall DELAY10
AJMP START
INT_0:
mov a, 31H
jnz Goon
dec 30H
Goon:
dec 31H
mov a, 30H
orl a, 31H
jnz Exit ; 100us *10000记数器不为 0, 返回
mov 30H, #27H
mov 31H, #10H
CLR TR1 ;到1S停止定时
CLR TR0 ;到1S停止记数
mov R3, TL0 ; 将记数结果送R3
MOV TH0,#0
MOV TL0,#0
mov TH1, #9CH
mov TL1, #9CH
SETB TR1 ;重新开始记数
SETB TR0 ;重新开始定时
Exit:reti
DELAY10: ;10毫秒延时子程序
MOV R4,#0ffh
D2:
MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET
END
好久没写汇编了,只是大体修改了一下,没调试.我看你的程序太乱,分布不合理,还有一些小细节要注意.中断可能也有问题. |