| 
 
| 本帖最后由 34af9uc 于 2021-3-31 10:06 编辑 
 /******************************************PFC886+互补6pwm*******************************************/
 /******************************************QQ:774145445**********************************************/
 /******************************************快手:共同学习STM8*****************************************/
 /****************************************************************************************************/
 //                     __________@__________
 //              PWM2L-|1 pa2          pa1 20|-PWM2H
 //              PWM1L-|2 pa3          pa0 19|-PWM1H
 //              pwm0L-|3 pa4          pa7 18|-pwm0H
 //                    |4 pa5          pa6 17|
 //                    |5 nc            nc 16|
 //                    |6 gnd          vdd 15|
 //                 k1-|7 pb0          pb7 14|
 //                 k2-|8 pb1          pb6 13|
 //                 k3-|9 pb2          pb5 12|
 //                 k4-|10_pb3_________pb4_11|
 #include        "extern.h"
 k1                bit                pb.0;
 k2                bit                pb.1
 k3                bit                pb.2
 k4                bit                pb.3
 /****************************************************************************************************/
 void                zhengxian();                //正弦
 void                yanshi();                        //延时
 /****************************************************************************************************/
 word                a1,a2,a3;
 void        FPPA0 (void)
 {
 .ADJUST_IC        SYSCLK=IHRC/4                //        SYSCLK=IHRC/4
 /****************************************************************************************************/
 pmode                31;                        ///8/8/8/8/8/8/8/8带宽共享
 fppen        =        0xFF;                //8核全开
 //有8个核心可以分时全部运行,可以分别干8件事8核真爽!
 /****************************************************************************************************/
 
 $                k1                in,pull;                //输入上拉电阻
 $                k2                in,pull;
 $                k3                in,pull;
 $                k4                in,pull;
 /****************************************************************************************************/
 //$                pwmgc                enable,updown,reset;
 //$                pwmgm                protection_enable,ihrc,/16;
 pwmgc                =0b1_0_1_1_0000;                //PWMG控制寄存器
 //7,停用启用6,输出状态5,中心排列模式4,PWM计数器清零
 //pwmgm                =0b0_0_1_0_10_10;                //PWMG分频寄存器
 pwmgm                =0b0_0_1_0_10_11;                //PWMG分频寄存器
 //7,上臂反极性6,下臂反极性5,臂保护4,臂保护模式32,PWM时钟源10,PWM分频
 pwmgc1                =0b1_11_0_01_10;                //PWMG控制寄存器1
 //7,互补发生器65,三相电机4,读零32,PWM5.PWM+|10,PWM4.PWM-
 pwmgc2                =0b01_10_01_10;                //PWMG控制寄存器2
 //76,PWM3.PWM+|54,PWM2.PWM-|32,PWM1.PWM+|10,PWM0.PWM-
 
 pwmcubl                =0b1111_0000;                //pwm上限寄存器l
 pwmcubh                =0b1111_1111;                //pwm上限寄存器h
 
 pwmdz                =0b1111_0000;                //死区寄存器
 
 //pwm0dtl                =0b1111_0000;                //pwm0占空比低位寄存器//先写低位
 //pwm0dth                =0b1111_1111;                //pwm0占空比高位寄存器
 
 //pwm1dtl                =0b0000_0000;                //pwm1占空比低位寄存器//先写低位
 //pwm1dth                =0b1000_0000;                //pwm1占空比高位寄存器
 
 //pwm2dtl                =0b1111_0000;                //pwm2占空比低位寄存器//先写低位
 //pwm2dth                =0b0000_0000;                //pwm2占空比高位寄存器
 
 /****************************************************************************************************/
 while (1)
 {
 //.delay                400000;
 //anjian();
 
 }
 }
 /****************************************************************************************************/
 void        FPPA1 (void)
 {
 a1                        =0x0f;
 a2                        =0x0f;
 a3                        =0x0f;
 pwm0dtl                =0;
 //pwm0dth                =a1;
 
 pwm1dtl                =0;
 pwm1dth                =a2;
 
 pwm2dtl                =0;
 pwm2dth                =a3;
 while (1)
 {
 zhengxian();
 
 }
 }
 /****************************************************************************************************/
 void        FPPA2 (void)
 {
 goto        $;
 }
 /****************************************************************************************************/
 void        FPPA3 (void)
 {
 goto        $;
 }
 /****************************************************************************************************/
 void        FPPA4 (void)
 {
 goto        $;
 }
 /****************************************************************************************************/
 void        FPPA5 (void)
 {
 goto        $;
 }
 /****************************************************************************************************/
 void        FPPA6 (void)
 {
 goto        $;
 }
 /****************************************************************************************************/
 void        FPPA7 (void)
 {
 goto        $;
 }
 /****************************************************************************************************/
 /*
 void        Interrupt (void)
 {
 pushaf;
 
 if (Intrq.T16)
 {        //        T16 Trig
 //        User can add code
 Intrq.T16        =        0;
 //...
 }
 
 popaf;
 }
 */
 /****************************************************************************************************/
 void                zhengxian()                //正弦
 {
 while(1)
 {
 while(a1<0xffe0)                //增大,最大0xfff0,进位0x0f,12位左对齐
 {
 pwm0dtl                =a1        $0;
 pwm0dth                =a1        $1;
 a1                        +=0x0f;
 yanshi();
 }
 while(a1>0x1f)                //减小,最小0x0010,进位0x0f,12位左对齐
 {
 pwm0dtl                =a1        $0;
 pwm0dth                =a1        $1;
 a1                        -=0x0f;
 yanshi();
 }
 }
 
 }
 /****************************************************************************************************/
 void                yanshi()                        //延时
 {
 .delay                100;
 /*if(k1)
 {
 nop;
 nop;
 while(k1){.delay 100;}                //定在这
 while(!k1){.delay 100;}                //等待松手
 }*/
 }
 /****************************************************************************************************/
 /****************************************************************************************************/
 /****************************************************************************************************/
 /****************************************************************************************************/
 /****************************************************************************************************/
 
 
 | 
 |