• 安装 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
双击IDE快捷方式,打开菜单:Tools>Options>Embedded>Build Tools.
然后按下图添加与配置IDE使用XC8 编译器:
此时开发环境已搭建完毕!
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即可新建完一个工程
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 //适用于所有PIC 8位单片机,包含了所有PIC 8位单片机的头文件
#include
// 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;
}
}
}
工程生成的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
进行烧录,请自行查看教程。
结束!