关键词不能为空

当前您在: 主页 > 英语 >

PIC16F1938单片机编程样例

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 23:52
tags:

-

2021年2月1日发(作者:cums)


.


PIC


单片机编程样例




MCU:PIC16F1938;



开发语言:


C


语言



开发工具:





编译环境:


MPLAB IED






C


编译器:


HI-TECH PICC C compiler




编辑软件:


source insight




烧录工具:


MPLAB ICD2




仿真软件:


Protues





说明: 程序已经通过编译并在仿真软件和硬件平台上成功跑起来;




目的:对用到


PIC16F


系列单片机 开发软件的群众提供样例支持,希望有帮助。




Protues


仿真图:




1


、一些定义




typedef void VOID;


typedef bit BIT;






















.



.



.























.


typedef unsigned char UINT8;


typedef int INT16;


typedef unsigned int UINT16;


typedef long INT32;


typedef unsigned long UINT32;




VOID delay( VOID )


{



int i = 100;




while( i-- );


}


2



EEPROM


读写



/****** ************************************************** **********************





能:从


EEPROM


中读取一个字节的数据






型:


UINT8 EEPROM_read( UINT8 addr )


参数说明:




输入参数:


addr


输入地址




输出参数:无






回:读取的字节







:


************* ************************************************** ***************/


UINT8 EEPROM_read( UINT8 addr )


{



UINT8 EE_data;




EEADRL = addr;





EEPGD = 0;



CFGS = 0;




GIE = 0; //


禁止所有中断




RD = 1;



asm(



EE_data = EEDATL;



RD = 0;



GIE = 1; //


恢复所有中断






return EE_data;


}



/************* ************************************************** ***************






















.



.



.























.





能:向


EEPROM


中写入一个字节的 数据






型:


VOID EEPROM_write( UINT8 addr, UINT8 ee_data )


参数说明:




输入参数:


addr


输入地址,


ee_data


需要写入的数据




输出参数:无






回:无







:


************************************************** ****************************/


VOID EEPROM_write( UINT8 addr, UINT8 ee_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


模块< /p>



/** ADC


模块的初始化


*/


static VOID ADC_init( VOID )


{



ADCON0 = 0b00110001; //


选择


AN12

< p>
通道、


ADC


使能位




ADCON1 = 0b11100000; //A D


转换结果右对齐,


64


分频作为转换 时钟,选择


VSS



VDD

< p>
作为参考电压





ADIF = 0; //


清楚

AD


转换标志



}



static UINT16 throttle = 0;



static VOID AD_Function( VOID )


{






















.



.



.























.



UINT8 i;



UINT16 AD_result;



UINT16 AD_max = 0;



UINT16 AD_min = 2000;





throttle = 0;





for( i=0; i



{




ADIF = 0;




ADRESH = 0;




ADRESL = 0;







delay();




ADCON0 |= 0x02;





while( 0 == ADIF ); //


等待转换完成





ADIF = 0;






AD_result = ADRESH;




AD_result = AD_result << 8;




AD_result = AD_result | ADRESL;






throttle += AD_result;





AD_max = AD_max > AD_result ? AD_max : AD_result;




AD_min = AD_min < AD_result ? AD_min : AD_result;






}




throttle = (throttle - AD_max - AD_min) / (AD_NUM - 2); //


去掉最大值和最小


值,均值滤波



}


4


、定时器


0


/**


定时器


0

初始化


*/


static VOID Timer0_init(VOID)


{



OPTION_REG = 0b10000100; //


禁止所有弱上拉、部指令周期时钟


32


分频



TMR0 = TIMER0_1MS; //


定时器


0


的中断间隔为

< p>
1ms



TMR0IE = 1; //


定时器


0


开中断
























.



.



.






















-


-


-


-


-


-


-


-



本文更新与2021-02-01 23:52,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/595935.html

PIC16F1938单片机编程样例的相关文章