如何把数据写到pic的固定程序区

如何把数据写到pic的固定程序区,第1张

首先,这是PICC的定义。

其次,程序本来就是存放在ROM,数据一般放在RAM里;当你用const修饰变量组后,这些变量就成为常数,PICC编译时就会把这些“非位变量”存放到ROM里面去,以节省RAM空间;你知道的:程序空间比数据空间大得多,特别是遇到汉字码一般都会这样做的。

最后,在寻址这些变量时,PICC会自动生成相关的附加代码从程序空间读出这些常数‘变量’的。

需要注意的是:假如你加了const修饰后,你就不能对这些变量进行修改、赋值之类了,我想你应该也不会;其他就和我们对变量的 *** 作一样了,没什么特殊的,很多事情PICC都会完成,当然你得装了PICC的编译器,这是前提 。

打字不易,望推荐!

/

名称: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=0;i<31;i++)

{

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

}

PIC=peripheral interface control

pic集成了很多外围器件,例如CCP模块,通讯模块等

PIC 单片机是一个小的计算机,PIC单片机有计算功能和记忆内存像CPU并由软件控制允行。最好是有本教程然后自己就可以直接买件输入程序练习了。建议你先看看微机原理作为铺垫,C语言是必要的,另外学学汇编语言也是很有用的。

C语言在前期,就是你的汇编可以的情况下没有 太大的用,但是学到后面的话你就会发现会汇编很复杂,而C就会比较简单容易了

邮箱不知!大体程序见下

;设定PORTA:4为输入端,PORTA,0,1,2,3,四个端口为输出端,点动按键放开按键后,计数并

;且点亮相应的灯(4位二进制显示),循环检测按键,闪动为亮05秒灭05秒再亮05秒灭05,

;然后进入按键检测,键按下时,端口为高电平,放开为低电平

;之前设置省略

BANKSEL TRISA

MOVLW 10H

MOVWF TRISA ; 设定PORTA:4为输入端,PORTA,0,2,3,四个端口为输出端

JIANCE_CHU

BANKSEL PORTA

CLRL PORTA ;输出端口清零

CLRF JISHU

JIANCE_G ;检测按键是否按下

BTFSS PORTA,4

GOTO $-1

CALL DELAY_10

BTFSS PORTA,4

GOTO JIANCE_G

JIANCE_D ;检测按键是否松开

BTFSC PORTA,4

GOTO $-1

CALL DELAY_10

BTFSC PORTA,4

GOTO JIANCE_D

INCF JISHU,1;计数器加1

MOVF JISHU,0

SUBLW 10H ;检测按键次数是否超过15次

BTFSS STATUS,Z

GOTO XIAN ; 没有超过,进入显示程序段

MOVLW 0FH ;超过,进入闪烁程序

MOVWF PORTA ;灯全亮

CALL DELAY_500 ;延时500毫秒

CLRF PORTA ; 灯全灭

CALL DELAY_500

MOVLW 0FH

MOVWF PORTA

CALL DELAY_500

CLRF PORTA

GOTO JIAN_CHU;进入按键检测初始化

XIAN ;显示程序段

MOVF JISHU,0

CALL BIAO;进入查表程序,返回二进制代码送显

MOVWF PORTA

GOTO JIANCE_G;返回按键检测,是否按下

DELAY_10 ;10毫秒延时

;略

DELAY_500 ;500毫秒延时

;略

BIAO ;查表程序

;略

END

往pickit3中装载程序:

仅编程不需要接这个10K的上拉电阻。

这个上拉电阻时用PICKIT3作为调试器Debug时要加的,因为调试时,如果没有上拉电阻,PICKIT3在MCLR引脚上产生的Noise有可能导致目标MCU异常复位。

编程时MCLR引脚功能变成了Vpp,9V的编程电压会加在这个引脚上,此时这个10K上拉电阻有或没有对于编程时序都没有什么影响。

用编程器附带的烧写即可。 要确认这个编程器支持你的单片机型号。 连接编程器与电脑,运行编程器附带,在上面选择芯片型号和要烧写的文件,你这个是串口,可能还需要选择连接的串口号,然后点烧写即可,一般都是这样 *** 作

</ol>

1:第一个问号:是; 第二个问号:不一定;

2:一些C30有多种类型版本,你说的30C和36可能不是指同一种类型。

3:没破解的编译器过期就不能编译程序了。想用就需要重装(貌似它会在系统内记录的,所以应该是重装 *** 作系统才行)。

4:肯定不可靠。我有过编译经历,破解的编译出来的在逻辑上就会有问题。但这不影响普通学生入门者做设计。如果你是做工业、航天领域设计的,你的领导也不会让你用破解版或者未注册版。所以现在很多单位宁愿用汇编来编译程序。

PICC有支持 PIC10/12/16/18/24/32系列单片机 的C编译器。同时也支持dsPIC30/33 系列DSC芯片的C编译器

在使用PIC16F877A单片机时,如果使用定时器0,那么最好不要写TMR0,因为每次的写 *** 作都会导致定时器0的预分频器清零。一般都是定义一个变量,来做定时器0计时值的累计,这样才会将误差降到最小。另外就是仿真的时间不一定准确

以上就是关于如何把数据写到pic的固定程序区全部的内容,包括:如何把数据写到pic的固定程序区、请问PIC16F1938的闪存程序存储器怎么进行擦除和写 *** 作、想学习PIC编程要先学习什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://www.54852.com/zz/10104947.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存