打印
[通用8051核FLASH系列]

HC89S003P套件试用】占空比与频率都不相同的PWM!

[复制链接]
1109|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hayden0|  楼主 | 2019-3-22 18:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-25 10:42 编辑

HC89S003最强大的就是PWM了,用过不少003单片机,唯有芯圣最强大,最喜欢的就是芯圣003的PWM和引脚全映射功能。
首先说一下引脚全映射,太好用了有木有!

TXD_MAP = 0x21;                                                //TXD映射P21
RXD_MAP = 0x03;                                                //RXD映射P03        


PWM0_MAP = 0x22;                                          //PWM0通道映射P22口
PWM01_MAP = 0x10;                                          //PWM01通道映射P10口


映射引脚直接就是对应的HEX值,使用时信手拈来,根本不用记!
就是STM32的引脚映射也是只能映射到固定引脚上。

再说PWM,3个12位PWM模块PWM0、PWM1、PWM2,每个模块各有一个计数器(定时器),三个PWM模块的功能以及操作完全一样

看我画的重点,“各有一个计数器”,“各有一个计数器”,“各有一个计数器”,重要事情说三遍!纵观台系和国产里的51单片机,介绍一大堆PWM相关,突出什么多通道,到头来所有PWM共用一个定时器,多通道输出时输出的PWM虽然占空比不同,但都是一个频率,这对需要多频率的场合来说就聊败于无!
也只有ARM单片机才是通过不同定时器输出不同频率PWM。

感觉HC89S003就是一个具有32位单片机外设,却有一个51核心,开外挂的单片机。
独立模式下PWM0输出:




互补模式下PWM0输出:




PWM0和PWM1输出不同占空比和不同频率PWM:



关键函数:

void PWM_Set_Duty(u8 PWMx, u8 duty)
{
        u16 dutyLoad;
        u16 dutyValue;
        switch(PWMx)
        {
        case 0:
                                        dutyLoad = PWM0PH;
                                        dutyLoad = dutyLoad<<8;
                                        dutyLoad |= PWM0PL;
                                        dutyValue =(double)dutyLoad *duty/100 ;
                                        PWM0DH = dutyValue >> 8;
                                        PWM0DL = dutyValue & 0xFF;
                                        PWM0DTH = dutyValue >> 8;
                                        PWM0DTL = dutyValue & 0xFF;
                                        break;
        case 1:
                                        dutyLoad = PWM1PH;
                                        dutyLoad = dutyLoad<<8;
                                        dutyLoad |= PWM1PL;
                                        dutyValue =(double)dutyLoad *duty/100 ;
                                        PWM1DH = dutyValue >> 8;
                                        PWM1DL = dutyValue & 0xFF;
                                        break;
        case 2:
                                        dutyLoad = PWM2PH;
                                        dutyLoad = dutyLoad<<8;
                                        dutyLoad |= PWM2PL;
                                        dutyValue =(double)dutyLoad *duty/100 ;
                                        PWM2DH = dutyValue >> 8;
                                        PWM2DL = dutyValue & 0xFF;
                                        break;
        case 3:
                                        dutyLoad=PWM3P;
                                        dutyValue =(double)dutyLoad *duty/100 ;
                                        PWM3D = dutyValue;
                                        break;
        
        default:
                                        break;
        }
        //
        
}

以后用这个函数就可以方便的设置HC89S003的4个PWM占空比了。




发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

284

帖子

3

粉丝