pic12f683简单使用代码Word文件下载.docx

上传人:b****4 文档编号:18216619 上传时间:2022-12-14 格式:DOCX 页数:12 大小:30.86KB
下载 相关 举报
pic12f683简单使用代码Word文件下载.docx_第1页
第1页 / 共12页
pic12f683简单使用代码Word文件下载.docx_第2页
第2页 / 共12页
pic12f683简单使用代码Word文件下载.docx_第3页
第3页 / 共12页
pic12f683简单使用代码Word文件下载.docx_第4页
第4页 / 共12页
pic12f683简单使用代码Word文件下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

pic12f683简单使用代码Word文件下载.docx

《pic12f683简单使用代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《pic12f683简单使用代码Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。

pic12f683简单使用代码Word文件下载.docx

bitKEY_10MS_IF;

//10MS的键盘的扫描的溢出标记

bitKEY_500MS_IF;

//500MS的键盘的扫描的溢出标记

bitKEY_XS_IF;

//XS的键盘的扫描的溢出标记

bitd1ms_IF;

//

bitd10ms_IF;

bitd100ms_IF;

bitd500ms_IF;

 

bitd1s_IF;

bitd100ms_SW_IF;

//检测电机的时间到了

bitK_NO_OFF_IF;

bitSS_LED_IF;

//LED的闪烁开关

bitSS_LED2_100ms_IF;

//因为是闪烁标记所以是要取反的

bitSS_LED1_500ms_IF;

//MOVLW 

B'

00000100'

XORWF 

RAM_SS_IF,F

bitSS_LED2_500ms_IF;

00001000'

bitSS_LED1_1s_IF;

00010000'

RAM_SS_IF,F 

bitSS_LED2_Speed_IF;

//LED的闪烁的速度是否开启 

bitT2_CCP1_IF;

//

bitT2_CCP1_IE;

unsignedchard1ms;

//1ms

unsignedchard10ms;

//10ms

unsignedchard100ms;

//100ms

unsignedchard500ms;

//500ms

unsignedchard1s;

//1s

unsignedchard_LED1;

//数码管闪烁

unsignedchard_LED2;

//LED闪烁

unsignedchard_key;

unsignedchard_Heat;

//加热时间

unsignedchard_SW_S;

//电机转了的时间(超过15秒:

说明电机运行异常)

unsignedchard_SW;

//产生PWM波形

unsignedchard_SW_Turn;

//电机堵转时间

unsignedchard_Heat_PID;

//PID是比例,积分,微分的缩写.

unsignedcharkey_temp_xs;

//xS后的端口的异或保存

unsignedcharkey_temp_10ms;

//10MS后的端口的保存,用来判断端口是否被改变

unsignedcharkey_temp;

//键盘的临时存放

unsignedcharLED_I;

//LED两数码管的位

unsignedcharLED_D[3];

//两数码管的数据

unsignedcharLED_temp;

unsignedcharDATA_I;

unsignedcharDATA_D[8];

unsignedcharAD_D;

unsignedcharCCP1_I;

unsignedcharCCP1_t;

unsignedcharCCP1_tH;

unsignedcharCCP1_tL;

unsignedcharCSR;

//保存了几个低电平脉冲;

从而判断有没有碰到障碍物

unsignedcharFM_S;

//蜂鸣器警报次数

unsignedcharEEPROM_A;

unsignedcharEEPROM_D;

unsignedcharPIC_IP;

unsignedchartemp;

//临时变量

unsignedcharj;

unsignedintt;

constunsignedcharTAB_LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};

//定义常数0-F的数据表格

constunsignedcharTAB_TEMP[]={69,71,73,75,78,80,82,84,86,89,91,93,95,98,100,102,104,107,109,111,114,116,118,121,123,125,127,130,132,134,136,138};

//温度表

//40摄氏度----------------------------------------------------------------------------------------------70摄氏度

//-------------------------------------------

//主程序

voidmain()

{

//看门狗是一个自己拥有独立的RC时钟信号的,计时周期约为18ms的,自由运行的计时器.

//OPTION=0X0F;

//1:

128--->

2304ms

//OPTION=0X0E;

64--->

1152ms

//OPTION=0X0D;

32--->

576ms

//OPTION=0X0C;

16--->

228ms

OPTION=0X0B;

8--->

144ms

//OPTION=0X0A;

4--->

72ms

//OPTION=0X09;

2--->

36ms

//OPTION=0X08;

1--->

18ms

//3s延时

asm("

CLRWDT"

);

//wdt清0(喂狗)

START_IO();

//调用I/O口设置函数

START_RAM();

//调用RAM清0

START_TMR();

//调用定时器设置函数

PIC_IP=1;

while

(1)

{

if(!

d1ms_IF)continue;

//返回到while();

d1ms_IF=0;

d10ms_IF)continue;

d10ms_IF=0;

asm("

//wdt清0(喂狗)

d100ms_IF)continue;

d100ms_IF=0;

if(SS_LED_IF) 

//温度过高时闪烁

IO_O_LED=!

IO_O_LED;

d1s_IF)continue;

d1s_IF=0;

AD(0);

//散热片前后温度差8度

//if(AD_D>

215||AD_D<

10)//(>

85度,<

-25度)+8

160||AD_D<

53度,<

if(AD_D>

193||AD_D<

70度,<

K_NO_OFF_IF=0;

SS_LED_IF=1;

}

IO_O_K=K_NO_OFF_IF;

}

voidJM()

unsignedchari;

for(i=0;

i<

4;

i++) 

//数据校对

temp=~DATA_D[i+4];

