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

STC-ISP例程中复制代码和直接下载效果不一致

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2024-07-17 19:39:42

9

主题

22

回帖

199

积分

注册会员

积分
199
发表于 2024-7-6 23:48:39 | 显示全部楼层 |阅读模式
使用STC8H2K08U在STCAI-ISP(V6.94E)软件里《STC8H系列-带死区控制的PWM互补对称输出-C》例程中使用“直接下载HEX”后效果如图(直接下载),更改代码后效果如(更改后),频率为24MHZ,测量引脚为P10(黄),P11(红)。移相引脚好像没有配置为什么也有输出呢?PS5(黄),PS6(红)
  1. /*------------------------------------------------------------------*/
  2. /* --- STC MCU International Limited -------------------------------*/
  3. /* --- STC 1T Series MCU Demo --------------------------------------*/
  4. /* --- Fax: 86-0513-55012956,55012947,55012969 ---------------------*/
  5. /* --- Tel: 86-0513-55012928,55012929,55012966 ---------------------*/
  6. /* --- Web: www.stcai.com ------------------------------------------*/
  7. /* --- BBS: www.stcaimcu.com ---------------------------------------*/
  8. /* If you want to use the program or the program referenced in the  */
  9. /* article, please specify in which data and procedures from STC    */
  10. /*------------------------------------------------------------------*/
  11. #define MAIN_Fosc                24000000UL        //定义主时钟
  12. #include        "STC8Hxxx.h"
  13. /*************        功能说明        **************
  14. 先别修改程序, 直接下载"pwm.hex"测试, 下载时选择主频24MHz.
  15. 如果启动外部晶振, 请接24MHz的晶振. 如果接12MHz晶振, PWM配置函数要相应修改USBCLK设置.
  16. 使用高速PWM(HSPWM)方式操作PWMAPS5、PWMAPS6.
  17. PWM时钟选择PLL时钟144MHz, PWM周期为2400个时钟,PWM频率为60KHz.
  18. 例子输出IO:
  19. PWMAPS6  PWMAPS5
  20. P1.5     P1.3
  21. ******************************************/
  22. void PWMA_config(void);
  23. void GPIO_config(void);
  24. /******************** 主函数 **************************/
  25. void main(void)
  26. {
  27.         P_SW2 |= 0x80;                //SFR enable
  28.        
  29.         GPIO_config();
  30.         PWMA_config();
  31.         while (1)
  32.         {
  33.                 NOP(8);
  34.         }
  35. }
  36. void delay()
  37. {
  38.         u16        i;
  39.         for        (i=0; i<100; i++);
  40. }
  41. void GPIO_config(void)
  42. {
  43.         P0M0 = 0x00; P0M1 = 0x00;
  44.     P1M0 = 0x2b; P1M1 = 0x00;
  45.     P2M0 = 0x00; P2M1 = 0x00;
  46.     P3M0 = 0x00; P3M1 = 0x00;
  47.     P4M0 = 0x00; P4M1 = 0x00;
  48.     P5M0 = 0x00; P5M1 = 0x00;
  49.     P6M0 = 0x00; P6M1 = 0x00;
  50.     P7M0 = 0x00; P7M1 = 0x00;
  51. }
  52. void PWMA_ISR() interrupt 26
  53. {
  54.     if( PWMA_SR1 & 0X02)
  55.     {
  56. //       P03 = ~P03;
  57.          PWMA_SR1 &=~0X02;
  58.     }
  59. }
  60. //========================================================================
  61. // 函数: void PWMA_config(void)
  62. // 描述: PWM配置函数。
  63. // 参数: noe.
  64. // 返回: none.
  65. // 版本: V1.0, 2022-3-15
  66. // 备注:
  67. //========================================================================
  68. void PWMA_config(void)
  69. {
  70.         P_SW2 |= 0x80;                //SFR enable
  71.         PWMA_ENO = 0x01 + 0x02;                                                //输出使能寄存器,P10,P11
  72.         PWMA_ENO = 0XFF;
  73.     PWMA_PS = 0x00;                             //引脚切换
  74. /**********************************************************
  75. PWMx_duty = [CCRx/(ARR + 1)]*100
  76. ***********************************************************/
  77.         PWMA_PSCRH = 0x00;                                                                //预分频器高
  78.         PWMA_PSCRL = 0x00;                                                                //预分频器低
  79.         PWMA_DTR = 0x00;                                                                //死区时间配置                        1195页
  80.         PWMA_CCMR1 = 0X68;                                                                 //通道模式配置
  81.         PWMA_CCMR2 = 0X68;
  82.         PWMA_CCMR3 = 0X68;
  83.         PWMA_CCMR4 = 0X68;
  84.         PWMA_ARRH = 0X80;                                                        //自动重装载寄存器,计数器overflow点
  85.         PWMA_ARRL = 0X00;
  86.         PWMA_CCR1H = 0X04;                                                        //计数器比较值
  87.         PWMA_CCR1L = 0X00;
  88.         PWMA_CCR2H = 0X02;
  89.         PWMA_CCR2L = 0X00;
  90.         PWMA_CCR3H = 0X01;
  91.         PWMA_CCR3L = 0X00;
  92.         PWMA_CCR4H = 0X01;
  93.         PWMA_CCR4L = 0X00;
  94.         PWMA_CCER1 = 0X55;                                                        //配置通道输出使能和极性
  95.         PWMA_CCER2 = 0X55;
  96.         PWMA_BKR = 0X80;                                                        //主输出使能 相当于总开关
  97.         PWMA_IER = 0X02;                                                        //使能中断
  98.         PWMA_CR1 = 0X01;                                                        //使能计数器
  99.     EA = 1;
  100.     while (1);
  101. }
