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在這裏插入圖片描述
進行燒錄,請自行查看教程。

結束!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章