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

[复制链接]
9981|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++;
}


xiaomanong 发表于 2013-8-23 22:21 | 显示全部楼层
学习了
opal11 发表于 2013-8-23 23:14 | 显示全部楼层
不错,好东西,收下
Rain_King 发表于 2013-9-9 10:23 来自手机 | 显示全部楼层
不错的东西啊……收下了
socareyou 发表于 2013-9-10 11:08 | 显示全部楼层
请问这是用PICC还是CCS编译的啊:handshake
KOP_SING 发表于 2014-8-19 10:28 | 显示全部楼层
请教一下,如果我想把ADC的转换结果用在PWM中,控制PWM的输出占空比,怎么配置?谢谢
zhouminjie 发表于 2015-9-21 22:56 | 显示全部楼层
楼主好棒,正需要这个
mcumail 发表于 2015-9-22 08:23 | 显示全部楼层
留作参考,谢谢分享
青鸟的虚像 发表于 2015-9-22 15:15 | 显示全部楼层
虽然用的是24F,但还是顶一个,感谢楼主的分享。
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转换来的结果了,前提是这两个外设都配置好了
扛着墓碑的鬼 发表于 2017-2-18 14:26 | 显示全部楼层
嗳许 发表于 2013-8-23 10:37
定时器0部分:
#include#define uchar unsigned char
#define uint  unsigned int

这是定时多久的子程序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

47

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部