TRISA=0X07表明RA0,RA1,RA2是作为输入功能的,当然不能作为输出去控制LED;
另外,想对A端口的某一位 *** 作,可定义成TRISAbits.TRISA3,就是你理解的TRISA3
其他的如LATAbits.LATA3、PORTAbits.RA3
早期的PIC单片机有一次性(OTP)的和带窗口的(可紫外光擦写)两种。典型的型号是16C54C.16C57C等,后来开发了可电擦写的FLASH型的芯片(典型的型号是16F8*,16F54,16F57)。所谓的FLASH PROGRAM MEMEOR就是指当程序烧写进芯片后,如果希望擦除重新烧写只要在软件中执行擦除指令就可以了,大约1-2秒钟。而早期的带窗口芯片要想擦除内容,要用紫外光照射大约10分钟,所以FLASH芯片也叫闪存或叫电擦除芯片 ,当然芯片里面的程序可以保存40年/******************************************************************************** 名称:FlashRead
* 功能:读取程序存储器一个字
* 参数:addr ->程序存储器字地址
* 返回:读取到的存储器值
*******************************************************************************/
uint16 FlashReadWord(uint16 addr)
{
EEADRL = ((addr) &0x00ff)
EEADRH = ((addr) >>8)
CFGS = 0//访问程序存储器or数据EEPROM
LWLO = 0//仅装载写锁存器位
EEPGD = 1//访问程序存储器
RD = 1//启动对程序存储器or数据EEPROM的读 *** 作,读 *** 作占用一个周期,由硬件清零
asm("NOP")
asm("NOP")
return ((EEDATH)<<8 | (EEDATL))
}
/*******************************************************************************
* 名称:FlashWriteWord
* 功能:编程程序存储器一个字
* 参数:addr ->程序存储器字地址
* dat ->要编程的值
* 返回:无
*******************************************************************************/
void FlashWriteWord(uint16 addr,uint16 dat)
{
uint16 value
EECON1 = 0
EEADRL = ((addr) &0xff)
EEADRH = ((addr) >>8)
value = dat &0x3fff
EEDATH = ((value) >>8)
EEDATL = ((value) &0xff)
EEPGD = 1//访问程序存储器
CFGS = 0//访问程序存储器or数据EEPROM
WREN = 1//使能编程/擦除 *** 作
LWLO = 0//加载到程序存储锁存器,并编程到程序存储器
EECON2 = 0x55//必须的解锁序列
EECON2 = 0xAA//必须的解锁序列
WR = 1//启动编程 *** 作
asm("NOP")
asm("NOP")
WREN = 0//禁止编程/擦除 *** 作
}
/*******************************************************************************
* 名称:FlashWriteLine
* 功能:编程程序存储器一行(32字)
* 参数:addr ->程序存储器行地址
* dat ->要编程的值
* 返回:无
*******************************************************************************/
void FlashWriteLine(uint16 addr,uint16 *dat)
{
uint8 i
uint16 value
EECON1 = 0
EEADRL = ((addr) &0xff)
EEADRH = ((addr) >>8)
for(i=0i<31i++)
{
value = dat[i] &0x3fff
EEDATH = ((value) >>8)
EEDATL = ((value) &0xff)
EEPGD = 1//访问程序存储器
CFGS = 0//访问程序存储器or数据EEPROM
WREN = 1//使能编程/擦除 *** 作
LWLO = 1//只加载到程序存储锁存器
EECON2 = 0x55//必须的解锁序列
EECON2 = 0xAA//必须的解锁序列
WR = 1//启动编程 *** 作
asm("NOP")
asm("NOP")
EEADR++
}
value = dat[31] &0x3fff
EEDATH = ((value) >>8)
EEDATL = ((value) &0xff)
EEPGD = 1//访问程序存储器
CFGS = 0//访问程序存储器or数据EEPROM
WREN = 1//使能编程/擦除 *** 作
LWLO = 0//加载到程序存储锁存器,并编程到程序存储器
EECON2 = 0x55//必须的解锁序列
EECON2 = 0xAA//必须的解锁序列
WR = 1//启动编程 *** 作
asm("NOP")
asm("NOP")
WREN = 0//禁止编程/擦除 *** 作
}
/*******************************************************************************
* 名称:FlashEraseLine
* 功能:擦除程序存储器一行
* 参数:addr ->程序存储器行地址
* 返回:无
*******************************************************************************/
void FlashEraseLine(uint16 addr)
{
EEADRL = ((addr) &0xff)
EEADRH = ((addr) >>8)
CFGS = 0//访问程序存储器or数据EEPROM
WREN = 1//使能编程/擦除 *** 作
EEPGD = 1//访问程序存储器
FREE = 1//执行擦除 *** 作
EECON2 = 0x55//必须的解锁序列
EECON2 = 0xAA//必须的解锁序列
WR = 1//启动程序存储器or数据EEPROM编程/擦除 *** 作
asm("NOP")
asm("NOP")
WREN = 0//禁止编程/擦除 *** 作
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)