找回密码
 立即注册
查看: 796|回复: 10

如何在8g1k08a 输出固定1khz方波

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:183
  • 最近打卡:2025-05-01 11:02:56

5

主题

36

回帖

483

积分

中级会员

积分
483
发表于 2024-9-12 11:55:24 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-9-12 12:07 编辑

8g1k08a 输出1khz方波,p3.3脚  用什么最方便
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-9-12 19:03:54 | 显示全部楼层
唯一正解,改到 P5.4/P5.5,
利用 T1CLKO的时钟输出,T0CLKO的时钟输出

直接对系统时钟分频,无需中断干预

截图202409121903423619.jpg

截图202409121902437405.jpg


截图202409121905269379.jpg

STC8G1K08A-36I-SOP8, T0CLKO在 P5.5

截图202409121906394555.jpg


定时器不够,还有3个定时器 CCP0/CCP1/CCP2
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-9-12 12:06:50 | 显示全部楼层
8G系列有PCA,可以用PCA
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-9-12 12:10:57 | 显示全部楼层
感觉如果是P5.5或P5.4会比较好搞
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:183
  • 最近打卡:2025-05-01 11:02:56

5

主题

36

回帖

483

积分

中级会员

积分
483
发表于 2024-9-12 12:11:32 | 显示全部楼层
Debu*** 发表于 2024-9-12 12:06
8G系列有PCA,可以用PCA

新手,8脚的08a   pca 有范例吗?  还有pca 怎么输出的在某个脚, 没看到08a这方面的手册资料

点评

