标题:
求助用定时器只取一段方波出现 怎么用
[打印本页]
作者:
xiong123154
时间:
2017-8-29 18:26
标题:
求助用定时器只取一段方波出现 怎么用
QQ图片20170829180917.jpg
(133.08 KB, 下载次数: 115)
下载附件
2017-8-29 18:14 上传
如上图 用定时器只取一段方波出现 怎么用
使用按键 出现一段方波 也可以不用定时器
有个问题 {
case 1:
这个for循环执行不了
()}
#include<reg52.h>
/*****************************************************************/
unsigned char a,s,x,y,z;
int flag;
sbit ANJIAN=P2^0; //按键
sbit P00=P0^0;
sbit P01=P0^1;
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
定时器中断子程序
50hz,每秒50个脉冲,就是100次跳变。1/100 =10ms 这是频率
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 using 1
{
TH0=(65536-50)/256; //重新赋值 12M晶振计算,指令周期1uS,
TL0=(65536-50)%256; //0.1mS方波半个周期0.05mS,
if(ANJIAN==0) //按键按下
{
a++; //按键累加
while(!ANJIAN);
}
switch(a)
{
case 1:
P01=0; //正转
if(flag++==10) // 计数10次
{
P00=!P00; // 取反
flag=0; // 清除i
}
break;
//case 1:
//这个for循环执行不了
// P01=0; //正转
// for(i=0;i<5;i++)
// {
// P00=0;
// delay(50);
// P00=1;
// delay(50);
// }
// break;//
case 2:a=0;break;
default:break;
}
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
while(1)
{
Init_Timer0();
}
}
//
///*------------------------------------------------
// 延时函数 11.0592MHZ z=1时精确延时1ms
//------------------------------------------------*/
//
//void delay(z)
//{
// for(x=z;x>0;x--)
// for(y=848;y>0;y--);
//}
作者:
august5
时间:
2017-8-29 20:45
定时器在中断的时候电压反转就行了,定时器做最好。要精确的话,直接用汇编编写
作者:
yzwzfyz
时间:
2017-8-31 20:17
1、设置一个寄存器R_count。
2、按1,就让R_count=10,按2,就让R_count=20。
3、做一个实现题图的子程序SUB_plus。
4、如果R_count<>0,就调用SUB_plus子程序R_count次,完成后将R_count清0;如果R_count=0就不调。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1