设定电平变化后为中断触发条件,触发后计时当时间大于1S(这个时间你可以根据时间设定)如果还没检测到电平变化引起的中断就认为是故障,在调用报警函数。
成都创新互联主营安福网站建设的网络公司,主营网站建设方案,重庆App定制开发,安福h5小程序开发搭建,安福网站营销推广欢迎安福等地区企业咨询
占空比为2:5周期为500ums的方波脉冲信号...
----
题目写错了。
第一、500ums,不是时间单位。
第二、占空比为2:5,也不是方波。
第三、题目并没有给出晶振频率。
因此,凡是按照题目回答的答案,都是错误的。
将AT90S2313的PD4、PD5置成输入模式。T0和T1设置成计数器模式,主程序编写一个大致的延时子程序10ms-100ms,然后读取T0和T1的计数值,若计数值大于某一确定值,证明相应管脚有计数脉冲输入,否则就是没有脉冲、
附上代码,讲解在后面:
public class Program
{
static void Main(string[] args)
{
ListPoint range = new ListPoint(5 * 5);
for (int i = 0; i 5; i++)
{
for (int j = 0; j 5; j++)
{
range.Add(new Point { X = j, Y = i });
}
}
//移动方向的顺序
MoveDirection[] md = new[]
这个程序如果频率不对,对
“TH0=0XF6;//初始值246”这句里的0xf6调整下,向上增加数值会提高精度。
/**************************
MCU:S52
crystal:24M
****************************/
#includereg52.h
sbit output=P1^0;//P1.0脚输出100K
void timer0_init()
{
TMOD=0X02;//定时器0方式2
TH0=0XF6;//初始值246
ET0=1;//开中断
EA=1;//开总中断
TR0=1;//开定时器0
}
void main()
{
timer0_init();
while(1);
}
void timer_isvof()interrupt 1
{
output=!output;//中断翻转
}
另外,站长团上有产品团购,便宜有保证
普通51的话需要模拟PWM,如果是加强版51有内置PWM模块,
PIC和AVR以及430还有STM也有集成PWM的型号!
如果是单纯输出方波的话就简单了。
程序如下:
//功能,按下P1_0的开关降低频率,按P1_1为升高频率
#includeAT89X52.H //引用AT89X52的库文件
#define uchar unsigned char //替换简称
#define uint unsigned int //替换简称
uchar sm; //定义临时变量
void delay_ms(uint ms) //延时子函数,一个循环12uS
{
while(--ms);
}
void T0_IRQ(void) interrupt TF0_VECTOR //定时器0中断函数
{
TH0=sm; //将变量赋予定时器0的高位
P2_0=!P2_0; //翻转IO
}
//寄存器初始化子函数
void mcu_init()
{
ET0=1; //开定时器0中断
EA=1; //开总中断
TMOD=0x01; //设置为16位定时器0
TH0=0xFF; //填充定时器高位
TR0=1; //开定时器0
sm=0xFF; //变量初始化
}
void main() //主函数
{
mcu_init(); //调用初始化函数
while(1) //主循环
{
if((!P1_0)||(!P1_1)) //检测是否有按键按下
{
delay_ms(8333); //延时去抖
if(!P1_0) //如果是P1_0按键按下
{
while(!P1_0); //等待按键放手
if(sm) //检测变量不为0
{
--sm; //自减1
P2_1=1; //取消边界LED
}
else P2_1=0; //到达边界点亮LED
}
else if(!P1_1) //否则如果P1_1按键按下
{
while(!P1_1); //等待按键放手
if(sm0xFF) //检测变量小于0xFF
{
++sm; //自加1
P2_1=1;
}
else P2_1=0;
}
}
}
}