3路PCA输出PWM程序: void PWM_Out(unsigned int pwm_0,pwm_1,pwm_2) { unsigned char temp_l,temp_h,temp; temp_l=pwm_0&0x00ff; //读pwm_0低8位赋值给temp_l temp_h=(pwm_0&0x0300)>>4; //读pwm_0高2位,  详情 回复 发表于 2024-9-12 12:20
8脚一定要带A的才有,P33的在这里 [attachimg]56617[/attachimg] 具体查看数据手册 [attachimg]56618[/attachimg]  详情 回复 发表于 2024-9-12 12:15
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-9-12 12:15:18 | 显示全部楼层
vip2*** 发表于 2024-9-12 12:11
新手,8脚的08a   pca 有范例吗?  还有pca 怎么输出的在某个脚, 没看到08a这方面的手册资料 ...


8脚一定要带A的才有,P33的在这里
截图202409121214229173.jpg
具体查看数据手册


截图202409121215056219.jpg


DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-9-12 12:16:37 | 显示全部楼层
本帖最后由 晓飛飛 于 2024-9-12 12:18 编辑

理论上是使用PCA最适合,但如果要快速实现的话,用Timer0吧,使用ISP软件自动生成500us周期的中断代码,在中断里面翻转P33即可,
这个不用动脑子看寄存器,保证新手能5分钟内开发完成。

  1. void Timer0_Isr(void) interrupt 1
  2. {
  3.   P33 = !P33;
  4. }
  5. void Timer0_Init(void)                //500微秒@12.000MHz
  6. {
  7.         P3M0 |= 0x08;         
  8.         AUXR |= 0x80;                        //定时器时钟1T模式
  9.         TMOD &= 0xF0;                        //设置定时器模式
  10.         TL0 = 0x90;                                //设置定时初始值
  11.         TH0 = 0xE8;                                //设置定时初始值
  12.         TF0 = 0;                                //清除TF0标志
  13.         TR0 = 1;                                //定时器0开始计时
  14.         ET0 = 1;                                //使能定时器0中断
  15. EA = 1;
  16. }
复制代码



睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-9-12 12:20:21 | 显示全部楼层
vip2*** 发表于 2024-9-12 12:11
新手,8脚的08a   pca 有范例吗?  还有pca 怎么输出的在某个脚, 没看到08a这方面的手册资料 ...

3路PCA输出PWM程序:


void PWM_Out(unsigned int pwm_0,pwm_1,pwm_2)
{
        unsigned char temp_l,temp_h,temp;
       
        temp_l=pwm_0&0x00ff;                //读pwm_0低8位赋值给temp_l
        temp_h=(pwm_0&0x0300)>>4;        //读pwm_0高2位,移动到XCCAP0H(PCA_PWM0[5:4])位置,赋值给temp_h
        temp=PCA_PWM0&0xcd;                        //读PCA_PWM0,XCCAP2H(PCA_PWM0[5:4])、EPC0H(PCA_PWM0[1])清零后赋值给temp
        temp_h|=temp;                                //写其他位到temph
        if(pwm_0==0x03ff)                        //如果pwm_0最大
                temp_h|=0x02;                        //设置EPC0H(PCA_PWM0[1])为1
        PCA_PWM0=temp_h;                        //写PCA_PWM0(先写高2位)
        CCAP0H=temp_l;                                //写CCAP0H(再写低8位)
       
        temp_l=pwm_1&0x00ff;                //读pwm_1低8位赋值给temp_l
        temp_h=(pwm_1&0x0300)>>4;        //读pwm_1高2位,移动到XCCAP1H(PCA_PWM1[5:4])位置,赋值给temp_h
        temp=PCA_PWM1&0xcd;                        //读PCA_PWM1,XCCAP1H(PCA_PWM2[5:4])、EPC1H(PCA_PWM1[1])清零后赋值给temp
        temp_h|=temp;                                //写其他位到temph
        if(pwm_1==0x03ff)                        //如果pwm_1最大
                temp_h|=0x02;                        //设置EPC1H(PCA_PWM1[1])为1
        PCA_PWM1=temp_h;                        //写PCA_PWM1(先写高2位)
        CCAP1H=temp_l;                                //写CCAP1H(再写低8位)
       
        temp_l=pwm_2&0x00ff;                //读pwm_2低8位赋值给temp_l
        temp_h=(pwm_2&0x0300)>>4;        //读pwm_2高2位,移动到XCCAP2H(PCA_PWM2[5:4])位置,赋值给temp_h
        temp=PCA_PWM2&0xcd;                        //读PCA_PWM2,XCCAP2H(PCA_PWM2[5:4])、EPC2H(PCA_PWM2[1])清零后赋值给temp
        temp_h|=temp;                                //写其他位到temph
        if(pwm_2==0x03ff)                        //如果pwm_2最大
                temp_h|=0x02;                        //设置EPC2H(PCA_PWM2[1])为1
        PCA_PWM2=temp_h;                        //写PCA_PWM2(先写高2位)
        CCAP2H=temp_l;                                //写CCAP2H(再写低8位)
}


void Init(void)
{
        P_SW2|=EAXFR;
        P3M0=0x00;
        P3M1=0x00;
        P5M0=0x00;
        P5M1=0x00;
       
        CCON=0x00;                                //设置PCA控制寄存器
        CMOD=0x80;                                //设置空闲模式下PCA停止计数,禁止PCA计数器溢出中断,设置PCA时钟为系统时钟/12(900Hz)
        CL=0x00;                                //设置PCA计数器
        CH=0x00;                                //设置PCA计数器
        CCAPM0=PWM0;                        //使能PCA模块0PWM功能
        PCA_PWM0=0xc0;                        //设置PCA模块0输出10位PWM
        CCAPM1=PWM1;                        //使能PCA模块1PWM功能
        PCA_PWM1=0xc0;                        //设置PCA模块1输出10位PWM
        CCAPM2=PWM2;                        //使能PCA模块2PWM功能
        PCA_PWM2=0xc0;                        //设置PCA模块2输出10位PWM
        CR=1;                                        //启动PCA
}


void main(void)
{
        Init();
        while(1)
        {
                PWM_Out(A,B,C);
        }
}

点评

按照你需要的频率修改一下  详情 回复 发表于 2024-9-12 12:21
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-9-12 12:21:11 | 显示全部楼层
Debu*** 发表于 2024-9-12 12:20
3路PCA输出PWM程序:

按照你需要的频率修改一下
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:183
  • 最近打卡:2025-05-01 11:02:56

5

主题

36

回帖

483

积分

中级会员

积分
483
发表于 2024-9-12 13:24:08 | 显示全部楼层
感谢各位版主 明白了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 04:28 , Processed in 0.148164 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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