版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、12f683简单使用代码嵌入式设计 2009-02-25 15:32 阅读124 评论0 字号: 大大 中中 小小 /12f683#include<pic.h> _CONFIG(0x3004);#define AD_A_ID 0#define ZERO_ID 1#define
2、HZ_ID 2#define TEMP_ID 3#define IO_O_K GPIO4#define IO_O_LED GPIO5void START_IO(); /I/O口设置函数void START_RAM(); /申
3、明RAM口设置函数void START_TMR(); /申明定时器设置函数void AD(unsigned char i); /AD转换void JM(); /解码unsigned char EEPROM_read(unsigned char Address);/读取指定地址上的数据void EEPROM_write(unsigned char Address,unsigned char Data);/写指定地址上的数据&
4、#160;/bank0bit KEY_10MS_IF; /10MS的键盘的扫描的溢出标记bit KEY_500MS_IF; /500
5、MS的键盘的扫描的溢出标记bit KEY_XS_IF; /XS的键盘的扫描的溢出标记bit d1ms_IF;
6、 /bit d10ms_IF; /bit d100ms_IF;
7、; /bit d500ms_IF; /bit d1s_IF;
8、; /bit d100ms_SW_IF; /检测电机的时间到了bit K_NO_OFF_IF;bit SS_LED_IF; /LED的闪烁开关 bit SS_LED2_100ms_IF; /因为是
9、闪烁标记所以是要取反的bit SS_LED1_500ms_IF; /MOVLW B'00000100' XORWF RAM_SS_IF,F bit SS_LED2_500ms_IF; /MOVLW B'00001000' XORWF RAM_SS_IF,F bit SS_LED1_1s_IF; /MOVLW B'00010000'
10、 XORWF RAM_SS_IF,F bit SS_LED2_Speed_IF; /LED的闪烁的速度是否开启 bit T2_CCP1_IF; /bit T2_CCP1_IE; / unsigned char d1ms; /1msunsigned char d10ms;
11、 /10msunsigned char d100ms; /100msunsigned char d500ms; /500msunsigned char d1s; /1sunsigned char d_LED1; /数码管闪烁unsigned char d_LED2; /LED闪烁unsigned char d_key;unsigned
12、 char d_Heat; /加热时间unsigned char d_SW_S; /电机转了的时间(超过15秒:说明电机运行异常)unsigned char d_SW; /产生PWM波形unsigned char d_SW_Turn; /电机堵转时间unsigned char d_Heat_PID; /PID是比例,积分,微分的缩写. unsigned char key
13、_temp_xs; /xS后的端口的异或保存unsigned char key_temp_10ms; /10MS后的端口的保存,用来判断端口是否被改变unsigned char key_temp; /键盘的临时存放unsigned char LED_I; /LED两数码管的位unsigned char LED_D3; /两数码管的数据unsigned char LED_temp;unsigned cha
14、r DATA_I;unsigned char DATA_D8; unsigned char AD_D; unsigned char CCP1_I;unsigned char CCP1_t;unsigned char CCP1_tH;unsigned char CCP1_tL;unsigned char CSR; /保存了几个低电平脉冲;从而判断有没有碰到障碍物unsigned char FM_S; /蜂鸣器警报次数 unsigned ch
15、ar EEPROM_A;unsigned char EEPROM_D;unsigned char PIC_IP;unsigned char temp; /临时变量unsigned char j; /临时变量unsigned int t;const unsigned char TAB_LED=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0x40,0x79,0x24,0
16、x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e; /定义常数0-F的数据表格const unsigned char TAB_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; /温度表
17、160; /40摄氏度-70摄氏度/-/主程序void main() /看门狗是一个自己拥有独立的RC时钟信号的,计时周期约为18ms的,自由运行的计时器. /OPTION=0X0F; /1:128->2304ms /OPTION=0X0E
18、; /1:64->1152ms /OPTION=0X0D; /1:32->576ms /OPTION=0X0C; /1:16->228ms OPTION=0X0B; /1:8->144ms /OPTION=0
19、X0A; /1:4->72ms /OPTION=0X09; /1:2->36ms /OPTION=0X08; /1:1->18ms/3s延时 asm("CLRWDT");
20、60; /wdt清0(喂狗) START_IO(); /调用I/O口设置函数 START_RAM();
21、160; /调用RAM清0 START_TMR(); /调用定时器设置函数 asm("CLRWDT");
22、 /wdt清0(喂狗) PIC_IP=1; while(1) /1ms if(!d1ms_IF)continue; /返回到while(); d1m
23、s_IF=0; /10ms if(!d10ms_IF)continue; /返回到while(); d10ms_IF=0; asm("CLRWDT"); /
24、wdt清0(喂狗) /100ms if(!d100ms_IF)continue; /返回到while(); d100ms_IF=0; if(SS_LED_IF) /温度过高时闪烁 IO_O_LED=!IO_O_LED; /1s if(!d1s_
25、IF)continue; /返回到while(); d1s_IF=0; AD(0); /散热片前后温度差8度 /if(AD_D>215|AD_D<10)/(>85度,<-25度)+8 /if(AD_D>160|AD_D<10)
26、/(>53度,<-25度)+8 if(AD_D>193|AD_D<10)/(>70度,<-25度)+8 K_NO_OFF_IF=0; SS_LED_IF=1; IO_O_K=K_NO_OFF_IF; /-/解码v
27、oid JM() unsigned char i; for(i=0;i<4;i+) /数据校对 temp=DATA_Di+4; if(DATA_Di!=temp)return; if(PIC_IP!=DATA_D0)return;/目标IP temp=DATA_D1; switch(temp) case 'S': PIC_IP=DATA_D2; break
28、; case 'O': IO_O_LED=0; K_NO_OFF_IF=1; break; case 'C': IO_O_LED=1; K_NO_OFF_IF=0; break; default: break; /-/AD转换void AD(unsigned char i)/系统时钟Fosc/32/*
29、160;switch(i) case 0: temp=0B10000001;/ADCS1,ADCS0,CHS2,CHS1, CHS0,GO,-,ADON break; case 1:
30、0; temp=0B10001001;/ADCS1,ADCS0,CHS2,CHS1, CHS0,GO,-,ADON break; case 2: temp=0B10010001;/ADCS1,ADCS0,CHS2,CHS1, CHS0,GO,-,ADON
31、; break; case 3: temp=0B10011001;/ADCS1,ADCS0,CHS2,CHS1, CHS0,GO,-,ADON break; case 4:
32、0; temp=0B10100001;/ADCS1,ADCS0,CHS2,CHS1, CHS0,GO,-,ADON break; default: return;
33、60; /返回 */ /12F683 switch(i) case 0: temp=0B00000001;/ADFM VCFG CHS1 CHS0 GO/DONE ADON break; case 1: &
34、#160; temp=0B00000101;/ADFM VCFG CHS1 CHS0 GO/DONE ADON break; case 2: temp=0B00001001;/ADFM VCFG CHS1 CHS0 GO/DONE ADON break;
35、; case 3: temp=0B00001101;/ADFM VCFG CHS1 CHS0 GO/DONE ADON break; case 4: temp=0B00010001;/ADFM VCFG CHS1 CHS0 GO
36、/DONE ADON break; default: return; /返回 t=0; for(j=0;j<8;j+)
37、 /AD转换取8次 ADCON0=temp; for(i=0;i<40;i+); /为AD转换采样满足足够的时间(50摄氏度,19.72us) /ADGO=0X1;
38、 /开启AD转换过程(注意:开启转换不能与启用转换同时打开) /while(ADGO); /等待转换完成 ADCON0=ADCON0|0x2; /开启AD转换过程(注意:开启转换不能与启用转换同时打开) while(ADC
39、ON0&2); /等待转换完成 t+=ADRESH; AD_D=t>>3; /-/中断处理void interrupt INT1(void) / if(CCP1IF) CCP1IF=0; /CCP1_tH=TMR1H;
40、; /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;
41、160; T2_CCP1_IE=0; if(CCP1_tH<0x03)/<0.5ms错误数据 T2_CCP1_IF=0; T2_CCP1_IE=0; CCP1_I+; LED_temp=LED_temp<<1; if(CCP1_t
42、H>0x0B)/1.5ms-2.5ms数据1 LED_temp+; /要保存每一个脉冲,以免数据不正常(如:数据只能正确接收第一个) if(CCP1_I>7) CCP1_I=0; DATA_DDATA_I=LED_temp; LED_temp=0; DA
43、TA_I+; if(DATA_I>7) T2_CCP1_IF=0; T2_CCP1_IE=0; JM(); else if(T2_CCP1
44、_IE) if(CCP1_tH>0x1B&&CCP1_tH<0x32)/3.5ms-6.5ms开始标记 T2_CCP1_IF=1; CCP1_I=0; LED_temp=0; DATA_I=0;
45、160; else T2_CCP1_IE=0; else T2_CCP1_IE=1; if(TMR2IE&&TMR2IF) PIR1=0;
46、 /清标记 TMR2IF=0; /1ms处理区 d1ms+; d_Heat+;
47、60; /加热时间 d1ms_IF=1; if(d1ms<10)return; /返回 /10ms处理区
48、 d1ms=0; d10ms+; d10ms_IF=1; if(d10ms<10)return; /返回 /100ms处理区
49、 d10ms=0; d100ms+; d100ms_IF=1; / SS_LED2_100ms_I
50、F=!SS_LED2_100ms_IF; if(d100ms<5)return; /返回 /500ms d100ms=0; d500ms+; d500ms_IF=1;
51、 / SS_LED1_500ms_IF=!SS_LED1_500ms_IF; SS_LED2_500ms_IF=!SS_LED2_500ms_IF; if(d500ms<2)return; /返回
52、0; /1s处理区 d500ms=0; d1s+;
53、60; d_key+; d1s_IF=1; if(d1s<60)return; /返回 /1min处理区 d1s=0;
54、160;/-/初始化/-/I/O口设置函数void START_IO() TRISIO=0X05; GPIO=0x00; ANSEL=0B01110001; /OSFIE=1;/开启振荡器故障中断 IRCF0=1;/从默认的4MHZ到8MHZ /-/申明RAM口设置函数void START_RAM() #asm CLRF _STATUS /体0 MOVLW 0X20
55、0; MOVWF _FSRSTART_RAM_NEXT CLRF 0 INCF _FSR,F MOVLW 0X7F XORWF _FSR,W BTFSS _STATUS,2 GOTO START_RAM_NEXT #endasm /-/申明定时器设置函数void START_TMR()/ SPBRG=0XC;
56、60; /4MHZ设置波特率为19200BPS/ SPBRG=71; /11.0592MHZ设置波特率为96
57、00BPS / SPBRG=35; /11.0592MHZ设置波特率为19200BPS / SPBRG=11;
58、; /11.0592MHZ设置波特率为57600BPS / SPBRG=5; /11
59、.0592MHZ设置波特率为115200BPS/ TXSTA=0X24; /使能串口发送,选择高速波特率/ RCSTA=0X90; &
60、#160; /使能串口工作,连续接收/ RCIE=0X1; /使能接收中断 CCP1IE=1; /开启CCP1中断 CCP1CON=0B00000100; /-,-
61、,CCP1X,CCP1Y,CCP1M3,CCP1M2,CCP1M1,CCP1M0 TMR1ON=1; /启用TMR1(关闭TMR1,使TMR2退出活动状态)/* TMR2=0; /T=(fosc/4)xN1x(PR2+1)xN2 PR2=124; /设置TMR2的定时时间(专用的定时器) T2CON=0B010
62、01001; /-,TOUTPS3,TOUTPS2,TOUTPS1,TOUTPS0,TMR2ON,T2CKPS1,T2CKPS0*/8MHZ-1000us TMR2=0; /T=(fosc/4)xN1x(PR2+1)xN2 PR2=124; /设置TMR2的定时时间(专用的定时器) T2CON=0B011110000; /-
63、,TOUTPS3,TOUTPS2,TOUTPS1,TOUTPS0,TMR2ON,T2CKPS1,T2CKPS0 /bit 7 未实现:读为0 /bit 6-3 TOUTPS<3:0>:Timer2 输出后分频比选择位 /0000 = 1:1 后分频比
64、0; /0001 = 1:2 后分频比 /0010 = 1:3 后分频比 /0011 = 1:4 后分频比 /0100 = 1:5 后分频比
65、 /0101 = 1:6 后分频比 /0110 = 1:7 后分频比 /0111 = 1:8 后分频比 /1000 = 1:9
66、后分频比 /1001 = 1:10 后分频比 /1010 = 1:11 后分频比 /1011 = 1:12 后分频比 /1100
67、 = 1:13 后分频比 /1101 = 1:14 后分频比 /1110 = 1:15 后分频比 /1111 = 1:16 后分频比 /bi
68、t 2 TMR2ON:Timer2 使能位 /1 = 使能Timer2 /0 = 禁止Timer2 /bit 1-0 T2CKPS<1:0>:Timer2 时钟预分频比选择位
69、 /00 = 预分频值为1 /01 = 预分频值为4 /1x = 预分频值为16 TMR2ON=1; /启用TMR2(关闭TMR2,降低功耗) TMR2IE=1;
70、60;/开启TMR2中断 GIE=0X1; /开放全局中断 PEIE=0X1; /使能外部中断/*/- /读取EEPROM指定地址上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级学有余力学生的教学方法研究
- 《土壤地理学》笔记
- 2025年湖北省高考数学模拟试卷(附答案解析)
- 数据迁移与转换
- 阅读理解记叙文(练习)(学生版)-2025年高考英语一轮复习(新教材新高考)
- 湖北省襄阳市襄州区2024-2025学年九年级上学期9月月考英语试题(含答案)
- 2024年18-萘二甲酰亚胺项目投资申请报告代可行性研究报告
- 有理数的乘方(六大题型)-2024-2025学年沪教版六年级数学上册同步练习
- 3.2 二次函数 同步练习
- 读书交流会主持词
- 期中模拟测试卷3(试题)-2024-2025学年四年级上册数学(福建)
- 安徽省合肥市肥西县西苑中学2023-2024学年八年级上学期期中数学试卷
- 人教版(PEP)三年级英语上册2024期中考试(无答案)
- 宪法与法律学习通超星期末考试答案章节答案2024年
- 《数学三年级上学期数学期中试卷》
- 方寸之间 课件 2024-2025学年苏少版(2024)初中美术七年级上册
- 2024-2025学年人教版七年级地理上学期 期中知识清单:第一章 地球
- 宠物饲料购销合同模板
- Unit4《This is my friend》-2024-2025学年三年级上册英语单元测试卷(译林版三起 2024新教材)
- 《 合唱指挥案头工作、排练与舞台呈现的递进构建》范文
- 《交换与路由技术》 课件 第5部分 路由器基础
评论
0/150
提交评论