单片机中断晶振12MHZ输出方波长延时100ms分俩次定时希望带注释。谢谢!!!!

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-17
8051单片机的晶振频率为12MHz,试用定时器中断方式编程实现从P1.0引脚输出周期为2ms的方波

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进行位取反

     }

}

/***************************************************************************/



  • 设单片机晶振频率为12MHz,请编写一个程序段,使用定时器1以方式1产生周 ...
    答:主程序里这样设置 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-...
  • 设MCS-51单片机使用的晶振是12MHz,欲使用定时器/计数器0实现30ms定时中...
    答:晶振是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中的控制位,也可用...
  • ...在p1.7端输出2kHz的方波,晶振频率为12MHz,用中断法编程?
    答:通常当选择晶振频率为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...
  • 设at89c52的晶振频率f=12MHz,要求在P1.3端输出周期为2ms的方波。
    答:1、一个机器周期就是12个时钟周期,而时钟周期要看晶振频率。12MHz的晶振则机器周期 = 12×时钟周期=12×(1/12)μs=1μs。2、机器周期:一个机器周期包含6个状态周期S1-S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。3、振荡周期也称时钟周期,是指为单片机提供时钟...
  • 8051单片机系统中,已知晶振频率为12MHZ,用定时 计数器T1,编程实现从P...
    答:ET1=1;                 //设置定时器/计数 器1中断允许位        EA=1;         ...
  • AT89C52单片机12MHZ晶振产生38KHZ的方波用定时器T0方式2怎样编程_百度...
    答:应该用T2的频率发生器方式更好,初始化后就可以使用了。比如下面函数段,具体可以参考datasheet的计算公式。void Timer2_init(void){ T2CON &= 0xFD;T2MOD |= 0X02;RCAP2H = 0xee;RCAP2L = 0x00;TR2 = 1;}
  • 89C51单片机的晶振频率为12MHz,实用定时器T1设计电路使P2.0端输出10ms...
    答:用最小系统,无需其它外围电路,直接编程就可以输出周期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;
  • 51单片机定时计数器晶振为12MHz,p1.0输出方波周期为200ms汇编编程如何...
    答:p1.0输出高电平 延时200ms(200*1000个指令周期)p1.0输出低电平 延时200ms ……循环到开始……
  • 设MCS-51单片机的晶振频率为12MHZ,使用定时器1工作方式1中断方式在P1...
    答: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...
  • 51系列单片机晶振频率12MHz,要从p2.0引脚输出一个连续的10Hz方波信号...
    答:程序如下: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软件...