pic12f675单片机学习程序2

更新时间:2023-04-12 09:23:02 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

pic12f675单片机学习程序2

//将INT处的短路帽插上,注意led处的短路帽‘2’和‘3’ 要拔掉 ;led 处的短路帽‘1’

要插上 ;

//RST处的短路帽要插上

//实验现象,上电后,led0先是亮,然后每按一次 INT处的按钮 LED0的状态都会改变一

次(即一次暗一次亮)

//引用头文件

#include

#define u8 unsigned char

#define u16 unsigned int

void yanshi(void) //延时子函数

{

u8 i;

u16 j;

for(j=2435;j>0;j--)

{

for(i=100;i>0;i--)

{

;

}

}

}

void interrupt GP_int0(void)

{

static u8 i=0;

if(1 == INTF)

{

if(0==i)

{

GPIO0=1;

i=1;

}

else

{

GPIO0=0;

i=0;

}

INTF=0;

}

}

void init(void) {

CMCON=0X07;//比较器关闭

ANSEL=0X00;//设GP0到GP3都为数字IO口OPTION=0X80;//禁止GPIO上拉

TRIS0=0;//GP0口设为输出

INTE=1;//使能GP2的外部中断

yanshi();//延时一段时间,防止上电误动作

INTF=0;//清一下中断标志

GPIO0=0;//先点亮LED0

GIE=1;//全局中断使能

}

void main(void) {

init();

while(1)

{

;

}

}

//tmer0 查询方式实现1s的定时

// led0 每1秒闪烁一次(查询方式) //选用内部晶振 4M

//把0处短路帽按上

//引用头文件

#include

//符号变量替换

#define u8 unsigned char

#define u16 unsigned int

#define led GPIO0

//用c语言嵌套汇编来实现“喂狗” #define clrwdt() asm("CLRWDT") //全局变量的声明

u8 n=0;

void init(void)

{

CMCON=0X00;//比较器关闭

ANSEL=0X00;//设GP0到GP3都为数字IO口

OPTION=0X07;//禁止GPIO上拉定时器0 预分频为 1:256 TRIS0=0;//GP0口设为输出

TMR0=156;//每39次溢出是1S }

void tmer0(void) {

if(T0IF==1)

{

n++;

TMR0=156;

T0IF=0;

if(n==39)

{

led=0;

}

if(n==39*2)

{

led=1;

n=0;

}

}

}

void main(void)

{

init();//初始化

while(1)//循环

{

clrwdt();

tmer0();

}

}

//tmer0 中断方式实现1s的定时

// led0 每1秒闪烁一次(中断方式)

//选用内部晶振 4M

//把0处短路帽按上

//引用头文件

#include

//符号变量替换

#define u8 unsigned char

#define u16 unsigned int #define led GPIO0 //用c语言嵌套汇编来实现“喂狗”

#define clrwdt() asm("CLRWDT")

//全局变量的声明

u8 n=0;

void init(void)

{

CMCON=0X00;//比较器关闭

ANSEL=0X00;//设GP0到GP3都为数字IO口

OPTION=0X07;//禁止GPIO上拉定时器0 预分频为 1:256 TRIS0=0;//GP0口设为输出

T0IF=0;

T0IE=1;

GIE=1;

TMR0=156;//每39次溢出是1S

}

void interrupt tmer0(void) {

if(T0IF==1&&T0IE==1)

{

n++;

TMR0=156;

T0IF=0;

if(n==39)

{

led=0;

}

if(n==39*2)

{

led=1;

n=0;

}

}

}

void main(void)

{

init();//初始化

while(1)//循环

{

clrwdt();

}

}

//tmer1 中断方式实现1分钟的定时

//由于是使用PIC12F675 的内部晶振,内部晶振不是很精确,所以1分钟延时的误差在+/-

6秒之内都是可以接受的。

// led0 每1分钟闪烁改变亮灭状态一次(中断方式) //选用内部晶振 4M //把0处短路帽按上

//引用头文件

#include

//符号变量替换

#define u8 unsigned char #define u16 unsigned int #define led GPIO0 //用c语言嵌套汇编来实现“喂狗”

#define clrwdt() asm("CLRWDT")

//全局变量的声明

u8 n=0;

void init(void)

{

CMCON=0X00;//比较器关闭

ANSEL=0X00;//设GP0到GP3都为数字IO口

OPTION=0X07;//禁止GPIO上拉定时器0 预分频为 1:256 TRIS0=0;//GP0口设为输出

GIE=1; //总中断使能

T1CON=0X34;//tmer1 8分频

TMR1IF=0; //tmer1 中断标志清零

TMR1L=0X00;

TMR1H=0X00;

PEIE=1; //外围功能使能

TMR1IE=1; //tmer1 中断使能

TMR1ON=1; //tmer1 计时开启

led=0;

}

void interrupt tmer0(void) {

if(TMR1IF==1&&TMR1IE==1) //检验是否是tmer1中断

{

n++;

TMR1L=0X00;

TMR1H=0X00;

TMR1IF=0; //tmer1 中断标志清零

if(n==115)

{

led=1;

}

if(n>=230) //用 ">=" 比用 "==" 好(纠错功能,如果 "n==230" 时,由于各种原因如外界干扰等,没有执行中断程序,这是 ">=" 显然比 "==" 好) {

led=0;

n=0;

}

}

}

void main(void) {

init();//初始化

while(1)//循环

{

clrwdt();

}

}

//tmer1 中断方式实现1分钟的定时

//由于是使用PIC12F675 的内部晶振,内部晶振不是很精确,所以1分钟延时的误差在+/-

6秒之内都是可以接受的。

//在烧程序的时候将IC-Prog 软件环境的右侧 //熔丝下面的 WDT 前面的勾选上其它的勾不要使其消失 //振荡器选择 intOSC GP4

//剩下的默认即可

// led0 每1分钟闪烁改变亮灭状态一次(中断方式) //选用内部晶振 4M //把JP-LED处的0短路帽按上

//引用头文件

#include

//符号变量替换

#define u8 unsigned char #define u16 unsigned int #define led GPIO0 //用c语言嵌套汇编来实现“喂狗”

#define clrwdt() asm("CLRWDT")

//全局变量的声明

u8 n=0;

void init(void)

{

CMCON=0X00;//比较器关闭

ANSEL=0X00;//设GP0到GP3都为数字IO口

OPTION=0X07;//禁止GPIO上拉定时器0 预分频为 1:256

TRIS0=0;//GP0口设为输出

GIE=1; //总中断使能

T1CON=0X34;//tmer1 8分频

TMR1IF=0; //tmer1 中断标志清零

TMR1L=0X00;

TMR1H=0X00;

PEIE=1; //外围功能使能

TMR1IE=1; //tmer1 中断使能

TMR1ON=1; //tmer1 计时开启

led=0;

}

void interrupt tmer0(void) {

if(TMR1IF==1&&TMR1IE==1) //检验是否是tmer1中断

{

n++;

TMR1L=0X00;

TMR1H=0X00;

TMR1IF=0; //tmer1 中断标志清零

if(n==127)

{

led=1;

}

if(n>=254) //用 ">=" 比用 "==" 好 ,当然在这里比254大的只有255,这是碰

巧了,呵呵。

//若是 if(n>=230)的话,如果 "n==230" 时,由于各种原因如外界干

扰等,没有执行中断程序,这是 ">=" 显然比 "==" 好)

{

led=0;

n=0;

}

}

}

void main(void) {

init();//初始化while(1)//循环{

clrwdt();

}

}

本文来源:https://www.bwwdw.com/article/4f7l.html

Top