PIC16F1938单片机编程样例Word格式文档下载.docx

上传人:b****3 文档编号:15142929 上传时间:2022-10-28 格式:DOCX 页数:10 大小:436.96KB
下载 相关 举报
PIC16F1938单片机编程样例Word格式文档下载.docx_第1页
第1页 / 共10页
PIC16F1938单片机编程样例Word格式文档下载.docx_第2页
第2页 / 共10页
PIC16F1938单片机编程样例Word格式文档下载.docx_第3页
第3页 / 共10页
PIC16F1938单片机编程样例Word格式文档下载.docx_第4页
第4页 / 共10页
PIC16F1938单片机编程样例Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

PIC16F1938单片机编程样例Word格式文档下载.docx

《PIC16F1938单片机编程样例Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《PIC16F1938单片机编程样例Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

PIC16F1938单片机编程样例Word格式文档下载.docx

CPa&

nU匸-TLG耳111匚匚肥戈EMve甸+•殳uur/vi1.4*-hi.iH仝心^lj!

i=wn3sari:

lkoltivuf0;

ii

YUIT町T£

rCF丈「LDlKbi4IT4ri*%JKIFJBI^I皿口1陆1庐StRI

PSiJPliiULLW

RB?

rfWT[lilN2XFiKLPaTO^UCCB

=:

B+l/UFMi'

F1DJCXC

N脅阳iltfli'

FSIGXO.I

■^asic^CLtncrcij-jGa-4|RIT<

1CIFDHiNEIDfllKH^I

f■rnwSUM匸Viiinc

1、一些定义

 

typedefvoidtypedefbit

VOID;

BIT;

typedefunsignedcharUINT8;

typedefintINT16;

typedefunsignedintUINT16;

typedeflongINT32;

typedefunsignedlongUINT32;

VOIDdelay(VOID)

{

inti=100;

while(i--);

}

2、EEPRO读写

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

功能:

从EEPRO中读取一个字节的数据

原型:

UINT8EEPROM_read(UINT8addr)

参数说明:

输入参数:

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;

****************************************************************************功能:

向EEPRO中写入一个字节的数据

原型:

VOIDEEPROM_write(UINT8addr,UINT8ee_data)参数说明:

addr输入地址,ee_data需要写入的数据输出参数:

****************************************************************************

VOIDEEPROM_write(UINT8addr,UINT8ee_data)

EEDATL=ee_data;

EEPGD=

0;

CFGS=0

J

//

禁止所有中断

WREN=1

;

//

运行执行编程/擦除操作

EECON2:

=0x55;

必须按这样的时序

=0xAA;

WR=1;

while(WR==1);

等待写操作完成

WREN=C

禁止执行编程/擦除操作

3、ADC模块

/**ADC模块的初始化*/

staticVOIDADC_init(VOID)

ADCON0=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;

i<

AD_NUM;

i++){

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_min:

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

值,均值滤波

去掉最大值和最小

4、定时器0

/**定时器0初始化*/

staticVOIDTimer0_init(VOID)

OPTION_REG=0b10000100;

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

TMR0=TIMER0_1MS;

//定时器0的中断间隔为1ms

TMR0IE=1;

//定时器0开中断

32分频

//总的中断开关记得在所有模块初始化完成后打开staticUINT8timecount=0;

staticBITtimelOmsflg;

staticBITtimelmsflg;

VOIDinterruptISR(VOID)

串口通讯接收

uart_handler();

/**定时器0的处理*/

if(1==TMR0IF)

//重新赋值

timecount++;

if(timecount>

=10)

timecount=0;

time10msflg=1;

}timelmsflg=1;

//根据实际情况添加自己的代码

5、IO初始化

/**io初始化*/

staticVOIDIO_init(VOID){

所有IO为数字IO

所有IO为output

初始化所有IO输出电平为低电平

/**PORTA*/

ANSELA=0x00;

TRISA=0x00;

PORTA=0x00;

/**PORTB*/

ANSELB=0x03;

〃RB0和RB1都绑定为同一模拟AD输入

6、PWM模块

/**PWM模块的初始化*/

staticVOIDPWMCCP」nit(VOID)

CCP1CON=0b00001100;

//单输出,PWM模式

CCPTMRS0&

=0b11111100;

//CCP1选择Timer2作为定时器

PR2=249;

//PWM

周期计算:

(PR2+1)*0.0625*4(16Mhz晶振四分频,

即指令周期广预分频值,

当PR2为249时,PWM频率为16K

T2CON=0x00;

预分频为1:

1;

TMR2ON=1;

使能定时器Timer2

TRISC2=0;

打开CCP1引脚输出驱动器

CCP1CON&

=0b11001111;

}/******************************************************************************

PWM占空比设置

VOIDPWM_WidthSet(UINT8width)

width占空比的百分比分子,设置值从0至100,例如width=50时,设

置的占空比为50%

staticVOIDPWM_WidthSet(UINT8width)

UINT16PWM_width;

UINT16tmp;

PWM_width=width*10;

if(100==width)

//经过Protues仿真,100时至少比1000大于4才可以达到完全的

PWM_width+=4;

/**高八位赋值*/

CCPR1L=PWM_width>

>

2;

/**低两位赋值*/

tmp=PWM_width&

0x0003;

tmp=tmp<

4;

CCP1CON|=tmp;

7、串口通讯模块

voiduart_init(void)

UINT8ii;

for(ii=0;

ii<

_SUB_NUM_;

ii++)

get_uart_sub[ii]=0xff;

RCSTA=0xb0;

//addbylihffortest

TXSTA=0x20;

//TXSTA=0x20;

BAUDCONbits.BRG16=0;

SPBRGH=0;

//8

位定时器BaudRateGenerator

SPBRG=_FOSC_/64/_BAUD_-1;

//23;

TXIE=0;

//发送不需要中断处理

RCIE=1;

PEIE=1;

//没有开全局中断

//发送数据

staticVOIDUART_sent(UINT8byte)

〃while(0==TXIF)

//continue;

TXREG=byte;

while(0==TRMT)

//接收在中断里面调用uart_handler()函数

#define_SUB_NUM_50

UINT

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

当前位置:首页 > PPT模板 > 图表模板

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

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