大家帮我看个PIC的LED闪烁程序

大家帮我看个PIC的LED闪烁程序,第1张

小哥,问题表达清楚,是要A端口的某一个LED闪烁还是所有A端口LED闪烁;

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//禁止编程/擦除 *** 作

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12061838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存