数码之家

 找回密码
 立即注册
搜索
查看: 898|回复: 0

[C51] 小白学51单片机,STC8H PWMA互补输出4组

[复制链接]
发表于 2024-12-17 16:35:23 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
互补输出4组
  1. #include <stc8h.h>

  2. void pwm_init()
  3. {
  4. //         PWMA_PSCR=0x5dc0;        //频率 24000000/(24000*1000)=1Hz  0x5dc0转十24000
  5.         PWMA_PSCR=0x12c0;        //频率 24000000/(4800*1000)=5Hz  0x12c0转十4800
  6. //         PWMA_PSCR=0x0960;        //频率 24000000/(2400*1000)=10Hz  0x0960转十2400
  7.         PWMA_DTR=0x00;        //死区
  8.         PWMA_ARR=1000;         //自动重装寄存器,控制PWM周期
  9.         PWMA_CCER1=0x00; //先清零 CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E
  10.         PWMA_CCER2=0x00; //关通道        CC4NP CC4NE CC4P CC4E CC3NP CC3NE CC3P CC3E
  11.         PWMA_SR1=0x00;
  12.         PWMA_SR2=0x00;
  13.         PWMA_ENO=0x00;  //关使能输出
  14.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择
  15.         PWMA_IER=0x00;
  16.        
  17. //P1.0 PWM1P               
  18.     PWMA_CCMR1=0x68; //通道模式配置 0110 1000 PWM模式1 预装载
  19.     PWMA_CCR1=500;         //占空比 500/1000   
  20.     PWMA_CCER1 |=0x03; //配置通道输出使能和极性 CC1E 比较输出使能
  21.     PWMA_ENO |=0x01; //PWM1P p1.0 p2.0 p6.0
  22.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.0

  23. //P1.1        PWM1N       
  24.     PWMA_CCMR1=0x68; //通道模式配置 0110 0000 PWM模式1 预装载
  25.     PWMA_CCR1=500;         //占空比 500/1000   
  26.     PWMA_CCER1 |=0x0c; //配置通道输出使能和极性 CC1NE 比较输出使能
  27.     PWMA_ENO |=0x02; //PWM1N P1.1 P2.1 P6.1
  28.     PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.1       

  29. //P1.2        PWM2P       
  30.     PWMA_CCMR2=0x68; //通道模式配置 0110 0000 PWM模式1 预装载
  31.     PWMA_CCR2=500;         //占空比 500/1000   
  32.     PWMA_CCER1 |=0x30; //配置通道输出使能和极性 CC2E 比较输出使能
  33.     PWMA_ENO |=0x04; //PWM2P P1.2 P2.2 P6.2
  34.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.2       

  35. //P1.3        PWM2N       
  36.     PWMA_CCMR2=0x68; //通道模式配置 0110 0000 PWM模式1 预装载
  37.     PWMA_CCR2=500;         //占空比 500/1000   
  38.     PWMA_CCER1 |=0xc0; //配置通道输出使能和极性 CC2NE 比较输出使能
  39.     PWMA_ENO |=0x08; //PWM2N P1.3 P2.3 P6.3
  40.         PWMA_PS =0x00;  //高级 PWM 通道输出脚选择位 P1.3       

  41. //P1.4        PWM3P       
  42.     PWMA_CCMR3=0x68; //通道模式配置 0110 0000 PWM模式1 预装载
  43.     PWMA_CCR3=500;         //占空比 500/1000   
  44.     PWMA_CCER2 |=0x03; //配置通道输出使能和极性 CC3E 比较输出使能
  45.     PWMA_ENO |=0x10; //PWM3P P1.4 P2.4 P6.4
  46.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.4       

  47. //P1.5        PWM3N       
  48.     PWMA_CCMR3=0x68; //通道模式配置 0110 0000 PWM模式1 预装载
  49.     PWMA_CCR3=500;         //占空比 500/1000   
  50.     PWMA_CCER2 |=0x0c; //配置通道输出使能和极性 CC3NE 比较输出使能
  51.     PWMA_ENO |=0x20; //PWM3N P1.5 P2.5 P6.5
  52.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.5       

  53. //P1.6        PWM4P       
  54.     PWMA_CCMR4=0x68; //通道模式配置 0110 0000 PWM模式1 预装载
  55.     PWMA_CCR4=500;         //占空比 500/1000   
  56.     PWMA_CCER2 |=0x30; //配置通道输出使能和极性 CC4E 比较输出使能
  57.     PWMA_ENO |=0x40; //PWM4P P1.6 P2.6 P6.6 P3.4
  58.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.6       

  59. //P1.7        PWM4N       
  60.     PWMA_CCMR4=0x68; //通道模式配置 0110 0000 PWM模式1 预装载
  61.     PWMA_CCR4=500;         //占空比 500/1000   
  62.     PWMA_CCER2 |=0xc0; //配置通道输出使能和极性 CC4NE 比较输出使能
  63.     PWMA_ENO |=0x80; //PWM4N P1.7 P2.7 P6.7 P3.3
  64.     PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.7               

  65.     PWMA_EGR=0x01;        //产生一次更新事件
  66.     PWMA_BKR=0x80; //使能主输出
  67.     PWMA_CR1 |=0x01; //开始计时
  68. }
