找回密码
 立即注册

QQ登录

只需一步,快速开始

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

PIC12F675电机控制程序案例源码

[复制链接]
跳转到指定楼层
楼主
ID:437028 发表于 2018-12-1 14:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编译器用的是PICC9.83
你试试吧,一定要关闭AD才行哦。
//***************************************************
//           __________________
//       VDD-| 1            14 |-VSS
//   电机GP5-| 2            13 |-GP0/AN0/DAT  LED
//   AN3/GP4-| 3            12 |-GP1/AN1/CLK  
//GP3/RMCLR--| 4            11 |-GP2/AN2  
//           |________________ |
//               16F675
//***************************************************


#include <pic.h>

#define uchar unsigned char
#define uint  unsigned int


#ifndef OPEN
#define OPEN  1
#endif

#ifndef OFF
#define OFF  0
#endif


#define        SET                                1
#define        CLEAR                        0
#define        TRUE                        1
#define        FALSE                        0


__CONFIG(FOSC_EXTRCIO & WDTE_OFF & MCLRE_OFF  & BOREN_OFF  & CP_OFF & PWRTE_ON);
  //内部RC 看门狗关闭 GP3为IO 代码不保护
//#pragma config BOREN = OFF, CPD = OFF, FOSC = XT, MCLRE = OFF, WDTE = OFF, CP = OFF, PWRTE = OFF


#define   KEY     GPIO3
#define   LED     GPIO0
#define   BEEP    GPIO1
#define   SCR     GPIO5
#define   GHG     GPIO4


  /*********程序声明****************/
void  InitAPP(void);

//void  ScanKey();



void InitAPP()
{
        /* Comment out if using simulator, ICD2, or ICE2000
        #asm                                                                  //Load Factory Calibration Value Into OSCCAL
                call 0x3FF
                bsf        _STATUS,5                                                                        
                movwf _OSCCAL                                                
        #endasm
        */

    TRISIO=0x00;                    //Set All I/O's As OUT  
        VRCON = 0;                         //参考电压断电
        CMCON = 0x07;                     // configure comparator inputs as digital I/O                  
        ANSEL =  0;                                  // configure A/D inputs as digital I/O
        ADON=  0;        
        GIE = 1;


                             //Enable All Interrupts
  //  RAPU=0;         //上拉总使能
  //  WPUA5=1;            //RA5使能  
   // RAIE=1;
     IOCB5=1;        //管脚中断使能

}
/*********定时器初始化***************/
void  TimeInt()  
{
    OPTION_REG  &= 0x80;                   //
    TMR0  = 0x14;                    //  250uS
    T0IE = 1;                          //Timer0 Overflow Interrupt Enabled
    T0IF = 0;                        //Clear Timer0 Overflow Interrupt Flag

}   

//***************************************************************************
//Isr() - Interrupt Service Routine
//      - Timer0 Overflow & GP3 Pin Change Are Used
//***************************************************************************

void interrupt Isr()
{     static  uint  count;
        if ( (T0IE & T0IF) == 1)            //If A Timer0 Interrupt, Then
        {     
                 TMR0  = 0x14;
                 if(++count==40)  
                    {
                     count=0;
                 LED=~LED;
                      }

                    T0IF = 0;                 //Clear Timer0 Interrupt Flag
      }
/*
   else if ( (GPIE & GPIF) == SET)          //If A GP3 Pin-Change Interrupt
    {
     if(GHG==0)
      {
       SCR = 1;  //关闭电机
       BEEP=0; //打开蜂鸣器   
      }
     else if(GHG==1)
     {
      SCR=0;//打开电机
      BEEP=1; //关闭蜂鸣器   
     }
       GPIF=0;

    }

        else if ( (INTE & INTF) == SET)   //If A GP2/INT External Intrrupt
        {

        }
        else if ( PEIE == SET)                          //If Peripheral Interrupts Enabled, Check Peripheral
        {                                 //Interrupts

                if ( (EEIE & EEIF) == SET)          //If A EEPROM Interrupt
                {

                }
                else if ( (ADIE & ADIF) == SET) //If A A/D Converter Interrupt
                {

                }

                else if ( (CMIE & CMIF) == SET) //If A Comparator Interrupt
                {

                }
                else if ( (TMR1IE & TMR1IF) == SET) //If A Timer1 Interrupt
                {

                }
        }


***************************/

}


//*****************************************************************************
//Main() - Main Routine
//*****************************************************************************

void  main()
{   
    InitAPP();
    TimeInt();         
        while(1)                             
          {

      }               

}


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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