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位的。