找回密码
 立即注册
查看: 71|回复: 3

小白请教以下代码的意思,看不懂 | qianwen.com

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2026-03-05 11:32:27
已绑定手机

2

主题

0

回帖

8

积分

新手上路

积分
8
发表于 2026-3-5 16:10:54 | 显示全部楼层 |阅读模式
5e75f46f-536a-4e6f-abc8-01972e747f33.png

这是完整代码

#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)[3] = CCAP0L;
        ((unsigned char *)&count1)[2] = CCAP0H;
        ((unsigned char *)&count1)[1] = cnt;
        ((unsigned char *)&count1)[0] = 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);
}


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:495
  • 最近打卡:2026-04-04 15:14:23
已绑定手机

104

主题

4237

回帖

9415

积分

荣誉版主

无情的代码机器

积分
9415
发表于 2026-3-5 16:43:47 | 显示全部楼层
这种问题发给Ai能更快速的得到答案:


截图202603051643247691.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:656
  • 最近打卡:2026-04-03 14:37:16

0

主题

342

回帖

554

积分

高级会员

积分
554
发表于 2026-3-6 22:18:07 | 显示全部楼层
  写成这样*((unsigned char *)&count1+3) = CCAP0L;
               *((unsigned char *)&count1+2) = CCAP0H;
               *((unsigned char *)&count1+1) = cnt;
               *((unsigned char *)&count1)     = 0;
  应该更容易让人理解  
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-4 16:05 , Processed in 0.105643 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表