1、CP a&nU匸-T LG耳111匚匚肥戈EM ve 甸+殳 uu r/vi1.4 *-hi. iH 仝心 lj!i =wn3sari: lkol tivuf0;iiYUIT町T rCF 丈L DlK bi4IT4ri*%JKI FJBII 皿 口1 陆1庐StRIPSiJP liiULLWRB?rfWTlilN2 XF iKLPaTOUCCB=:B+l/UF MiF 1 DJCXCN脅阳il tfliFS IGXO.IasicCLtncrcij-jGa-4 |RIT1 C IFDHiN E IDfllKHIf rnw SUM匸 Vii inc1、一些定义typedef void typede
2、f bitVOID;BIT;typedef un sig ned char UINT8; typedef int INT16;typedef un sig ned int UINT16; typedef long INT32;typedef un sig ned long UINT32;VOID delay( VOID )int i = 100;while( i-);2、EEPRO读写/*功 能:从EEPRO中读取一个字节的数据原 型: UINT8 EEPROM_read( UINT8 addr )参数说明:输入参数:addr输入地址输出参数:无返 回:读取的字节注 意:*/UINT8 EEP
3、ROM_read( UINT8 addr )UINT8 EE_data;EEADRL = addr;EEPGD = 0;CFGS = 0;GIE = 0; / 禁止所有中断RD = 1;asm( n op);EE_data = EEDATL;RD = 0;GIE = 1; / 恢复所有中断return EE_data;,* 功 能:向EEPRO中写入一个字节的数据原 型:VOID EEPROM_write( UINT8 addr, UINT8 ee_data ) 参数说明:addr输入地址,ee_data需要写入的数据 输出参数:*VOID EEPROM_write( UINT8 addr,
4、UINT8 ee_data )EEDATL = ee_data;EEPGD =0;CFGS = 0J/禁止所有中断WREN = 1; /运行执行编程/擦除操作EECON2:=0x55;必须按这样的时序=0xAA;WR = 1;while( WR=1 );等待写操作完成WREN = C禁止执行编程/擦除操作3、ADC模块/* ADC模块的初始化*/static VOID ADC_init( VOID )ADCON0 = 0b00110001; / 选择 AN12 通道、ADC使能位ADCON1 = 0b11100000; /AD 转换结果右对齐, 64分频作为转换时钟,选择 VSSVDD乍为参考
5、电压ADIF = 0; / 清楚AD转换标志static UINT16 throttle = 0;static VOID AD_Fu nctio n( VOID )UINT8 i;UINT16 AD_result;UINT16 AD_max = 0;UINT16 AD_min = 2000;throttle = 0;for( i=0; iAD_NUM; i+ ) ADRESH = 0;ADRESL = 0;delay();ADCON0 |= 0x02;while( 0 = ADIF ); / ADIF = 0;等待转换完成AD_result = ADRESH;AD_result = AD_re
6、sult AD_result ? AD_max : AD_result;AD_min = AD_min = 10 )timeco unt = 0; time10msflg = 1; timelmsflg = 1;/根据实际情况添加自己的代码5、IO初始化/* io 初始化*/static VOID IO_i nit(VOID) 所有IO为数字IO所有IO为output初始化所有IO输出电平为低电平/* PORT A */ANSELA = 0x00;TRISA = 0x00;PORTA = 0x00;/* PORT B */ANSELB = 0x03; RB0 和RB1都绑定为同一模拟 AD输入
7、6、PWM模块/* PWM模块的初始化*/static VOID PWMCCPnit(VOID)CCP1CON = 0b00001100; / 单输出,PWM模式CCPTMRS0 &= 0b11111100; /CCP1 选择 Timer2 作为定时器PR2 = 249;/PWM周期计算:(PR2 + 1)*0.0625*4(16Mhz 晶振四分频,即指令周期广预分频值,当 PR2为249时,PWM频率为16KT2CON = 0x00;预分频为1:1 ;TMR2ON = 1;使能定时器Timer2TRISC2 = 0;打开CCP1引脚输出驱动器CCP1CON &= 0b11001111; /*
8、PWM占空比设置VOID PWM_WidthSet( UINT8 width )width占空比的百分比分子,设置值从 0至100,例如width = 50 时,设置的占空比为50%static VOID PWM_WidthSet( UINT8 width )UINT16 PWM_width;UINT16 tmp;PWM_width = width * 10;if( 100 = width )/经过Protues仿真,100时至少比1000大于4才可以达到完全的PWM_width += 4;/* 高八位赋值*/CCPR1L = PWM_width 2 ;/*低两位赋值*/tmp = PWM_w
9、idth & 0x0003;tmp = tmp 4;CCP1CON |= tmp;7、串口通讯模块void uart_ in it(void)UINT8 ii;for(ii=0;ii_SUB_NUM_;ii+)get_uart_subii=0xff;RCSTA = 0xb0;/add by lihf for testTXSTA = 0x20;/TXSTA = 0x20;BAUDCONbits.BRG16=0;SPBRGH = 0; /8位定时器 Baud Rate GeneratorSPBRG = _FOSC_/64/_BAUD_-1; /23;TXIE = 0; / 发送不需要中断处理RCIE = 1;PEIE = 1;/ 没有开全局中断/发送数据static VOID UART_se nt( UINT8 byte )while( 0 = TXIF )/con ti nue;TXREG = byte;while( 0 = TRMT )/接收在中断里面调用 uart_handler() 函数#defi ne _SUB_NUM_ 50UINT
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1