找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2871|回复: 3
打印 上一主题 下一主题
收起左侧

帮帮我看看这个程序用60S2可以下载进去吗?

[复制链接]
跳转到指定楼层
楼主
ID:64215 发表于 2014-8-22 14:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <REG52.H>
#include <intrins.h>  
#define unchar unsigned char
#define unint  unsigned int   
unsigned char PWMDTY0=0,PWMDTY1=0,PWM_Freq=0;   
void DelayMs(unchar ms);  
void PWM_clock(unchar clock);  
void PWM_start(unchar module,unchar mode);   
////////////////////// 延时子程序/////////////////////////////  
void DelayMs(unchar ms) //在11.0592M晶振下,stc10f系列(单周期指令)的ms级延时
{unint i;  
while(ms--)
   {   
    for(i = 0; i < 850; i++);   
   }
}
////////////////////主函数入口////////////////////////////   
           sfr CCON     = 0xD8; //PCA控制寄存器
           sfr CMOD     = 0xD9; //PCA模式寄存器  
           sfr CCAPM0   = 0xDA; //PCA模块0模式寄存器 //模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)     
           sfr CCAPM1   = 0xDB; //PCA模块1模式寄存器 //模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)
           sfr CL       = 0xE9; //PCA 定时寄存器 低位
           sfr CH       = 0xF9; //PCA 定时寄存器 高位  
           sfr CCAP0L   = 0xEA; //PCA模块0的 捕获寄存器 低位
           sfr CCAP0H   = 0xFA; //PCA模块0的 捕获寄存器 高位
           sfr CCAP1L   = 0xEB; //PCA模块1的 捕获寄存器 低位
           sfr CCAP1H   = 0xFB; //PCA模块1的 捕获寄存器 高位
           sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0
           sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1
           sbit CF   = 0xDF;     //PCA计数溢出标志位
           sbit CR   = 0xDE;     //PCA计数器 运行控制位
       sbit CCF1 = 0xD9;     //PCA模块1中断标志
       sbit CCF0 = 0xD8;     //PCA模块0中断标志   
           //*CCAPOH = CCAPOL = 0XC0; //模块0输出 占空因数为25%
           //*CCAPOH = CCAPOL = 0X80; //模块0输出 占空因数为50%
           //*CCAPOH = CCAPOL = 0X40; //模块0输出 占空因数为75%
          
           void PWM_clock(unchar clock);
           void PWM_start(unchar module,unchar mode);   
                          
void PWM_clock(unchar clock)
                           {   
                            CMOD |= (clock<<1);   
                            CL = 0x00;   
                            CH = 0x00;
                           }
void PWM_start(unchar module,unchar mode)   //(模块选择,选定模块的工作方式)
                                {    CCAP0L = PWMDTY0;   
                                     CCAP0H = PWMDTY0;   //模块0初始输出 占空因数为50% (占空比=255-)   
                                     CCAP1L = PWMDTY1;   
                                     CCAP1H = PWMDTY1;   //模块1初始输出 占空因数为25%   
                                  if(module==0)    //只用模块0   
                                  {      
                                  switch(mode)     
                                  {         case 0: CCAPM0 = 0X42;break; //模块0设置为8位PWM输出,无中断      
                                            case 1: CCAPM0 = 0X53;break; //模块0设置为8位PWM输出,下降沿产生中断      
                                            case 2: CCAPM0 = 0X63;break; //模块0设置为8位PWM输出,上升沿产生中断      
                                            case 3: CCAPM0 = 0X73;break; //模块0设置为8位PWM输出,跳变沿产生中断      
                                        default: break;     
                                   }   
                                   }   
                                    else if(module==1)  //只用模块1   
                                   {      
                                   switch(mode)   
                                    {         case 0: CCAPM1 = 0X42;break; //模块1设置为8位PWM输出,无中断        
                                                  case 1: CCAPM1 = 0X53;break; //模块1设置为8位PWM输出,下降沿产生中断      
                                                  case 2: CCAPM1 = 0X63;break; //模块1设置为8位PWM输出,上升沿产生中断      
                                                     case 3: CCAPM1 = 0X73;break; //模块1设置为8位PWM输出,跳变沿产生中断      
                                                  default: break;     
                                        }   
                                        }   
                                         else if(module==2)  //   
                                         {
                                         switch(mode)   
                                          {         case 0: CCAPM0 = CCAPM1 = 0X42;break; //模块0和1设置为8位PWM输出,无中断        
                                                    case 1: CCAPM0 = CCAPM1 = 0X53;break; //模块0和1设置为8位PWM输出,下降沿产生中断        
                                                    case 2: CCAPM0 = CCAPM1 = 0X63;break; //模块0和1设置为8位PWM输出,上升沿产生中断        
                                                    case 3: CCAPM0 = CCAPM1 = 0X73;break; //模块0和1设置为8位PWM输出,跳变沿产生中断        
                                                    default: break;   
                                            }
                                            }   
                                                 CR=1; //PCA计数器开始计数
                                          }   
void PCA_Intrrpt(void) interrupt 7
                                          {   
                                          if(CCF0) CCF0=0;   
                                          if(CCF1) CCF1=0;   //软件清零   
                                          if(CF)   CF=0;    //软件清零  
                                                   }   
void main(void)
                {     
                PWMDTY0=127;   
                PWMDTY1=192;   
            PWM_Freq=255;   
            TMOD|=0x02; /* timer 0 mode 2: 8-Bit reload */   
            TH0=PWM_Freq;   
                TR0=1;            
            PWM_clock(2);      // PCA/PWM时钟源为 定时器0的溢出   
                PWM_start(2,0);           // 模块0,设置为PWM输出,无中断,初始占空因素为25%      
while(1)   
{      
                DelayMs(250);  
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:26188 发表于 2014-8-23 20:17 来自手机 | 只看该作者
可以用
回复

使用道具 举报

板凳
ID:69905 发表于 2014-12-3 20:07 | 只看该作者
大神 能不能帮忙讲一下这个程序的每段是干什么用的呀
回复

使用道具 举报

地板
ID:183328 发表于 2017-3-25 15:56 | 只看该作者
不懂帮顶
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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