PIC12F508 单片机使用教程

1.安装MPLAB X IDE与XC8 C语言编译器

• 安装 MPLAB X IDE,到此链接免费下载 http://www.microchip.com/mplabx
在这里插入图片描述

使用教程下载:http://www.microchip.com/mplabx
在这里插入图片描述
• 安装 MPLAB XC8 C 编译器,到此链接免费下载 http://www.microchip.com/xc
在这里插入图片描述
MPLAB XC8 C:用于MPLAB X IDE 编程8位单片C语言编译器。
使用教程下载:http://www.microchip.com/xc
在这里插入图片描述安装完毕IDE会得到以下两个快捷方式:
在这里插入图片描述
IPE为烧录芯片用的工具,IDE为编写程序用的工具;XC8安装后没快捷方式,需要配置后与IDE一起用。
更多使用资料查看:https://microchipdeveloper.com

2.配置IDE使用XC8 C语言编译器

双击IDE快捷方式,打开菜单:Tools>Options>Embedded>Build Tools.
然后按下图添加与配置IDE使用XC8 编译器:
在这里插入图片描述此时开发环境已搭建完毕!

3.新建一个工程

3.1、新建工程的3种方法:
在这里插入图片描述
3.2、选择“Standalone Pronject”,点击Next:
在这里插入图片描述
3.3、选择单片机类型和型号,点击Next:
在这里插入图片描述
3.4、默认选项,直接点击Next
在这里插入图片描述
3.5、选择编程器,根据个人需求选择,也可以任意选择一个,后续再根据需求修改,这里选择“PICkit3”,点击Next:
在这里插入图片描述
3.6、选择编译器,这里选择上面安装的XC8编译器,点击Next:
在这里插入图片描述
3.7、填写工程名字和选择工程保存路径,点击Finish即可新建完一个工程
在这里插入图片描述

4、PIC12F508功能位在IDE的配置

PIC12F508的时钟选择、看门狗、程序保护,GP3引脚的使用,是在IDE的菜单:Window -> Target Memory Views -> Configration Bits 里面配置好,然后在点击“generate source code to Output”,如下图:
在这里插入图片描述
将输出的代码拷贝到源文件中,即可配置完。
在这里插入图片描述
接着即可根据以下文档编写程序。
PIC12F508规格书、编程手册等:https://www.microchip.com/wwwproducts/en/PIC12F508
在这里插入图片描述
对IO口的操作,可以参考XC8安装目录下的include文件夹,如下图:
在这里插入图片描述

贴一个我写的代码:

/*
 * File:   main.c
 * Author: Administrator
 *
 * Created on April 20, 2020, 11:30 AM
 */

#include <xc.h>     //适用于所有PIC 8位单片机,包含了所有PIC 8位单片机的头文件
#include <stdint.h>

// CONFIG
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)
#pragma config CP = ON          // Code Protection bit (Code protection on)
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)

int tc = 0;
uint8_t dice_start = 1;
uint8_t dice_data[6]={1,2,3,4,5,6};
uint8_t flag = 0;
uint8_t start_time = 0;
//uint8_t stop_time = 0;
///////////////////////////////////////////////////////////////////////////
void pic12f508_init(void){
    OPTION = 0xd7;     //time0 select internal clock,Fosc/4, prescale=1:256
    TRISGPIO = 0x08;   //G0,G1,G2,G4,G5 as output mode,G3 as input mode
    GPIO = 0x00;       //turn off all led
    TMR0 = 0x3f;       //initialization timer,timing 0.05second
}
///////////////////////////////////////////////////////////////////////////
void check_time(void){
    if(TMR0 == 0xff){
        TMR0 = 0x3f;       //initialization timer
        if(++tc == 3600){   //timing 180second
            tc = 0;
        }
    }    
}
///////////////////////////////////////////////////////////////////////////
void led_display(char dat){
    switch(dat){
        case 0:GP0=0;GP1=0;GP2=0;GP4=0;break;
        case 1:GP0=0;GP1=1;GP2=0;GP4=0;break;
        case 2:GP0=0;GP1=0;GP2=0;GP4=1;break;
        case 3:GP0=0;GP1=1;GP2=1;GP4=0;break;
        case 4:GP0=0;GP1=0;GP2=1;GP4=1;break;
        case 5:GP0=0;GP1=1;GP2=1;GP4=1;break;
        case 6:GP0=1;GP1=0;GP2=1;GP4=1;break;
        default:break;
    }
}
///////////////////////////////////////////////////////////////////////////
void delay(int t){
    uint8_t a=0,b=0;
    while(t>1){
        for(a=0;a<200;a++){
            while(b<200){b++;}
        }    
        t--;
    }
}
///////////////////////////////////////////////////////////////////////////
void main(void) {
    pic12f508_init();
    while(1){
        check_time();
        if(GP3 == 1 && dice_start == 1){
            dice_data[5] = dice_data[4];
            dice_data[4] = dice_data[3];
            dice_data[3] = dice_data[2];
            dice_data[2] = dice_data[1];
            dice_data[1] = dice_data[0];
            do{
                dice_data[0] = (TMR0 - 0x3f)%7;
            }while(dice_data[0] == 0);
            led_display(dice_data[2]);
            dice_start = 0;
            start_time = tc;
            flag = 1;
        }
        if(GP3 == 0 && dice_start == 0){
            dice_start = 1;
            start_time = tc;
            flag = 1;
        }
        
        char time = 0;
        time = tc - start_time;
        if(15 < time && time < 25 && flag == 1){
            uint8_t i;
            for(i=6;i>0;i--){
                led_display(dice_data[i-1]);
                delay(80);
            }
            //led_display(dice_data[0]);
            flag = 2;
        }
        time = tc - start_time;
        if(time > 60 && flag == 2){
            uint8_t c;
            for(c=0;c<5;c++){
                led_display(0);
                delay(30);
                led_display(dice_data[0]); // display the result
                delay(30);
            }
            flag = 3;
        }
        time = tc - start_time;
        if(time >= 240 && flag == 3){
            led_display(0);
            flag = 0;
        }
    }
}

5.搭建IC烧录电路

工程生成的HEX文件,一般在工程目录下的dist -> default -> production目录下,如下图:
在这里插入图片描述
烧录电路:
在这里插入图片描述
在这里插入图片描述
PICkit 3 的使用教程可以到PIC官网下载,方法如下:
https://www.microchip.com/sitesearch/search/All/12f508?&mns=PICkit%203%20User%E2%80%99s%20Guide&mnc=All

在这里插入图片描述
注意:在使用PICkit 3烧录固件时,IC必须外接电源,不能只由PICkit 3烧录器供电,否则烧录会失败。

烧录:
PICkit 3连接电脑USB口,可以通过IDE点击在这里插入图片描述进行烧录,也可以使用IPE在这里插入图片描述
进行烧录,请自行查看教程。

结束!

发布了3 篇原创文章 · 获赞 3 · 访问量 80

猜你喜欢

转载自blog.csdn.net/qq_30209977/article/details/105775792