欢迎来到天天文库
浏览记录
ID:48315054
大小:60.67 KB
页数:9页
时间:2020-01-13
《PIC16F1938单片机编程样例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、PIC单片机编程样例MCU:PIC16F1938;开发语言:C语言开发工具:编译环境:MPLABIED;C编译器:HI-TECHPICCCcompiler编辑软件:sourceinsight烧录工具:MPLABICD2仿真软件:Protues说明:程序已经通过编译并在仿真软件和硬件平台上成功跑起来;目的:对用到PIC16F系列单片机开发软件的群众提供样例支持,希望有帮助。Protues仿真图:1、一些定义typedefvoidVOID;typedefbitBIT;typedefunsignedcharUINT8;ty
2、pedefintINT16;typedefunsignedintUINT16;typedeflongINT32;typedefunsignedlongUINT32;VOIDdelay(VOID){inti=100;while(i--);}2、EEPROM读写/******************************************************************************功能:从EEPROM中读取一个字节的数据原型:UINT8EEPROM_read(UINT8addr)参数说
3、明:输入参数:addr输入地址输出参数:无返回:读取的字节注意:******************************************************************************/UINT8EEPROM_read(UINT8addr){UINT8EE_data;EEADRL=addr;EEPGD=0;CFGS=0;GIE=0;//禁止所有中断RD=1;asm("nop");EE_data=EEDATL;RD=0;GIE=1;//恢复所有中断returnEE_data;}/**
4、****************************************************************************功能:向EEPROM中写入一个字节的数据原型:VOIDEEPROM_write(UINT8addr,UINT8ee_data)参数说明:输入参数:addr输入地址,ee_data需要写入的数据输出参数:无返回:无注意:****************************************************************************
5、**/VOIDEEPROM_write(UINT8addr,UINT8ee_data){EEADRL=addr;EEDATL=ee_data;EEPGD=0;CFGS=0;GIE=0;//禁止所有中断WREN=1;//运行执行编程/擦除操作EECON2=0x55;//必须按这样的时序EECON2=0xAA;WR=1;while(WR==1);//等待写操作完成GIE=1;WREN=0;//禁止执行编程/擦除操作}3、ADC模块/**ADC模块的初始化*/staticVOIDADC_init(VOID){ADCON0=
6、0b00110001;//选择AN12通道、ADC使能位ADCON1=0b11100000;//AD转换结果右对齐,64分频作为转换时钟,选择VSS,VDD作为参考电压ADIF=0;//清楚AD转换标志}staticUINT16throttle=0;staticVOIDAD_Function(VOID){UINT8i;UINT16AD_result;UINT16AD_max=0;UINT16AD_min=2000;throttle=0;for(i=0;i7、ESL=0;delay();ADCON08、=0x02;while(0==ADIF);//等待转换完成ADIF=0;AD_result=ADRESH;AD_result=AD_result<<8;AD_result=AD_result9、ADRESL;throttle+=AD_result;AD_max=AD_max>AD_result?AD_max:AD_result;AD_min=AD_min10、(AD_NUM-2);//去掉最大值和最小值,均值滤波}4、定时器0/**定时器0初始化*/staticVOIDTimer0_init(VOID){OPTION_REG=0b10000100;//禁止所有弱上拉、内部指令周期时钟32分频TMR0=TIMER0_1MS;//定时器0的中断间隔为1msTMR0IE=1;//定时器0开中断//总的中断
7、ESL=0;delay();ADCON0
8、=0x02;while(0==ADIF);//等待转换完成ADIF=0;AD_result=ADRESH;AD_result=AD_result<<8;AD_result=AD_result
9、ADRESL;throttle+=AD_result;AD_max=AD_max>AD_result?AD_max:AD_result;AD_min=AD_min10、(AD_NUM-2);//去掉最大值和最小值,均值滤波}4、定时器0/**定时器0初始化*/staticVOIDTimer0_init(VOID){OPTION_REG=0b10000100;//禁止所有弱上拉、内部指令周期时钟32分频TMR0=TIMER0_1MS;//定时器0的中断间隔为1msTMR0IE=1;//定时器0开中断//总的中断
10、(AD_NUM-2);//去掉最大值和最小值,均值滤波}4、定时器0/**定时器0初始化*/staticVOIDTimer0_init(VOID){OPTION_REG=0b10000100;//禁止所有弱上拉、内部指令周期时钟32分频TMR0=TIMER0_1MS;//定时器0的中断间隔为1msTMR0IE=1;//定时器0开中断//总的中断
此文档下载收益归作者所有