当前位置:首页 » 服务存储 » pic的程序存储
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

pic的程序存储

发布时间: 2022-08-21 03:47:00

1. 请问PIC16F1938的闪存程序存储器怎么进行擦除和写操作

/*******************************************************************************
* 名称: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; //禁止编程/擦除操作
}

2. pic是什么文件格式

pic是一种图片格式的文件,不过以pic为后缀的图片文件并不多见,所以有很多人都不知道pic是什么以及pic文件应该用什么打开。可以将pic文件修改为jpg文件格式,打开方式如下:

1、第一步,首先在电脑桌面找到一张pic格式的图片。

3. pic单片机 程序储存空间 的问题

PIC16f676 程序存储器 1024 字 即 2K空间,用汇编 可以算的出来,用C 会占空间大些,
你这可能是 内存空间不够

4. PIC单片机的FLASH PROGRAM MEMORY是做什么用的

flash
program
memory
按照字面来说是
程序存储器,也就是你说的
,单片机程序是存储在这个里面的(烧写在flash
program
memory里面)。
而flash
program
memory
和一般的eeprom比较,前者擦/写次数要多,而且最重要的是这种存储器能够支持现在流行的在线编程功能吧。
不知道说的对不,datasheet里面一定是有说明的。

5. PIC闪存单片机,什么是PIC闪存单片机

闪存存储器我们都知道是flash,那为什么他存储速度快?为什么存储时间长呢?它是采用CMOS技术,听不懂?就是mos管的阵列。pic单片机就是使用这种存储器作为ROM程序存储器的。

6. PIC程序存储器

你写好的程序要写进单片机的,如果你有了升级的程序,你又可以更新单片机里的程序,在这些情况下,你就要改定里的程序了,程序运行时,一般是不用改写的.

7. PIC16C711单片机的程序存储器为什么是14位的

二、工作原理
实现11位A/D转换由PIC16C711做2次8位A/D转换完成。PIC16C711有4个模拟量输入通道RA0~RA3,这些模拟量输入通道复用1个采样保持器进入到A/D转换器。参考电压Vref可以来自外部也可以来自内部VDD,A/D转换器属于逐次逼近式,转换结果(8位)存入ADRES寄存器。在A/D转换前必然选择适当的通道,设置足够的采样时间。用户可以通过设置A/D控制寄存器ADCON0和ADCON1来控制其转换过程,同时A/D转换的状态也会在ADCON0中体现出来。

先将待转换的电压Vi送到PIC16C711的RA0通道做一次A/D转换。根据转换所得的数字量由软件算出Vi在8档中位置,用Vi减去Vi所在档的起始电压。将所得差值放大8位,使之变为0~5V电压信号,再送给PIC16C711的RA1通道做1次A/D转换,所得数字量是11位AD转换的低8位,而档位CBA就是高3位,从而实现11位A/D转换。

举例说明如下:假设输入电压Vi为3V,程序控制PIC16C711的RA0通道先进行第1次A/D转换,所得结果是153,即3/5×255=153,对应8位数字量为10011001。将低5位屏蔽,得10000000,循环右移5次,得00000100,此时低3位对应的就是Vi=3V电压时的档位,即第4档,CBA=100,程序将该档位由RB2,RB1,RB0输出,作为8选一模拟开关的通道选择,使CD4051输出2.5V,即5/8×4=2.5V。该电压经IC2运放跟随,再经IC3进行差分放大。设计时调整R11,R12,R13和R14的阻值,使放大倍数为8位,则得放大器IC3输出Vo=8(Vi-2.5)=8(3-2.5)=4.0V。选择RA1通道进行第2次A/D转换,结果为11001100,这就是11位A/D转换结果的低8位。档位100为11位A/D转换的高3位,合起来就是11位A/D转换的结果10011001100。

三、程序

以下是使用PIC16C711指令系统完成11位A/D转换的程序段。

BSF STATUS,RP0;选页面1

MOVLW 00000010B ;RA0、RA1为模拟通道

MOVWF ADCON1 ;内部参考电压

BCF STATUS,RP0 ;选页面0

MOVLW 11000001B ;选RA0通道和内部时钟

MOVWF ADCON0

MOVLW .125 ;延时125μs,等待输入

CALL WAIT ;稳定

BSF ADCON0,GO ;启动A/D

LOOP BTFSC ADCON0,GO ;判断A/D完成否

GOTO LOOP

MOVF ADRES,W ;取转换结果

ANDLW 0E0 ;屏蔽低5位

MOVWF D1 ;存入D1

BCF STATUS,C

RRF D1,1 ;右移5次

RRF D1,1

RRF D1,1

RRF D1,1

RRF D1,1

MOVF D1,W

MOVWF PORTB ;档位输出

MOVLW 11001001B ;选RA1通道

MOVWF ADCON0

MOVLW .60 ;延时60μs

CALL WAIT

BSF ADCON0,GO ;启动A/D

LOOP1 BTFSC ADCON0,GO ;判断A/D完成否

GOTO LOOP1

MOVF ADRES,W ;A/D转换结果存D0

MOVWF D0

WAIT MOVWF TEMP ;延时子程序

NEXT DECFSZ TEMP,1

GOTO NEXT

RETURN

用这种方法实现的11位A/D转换速度快PIC16C711基本上都是单周期指令,在4MHz振荡频率下指令周期1μs,进行1次A/D转换最短时间20μs;2次A/D转换40μs;2个运放变换时间20μs×2=40μs。总的转换时间为百μs级。

8. pic12的程序存储空间地址是多少位的

12位。
指令的的格式为1100KKKKKKKK,指令是12位的,其中还包含了8位的数据KKKKKKKK,即数据就在指令中,所以指令还是12位的。