80C51单片机外部脉冲计数怎么设置
答案:4 悬赏:70 手机版
解决时间 2021-03-05 04:00
- 提问者网友:那叫心脏的地方装的都是你
- 2021-03-04 21:30
计数器设置好后不是会自动计数吗那怎么才能设置成外部脉冲计数,不是外部中断
最佳答案
- 五星知识达人网友:洒脱疯子
- 2021-03-04 23:07
TMOD=0x05或者TMOD=0x50
分别是定时器1和定时器0的外部计数方式
然后启动 TR1=1或 TR0=1
分别是定时器1和定时器0的外部计数方式
然后启动 TR1=1或 TR0=1
全部回答
- 1楼网友:底特律间谍
- 2021-03-05 02:43
* 程序名称:pwm占空比调整演示程序 *
*程序思路说明: *
* 只需要4个按键。 *
*关于频率和占空比的确定,对于12m晶振,输出频率为1khz,这样定时中断次数设定为 *
*10,即0.01ms中断一次,则th0=ff,tl0=f6;由于设定中断时间为0.01ms,这样可以设 *
*定占空比可从1-99%变化。即0.01ms*100=1ms *
******************************************************************************/
#include
#define uchar unsigned char
#define uint unsigned int
uchar timer0_tick,zkb=1;//timer0_tick计数,zkb占空比
uchar i=0,n=0,temp=0;
code seven_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//1,2,3, 4, 5, 6, 7, 8, 9
code scan[2]={0xfd,0xfe};
uchar counter[2]={0,0};
sbit an1=p3^2;//调整个位
sbit an2=p3^3;//调整十位
sbit an3=p3^4;//启动按键
sbit an4=p3^5;//确认按键
void delay(uint z)//软件延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
static void timer0_isr(void) interrupt 1 using 0 //中断函数
{
tr0=0;
tl0=0xf6;
th0=0xff;
tr0=1;
if (zkb>99) zkb=1;
if (zkb<1) zkb=99;
counter[0]=zkb%10;
counter[1]=zkb/10;
n++;
if(n==100)
{
n=0;
i++;
if(i==2) i=0;
p0=seven_seg[counter[i]];
p2=scan[i];
}
timer0_tick++;
if(timer0_tick++==100)
{
timer0_tick=0;
}
if(an2==0)
{
delay(100);
if(an2==0)
{
temp=1;
counter[0]++;
if(counter[0]==10)
{
counter[0]=0;
}
}
}
if(an1==0)
{
delay(100);
if(an1==0)
{
temp=1;
counter[1]++;
if(counter[1]==10)
{
counter[1]=0;
}
}
}
zkb=counter[0]+counter[1]*10;
if(an4==0)
{
delay(5);
if(an4==0)
temp=0;
}
if(temp==1)
p3_7=0;// p3_7为脉冲输出引脚
else
{
if (timer0_tick<=zkb)
{
p3_7=1;
}
else
{
p3_7=0;
}
}
}
static void timer0_initialize(void)//中断初始化
{
ea=0;
timer0_tick=0;
tr0=0;
tmod=0x01;
tl0=0xf6;
th0=0xff;
pt0=0;
et0=1;
tr0=1;
ea=1;
}
void main(void)
{
star: delay(100);
if(an3!=0) goto star;//按键3启动脉冲
timer0_initialize();
while(1);
}
//按按键3启动脉冲器,初始设置占空比为1%,按键1调整十位,
//按键2调整个位,一旦调整,输出为0,必须按确认键确认,
//输出正确脉冲.可以占空比1-99%任意调节。
- 2楼网友:人類模型
- 2021-03-05 01:16
TMOD的D2(T0)或D6(T1)置1即可。比如:
TMOD=0x55;即T0与T1设为计数器,模式1(16位计数器模式)
- 3楼网友:愁杀梦里人
- 2021-03-04 23:59
把TMOD C/T设置为1就可以了
TMOD 示意表格
下面的表格列出了TMOD各个位的名字,点击下面的1和0就可以给各个位置1或者置0,控制两个定时器/计数器的工作方式。
7 6 5 4 3 2 1 0
GATE C/T M1 M0 GATE C/T M1 M0
然后在对应的T0,T1输入脉冲就可以计数了
还可以通过M0,M1设置工作在什么方式,方式同定时器。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