复制代码


直接下载

直接下载

更改后

更改后

移相1

移相1

移相2

移相2
回复

使用道具 举报 送花

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

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2024-7-8 09:29:40 | 显示全部楼层
能提供完整的测试项目吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2024-07-17 19:39:42

9

主题

22

回帖

199

积分

注册会员

积分
199
发表于 2024-7-8 21:22:43 | 显示全部楼层
乘风*** 发表于 2024-7-8 09:29
能提供完整的测试项目吗?

附件是我改的
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. typedef struct TIM1_struct
  4. {
  5.     volatile unsigned char CR1;     /*!< control register 1 */
  6.     volatile unsigned char CR2;     /*!< control register 2 */
  7.     volatile unsigned char SMCR;    /*!< Synchro mode control register */
  8.     volatile unsigned char ETR;     /*!< external trigger register */
  9.     volatile unsigned char IER;     /*!< interrupt enable register*/
  10.     volatile unsigned char SR1;     /*!< status register 1 */
  11.     volatile unsigned char SR2;     /*!< status register 2 */
  12.     volatile unsigned char EGR;     /*!< event generation register */
  13.     volatile unsigned char CCMR1;   /*!< CC mode register 1 */
  14.     volatile unsigned char CCMR2;   /*!< CC mode register 2 */
  15.     volatile unsigned char CCMR3;   /*!< CC mode register 3 */
  16.     volatile unsigned char CCMR4;   /*!< CC mode register 4 */
  17.     volatile unsigned char CCER1;   /*!< CC enable register 1 */
  18.     volatile unsigned char CCER2;   /*!< CC enable register 2 */
  19.     volatile unsigned char CNTRH;   /*!< counter high */
  20.     volatile unsigned char CNTRL;   /*!< counter low */
  21.     volatile unsigned char PSCRH;   /*!< prescaler high */
  22.     volatile unsigned char PSCRL;   /*!< prescaler low */
  23.     volatile unsigned char ARRH;    /*!< auto-reload register high */
  24.     volatile unsigned char ARRL;    /*!< auto-reload register low */
  25.     volatile unsigned char RCR;     /*!< Repetition Counter register */
  26.     volatile unsigned char CCR1H;   /*!< capture/compare register 1 high */
  27.     volatile unsigned char CCR1L;   /*!< capture/compare register 1 low */
  28.     volatile unsigned char CCR2H;   /*!< capture/compare register 2 high */
  29.     volatile unsigned char CCR2L;   /*!< capture/compare register 2 low */
  30.     volatile unsigned char CCR3H;   /*!< capture/compare register 3 high */
  31.     volatile unsigned char CCR3L;   /*!< capture/compare register 3 low */
  32.     volatile unsigned char CCR4H;   /*!< capture/compare register 3 high */
  33.     volatile unsigned char CCR4L;   /*!< capture/compare register 3 low */
  34.     volatile unsigned char BKR;     /*!< Break Register */
  35.     volatile unsigned char DTR;     /*!< dead-time register */
  36.     volatile unsigned char OISR;    /*!< Output idle register */
  37. }TIM1_TypeDef;
  38. #define TIM1_BaseAddress    0xFEC0
  39. #define TIM1        ((TIM1_TypeDef xdata*)TIM1_BaseAddress)
  40. #define PWMA_ENO    (*(unsigned char volatile xdata *)0xFEB1)
  41. #define PWMA_PS     (*(unsigned char volatile xdata *)0xFEB2)
  42. sfr     P0M0    =   0x94;
  43. sfr     P0M1    =   0x93;
  44. sfr     P1M0    =   0x92;
  45. sfr     P1M1    =   0x91;
  46. sfr     P3M0    =   0xb2;
  47. sfr     P3M1    =   0xb1;
  48. sfr     P_SW2   =   0xba;
  49. sbit    P03     =   P0^3;
  50. void main(void)
  51. {
  52.     P_SW2 = 0x80;
  53.     P0M1 = 0x00;
  54.     P0M0 = 0xFF;
  55.     P1M1 = 0x00;
  56.     P1M0 = 0xFF;
  57.     PWMA_ENO = 0xFF;                            //IO输出PWM
  58.     PWMA_PS = 0x00;                             //00:PWM at P1
  59. /**********************************************************
  60. PWMx_duty = [CCRx/(ARR + 1)]*100
  61. ***********************************************************/
  62.     TIM1-> PSCRH = 0x00;                        //预分频寄存器
  63.     TIM1-> PSCRL = 0x00;
  64.     TIM1-> DTR = 0x00;                          //死区时间配置
  65.     TIM1-> CCMR1 = 0x68;                        //通道模式配置
  66.     TIM1-> CCMR2 = 0x68;
  67.     TIM1-> CCMR3 = 0x68;
  68.     TIM1-> CCMR4 = 0x68;
  69.     TIM1-> ARRH = 0x08;                         //自动重装载寄存器,计数器overflow点
  70.     TIM1-> ARRL = 0x00;
  71.     TIM1-> CCR1H = 0x04;                        //计数器比较值
  72.     TIM1-> CCR1L = 0x00;
  73.     TIM1-> CCR2H = 0x02;
  74.     TIM1-> CCR2L = 0x00;
  75.     TIM1-> CCR3H = 0x01;
  76.     TIM1-> CCR3L = 0x00;
  77.     TIM1-> CCR4H = 0x01;
  78.     TIM1-> CCR4L = 0x00;
  79.     TIM1-> CCER1 = 0x55;                        //配置通道输出使能和极性
  80.     TIM1-> CCER2 = 0x55;                        //配置通道输出使能和极性
  81.     TIM1-> BKR = 0x80;                          //主输出使能 相当于总开关
  82.     TIM1-> IER = 0x02;                          //使能中断
  83.     TIM1-> CR1 = 0x01;                          //使能计数器
  84.     EA = 1;
  85.     while (1);
  86. }
  87. void PWMA_ISR() interrupt 26
  88. {
  89.     if(TIM1->SR1 & 0X02)
  90.     {
  91.         P03 = ~P03;
  92.         TIM1->SR1 &=~0X02;
  93.     }
  94. }
复制代码
这是从isp复制的,复制后没有下载测试,直接改了,使用图片的方式下下载的,改完之后的效果和图片中下载的效果不一样
1720444778939.png

HSPWMA-demo.rar

84.02 KB, 下载次数: 60

测试代码

回复 支持 反对

使用道具 举报 送花

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

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2024-7-9 09:24:28 | 显示全部楼层
可能是你的编译器有问题,直接烧录你例子里的hex文件,是P1.5,P1.3输出脉冲信号。
不过我使用keil c51编译器重新编译后,生成的hex文件再烧录到芯片里就正常了,从P1.0,P1.1输出PWM信号。
附件是我用keil重新编译过的,你可以烧录里面的hex文件试试。

HSPWMA-demo.zip

97.17 KB, 下载次数: 63

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 00:55 , Processed in 0.174349 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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