AT89C52RC单片机频率12MHz,用定时器1及中断的方法,产生周期为1s的等宽方波,从P1.1口输出,求相应程序

作者&投稿:朝哗 (若有异议请与网页底部的电邮联系)
急!89C51单片机频率12MHz,用定时器1及中断的方法,产生周期为1s的等宽方波,从P1.1口输出,求相应程序~

#include
sbit p11 = P1^1;
void InitTimer1(void)
{
TMOD = 0x10;
TH1 = 0x0FC;
TL1 = 0x18;
EA = 1;
ET1 = 1;
TR1 = 1;
}

void main(void)
{
InitTimer1();
while(1);
}

void Timer1Interrupt(void) interrupt 3
{
TH1 = 0x0FC;
TL1 = 0x18;
p11 = ~p11;
}

我没有给你写注释,是希望你不要完全等现成,希望你能自己研究吃透这段程序

不用还拍 其实也没有什么难的

51单片机的定时器T0要工作在方式1,才能定时10ms。而TMOD=0x02,是方式2,定时最长只有256us,是不行的,应该是TMOD=0x01,才对。采用中断方式,对10ms定时中断计数50次为500ms,交替从P1.1输出高电平和低电平,即输出周期 为1S的方波信号了。如下的仿真图,示波器测试为1S的方法信号。

#include<reg52.h>

#define uint unsigned int 

#define uchar unsigned char 

sbit d1=P1^0;

uchar num1;

void main()

{

 

 TMOD=0x01;//设置定时器0为工作方式1

 EA=1;//开总中断

 ET0=1;//开定时器0中断

 ET1=1;

 TR0=1;//启动定时器0

 TR1=1;

 while(1)

 {

  if(num1==2)

   {

    num1=0;

    d1=~d1;

   }

 

 }

}

void time1() interrupt 3

{

 TH1=(65536-1000)/256;

 TL1=(65536-1000)%256;

 num1++; 

}

  有些参数自己改 我难得改



#include<reg52.h>

sbit PWM=P1^1;
int t=0;

void Init_Timer1(void)
{
TMOD |= 0x10;
TH1=0xD8;//@12M 10ms 16bit 自动重载; Init value
TL1=0xF0;
EA=1; /* interupt enable */
ET1=1; /* enable timer1 interrupt */
TR1=1;
}

main()
{
Init_Timer1();
while(1);
}

void Timer1_isr(void) interrupt 3 using 1
{
TH1=0xD8;//@12M 10ms 16bit 自动重载; Init value
TL1=0xF0;
t++;
if(t==50) //50个10MS是0.5秒,两次是一个周期
{
t=0;
PWM=~PWM;
}

}

ORG 0000H
LJMP START
ORG 001BH
LJMP Timer1Interrupt

START:
SETB P1.1
MOV R7, #0
LCALL InitTimer1

LOOP:
SJMP LOOP

InitTimer1:
MOV TMOD,#10H
MOV TH1,#3CH
MOV TL1,#0B0H
SETB EA
SETB ET1
SETB TR1
RET

Timer1Interrupt:
MOV TH1,#3CH
MOV TL1,#0B0H
INC R7
CJNE R7, #10, T1_RETI
CPL P1.1
MOV R7, #0
T1_RETI:
RETI

END


怎样用mini80E开发板(单片机用89C52RC)设计简易计算器?怎样修改硬件电 ...
硬件外设有几个按键和几个led数码管就行了,软件的话主要有读取按键,数据处理和数码管显示几个部分。程序比较简单的,一般学过一点单片机就可以搞定

STC 89C52RC怎么从电脑下载程序?用什么?怎么用?
去官网,然后往右栏有一个isp软件,下载,然后你需要一根串口线或者USB转串口线或者USB转TTL线

51单片机的定时器问题
假设要求50ms中断,求定时器初值。晶振11.0592M,每个机器周期时间为:t=12×(1\/11.0592M) 单位:us 50ms所需机器周期为:50×1000÷t=46080 那么需要初值为:0xFFFF-46080=65535-46080=19456=0x4C00 因此,置初值为TH=0x4c,TL=0x00,经过46080个指令周期,计数器将产生50ms定时中断。如果...

您好!我前两天新买的单片机开发板“STC-89C52RC” 用STC-ISP下载程序总...
下载程序的时候,(1)要将单片机芯片选择设置正确;(2)串口设置要正确;(3)下载程序时的波特率最好选择为9600;(4)下载程序时要先将开发板的电源关闭,再打开。另外,先编一个非常简单的程序,不要一开始就用比较“复杂的”。

猇亭区17228487839: 89C52RC单片机的晶振频率一定要12兆赫兹吗 -
御音菲得: 可以用的,只要不超出它规定的极限频率就行了.具体用哪个,就看你设计要求.如果你只是平常学习,11的和12的都可以用.在使用串口功能时,用11那个,因为涉及到波特率的准确性.其它的学习随意.

