AT89C52单片机12MHZ晶振产生38KHZ的方波用定时器T0方式2怎样编程
kuaidi.ping-jia.net 作者:佚名 更新日期:2024-08-30
怎样用12MKz的晶振产生38KHz的方波,用AT89C52 定时器T0 方式2 编程
比如下面函数段,具体可以参考datasheet的计算公式。
void Timer2_init(void)
{
T2CON &= 0xFD;
T2MOD |= 0X02;
RCAP2H = 0xee;
RCAP2L = 0x00;
TR2 = 1;
}
#include<reg52.h> // 包含52单片机寄存器定义的头文件
sbit P32=P3^2;
/**************************************************************
函数功能:主函数
**************************************************************/
void main(void)
{
EA=1;
ET0=1;
TMOD=0x02; //使用定时器T0的模式2
TH0= TL0=0xcf;
TR0=1; //启动定时器T0
while(1); //无限循环等待中断
}
void zd(void) interrupt 0
{
P32=~P32;
//TH0= TL0=0xcf;
}
proteus AT89c52 晶振为多少
答:默认是12M
at89c52一般接多大晶振,是根据什么选择的?
答:12M因为单片机工作需要时钟周期,就像人的心脏有一样有跳动才能工作………
基于at89c52的实时时钟的秒定时信号的产生方法
答:2 N为定时器的工作方式:方式0时,N=13 方式1时,N=16 方式2时,N=8 3 根据定时时间和工作方式,计算出时间常数X 把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了。例如: 工作在方式1,定时时间为1000微秒 晶振频率=12MHZ 则定时时间T=(2的16次方-X...
关于AT89C52单片机的代码
答:延时函数,其延时时间与多种因素有关,比如:晶振频率、单片机执行速度,使用指令,C语言的话,还有数据类型。这里列举的是STC90C52RC在晶振频率为12M时的延时函数,如果晶振变量,程序当然也的相应改变,如果单片机改为STC12或STC11系列,因为是1T模式工作,程序当然也需要修改。
C语言 AT89C52数字钟的程序问题
答:for(y=110;y>0;y--);//如果是12MHz晶振,就是110us对应z=1 } void keyscan();void display();void main(){TMOD=0x01;//T0定时器,模式1定时,13位定时 TH0=(65536-50000)/256; //定时1S的数据设置,定时50000个机器周期后中断一次 TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;//...
求基于AT89C52超声波测距简易设计的源程序,要求用3个LED管显示其测距...
答:4.1单片机系统及显示电路 单片机采用AT89C52或其兼容系列。采用12MHz高精度的晶振,以获得较稳定的时钟频率,减小测 量误差。单片机用P1.0端口输出超声波转化器所需的40KHz方波信号,利用外中断0口检测超声波接收 电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用...
AT89C52单片机 蜂鸣器响一秒停0.5秒 速求 c语言
答:typedef unsigned int WORD; // 数据范围0-65535 typedef bit BOOL ; // 数据范围0-1 sbit BUZZ = P0^0;WORD count,flag;void timer0() interrupt 1 { TH0=(65535-46080)/256;TL0=(65536-46080)%256; // 重新载入延时时间,如果晶振为12M, 则为被减数则为50000 count++;if(count...
帮帮忙,实在不会做这个:用AT89C52的P0口接8个发光二极管,开关K1和K2...
答:其实这个程序很简单的,没有那么长的,更没有那么复杂呀。很简单的事,为什么要搞得那么复杂呢?见下图和程序:include <reg52.h>sbit k1=P3^2;sbit k2=P3^3;bit glint; //闪烁标志位void delay(){ unsigned int i; for(i=12000;i>0;i--);}main(){ while(1) { if(glint==1)...
AT89C52单片机可调输出PWM波
答://很容易的,程序如下:include<reg52.h> unsigned int a, b;//--- void main(){ TMOD = 0x01; //T0定时方式1 TH0 = (65536-50000) / 256; //50ms@12MHz TL0 = (65536-50000) % 256;TR0 = 1;ET0 = 1;EX0 = 1; EX1 = 1;IT0 = 1; IT1 = 1;EA = 1;a...
单片机AT89C52 P0口为什么驱动不了两个LED?
答:TL0=0x00; //设定时值为10ms,此时晶振频率是11.0592MHZ //若晶振频率是12MHZ,则初值应为 TH0=0xd8; TL0=0xf0;ET0 = 1; //定时器0中断打开 EA = 1; //允许CPU中断 TR0 = 1;//启动定时器0 while(1){ if(count==40) //0.4秒时间是否到 { count=0; //计数变量清零,为...
支持一下
可以用软件延时的方式。将单片机的输出脚接上频率计,然写编写程序
P1_1=0;
NOP();
P1_1=1;
NOP();
调整NOP();的个数即可,但是软件定时的准确性不高。还占用资原。不可取做个测式用一下还行。
比如下面函数段,具体可以参考datasheet的计算公式。
void Timer2_init(void)
{
T2CON &= 0xFD;
T2MOD |= 0X02;
RCAP2H = 0xee;
RCAP2L = 0x00;
TR2 = 1;
}
#include<reg52.h> // 包含52单片机寄存器定义的头文件
sbit P32=P3^2;
/**************************************************************
函数功能:主函数
**************************************************************/
void main(void)
{
EA=1;
ET0=1;
TMOD=0x02; //使用定时器T0的模式2
TH0= TL0=0xcf;
TR0=1; //启动定时器T0
while(1); //无限循环等待中断
}
void zd(void) interrupt 0
{
P32=~P32;
//TH0= TL0=0xcf;
}
答:默认是12M
答:12M因为单片机工作需要时钟周期,就像人的心脏有一样有跳动才能工作………
答:2 N为定时器的工作方式:方式0时,N=13 方式1时,N=16 方式2时,N=8 3 根据定时时间和工作方式,计算出时间常数X 把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了。例如: 工作在方式1,定时时间为1000微秒 晶振频率=12MHZ 则定时时间T=(2的16次方-X...
答:延时函数,其延时时间与多种因素有关,比如:晶振频率、单片机执行速度,使用指令,C语言的话,还有数据类型。这里列举的是STC90C52RC在晶振频率为12M时的延时函数,如果晶振变量,程序当然也的相应改变,如果单片机改为STC12或STC11系列,因为是1T模式工作,程序当然也需要修改。
答:for(y=110;y>0;y--);//如果是12MHz晶振,就是110us对应z=1 } void keyscan();void display();void main(){TMOD=0x01;//T0定时器,模式1定时,13位定时 TH0=(65536-50000)/256; //定时1S的数据设置,定时50000个机器周期后中断一次 TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;//...
答:4.1单片机系统及显示电路 单片机采用AT89C52或其兼容系列。采用12MHz高精度的晶振,以获得较稳定的时钟频率,减小测 量误差。单片机用P1.0端口输出超声波转化器所需的40KHz方波信号,利用外中断0口检测超声波接收 电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用...
答:typedef unsigned int WORD; // 数据范围0-65535 typedef bit BOOL ; // 数据范围0-1 sbit BUZZ = P0^0;WORD count,flag;void timer0() interrupt 1 { TH0=(65535-46080)/256;TL0=(65536-46080)%256; // 重新载入延时时间,如果晶振为12M, 则为被减数则为50000 count++;if(count...
答:其实这个程序很简单的,没有那么长的,更没有那么复杂呀。很简单的事,为什么要搞得那么复杂呢?见下图和程序:include <reg52.h>sbit k1=P3^2;sbit k2=P3^3;bit glint; //闪烁标志位void delay(){ unsigned int i; for(i=12000;i>0;i--);}main(){ while(1) { if(glint==1)...
答://很容易的,程序如下:include<reg52.h> unsigned int a, b;//--- void main(){ TMOD = 0x01; //T0定时方式1 TH0 = (65536-50000) / 256; //50ms@12MHz TL0 = (65536-50000) % 256;TR0 = 1;ET0 = 1;EX0 = 1; EX1 = 1;IT0 = 1; IT1 = 1;EA = 1;a...
答:TL0=0x00; //设定时值为10ms,此时晶振频率是11.0592MHZ //若晶振频率是12MHZ,则初值应为 TH0=0xd8; TL0=0xf0;ET0 = 1; //定时器0中断打开 EA = 1; //允许CPU中断 TR0 = 1;//启动定时器0 while(1){ if(count==40) //0.4秒时间是否到 { count=0; //计数变量清零,为...