|
发表于 2022-12-2 18:48:02
|
显示全部楼层
#include <STC8H.H>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
ulong a2;
uint cnt;
uint shujuik()//启动捕获功能 并初始化
{
ulong shuj=0,li;
double yi=0;
// PWMA_CNTR=0x00;//清理计数器后也是不正常
PWMA_CCER1 = 0x00;
PWMA_CCMR1 = 0xfd; //CC1 为输入模式,且映射到 TI1FP1 上
PWMA_CCMR2 = 0xfe; //CC2 为输入模式,且映射到 TI1FP2 上
PWMA_CCER1 = 0x11; //使能 CC1/CC2 上的捕获功能
PWMA_CCER1 |= 0x00; //设置捕获极性为 CC1 的上升沿
PWMA_CCER1 |= 0x20; //设置捕获极性为 CC2 的下降沿
PWMA_CR1 = 0x01; //开始计数
PWMA_SR1=0x00; //清理标志位
while((PWMA_SR1&0x04)!=0x04);//等待捕获完成
PWMA_SR1=0x00; //清理标志位
shuj=PWMA_CCR2- PWMA_CCR1;//读取结果
SBUF=shuj>>8;//发送结果
while(TI==0);
TI=0;
SBUF=shuj;
while(TI==0);
TI=0;
return shuj;
}
void main()
{
//***************************************************这里是串口初始化
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE0; //设置定时初始值 11.0592
TH1 = 0xFE; //设置定时初始值
TR1 = 1; //定时器1开始计时
P_SW2 |= 0x80; //使能访问 XFR
P1M0 = 0x00;P1M1 = 0x00;
//***************************************************************
while(1)
{
while(RI==0);//用电脑向串口随便发送一个数据
RI=0;
shujuik();//捕获功能
PWMA_CCER1 = 0x00;//如果不注释输出的结果就不是正确的
PWMA_CR1=0x00;
}
} |
|