复制代码
跟上面一样,只是一组合在一起写了
  1. #include <stc8h.h>

  2. void pwm_init()
  3. {
  4. //         PWMA_PSCR=0x5dc0;        //频率 24000000/(24000*1000)=1Hz  0x5dc0转十24000
  5.         PWMA_PSCR=0x12c0;        //频率 24000000/(4800*1000)=5Hz  0x12c0转十4800
  6. //         PWMA_PSCR=0x0960;        //频率 24000000/(2400*1000)=10Hz  0x0960转十2400
  7.         PWMA_DTR=0x00;        //死区
  8.         PWMA_ARR=1000;         //自动重装寄存器,控制PWM周期
  9.         PWMA_CCER1=0x00; //先清零 CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E
  10.         PWMA_CCER2=0x00; //关通道        CC4NP CC4NE CC4P CC4E CC3NP CC3NE CC3P CC3E
  11.         PWMA_SR1=0x00;
  12.         PWMA_SR2=0x00;
  13.         PWMA_ENO=0x00;  //关使能输出
  14.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择
  15.         PWMA_IER=0x00;
  16.        
  17. //P1.0 PWM1P   P1.1        PWM1N               
  18.     PWMA_CCMR1=0x68; //通道模式配置 0110 1000 PWM模式1 预装载
  19.     PWMA_CCR1=500;         //占空比 500/1000   
  20.     PWMA_CCER1 |=0x0f; //配置通道输出使能和极性 CC1E CC1NE  比较输出使能
  21.     PWMA_ENO |=0x03; //PWM1P p1.0 p2.0 p6.0 PWM1N P1.1 P2.1 P6.1   
  22.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.0 P1.1

  23. //P1.2        PWM2P        P1.3  PWM2N
  24.     PWMA_CCMR2=0x68; //通道模式配置 0110 0000 PWM模式1 预装载
  25.     PWMA_CCR2=500;         //占空比 500/1000   
  26.     PWMA_CCER1 |=0xf0; //配置通道输出使能和极性 CC2E CC2NE比较输出使能
  27.     PWMA_ENO |=0x0c; //PWM2P P1.2 P2.2 P6.2 PWM2N P1.3 P2.3 P6.3
  28.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.2 P1.3       

  29. //P1.4        PWM3P        P1.5        PWM3N
  30.     PWMA_CCMR3=0x68; //通道模式配置 0110 0000 PWM模式1 预装载
  31.     PWMA_CCR3=500;         //占空比 500/1000   
  32.     PWMA_CCER2 |=0x0f; //配置通道输出使能和极性 CC3E CC3NE比较输出使能
  33.     PWMA_ENO |=0x30; //PWM3P P1.4 P2.4 P6.4 PWM3N P1.5 P2.5 P6.5
  34.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.4 P1.5               

  35. //P1.6        PWM4P        P1.7        PWM4N       
  36.     PWMA_CCMR4=0x68; //通道模式配置 0110 0000 PWM模式1 预装载
  37.     PWMA_CCR4=500;         //占空比 500/1000   
  38.     PWMA_CCER2 |=0xf0; //配置通道输出使能和极性 CC4E CC4NE 比较输出使能
  39.     PWMA_ENO |=0xc0; //PWM4P P1.6 P2.6 P6.6 P3.4 PWM4N P1.7 P2.7 P6.7 P3.3
  40.         PWMA_PS=0x00;  //高级 PWM 通道输出脚选择位 P1.6        P1.7

  41.     PWMA_EGR=0x01;        //产生一次更新事件
  42.     PWMA_BKR=0x80; //使能主输出
  43.     PWMA_CR1 |=0x01; //开始计时
  44. }
复制代码




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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-19 00:13 , Processed in 0.187200 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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