51单片机中断interrupt……using……

 2023-09-10 阅读 16 评论 0

摘要:51单片机中断细节的一些问题。 interrupt0:外部中断0interrupt1:定时器中断0interrupt2:外部中断interrupt3:定时器中断1interrupt4:串口 using 0 是第0组寄存器; using 1 是第1组寄存器; using 2 是第2组寄存器; using 3 是第3组寄存器;51单片机

51单片机中断细节的一些问题。

interrupt0:外部中断0
interrupt1:定时器中断0
interrupt2:外部中断
interrupt3:定时器中断1
interrupt4:串口

 using 0 是第0组寄存器; using 1 是第1组寄存器; using 2 是第2组寄存器; using 3 是第3组寄存器;
51单片机内的寄存器是R0--R7(不是R0-R3)
R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1、RS0位决定的。
using 0时设置 RS1=0,RS0 =0,用第0组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(00H)....R7(07H)
using 1时设置 RS1=0,RS0 =1,用第1组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(08H)....R7(0FH)
using 2时设置 RS1=1,RS0 =0,用第2组寄存器,R0--R7的在数据存储区里的实际地址是08H-0FH。R0(10H)....R7(17H)
using 3时设置 RS1=1,RS0 =1,用第3组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(18H)....R7(1FH)

EA是总中断允许位,

EX是外部中断允许位

单片机中断源有哪些,(EX0,EX1分别指外部中断INT0,INT1),

ET是内部定时器/计数器中断允许位,

TR定时器/计数器启动位,它们都是高电平1有效。
TH、TL分别指定时器/计数器的高8位和低8位(后面加0/1表示定时器/计数器0/1,如TH0=255表示给定时器0的高八位赋初值255)。

这里附上SG90舵机的中断程序:

 

/********TIME0中断服务程序************/

单片机总中断,void Time0_Int(void) interrupt 1 {

  TH0 = (65536 - 92)/256;  

 TL0 = (65536 - 92)%256;      //重装初值    

 if(Time0_OutCounter < Angle0)      //判断0.1ms的次数是否小于角度标识  

  PWM0 = 1;

  else    

51单片机外部中断程序,PWM0 = 0;   

  Time0_OutCounter = Time0_OutCounter+1;      //溢出标志位:加1  //次数始终保持为200,即保持周期为20ms  

  if(Time0_OutCounter == 200)  

 {    

 Time0_OutCounter = 0;    

 flag0 = 1;                              //一个周期结束标志   }  

单片机内部中断? else    flag0 = 0;

}

 

void Timer0_Init( void ) {   TMOD=0x01;           //定时器0工作于方式1:16位定时器

    TH0 = (65536 - 92)/256;  

 TL0 = (65536 - 92)%256;    装入初值:定时0.1ms溢出,晶振为11.0592MHz  

单片机中断方式。   EA  = 1;    //开总中断

  ET0 = 1;    //允许定时器0中断  

  TR0 = 1;    //开定时器0    }

 

void MostLeft_Servo0( void ) {

 unsigned char i;

51单片机 中断, for(i=21;i>=6;i--)

 {   while(flag0 != 1);   

Angle0 = i;  

 Time0_OutCounter = 0;

 }

}  

单片机SCON?void Servo0_Init( void )

 {   Timer0_Init();  }

 

//舵机右满舵

void MostRight_Servo0( void )

{  unsigned char i;

单片机SBUF? for(i=6;i<=21;i++)

 {   

while(flag0 != 1);

  Angle0 = i;

  Time0_OutCounter = 0;  }

}

单片机PCON。 void delay10ms(unsigned int x)

{

 unsigned int i;

 while(x--)for(i=0;i<125;i++);

}

 

单片机、转载于:https://www.cnblogs.com/alantechnique/p/5453647.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/37794.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息