我是用的12c56系列单片机 但是捕捉的数据不对
#include "STC12C56.H"
#include <intrins.h>
#include "delay.h"
#include "BIAOGE.h"
sbit EPCAI = IE^6;
bit ci1;
uchar cnt,cnt1; //存储PCA计时溢出次数
//记录上一次的捕获值
//记录本次的捕获值
//存储信号的时间长度(count1 - count0)
unsigned int count0,count11,count12,length,a,b,count1,count21,count22;
void lcd_chushihua()
{
SendChars(ws,9); //握手
SendChars(bfk,9); //不反馈
delay_100(250);
SendChars(bl,9); // 变亮
SendChars(bd,9); // busy低
delay_100(250);
SendChars(sc,9); // 65536
SendChars(s1x1,9);
SendChars(tabhs,9); // 上1下1
SendChars(tab14,9); // 图片14
delay_10000(144);
SendChars(tabhs,9);
SendChars(tabsj1,12);
SendChar(0xFF);
}
void xianshi()
{
count0= count11*256+count12; //保存本次的捕获值
count1= count21*256+count22;
length = count1 - count0; //计算两次捕获的差值,即得到时间长度
a=length/256;
b=length%256;
SendChars(tabsj2,11);
SendChar(a);
SendChar(b);
//count0 = count1;
}
void PCA_isr() interrupt 6
{
EA=0;
// if (CF)
// {
// CF = 0;
// cnt1++; //PCA计时溢出次数+1
//}
if(ci1==0)
{
if (CCF2)
{
CCAP2H=0;
CCAP2L=0;
CCF2 = 0;
count11 = CCAP2H;
count12 = CCAP2L;
ci1=1;
}
else{}
}
else
{
if (CCF2)
{
CCF2 = 0;
count21 = CCAP2H;
count22 = CCAP2L;
ci1=0;
xianshi();
delay_10000(144);
//EPCAI=0;
CL=0;
CH=0;
//CCAP2H=0;
// CCAP2L=0;
CR=1;
}
else{}
}
EA=1;
}
void main()
{
AUXR = 0xf8; //t0 t1 速度设置
TMOD = 0x22; // to t1 8位自动重装
SCON = 0X50; //串口设置
TH1 = TL1 = 0XFD;//波特率设置
TH0 = TL0 = 0XFE;//t0溢出设置
TR1=1;
TR0=1;
lcd_chushihua();
delay_100(250);
CCON=0; //清0
CL=0;
CH=0;
CMOD = 0x04;
CCAPM2 = 0x31;
ci1=0;
CCAP2L = 0;
CCAP2H = 0; //PCA定时器开始工作
cnt = 0;
a=b=1;
count0 = 0;
count1=0;
count11 = count12 =count21=count22= 0;
length=0;
delay_10000(144);
SendChars(s1x1,9);
SendChars(tabhs,9);
SendChars(tabsj1,12);
SendChar(28);
delay_10000(144);
CR=1;
EPCAI=1;
EA = 1;
while (1);
}
|