专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
各位大侠有谁用过sTC89c52定时器2的捕捉功能啊
2019-03-24 18:58
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
10158
2
1551
在下用此单片机测量美新温度传感器SMT16030输出的方波的占空比,老是出问题,方波的频率是1khz到4khz,测量第一个下降沿的数值比第二个下降沿的数值还大,而且都不对, 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
wudayongnb
1楼-- · 2019-03-25 00:56
#include<reg52.h>
#include<stdio.h>
sbit pwmin=P1^1;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P32=P3^2;
float down1=0,down2=0,up=0;
unsigned char finish;
unsigned int th2=0,tl2=0;
char putchar(char ch)
{
SBUF=ch;
while(!TI);
TI=0;
return ch;
}
void TIM2_Init()
{
T2CON=0X09;
TH0=0;
TL0=0;
RCAP2L=0;
RCAP2H=0;
T2MOD=0;
ET2=1;
}
void USART_Init()
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
}
void delay(unsigned char x)
{
unsigned char a,b;
for(a=0;a<x;a++)
for(b=0;b<100;b++);
}
void test()
{
float pwm,temperature;
finish=0;
TR2=1;
ET2=1;
while(finish==0);
pwm=((float)(down2-up))/(down2-down1);
temperature=(pwm-0.32)/0.0047;
printf("%f ",temperature);
}
void main()
{
TIM2_Init();
USART_Init();
EA=1;
ET2=1;
TR2=1;
while(1)
{
if(P32==0)
{
delay(10);
if(P32==0)
test();
while(!P32);
}
//test();
}
}
void time2() interrupt 5
{
static unsigned char flag=0;
if(TF2==1)
{
TF2=0;
P20=~P20;
}
if(EXF2==1)
{
EXF2=0;
th2= RCAP2H;
tl2= RCAP2L;
//down1=(th2*256)+tl2;
P21=~P21;
printf("高八位=%d ",th2);
printf("低八位=%d ",tl2);
//printf("down1=%f ",down1);
switch (flag)
{
case 0:
// printf("高八位=%d ",th2);
// printf("低八位=%d ",tl2);
down1=(th2*256+tl2);
P21=~P21;
printf("down1=%f ",down1);
flag=1;
while(pwmin==0);
th2=TH2;
tl2=TL2;
// printf("高八位=%d ",th2);
// printf("低八位=%d ",tl2);
up=th2*256+tl2;
printf("up=%f ",up);
break;
case 1:
// printf("高八位=%d ",th2);
// printf("低八位=%d ",tl2);
down2=tl2+th2*256;
P22=~P22;
printf("down2=%f ",down2);
flag=0;
TR2=0;
ET2=0;
TH2=0;
TL2=0;
finish=1;
break;
default:break;
}
}
}
加载中...
wudayongnb
2楼-- · 2019-03-25 01:09
各位大侠帮忙看看啊
加载中...
一周热门
更多
>
相关问题
相关文章
基于51单片机的计算器设计
0个评论
51单片机300个proteus仿真实例下载
0个评论
51单片机 蜂鸣器
0个评论
51单片机驱动RC522模块
0个评论
基于51单片机的指纹密码锁
0个评论
AT89C51单片机制作简易密码锁
0个评论
51单片机汇编语言计数器
0个评论
51单片机精确延时设计
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include<stdio.h>
sbit pwmin=P1^1;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P32=P3^2;
float down1=0,down2=0,up=0;
unsigned char finish;
unsigned int th2=0,tl2=0;
char putchar(char ch)
{
SBUF=ch;
while(!TI);
TI=0;
return ch;
}
void TIM2_Init()
{
T2CON=0X09;
TH0=0;
TL0=0;
RCAP2L=0;
RCAP2H=0;
T2MOD=0;
ET2=1;
}
void USART_Init()
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
}
void delay(unsigned char x)
{
unsigned char a,b;
for(a=0;a<x;a++)
for(b=0;b<100;b++);
}
void test()
{
float pwm,temperature;
finish=0;
TR2=1;
ET2=1;
while(finish==0);
pwm=((float)(down2-up))/(down2-down1);
temperature=(pwm-0.32)/0.0047;
printf("%f ",temperature);
}
void main()
{
TIM2_Init();
USART_Init();
EA=1;
ET2=1;
TR2=1;
while(1)
{
if(P32==0)
{
delay(10);
if(P32==0)
test();
while(!P32);
}
//test();
}
}
void time2() interrupt 5
{
static unsigned char flag=0;
if(TF2==1)
{
TF2=0;
P20=~P20;
}
if(EXF2==1)
{
EXF2=0;
th2= RCAP2H;
tl2= RCAP2L;
//down1=(th2*256)+tl2;
P21=~P21;
printf("高八位=%d ",th2);
printf("低八位=%d ",tl2);
//printf("down1=%f ",down1);
switch (flag)
{
case 0:
// printf("高八位=%d ",th2);
// printf("低八位=%d ",tl2);
down1=(th2*256+tl2);
P21=~P21;
printf("down1=%f ",down1);
flag=1;
while(pwmin==0);
th2=TH2;
tl2=TL2;
// printf("高八位=%d ",th2);
// printf("低八位=%d ",tl2);
up=th2*256+tl2;
printf("up=%f ",up);
break;
case 1:
// printf("高八位=%d ",th2);
// printf("低八位=%d ",tl2);
down2=tl2+th2*256;
P22=~P22;
printf("down2=%f ",down2);
flag=0;
TR2=0;
ET2=0;
TH2=0;
TL2=0;
finish=1;
break;
default:break;
}
}
}
一周热门 更多>