如果你要 *** 作这数据,只能外扩一个flash芯片。将其作为外扩数据存储器
#ifndef __PWM__H__#define __PWM__H__
void pwm_ccp1(unsigned char a,unsigned char b)
void pwm_ccp2(unsigned char a,unsigned char b)
#endif
void pwm_ccp1(unsigned char a,unsigned char b)//左边PWM
//CCP1 模块的 PWM 工作方式,周期为(b+1)*4*Tosc*(TMR2前分频值)=b+1 us //pwm高电平=a:CCP1CON(第四五位)Tosc*(TMR2前分频值)
//pwm高电平=a:CCP1CON(第四五位)Tosc*(TMR2前分频值)
{//a>b时有最高转速
CCPR1L=a //* 设置工作循环的高 8bit 为 a
CCP1CON=0X0C //0000 1100 设置 CCP1 为 PWM 工作方式,且工作循环的低 bit2 为 11*/
CCP1IE=0//* 禁止总中断和外围中断 */
PR2=b //* 设置 PWM 周期 */
TRISC2=0 //* 设置 RC2/CCP1 为输出 */
T2CON=0X04 //* 0000 1000前分频比为 1:1 ,后分频器1:2,打开 TMR2 ,同时输出 PWM 信号 */
}
void pwm_ccp2(unsigned char a,unsigned char b) //右边PWM
//CCP2 模块的 PWM 工作方式,周期为(b+1)*4*Tosc*(TMR2前分频值),
//pwm高电平=a:CCP2CON(第四五位)Tosc*(TMR2前分频值)
{
CCPR2L=a //* 设置工作循环的高 8bit 为 a
CCP2CON=0X0C //* 设置 CCP2 为 PWM 工作方式,且工作循环的低 bit2 为 11*/
CCP2IE=0 //* 中断屏蔽
PR2=b //* 设置 PWM 周期 */
TRISC1=0 //* 设置 RC1/CCP2 为输出 */
T2CON=0X04 //* 前分频比为 1 ,打开 TMR2 ,同时输出 PWM 信号 */
}
/****************************************************************************************************
函数名:EE_readbyte
功 能:片内EEPROM 读1字节
说 明:Read_AddrH:待写入的高地址;Read_Addr:待写入的低地址
函数执行完返回一个存放在该地址处的值
***************************************************************************************************
*/
uchar EE_ReadByte(uchar Read_AddrH,uchar Read_Addr)
{
EEADRH = Read_AddrH //写入高地址
EEADR = Read_Addr //写入低地址
EECON1bits.EEPGD = 0//访问EEPROM存储区
EECON1bits.CFGS = 0 //访问EEPROM或程序区
EECON1bits.RD = 1
return EEDATA
}
/*
***************************************************************************************************
函数名:EE_writebyte
功 能:片内EEPROM 写1字节
说 明:Write_AddrH:待写入的高位地址;Write_Addr:待写入的低位地址;Write_Byte:待写入的字节
***************************************************************************************************
*/
void EE_WriteByte(uchar Write_AddrH,uchar Write_Addr,uchar Write_Byte)
{
ClrWdt()//喂狗
while(EECON1bits.WR)
EEADRH = Write_AddrH//写入高地址
EEADR = Write_Addr //写入低地址
EEDATA = Write_Byte //写入数据
EECON1bits.EEPGD = 0//访问EEPROM存储区
EECON1bits.CFGS = 0 //访问EEPROM或程序区
EECON1bits.WREN = 1 //充许擦写
INTCONbits.GIE = 0 //禁止所有中断
EECON2 = 0x55 //写入密钥
EECON2 = 0xaa
EECON1bits.WR = 1 //开始写 *** 作
Nop()
Nop()
INTCONbits.GIE = 1 //开中断
EECON1bits.WREN = 0 //禁止擦写
while(EECON1bits.WR) //等待写完成
{
}
}
/*
***************************************************************************************************
函数名:EE_WriteArray
功 能:写入数组数据到EEPROM
说 明:AddrH:EEPROM起始地址高字节,Addr:EEPROM起始地址低字节
WriteByte[]:待存储的数据存放数组
LenArray:待存储的数组长度
举例:存放地址0x0020---0x0029;存放数据array[10]
***************************************************************************************************
*/
void EE_WriteArray(uchar AddrH,uchar Addr,uchar WriteArray[],uchar LenArray)
{
uchar tempH,tempL,tempByte
uint i=0
tempH = AddrH
tempL = Addr
for(i=0i<LenArrayi++)
{
tempByte = WriteArray[i]
EE_WriteByte(tempH,tempL,tempByte)
tempL++
}
}
/*
***************************************************************************************************
函数名:EE_ReadArray
功 能:写入数组数据到EEPROM
说 明:AddrH:EEPROM起始地址高字节,Addr:EEPROM起始地址低字节
ReadByte[]:待存储的数据存放数组
LenArray:待存储的数组长度
举例:存放地址0x0020---0x0029;存放数据array[10]
***************************************************************************************************
*/
void EE_ReadArray(uchar AddrH,uchar Addr,uchar ReadArray[],uchar LenArray)
{
uchar tempH,tempL,tempByte
uint i
tempH=AddrH
tempL=Addr
for(i=0i<LenArrayi++)
{
tempByte=EE_ReadByte(tempH,tempL)
ReadArray[i]=tempByte
tempL++
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)