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

看了stc isp的软件上面的范例程序,怎么使用|已解决

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:353
  • 最近打卡:2025-05-04 01:05:06
已绑定手机

130

主题

1522

回帖

1871

积分

金牌会员

积分
1871
发表于 2024-5-26 14:06:10 | 显示全部楼层 |阅读模式
本帖最后由 STCAI-32位8051 于 2024-5-30 13:27 编辑

上面这个是官方给的范例程序,pwm呼吸灯
下面的是我改的,可以正常编译,没有错误,led不能呼吸,只能点亮。
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #define CYCLE       0x1000
  4. sfr     P_SW2   =   0xba;
  5. sfr     PWMSET      =   0xF1;
  6. sfr     PWMCFG01    =   0xF6;
  7. sfr     PWMCFG23    =   0xF7;
  8. sfr     PWMCFG45    =   0xFE;
  9. #define PWM0C       (*(unsigned int  volatile xdata *)0xFF00)
  10. #define PWM0CH      (*(unsigned char volatile xdata *)0xFF00)
  11. #define PWM0CL      (*(unsigned char volatile xdata *)0xFF01)
  12. #define PWM0CKS     (*(unsigned char volatile xdata *)0xFF02)
  13. #define PWM0TADC    (*(unsigned int  volatile xdata *)0xFF03)
  14. #define PWM0TADCH   (*(unsigned char volatile xdata *)0xFF03)
  15. #define PWM0TADCL   (*(unsigned char volatile xdata *)0xFF04)
  16. #define PWM0IF      (*(unsigned char volatile xdata *)0xFF05)
  17. #define PWM0FDCR    (*(unsigned char volatile xdata *)0xFF06)
  18. #define PWM00T1     (*(unsigned int  volatile xdata *)0xFF10)
  19. #define PWM00T1H    (*(unsigned char volatile xdata *)0xFF10)
  20. #define PWM00T1L    (*(unsigned char volatile xdata *)0xFF11)
  21. #define PWM00T2H    (*(unsigned char volatile xdata *)0xFF12)
  22. #define PWM00T2     (*(unsigned int  volatile xdata *)0xFF12)
  23. #define PWM00T2L    (*(unsigned char volatile xdata *)0xFF13)
  24. #define PWM00CR     (*(unsigned char volatile xdata *)0xFF14)
  25. #define PWM00HLD    (*(unsigned char volatile xdata *)0xFF15)
  26. sfr     P0M1    =   0x93;
  27. sfr     P0M0    =   0x94;
  28. sfr     P1M1    =   0x91;
  29. sfr     P1M0    =   0x92;
  30. sfr     P2M1    =   0x95;
  31. sfr     P2M0    =   0x96;
  32. sfr     P3M1    =   0xb1;
  33. sfr     P3M0    =   0xb2;
  34. sfr     P4M1    =   0xb3;
  35. sfr     P4M0    =   0xb4;
  36. sfr     P5M1    =   0xc9;
  37. sfr     P5M0    =   0xca;
  38. void PWM0_Isr() interrupt 22
  39. {
  40.     static bit dir = 1;
  41.     static int val = 0;
  42.     if (PWMCFG01 & 0x08)
  43.     {
  44.         PWMCFG01 &= ~0x08;                      //清中断标志
  45.         if (dir)
  46.         {
  47.             val++;
  48.             if (val >= CYCLE) dir = 0;
  49.         }
  50.         else
  51.         {
  52.             val--;
  53.             if (val <= 1) dir = 1;
  54.         }
  55.         _push_(P_SW2);
  56.         P_SW2 |= 0x80;
  57.         PWM00T2 = val;
  58.         _pop_(P_SW2);
  59.     }
  60. }
  61. void main()
  62. {
  63.     P0M0 = 0x00;
  64.     P0M1 = 0x00;
  65.     P1M0 = 0x00;
  66.     P1M1 = 0x00;
  67.     P2M0 = 0x00;
  68.     P2M1 = 0x00;
  69.     P3M0 = 0x00;
  70.     P3M1 = 0x00;
  71.     P4M0 = 0x00;
  72.     P4M1 = 0x00;
  73.     P5M0 = 0x00;
  74.     P5M1 = 0x00;
  75.     PWMSET = 0x01;                              //使能PWM0模块(必须先使能模块后面的设置才有效)
  76.     P_SW2 = 0x80;
  77.     PWM0CKS = 0x00;                             // PWM0时钟为系统时钟
  78.     PWM0C = CYCLE;                              //设置PWM0周期
  79.     PWM00T1= 0x0000;
  80.     PWM00T2= 0x0001;
  81.     PWM00CR= 0x80;                              //使能PWM00输出
  82.     P_SW2 = 0x00;
  83.     PWMCFG01 = 0x05;                            //启动PWM0模块并使能PWM0中断
  84.     EA = 1;
  85.     while (1);
  86. }
