OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4315|回复: 2

急求解决STC12C5a60s程序问题

[复制链接]

11

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2019-5-23
在线时间
26 小时
发表于 2019-7-1 11:54:52 | 显示全部楼层 |阅读模式
#include "STC_NEW_8051.H"
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;

#define DUTY_VAL 0x47 //
#define TIMEROVERFLOWVAL 5

sbit PWM_PIN=P1^3;
sbit GYKZ=P0^6;
sbit SND = P3^3;        //外部输入使能端,1表示启动工作,0表示不工作

void PCA_ClkSourceInit();
void PCA_Init();
//定时器中断的初始化配置
void Timer_Init()
{
        TMOD&=0x0f; //
        TMOD|=0x10; //
        TH1=(65536-2000)/256;
        TL1=(65536-2000)%256;//赋初值2ms
        TF1=0;
        TR1=1;
        ET1=1;
        EA=1;
}

//定时中断服务程序
void Timer_ISR() interrupt 3
{
        //static uint cnt=0;
        static uint tr200ms=0;
        static uint tr2500ms=0;
        TH1=(65536-2000)/256;
        TL1=(65536-2000)%256;//赋初值2ms
        tr200ms++;
        if(tr200ms==100)//0.2S
        {
                tr200ms=0;
                flag_200ms=1;
                tr2500ms++;
                {
                        if(tr2500ms==13)//2.6S
                        {
                                tr2500ms=0;
                                flag_2500ms=1;
                        }
                }
        }
}
void main()
{
        PCA_ClkSourceInit();
        PCA_Init();
        GYKZ=1;       
        SND=1;
    WDT_CONTR = 0X38;  //启动看门狗71ms
        while(1)
        {
                if(SND==1)        GYKZ=PWM_PIN;//p1.3PCA输出28%的700多HZ的方波
                //else中有问题,不知道问题在哪里像要SND=0的时候0.2S内GYKZ=PWM_PIN;超过0.2S GYKZ=1;到2.5S时        GYKZ=PWM_PIN;依次循环               
                else//这里有问题,想SND=0的时候0.2S内GYKZ=PWM_PIN;超过0.2S GYKZ=1;到2.5S时        GYKZ=PWM_PIN;依次循环
                {
                        if(flag_200ms==1) //200ms到
                        {GYKZ=1;flag_200ms=0;}
                        if(flag_2500ms==1) //2.6s到
                        {
                                flag_2500ms=0;
                                GYKZ=PWM_PIN;
                        }
                }
        }
}

void PCA_Init()
{
        CMOD=0x04; //设置时钟来源为timer0的溢出率
        CCAPM0=0x42; //8位PWM输出
        CL=0;
        CH=0;
        CCAP0L=DUTY_VAL; //占空比设置
        CCAP0H=DUTY_VAL; //占空比设置
        CR=1; //开始PCA输出       
}


//PCA的时钟来源Timer0的溢出率设置
void PCA_ClkSourceInit()
{
        TMOD&=0xf0;
        TMOD|=0x02; //8位自动重载模式
        TL0=0xff+1-TIMEROVERFLOWVAL;
        TH0=0xff+1-TIMEROVERFLOWVAL;
        TR0=1; //开始定时器0
}

由于单用定时器做700HZ 28%的方波,定时器中断差不多要0.1MS一次,这样会造成整个程序一直在中断中,所以修改成PCA输出,但是想要SND=0时,GYKZ0.2S内发700
HZ28%方波,然后停止2.6S后再发

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2019-7-1 18:51:47 | 显示全部楼层
回复 支持 反对

使用道具 举报

11

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2019-5-23
在线时间
26 小时
 楼主| 发表于 2019-7-1 20:46:14 | 显示全部楼层

帮我看看呢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 13:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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