猇亭区17228487839: STC89C52 可以测多大的频率,晶振为12M.怎么计算的? -
御音菲得: 用单片机测外部的频率?89C52的单片机是12个机器周期为1个指令周期.晶振为12M,也就是1个指令周期的时间为1uS,故理论上最多能测0.5M的外部频率(要分别读到高电平周期与低电平周期),但由于实际上不会刚好1个指令读取1个数据,因为读了数据还要储存,要好几条指令才能读取1个数据.所以个人以为100KHz就是极限了.如果要测的频率高一些,可以采用1指令周期=1机器周期的单片机.STC新出的也有这种单片机.

猇亭区17228487839: 89c52单片机 晶振频率才12兆,太小了,怎样能改大晶振频率
御音菲得: 外接18.432或者24MHz的晶振啊.或者换4T的W77E58单片机,这样相当于把工作频率提高3倍.或者换1T的DS89C4XX单片机,这相当于把工作频率提高8倍!足够了吧?用1T的STC12C5AXXX单片机也有这样的效果.

猇亭区17228487839: 若时钟电路使用12MHz晶振,STC89C52RC和STC12C5A60S2时钟周期和机器周期分别为多长? -
御音菲得: 1.时钟周期即晶振的单位时间发出的脉冲数,12MHZ=12*10的6次方,即每秒发出12000000个脉冲信号,那么发出一个脉冲的时间就是时钟周期,即1/12微秒. 2.一个机器周期等于12个时钟周期,所以是1微秒.

猇亭区17228487839: 单片机晶振频率6MHz,使用定时器1以方式0和1,产生周期为1ms的等宽正方波脉冲,并由P1.0输出 -
御音菲得: 给你一个模板吧,,,这里选择定时器1的方式1 采用汇编 中断方式编写T(周)=12/6 =2us, N=65536-(1/2 ms)/(2us)=65286 ORG 0000HLJMP START;ORG 001bHLJMP TT1 START: mov TMOD ,#10Hmov DPTR ,#65286mov TH1,DPHmov TL1,DPLSETB TR1SJMP $TT1:mov TH1,DPHmov TL1,DPLCPL P1.0RETI给你参考一下,,有啥不懂得,,可以随时连线

猇亭区17228487839: 51单片机的时钟周期的频率为12MHz,那么ALE信号的频率为多少 -
御音菲得: ALE端为晶振频率的1/6,题中给的是“时钟周期的频率”(即“晶振频率”的1/2),所以“晶振频率”为24MHz,ALE信号的频率为24/6,即4MHz.

猇亭区17228487839: 已知51单片机系统的外接晶体震荡器的振荡频率为12MHZ.请计算该单片机的一个机器周期是多少? -
御音菲得: 一个机器周期,是 12 个振荡周期. 即 12/12MHz = 1us.

猇亭区17228487839: 51系列单片机晶振频率12MHz,要从p2.0引脚输出一个连续的10Hz方波信号,试编写相应的程序. -
御音菲得: 程序如下:ORG 0000HAJMP MAINORG 0030H MAIN:MOV TMOD, #01HMOV TL0, #0B0HMOV TH0, #3CHSETB TR0LOOP:JNB TF0, LOOP ;2个周期.MOV TL0, #0B3H ;一个周期.MOV TH0, #3CHCPL P2.0CLR TF0SJMP LOOPEND ---------- 上述程序,经过KEIL软件调试,是符合要求的. 指令:CPL P2.0 ,确实是每隔50000机器周期,执行一遍.

猇亭区17228487839: 若AT89C51单片机的时钟频率为12MHz,要求T1产生40ms的定时,试对T1进行初始化编程 -
御音菲得: #include <reg52.h> #define uint unsigned int #define uchar unsigned char void main() { TMOD=0x11; TH0=(65536-40000)/256; TL0=(65536-40000)%256; EA=1; ET0=1; TR0=1; while(1); } void timer1() interrupt 3 { TH0=(65536-40000)/256; TL0=(65536-40000)%256; { } //40ms后执行花括号里面的程序 }

猇亭区17228487839: 已知单片机系统品振频率为12MHz,则该系统的时钟周期是多少?
御音菲得: 不通的单片机时钟系统是不一样的.比如stm32f103ve的外部接8m晶振.时钟最高可设置成频率72m赫兹.stm32f4的时钟频率更高了.就连51架构的单片机有不完全一样.at89s51的配12mhz晶振,时钟是1/12个晶振频率.也就是1Mhz.同样是51内核的STC单片机却不需要分频,单时钟/机器周期.可以12mhz的频率运行.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网