版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度供应链管理合同:某制造企业与供应商就供应链管理达成的合作协议
- 瓷砖产品定制生产合同2024
- 2024版无人机技术研发与购销合同
- 电商平台安全检测与合规认证服务合同3篇
- 二零二四年度光伏发电项目投资合同标的及投资金额具体说明2篇
- 二零二四年度畜牧养殖业养殖饲料采购与供应合同
- 二零二四年健身教练个人劳动合同
- 二零二四年度设备采购合同标的为高端计算机设备
- 二零二四年度亚洲区域网络安全保障合作合同
- 二零二四年企业咨询服务框架协议
- 国家开放大学《Web开发基础》形考任务实验1-5参考答案
- 水利安全生产风险防控“六项机制”右江模式经验分享
- 2023-2024学年教科版三年级上学期科学期中检测试卷(含答案)
- 测绘地理信息业务档案保管期限表(20150305)..
- 数字式双闭环直流调速系统设计(共26页)
- pdsoft简易教程
- 精忠报国歌谱
- 固体火箭发动机制造工艺
- 飞控pixhawk学习指南walkant
- 热管空气预热器计算
- 流体输送技术
评论
0/150
提交评论