小白请教以下代码的意思,看不懂 | qianwen.com
这是完整代码
#include "reg51.h"
#include "intrins.h"
sfr CCON = 0xd8;
sbit CF = CCON^7;
sbit CR = CCON^6;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
sfr CMOD = 0xd9;
sfr CL = 0xe9;
sfr CH = 0xf9;
sfr CCAPM0= 0xda;
sfr CCAP0L= 0xea;
sfr CCAP0H= 0xfa;
sfr PCA_PWM0 =0xf2;
sfr CCAPM1= 0xdb;
sfr CCAP1L= 0xeb;
sfr CCAP1H= 0xfb;
sfr PCA_PWM1 =0xf3;
sfr CCAPM2= 0xdc;
sfr CCAP2L= 0xec;
sfr CCAP2H= 0xfc;
sfr PCA_PWM2 =0xf4;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
unsigned char cnt; //存储PCA计时溢出次数
unsigned long count0; //记录上一次的捕获值
unsigned long count1; //记录本次的捕获值
unsigned long length; //存储信号的时间长度
void PCA_Isr() interrupt 7
{
if (CF)
{
CF = 0;
cnt++; //PCA计时溢出次数+1
}
if (CCF0)
{
CCF0 = 0;
count0 = count1; //备份上一次的捕获值
((unsigned char *)&count1) = CCAP0L;
((unsigned char *)&count1) = CCAP0H;
((unsigned char *)&count1) = cnt;
((unsigned char *)&count1) = 0;
length = count1 - count0; //length保存的即为捕获的脉冲宽度
}
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
cnt = 0; //用户变量初始化
count0 = 0;
count1 = 0;
length = 0;
CCON = 0x00;
CMOD = 0x09; //PCA时钟为系统时钟,使能PCA计时中断
CL = 0x00;
CH = 0x00;
CCAPM0 = 0x11; //PCA模块0为16位捕获模式(下降沿捕获)
//CCAPM0 = 0x21; //PCA模块0为16位捕获模式(上升沿捕获)
//CCAPM0 = 0x31; //PCA模块0为16位捕获模式(边沿捕获)
CCAP0L = 0x00;
CCAP0H = 0x00;
CR = 1; //启动PCA计时器
EA = 1;
while (1);
}
这种问题发给Ai能更快速的得到答案:
写成这样*((unsigned char *)&count1+3) = CCAP0L;
*((unsigned char *)&count1+2) = CCAP0H;
*((unsigned char *)&count1+1) = cnt;
*((unsigned char *)&count1) = 0;
应该更容易让人理解
页:
[1]