打印

PIC12F615单片机AD、PWM、定时器各模块程序测试完整版~

[复制链接]
8631|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
嗳许|  楼主 | 2013-8-23 10:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经过一段时间的摸索,终于解决PIC12F615单片机的AD、定时器、PWM等程序测试,编译工具MPLAB IDE v8.92,仿真和实物测试完全适用,为以后有做与PIC单片机相关测试的同学留个参考,无需再从0看起~
沙发
嗳许|  楼主 | 2013-8-23 10:34 | 只看该作者
AD部分:
          #include<pic.h>#define uchar unsigned char
#define uint  unsigned int
__CONFIG(0x3C64);
void delay(uint x);
void init();
uint get_ad();
void main()
{
        init();
       while(1)
      {        
        GPIO=get_ad();
      }
}
void delay(uint x)
{
        uint a,b;
        for(a=x;a>0;a--)
        for(b=110;b>0;b--);
}
void init()
{
              TRISIO=0x08;
              GPIO=0x00;
             ANSEL=0x71;
              ADCON0=0x01;
              delay(20);
}
uint get_ad()
{
            uint adval;
         ADCON0=0x03;
        while(ADCON0==0x01);
           adval=ADRESH<<1;//结果处理方式可自行设计
      //    ADRESL=(ADRESL>>2)&0XF0;
     //     ADRESH=ADRESH<<1;
    //   adval=ADRESH+ADRESL;
           return (adval);       
}

         

使用特权

评论回复
板凳
嗳许|  楼主 | 2013-8-23 10:36 | 只看该作者
PWM部分测试:
                #include <pic.h>__CONFIG(0x3B31);
main()
{  
       CCP1CON=0;
       TMR2=0;
       PR2=0X31;
       CCPR1L=0X1F;
       INTCON=0;
       TRISIO=0X00;
        PIE1=0;
        PIR1=0;
        CCP1CON=0X2C;
        TMR2ON=1;
        while(1)
    {
         while(TMR2IF==1)
             {
                   TMR2IF=0;
             }
     }
}

使用特权

评论回复
地板
嗳许|  楼主 | 2013-8-23 10:37 | 只看该作者
定时器0部分:
#include<pic.h>#define uchar unsigned char
#define uint  unsigned int
__CONFIG(0x3B31);
void init();
uint intnum;
void main()
{
        init();
       if(intnum==5)
     {
               intnum=0;
               GPIO=0xff;
      }
           else
               GPIO=0x00;
}

void init( )
{
        TRISIO=0;
        GPIO=0;
        OPTION=0x07;//
        INTCON=0xa0;
        TMR0=61;
}

void interrupt time0()
{
        T0IF=0;
        TMR0=61;
        intnum++;
}


使用特权

评论回复
5
xiaomanong| | 2013-8-23 22:21 | 只看该作者
学习了

使用特权

评论回复
6
opal11| | 2013-8-23 23:14 | 只看该作者
不错,好东西,收下

使用特权

评论回复
7
Rain_King| | 2013-9-9 10:23 | 只看该作者
不错的东西啊……收下了

使用特权

评论回复
8
socareyou| | 2013-9-10 11:08 | 只看该作者
请问这是用PICC还是CCS编译的啊:handshake

使用特权

评论回复
9
KOP_SING| | 2014-8-19 10:28 | 只看该作者
请教一下,如果我想把ADC的转换结果用在PWM中,控制PWM的输出占空比,怎么配置?谢谢

使用特权

评论回复
10
zhouminjie| | 2015-9-21 22:56 | 只看该作者
楼主好棒,正需要这个

使用特权

评论回复
11
mcumail| | 2015-9-22 08:23 | 只看该作者
留作参考,谢谢分享

使用特权

评论回复
12
青鸟的虚像| | 2015-9-22 15:15 | 只看该作者
虽然用的是24F,但还是顶一个,感谢楼主的分享。

使用特权

评论回复
13
lx911gt| | 2015-9-22 19:14 | 只看该作者
KOP_SING 发表于 2014-8-19 10:28
请教一下,如果我想把ADC的转换结果用在PWM中,控制PWM的输出占空比,怎么配置?谢谢 ...

AD转换出来的值,比如AD转换的结果在ADBUF这个寄存器里,PWM配置好后设定好周期,然后在控制占空比的这个寄存器将ADBUF赋值给他就行了,比如占空比这个寄存器叫CCPR1,那么就是CCPR1 = ADBUF 就可以了,这时候你旋转电位器这个占空比就是你AD转换来的结果了,前提是这两个外设都配置好了

使用特权

评论回复
14
扛着墓碑的鬼| | 2017-2-18 14:26 | 只看该作者
嗳许 发表于 2013-8-23 10:37
定时器0部分:
#include#define uchar unsigned char
#define uint  unsigned int

这是定时多久的子程序。

使用特权

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

本版积分规则

17

主题

47

帖子

2

粉丝