单片机中断晶振12MHZ输出方波长延时100ms分俩次定时希望带注释。谢谢!!!!
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#02
MOV TH0,#6
MOV TL0,#6
SETB TR0
SETB ET0
SETB EA
MOV R2,#4
SJMP $
T0ISR:
DJNZ R2,T0E
MOV R2,#4
CPL P1.0
T0E:
RETI
END
;
ORG 0000H
SJMP START
ORG 0001BH
MOV TH1, #(65536 - 50000) / 256
MOV TL1, #LOW(65536 - 50000)
CPL P1.0
RETI
START:
MOV TMOD, #10H
MOV TH1, #(65536 - 50000) / 256
MOV TL1, #LOW(65536 - 50000)
SETB TR1
MOV IE, #88H
SJMP $
END
你要的是 以100ms 变换一次的方波吧
我这有一个现成的,利用LED作为指示,送你啦
单片机型号:STC89C52 ,属于51类单片机
如果你的也是51类单片机,可以直接使用
/***************************************************************************/
#include <reg51.h> //51单片机通用头文件
sbit LED=P2^0; //LED端口定义
int n; //建立一个变量,用于计数
/***************************************************************************/
void main(void)//主函数
{
TMOD=0x01; //定时器 0 工作方式 1
TH0=(65536-1000)/256; //定时器 高四位 初值
TL0=(65536-1000)%256; //定时器 低四位 初值
EA=1; //开总中断
ET0=1; //开定时器 0 中断
TR0=1; //启动定时器 0
while(1); //主循环
}
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256; //定时器 高四位 初值
TL0=(65536-1000)%256; //定时器 低四位 初值
n++; //计数用变量 累加
if(n>100) //如果达到半秒钟
{
n=0; //计数用变量 清零
LED = ~LED; //对LED进行位取反
}
}
/***************************************************************************/
答:主程序里这样设置 TMOD=0x10;//定时器1作为定时器用 TH1=(65536-50000)/256;TL1==(65536-50000)%256;EA=1;//开总中断 ET1=1;//允许定时器1中断 TR1=1;//启动定时器1 中断程序如下:void timer1()interrupt 3//注意:定时器1的中断序号为3 { TH1=(65536-50000)/256;TL1==(65536-...
答:晶振是12MHz,所以机器周期T=1μs 需定时,C//T=0 30ms/1μs=30000 因为30000>8192,需选择方式1,M1M0=01 TMOD=0000 0001B 计数初值为:65536-30000=35536=8AD0H 所以 TH0=6AH,TL0=0D0H 因为开放总中断和T0中断,IE=10000010B TCON=0001 0000B;启动T0,TR0就是TCON中的控制位,也可用...
答:通常当选择晶振频率为12MHz时,即表示定时计数器的计数脉冲周期为 1uS;而2kHz的方波信号周期 = 500uS;半周期为 250uS;sbit FB=P1^7; //先定义输出端,全局变量 void Init_Timer1(void) //初始化中断服务 { TMOD |= 0x10;TH1=(65536-250)/256;TL1=(65536-250)%256;EA=1; ET...
答:1、一个机器周期就是12个时钟周期,而时钟周期要看晶振频率。12MHz的晶振则机器周期 = 12×时钟周期=12×(1/12)μs=1μs。2、机器周期:一个机器周期包含6个状态周期S1-S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。3、振荡周期也称时钟周期,是指为单片机提供时钟...
答:ET1=1; //设置定时器/计数 器1中断允许位 EA=1; ...
答:应该用T2的频率发生器方式更好,初始化后就可以使用了。比如下面函数段,具体可以参考datasheet的计算公式。void Timer2_init(void){ T2CON &= 0xFD;T2MOD |= 0X02;RCAP2H = 0xee;RCAP2L = 0x00;TR2 = 1;}
答:用最小系统,无需其它外围电路,直接编程就可以输出周期10ms方波。主程序中:TMOD=0X10;TH1=(655536-5000)/256;TL1=(655536-5000)%256;EA=1;ET0=1;TR1=1;中断程序中:TH1=(655536-5000)/256;TL1=(655536-5000)%256;P2^0=!P2^0;
答:p1.0输出高电平 延时200ms(200*1000个指令周期)p1.0输出低电平 延时200ms ……循环到开始……
答:include <reg51.h>void InitTimer1(void){ TMOD = 0x10;//定时器1 方式1 TH1 = 0x3C;//12Mhz晶振,定时50ms TL1 = 0x0B0; EA = 1; ET1 = 1; TR1 = 1;}void main(void){ P1=0xff; InitTimer1(); while(1);}void Timer1Interrupt(void) interrup...
答:程序如下:ORG 0000H AJMP MAIN ORG 0030H MAIN:MOV TMOD, #01H MOV TL0, #0B0H MOV TH0, #3CH SETB TR0 LOOP:JNB TF0, LOOP ;2个周期.MOV TL0, #0B3H ;一个周期.MOV TH0, #3CH CPL P2.0 CLR TF0 SJMP LOOP END --- 上述程序,经过KEIL软件...