单片机指令怎么编出CPU内部定时器中断方式计时,实现每0.1秒钟输出状态发生一次反转?

最好用定时器工作方式0或1

单片机以定时器中断方式编制给定值的定时,根据不同单片机的不同工作方式,其计算方法有所不同,晶振不同,其值也不一致,51单片机的定时器,是溢出时产生中断的,以12M晶振为例,一次中断最大定时时间为65.535毫秒,所以0.1秒定时,至少得两次中断才可以。程序范例如下:
#include<reg51.h>
unsigned char flag=1;
sbit pluse=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
flag=~flag;
if(flag)pluse=~pluse;
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-05-14
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
CLR 00
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
CPL 00H
JB 01H,T0E
CPL P1.0
T0E:
RETI
END本回答被提问者和网友采纳
第2个回答  2016-05-13
是 51 单片机?

晶振频率是多少?追问

是的,6MHZ的