if(DATA_D[i]!

=temp)return;

if(PIC_IP!

=DATA_D[0])return;

//目标IP

temp=DATA_D[1];

switch(temp)

case'

S'

:

PIC_IP=DATA_D[2];

break;

O'

IO_O_LED=0;

K_NO_OFF_IF=1;

C'

IO_O_LED=1;

default:

//---------------------------------------------

voidAD(unsignedchari)

//系统时钟Fosc/32

/* 

switch(i)

case0:

temp=0B10000001;

//ADCS1,ADCS0,CHS2,CHS1, 

CHS0,GO,-,ADON

break;

case1:

temp=0B10001001;

case2:

temp=0B10010001;

case3:

temp=0B10011001;

case4:

temp=0B10100001;

return;

//返回

*/

//12F683

switch(i)

temp=0B00000001;

//ADFMVCFG--CHS1CHS0GO/DONEADON

temp=0B00000101;

temp=0B00001001;

temp=0B00001101;

temp=0B00010001;

t=0;

for(j=0;

j<

8;

j++) 

//AD转换取8次

ADCON0=temp;

40;

i++);

//为AD转换采样满足足够的时间(50摄氏度,19.72us)

//ADGO=0X1;

//开启AD转换过程(注意:

开启转换不能与启用转换同时打开)

//while(ADGO);

//等待转换完成

ADCON0=ADCON0|0x2;

while(ADCON0&

2);

t+=ADRESH;

AD_D=t>

>

3;

//中断处理

voidinterruptINT1(void) 

if(CCP1IF)

CCP1IF=0;

//CCP1_tH=TMR1H;

//CCP1_tL=TMR1L;

CCP1_tH=CCPR1H;

CCP1_tL=CCPR1L;

TMR1H=0;

TMR1L=0;

//GPIO5=!

GPIO5;

if(T2_CCP1_IF)

if(CCP1_tH>

0x13)//>

2.5ms错误数据

T2_CCP1_IF=0;

T2_CCP1_IE=0;

if(CCP1_tH<

0x03)//<

0.5ms错误数据

CCP1_I++;

LED_temp=LED_temp<

<

1;

0x0B)//1.5ms-2.5ms数据‘1’

LED_temp++;

//要保存每一个脉冲,以免数据不正常(如:

数据只能正确接收第一个)

if(CCP1_I>

7)

CCP1_I=0;

DATA_D[DATA_I]=LED_temp;

LED_temp=0;

DATA_I++;

if(DATA_I>

JM();

else

if(T2_CCP1_IE)

0x1B&

&

CCP1_tH<

0x32)//3.5ms-6.5ms开始标记

T2_CCP1_IF=1;

DATA_I=0;

T2_CCP1_IE=1;

if(TMR2IE&

TMR2IF)

PIR1=0;

//清标记 

TMR2IF=0;

//1ms处理区

d1ms++;

d_Heat++;

//加热时间

d1ms_IF=1;

if(d1ms<

10)return;

//10ms处理区

d1ms=0;

d10ms++;

d10ms_IF=1;

if(d10ms<

//返回

//100ms处理区

d10ms=0;

d100ms++;

d100ms_IF=1;

SS_LED2_100ms_IF=!

SS_LED2_100ms_IF;

if(d100ms<

5)return;

//500ms

d100ms=0;

d500ms++;

d500ms_IF=1;

SS_LED1_500ms_IF=!

SS_LED1_500ms_IF;

SS_LED2_500ms_IF=!

SS_LED2_500ms_IF;

if(d500ms<

2)return;

//1s处理区 

d500ms=0;

d1s++;

d_key++;

d1s_IF=1;

if(d1s<

60)return;

//返回

//1min处理区

d1s=0;

///////////////////初始化///////////////////

voidSTART_IO()

TRISIO=0X05;

GPIO=0x00;

ANSEL=0B01110001;

//OSFIE=1;

//开启振荡器故障中断

IRCF0=1;

//从默认的4MHZ到8MHZ 

voidSTART_RAM()

{

#asm

CLRF 

_STATUS 

//体0

MOVLW 

0X20

MOVWF 

_FSR

START_RAM_NEXT

INCF 

_FSR,F

0X7F

_FSR,W

BTFSS 

_STATUS,2

GOTO 

START_RAM_NEXT 

#endasm 

voidSTART_TMR()

// 

SPBRG=0XC;

//4MHZ设置波特率为19200BPS

SPBRG=71;

//11.0592MHZ设置波特率为9600BPS 

SPBRG=35;

//11.0592MHZ设置波特率为19200BPS

SPBRG=11;

//11.0592MHZ设置波特率为57600BPS 

SPBRG=5;

//11.0592MHZ设置波特率为115200BPS

TXSTA=0X24;

//使能串口发送,选择高速波特率

RCSTA=0X90;

//使能串口工作,连续接收

RCIE=0X1;

//使能接收中断

CCP1IE=1;

//开启CCP1中断

CCP1CON=0B00000100;

//-,-,CCP1X,CCP1Y,CCP1M3,CCP1M2,CCP1M1,CCP1M0

TMR1ON=1;

//启用TMR1(关闭TMR1,使TMR2退出活动状态)

/*

TMR2=0;

//T=(fosc/4)xN1x(PR2+1)xN2

PR2=124;

//设置TMR2的定时时间(专用的定时器)

T2CON=0B01001001;

//-,TOUTPS3,TOUTPS2,TOUTPS1,TOUTPS0,TMR2ON,T2CKPS1,T2CKPS0

//8MHZ-1000us

T2CON=0B011110000;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1