求助:51单片机用内部定时器T0在方式1下,从P1.0输出周期为1ms的方波脉冲,已知晶振为6MHz,用汇编语言编程

大家帮下忙,谢谢~

第1个回答  2012-05-17
ORG 0000H ; protues 仿真 通过
AJMP MAIN
ORG 000BH
MOV TH0, #LOW T0MS ; T0 中断
MOV TL0, #HIGH T0MS ; 重置 500 uS 初值
CPL P1.0 ; P1.0 取非
RETI ; 中断返回
T0MS EQU NOT 250 ; 定义 500 uS 晶振 6 MHz
MAIN: MOV TMOD, #01H
MOV IE, #82H ; 开 T0 中断
MOV TH0, #LOW T0MS ; 设置 500 uS 初值
MOV TL0, #HIGH T0MS
SETB TR0 ; 开定时器 0
AJMP $ ; 原地等待
END
第2个回答  2012-05-17
这个百度不到吗,我记得书上就有,我这个应该是T1工作在方式2,你自己换下中断地址就好了
ORG 0000H
AJMP MAIN
ORG 001BH ;T1的中断矢量
CPL P1.0 ;中断服务:P1.0取非
RETI ;中断返回
MAIN: MOV TMOD,#01H
MOV TH0, #6
MOV TL0, #6
SETB ET1
SETB EA
SETB TR1
HERE: AJMP HERE ;原地等待中断
END
第3个回答  2012-05-26
用方式2更好。
已经通过仿真试验的程序如下:
.
ORG 0000H
JMP S
ORG 000BH
CPL P1.0
RETI
S: MOV TMOD, #2
MOV TH0, #6
SETB TR0
MOV IE, #82H
SJMP $

END本回答被提问者采纳
第4个回答  2012-05-18
ORG 0000H
JMP MAIN
ORG 000BH
JMP TO_ISR
ORG 0040H
MAIN:ANL TMOD,#0F0H
ORL TMOD,#10H
MOV DPTR,#65286
MOV TL0,DPL
MOV TH0,DPH
SETB EA
SETB ET0
SETB TR0
SJMP $
TO-ISR:MOV DPTR,#65286 ; 这个是根据基数初值N=2的N次方-t*Fosc/12,算出而Focs=6MHZ
MOV TL0,DPL ;低位送到TL0
MOV TH0,DPH ;高位送到TH0,
CPL P1.0
END
其实这个用方式2或3比较好些...