ZHAOBAO511 发表于 2024-7-6 11:02:48

请教STC15PWM没有输出的问题,代码如下:

#include <reg52.h>
#include "intrins.h"
sfr AUXR      =   0x8E;   //0000,0000 辅助寄存器
sfr T2H         =   0xD6;   //0000,0000 T2高字节
sfr T2L         =   0xD7;   //0000,0000 T2低字节

sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;


sfr        P7   = 0xF8;

//PWM模块寄存器定义
sfr P_SW1= 0xA2;             //外设功能切换寄存器1   针脚选择功能寄存器

#define CCP_S0 0x10               //P_SW1.4       选择针脚功能
#define CCP_S1 0x20               //P_SW1.5       选择针脚功能
#define S1_S1 0x80               //P_SW3.6       选择针脚功能
#define S1_S0 0x40               //P_SW3.7       选择针脚功能
sfr ADC_CONTR   =   0xBC;         //ADC控制寄存器
sfr ADC_RES   =   0xBD;         //ADC高8位结果
sfr ADC_LOW2    =   0xBE;         //ADC低2位结果
sfr P1ASF       =   0x9D;         //P1口第2功能控制寄存器

#define ADC_POWER   0x80            //ADC电源控制位
#define ADC_FLAG    0x10            //ADC完成标志
#define ADC_START   0x08            //ADC起始控制位
#define ADC_SPEEDLL 0x00            //540个时钟
#define ADC_SPEEDL0x20            //360个时钟
#define ADC_SPEEDH0x40            //180个时钟
#define ADC_SPEEDHH 0x60            //90个时钟
                                                                                                                                                                                                                                                                          
sfr CCON      =   0xD8;         //PCA控制寄存器
sbit CCF0       =   CCON^0;         //PCA模块0中断标志
sbit CCF1       =   CCON^1;         //PCA模块1中断标志
sbit CR         =   CCON^6;         //PCA定时器运行控制位
sbit CF         =   CCON^7;         //PCA定时器溢出标志
sfr CMOD      =   0xD9;         //PCA模式寄存器
sfr CL          =   0xE9;         //PCA定时器低字节
sfr CH          =   0xF9;         //PCA定时器高字节
sfr CCAPM0      =   0xDA;         //PCA模块0模式寄存器
sfr CCAP0L      =   0xEA;         //PCA模块0捕获寄存器 LOW
sfr CCAP0H      =   0xFA;         //PCA模块0捕获寄存器 HIGH
sfr CCAPM1      =   0xDB;         //PCA模块1模式寄存器
sfr CCAP1L      =   0xEB;         //PCA模块1捕获寄存器 LOW
sfr CCAP1H      =   0xFB;         //PCA模块1捕获寄存器 HIGH
sfr CCAPM2      =   0xDC;         //PCA模块2模式寄存器
sfr CCAP2L      =   0xEC;         //PCA模块2捕获寄存器 LOW
sfr CCAP2H      =   0xFC;         //PCA模块2捕获寄存器 HIGH
sfr PCA_PWM0    =   0xf2;         //PCA模块0的PWM寄存器
sfr PCA_PWM1    =   0xf3;         //PCA模块1的PWM寄存器
sfr PCA_PWM2    =   0xf4;         //PCA模块2的PWM寄存器
///////////////////////////////////////////////////////////函数列表、、、、、、、、、、、、、、、、、、、、、、、、、、、

void Timer0Init(); //初始化T0


void pwm();       //解析接受到的数据


void Delay(unsigned int n);           //软件延时 1.6毫秒左右

///////////////////////////////////////////////////////////定义的一些变量、、、、、、、、、、、、、、、、、、、、、、、、、、、
bit flagTxd = 0; //单字节发送完成标志,用来替代 TXD 中断标志位
sbit s1 = P3^3;       //切换继电器
sbit km = P3^2;       //功率继电器接触器
sbit pwmdip = P1^1;
sbit k1 = P3^0;                //按钮
sbit PCA_LED = P1^2;

unsigned char cntRxd = 0; //接收字节计数器
unsigned char pdata bufRxd; //接收字节缓冲区
unsigned char code bufWxd ={0x01,0x03,0x00,0x48,0x00,0x0A,0x45,0xDB,};//发送的数据        增加了code关键字,此数组写在程序区减少使用内部内存128K
unsigned long pdata cnt = 0; //毫秒计数
//unsigned long pdata sec; //秒计数
//unsigned cha *but;// 发送指针
unsigned int pdata vcc; // 电压
unsigned int pdata vci; // 电流
unsigned int pdata power; // 功率
unsigned long pdata kwh=0; // 电能
unsigned long pdata kwh1; // 初始电能
unsigned char pw;       //设定的空占比%
unsigned int value; // 电压
unsigned char cp; //充电桩PWM波形 cp电压采集信号        120
////            关于LCD 1602      /////////////////LCD的一些定义
sfr P5   = 0xC8;
unsigned char pdata lcd1;       //LCD第一行
unsigned char pdata lcd2;       //LCD第二行
sbit LCD1602_RS = P5^5;       //命令、数据选择 H\L
sbit LCD1602_E = P5^4;       //使能
unsigned char pdata ki;        //电流显示1表示16A   2表示32A

#define LEDDATA P7   //定义P1口为数据端
#define T100Hz 256
void LcdWriteCom(unsigned char com); /*LCD1602写入8位数据子函数*/       
void LcdWriteData(unsigned char dat);        /*LCD1602写入8位数据子函数*/
void LcdInit();                        /*LCD1602初始化子程序*/       
void lcd1602();         //1602显示刷新
void Lcd1602_Delay5ms();
void Lcd1602_Delay1ms();






void main(){
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    P6M0 = 0x00;
    P6M1 = 0x00;
    P7M0 = 0x00;
    P7M1 = 0x00;

        P_SW1=P_SW1|S1_S0;
    EA = 1; //使能总中断


          pwm();       //初始化pwm模块设置

       
        Timer0Init(); //初始化T0



    while (1){

                                       }
}

       



void pwm(){//PWM程序、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、


    ACC = P_SW1;                                        //累加器 等于外设寄存器
    ACC &= ~(CCP_S0 | CCP_S1);      //CCP_S0=0 CCP_S1=0
    P_SW1 = ACC;                  //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)       读取累加器的值写进外设寄存器
    CCON = 0;                     //初始化PCA控制寄存器
                                    //PCA定时器停止
                                    //清除CF标志
                                    //清除模块中断标志
    CL = 0;                         //复位PCA寄存器
    CH = 0;
        CMOD = 0x04;

       
    PCA_PWM0 = 0x00;                //PCA模块0工作于8位PWM
    CCAP0H = CCAP0L =255-255*60/100;         //PWM0的占空比为87.5% ((100H-20H)/100H)       255-255*设定空占比        /100
    CCAPM0 = 0x42;                  //00101010PCA模块0允许比较功能        使用CCP0脚为可调脉冲输出       P1.1

                               }
void Timer0Init()                //T0作为PWM频率基准发生
{
       
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0xd5;        //设置定时初值                计算方法,65536-晶振/(256*需要频率)   
        TH0 = 0xFf;                //设置定时初值       
        TR0 = 1;                //定时器0开始计时
        ET0 =0;                        // 禁止T0中断
        TF0 = 0;                //清除TF0标志
//        EA=0;                        关闭总总中断
    CR = 1;
        }                        //PCA定时器开始工作





带仿真,P1.1无输出,请懂的朋友给予指导,谢谢。



页: [1]
查看完整版本: 请教STC15PWM没有输出的问题,代码如下: