找回密码
 立即注册
查看: 1120|回复: 17

重新再记录一下自己的学习历程吧.

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 01:21:11 | 显示全部楼层 |阅读模式
PWM 分类

目前我知道的stc8g 里面有两类pwm ,一个是pca的pwm ,分6,7,8,10位.stc8g还有一个15位增强型的pwm
然后就是stc8h和stc32g里面的 16位pwm,也叫高级pwm
学到哪,记到哪,可能会跳跃式的学习.
截图202407110118556482.jpg

截图202407110119196259.jpg

截图202407110120431677.jpg

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:438
  • 最近打卡:2025-05-08 13:19:57

33

主题

2355

回帖

4880

积分

论坛元老

积分
4880
发表于 2024-7-11 08:42:14 | 显示全部楼层
跳着学 希望别学混了
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 10:32:21 | 显示全部楼层
_奶*** 发表于 2024-7-11 08:42
跳着学 希望别学混了

就是有时候用到哪学到哪,学不懂了再去看看另外的视频
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 12:05:31 | 显示全部楼层
配置8位pwm步骤
    CCON = 0x00;     
截图202407111158454827.jpg
CMOD = 0x08;     默认系统时钟
截图202407111159071256.jpg
    CCAPM2 = 0x42;    开启PWM2和PCA比较功能
截图202407111202302523.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 12:10:08 | 显示全部楼层
注意要选择相应的端口,需要配置P_SW1,CCP_S位分组的,不能单独拆散
最后记得CR=1 ;启动PCA计数
截图202407111206377626.jpg
截图202407111206587857.jpg
截图202407111207125993.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 12:13:24 | 显示全部楼层
    CCAP2L = 0x00;                  
    CCAP2H = 0x00;
可以调节占空比, 如果是8位,可以写成 CCAP2L=CCAP2H=0x00; (0x00可以用定义变量,以后用变量进行调整)
截图202407111211119770.jpg
选择开启 6,7,8,10位pwm
截图202407111211268086.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 12:30:08 | 显示全部楼层
本帖最后由 vb2002 于 2024-7-11 12:33 编辑

#include <STC8G.H>      头文件
#include "intrins.h"        lop不会报错
  
#define MAIN_Fosc 11059200UL     定义系统时钟
unsigned int pwm_levels[] = {5,15,95,255 };     设置 pwm_levels[]={数组,方便接下来的按键换挡}

unsigned char PWM_SAVE;       设置变量,保存当前pwm的亮度
sbit KEY1 = P3^2;                   KEY1设置成 P32 io口
bit key_flag;                           设置标志位,,标志位具体什么用处,现在我还不清楚
unsigned char PWM_MODE;       定义PWM模式的变量
unsigned char time_out;            定义一个定时器时钟,方便设置多少秒内按键是一个状态,多少秒后另一个状态


void PWM_init(void)             学C语言的时候, 说void是古老的写法,新的写法可以是   int代替void.
{
    CCON = 0x00;            
    CMOD = 0x08;
    CL = 0x00;
    CH = 0x00;

    CCAPM2 = 0x42;
    PCA_PWM2 = 0x00;
    CCAP2L = 0x00;                  
    CCAP2H = 0x00;
        CR=1;        
}

void PWM_updata(unsigned int duty)           // 更新PCA捕获/比较1寄存器,以改变PWM输出
{   
if(duty > 0)                             // 如果占空比大于0   
{      
  CCAP1L = duty;                       // 更新PCA捕获/比较1低字节寄存器   
  CCAP1H = duty >> 8;                  // 更新PCA捕获/比较1高字节寄存器   
CCAP1H右移8位,同步ccap1l        
CCAPM1 = 0x42;                       // 使能PCA捕获/比较1模块的PWM输出
   }   
else  
  {        CCAP1L = 0x00;                       // 清除PCA捕获/比较1低字节寄存器      
CCAP1H = 0x00;                       // 清除PCA捕获/比较1高字节寄存器      
CCAPM1 = 0x00;                       // 禁用PCA捕获/比较1模块的PWM输出   
}
}

void Timer0_Isr(void) interrupt 1           // 定时器0的中断服务程序
{   
static unsigned char key_sta;            // 按键状态机变量   
    switch(key_sta)                          // 实现去抖动和按键检测的状态机
    {        case 0:                              // 等待按键   
        if (KEY1 == 0) key_sta++;         // 如果按键按下,进入状态1
           break;        case 1:                              // 确认按键         
  if (KEY1 == 0) key_sta++;         // 如果按键持续按下,进入状态2         
  else key_sta = 0;                // 否则返回状态0         
   break;        case 2:                              // 等待按键释放   
        if (KEY1 == 1) key_sta++;         // 如果按键释放,进入状态3   
        break;        case 3:                              // 按键完成           
key_flag = 1;                    // 设置按键标志位            
key_sta = 0;                     // 重置状态机           
break;     
   default:                             // 默认状态,重置状态机      
      key_sta = 0;        
    break;  
  }   
if (time_out < 20) time_out++;           // 如果未超时,增加超时计数器}


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 15:31:43 | 显示全部楼层
还可以把程序写进中断里
中断记得配置
void Timer0_Init(void)                //100微秒@11.0592MHz
{
        AUXR |= 0x80;                        //定时器时钟1T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0xAE;                                //设置定时初始值
        TH0 = 0xFB;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}
        IT0=1;
        EX0=1;
        EA=1;
中断里面只能执行一次,不能像主循环里面一直闪.
中断里面好像还能再嵌套中断.研究一下
截图202407111529528891.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 21:41:16 | 显示全部楼层
中断配置
INT0 外部中断
截图202407112137376476.jpg
截图202407112139144434.jpg
截图202407112139332978.jpg
截图202407112139497720.jpg
截图202407112140242251.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 21:45:31 | 显示全部楼层
INT1 外部中断
INT0和1的配置差不多,
但是到了INT2,3,4了,不好找,我找了好一会才搞出来
截图202407112143298017.jpg
截图202407112143506447.jpg
截图202407112144028529.jpg
截图202407112144156341.jpg
截图202407112144563956.jpg
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-9 03:34 , Processed in 0.162567 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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