ddllxxrr 发表于 2018-3-7 11:23

基于HC89S003F4板子呼吸灯

本帖最后由 芯圣电子官方QQ 于 2023-7-24 15:27 编辑

下载的问题解决了(见前两贴),我就开始实验下仿真好不好用呢?????

我就在下载的例程里找到了PWM,P22管脚输出的那个例程。然后我看手册上说可以任意映射,我就映射到P10。因为那里有个LED。

程序如下:
#include "intrins.h "

unsigned char i;
unsigned int y;
void delay(void);

/***************************************************************************************
* @实现效果      P22口输出频率为15.69KHz,占空比为34%的方波
***************************************************************************************/
int main()
{
/************************************系统初始化****************************************/
      WDTCCR = 0x00;                                                //关闭看门狗
      while((CLKCON&0x20)!=0x20);                        //等待内部高频RC起振
      CLKSWR = 0x51;                                                //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
      while((CLKSWR&0xC0)!=0x40);                        //等待内部高频切换完成
      CLKDIV = 0x01;                                                //Fosc1分频得到Fcpu,Fcpu=16MHz
/************************************PWM3初始化****************************************/
      P1M0 = 0x08;                              //P10设置为推挽输出
      PWM3_MAP = 0x10;                                        //PWM3映射P10口
      PWM3C = 0x92;                                                 //使能PWM3,关闭中断,允许输出,时钟4分频
      //周期计算         = 0xFF / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
      //                        = 0xFF /(16000000 / 4)                        
      //                         = 255 /4000000
      //                        = 63.75us                即15.69KHZ               

      PWM3P = 0xFF;                                                //PWM周期为0xFF
      //有效电平时间计算(即占空比)         
      //                        = 0x55 / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
      //                        = 0x55 /(16000000 / 4)                        
      //                         = 85 /4000000
      //                        = 21.25us                占空比为 21.25 / 63.75 = 34%

      PWM3D = 0x00;                                                //PWM占空比设置
    while(1)
      {
            for(i=0;i<255;i++)
                {
                     PWM3D = i;
                         delay();
                }
                for(i=255;i>0;i--)
                {
                     PWM3D = i;
                         delay();
                }
      }
    return 0;
}

void delay(void)
{
   
      for(y=0;y<10000;y++)
      {
                _nop_() ;
      }
}








调试时我用了仿真,还算好用,就是不能停在我指定的断点,而是在断点的下边一行,但我观察变量是对的。

注意一下:这个仿真时才供电,不是插上仿真就供电。

以下是视频:

http://v.youku.com/v_show/id_XMzQ0NTMyMzI0OA==.html?spm=a2h3j.8428770.3416059.1





skygz 发表于 2018-3-8 19:08

奇怪, 跑你这LED, 我这都不能工作, 不知哪出问题了...........难点整一下午点阵屏 不能工作

ddllxxrr 发表于 2018-3-8 21:22

skygz 发表于 2018-3-8 19:08
奇怪, 跑你这LED, 我这都不能工作, 不知哪出问题了...........难点整一下午点阵屏 不能工作 ...

我跑的好好的,以视频为证

xiaoqizi 发表于 2018-7-16 10:10

报送的是什么错误呢
页: [1]
查看完整版本: 基于HC89S003F4板子呼吸灯