复制代码
  1. #include "intrins.h"
  2. #include <STC8G.H>
  3. #define CYCLE       0x1000
  4. sbit LED=P3^3;
  5. void PWM0_Isr() interrupt 22
  6. {
  7.     static bit dir = 1;
  8.     static int val = 0;
  9.     if (PWMCFG01 & 0x08)
  10.     {
  11.         PWMCFG01 &= ~0x08;                      //清中断标志
  12.         if (dir)
  13.         {
  14.             val++;
  15.             if (val >= CYCLE) dir = 0;
  16.         }
  17.         else
  18.         {
  19.             val--;
  20.             if (val <= 1) dir = 1;
  21.         }
  22.         _push_(P_SW2);
  23.         P_SW2 |= 0x80;
  24.         PWM00T2 = val;
  25.         _pop_(P_SW2);
  26.     }
  27. }
  28. void main()
  29. {
  30.     P3M0 = 0x00;
  31.     P3M1 = 0x00;
  32.     PWMSET = 0x01;                              //使能PWM0模块(必须先使能模块后面的设置才有效)
  33.     P_SW2 = 0x80;
  34.     PWM0CKS = 0x00;                             // PWM0时钟为系统时钟
  35.     PWM0C = CYCLE;                              //设置PWM0周期
  36.     PWM00T1= 0x0000;
  37.     PWM00T2= 0x0001;
  38.     PWM00CR= 0x80;                              //使能PWM00输出
  39.     P_SW2 = 0x00;
  40.     PWMCFG01 = 0x05;                            //启动PWM0模块并使能PWM0中断
  41.     EA = 1;
  42.     while (1)
  43.     {
  44.     LED=0;
  45.     }
  46.         
  47. }
复制代码


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-05-04 07:35:29

71

主题

84

回帖

224

积分

中级会员

积分
224
发表于 2024-5-26 14:10:16 | 显示全部楼层
本帖最后由 cjtdz 于 2024-5-26 14:13 编辑

STC8/STC32系列单片机必须要初始化端口,它的端口不是默认的通用51单片机的状态,用哪些端口,必须配置(即设定)哪些端口工作状态。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:353
  • 最近打卡:2025-05-04 01:05:06
已绑定手机

130

主题

1522

回帖

1871

积分

金牌会员

积分
1871
发表于 2024-5-26 14:14:21 | 显示全部楼层
cjt*** 发表于 2024-5-26 14:10
STC8/STC32系列单片机必须要初始化端口,它的端口不是默认的通用51单片机的状态。 ...

我不是已经配置     P3M0 = 0x00;P3M1 = 0x00;  了吗?
难道是要配置 pwm那个吗?

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15654
发表于 2024-5-26 15:26:46 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-04 00:16:27
已绑定手机

19

主题

3191

回帖

4930

积分

论坛元老

积分
4930
发表于 2024-5-26 19:36:21 来自手机 | 显示全部楼层
程序仿真一下看什么情况。或者直接下载例程看下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:353
  • 最近打卡:2025-05-04 01:05:06
已绑定手机

130

主题

1522

回帖

1871

积分

金牌会员

积分
1871
发表于 2024-5-26 20:15:07 来自手机 | 显示全部楼层
soma 发表于 2024-5-26 19:36
程序仿真一下看什么情况。或者直接下载例程看下

就是用的范例程序,不懂配置p33,pwm呼吸
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:353
  • 最近打卡:2025-05-04 01:05:06
已绑定手机

130

主题

1522

回帖

1871

积分

金牌会员

积分
1871
发表于 2024-5-27 01:12:02 来自手机 | 显示全部楼层
懂了懂了,刚刚试了手册上的示例
终于用pwm点亮led了
弄了一晚上
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:353
  • 最近打卡:2025-05-04 01:05:06
已绑定手机

130

主题

1522

回帖

1871

积分

金牌会员

积分
1871
发表于 2024-5-27 08:20:39 | 显示全部楼层
还是不会调整亮度。。。手册写的很清楚,就是不会换算了,
64位/PCA时钟频率
截图202405270819475670.jpg
回复 支持 反对

使用道具 举报 送花

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

39

主题

2006

回帖

6845

积分

论坛元老

积分
6845
发表于 2024-5-27 09:21:02 | 显示全部楼层
vb2*** 发表于 2024-5-27 08:20
还是不会调整亮度。。。手册写的很清楚,就是不会换算了,
64位/PCA时钟频率
...

这是PCA型PWM模式介绍,而你在1楼帖的代码是15位增强型PWM的设置。
增强型PWM通过PWMxxT1, PWMxxT2两个寄存器设置占空比,PWMxxT1=0的话只要调整PWMxxT2寄存器即可,注意这是扩展寄存器,设置时要确保扩展寄存器访问使能已经打开。
建议将你代码里面的P_SW2 = 0x00;指令删掉,扩展寄存器访问使能在初始化前面开启后就不需要关闭了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:524
  • 最近打卡:2025-05-04 02:13:29

10

主题

1161

回帖

5133

积分

论坛元老

积分
5133
发表于 2024-5-27 09:42:10 | 显示全部楼层
vb2*** 发表于 2024-5-26 20:15
就是用的范例程序,不懂配置p33,pwm呼吸

你是不是还用这个stc8g1k08a做实验?

stc8g1k08a是没有增强型PWM的。

STC8G-PWM.png

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 09:58 , Processed in 0.200447 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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