C8051F020的Flash操作
激光治疗仪中C8051单片机FLASH存储器的应用
激光治疗仪中C8051单片机FLASH存储器的应用【摘要】本文针对基于c8051的激光治疗仪提出了一种新的数据存储方法,通过单片机自带的flash存储器进行存储,节省了硬件资源。
文中详细介绍了单片机中flash存储器的使用方法,给出了设计的程序框图和简单的例程。
【关键词】c8051单片机;flash存储the application of flash memory in c8051 in laser therapy instrumenttang yankun you minghui yang kun【abstract】a design method of data storage based on c8051 singlechip is put forward.it is achieved through flash memory on ship.the paper introduces use method of flash memory detailedly and gives software block.【key words】c8051 single chip;flash memory【中图分类号】tp368.1 【文献标识码】a 【文章编号】1009-5071(2012)08-0228-021 引言激光治疗设备在我们的生活中有着越来越广泛的应用,可普遍适用于外科、皮肤科、妇科、五官科、泌尿科、美容科等医疗科室中,作对皮肤的切割、烧灼、气化、止血等手术治疗。
激光设备在工作过程中需要进行多种参数的设置及保存,如激光的输出功率、皮肤照射模式以及激光工作模式等,并且对于激光设备来说,通常具有出厂设置功能,这就需要保存一些初始参数。
要保存数据,就需要有存储器,一般采用8051系列单片机的设备都采用外接的eeprom存储器,如24wc02。
c8051单片机以其丰富的片上外设以及高速的程序执行速度在很多的系统中都得到了广泛的使用,它也是许多激光治疗设备的首选单片机。
C8051F020中Flash存储器的在线擦写方法
须是 C O D E 类型 下面是将 F l a s h 存储器中的数据拷贝
到存放于内部 R A M 的数组 a [ t ] 中的样例程序
void Flash_READ void
{ unsigned char code *pread;
/*程序存储器空间的指针
Flash 指向待读地址 */
pread=0x1000;
调用这些函数时的参数为 f r o m 表示所申请 I / O 端 口的起始地址 extent 为所要申请的从 from 开始的端口 数 name 为设备名 将会出现在 /proc/ioports 文件里 check_region 返回 0 表示 I/O 端口空闲 否则为正在被使 用 在申请了 I / O 端口之后 就可以用如下几个函数来
PSCTL=0X01;
/*禁止对Flash的擦除*/
pgen=&a[0];
/*将数组值写入Flash中*/
for(i=0;i<t;i++) { *pwrite++=*pgen++; } FLSCL=0X00; PSCTL=0X00; EA=1; }
/*禁止对Flash的写操作*/ /*开中断*/
EXPERIENCE EXCHANGE 经 验 交 流
C8051F020 中 Flash 存储器的在线擦写方法
哈尔滨工程大学 韩红芳 பைடு நூலகம்孙守昌
C8051F020入门指导
接到端口I/O引脚。
DAC为电压输出方式,有灵活的输出更新机制。这一机制允许 用软件写和定时器2、定时器3及定时器4的溢出信号更新DAC输出。
C8051F020/2的DAC之电压基准由专用的VREFD输入引脚提供,而
C8051F021/3的DAC之电压基准由器件内部的电压基准提供。DAC在 作为比较器的参考电压或为ADC差分输入提供偏移电压时非常有用。
1.9 比较器和DAC
C8051F020/1/2/3系列MCU内部有两个12位DAC和两个比较器。 MCU与每个比较器和DAC之间的数据和控制接口通过特殊功能寄存 器实现。MCU可以将任何一个DAC或比较器置于低功耗关断方式。 比较器的回差电压可以用软件编程。每个比较器都能在上升沿、下 降沿或在两个边沿都产生中断。这些中断能将MCU从休眠方式唤醒。比 较器的输出状态可以用软件查询。可通过设置交叉开关将比较器的输出
1.8 8 位模/数转换器
C8051F020有一个片内8位SAR ADC(ADC1),带有一个8通道输入多路 选择器和可编程增益放大器。该ADC工作在500ksps的最大采样速率时可提供 真正的8位精度,INL为±1LSB。有8个用于测量的输入端。ADC1完全由CIP51通过特殊功能寄存器控制。ADC0的电压基准可以在模拟电源电压(AV+) 和一个外部VREF引脚之间选择。
配置为两个单端输入或一个差分输入。
可编程增益放大器接在模拟多路选择器之后,增益可以用软件设置,从 0.5到16以2的整数次幂递增。 A/D转换有4种启动方式:软件命令、定时器2溢出、定时器3溢出和外部 信号输入。这种灵活性允许用软件事件、外部硬件信号或周期性的定时器 溢出信号触发转换。 转换结束由一个状态位指示,或者产生中断(如果中断被使能)。在转 换完成后,10或12位转换结果数据字被锁存到两个特殊功能寄存器中。这 些数据字可以用软件控制为左对齐或右对齐。
C8051f020 Flash读写擦除操作
C8051f020 Flash读写擦除操作1 flash写操作:置程序存储写允许位PSWE为1,使用MOVX指令对flash进行写操作PSCTL.0=1;void WriteFlash(unsigned int addr,unsigned char data){char xdata * xdptr;xdptr=addr;FLSCL|=0x01; //允许由用户软件写/擦除FLASHPSCTL|=0x01; //允许FLASH写* xdptr=data; //写数据到指定地址PSCTL&=0xfc; // 禁止Flash写擦除操作FLSCL&=0xfe; //禁止由用户软件写/擦除FLASH}2 flash擦除操作:如果要擦除FLASH存储器的一个页面,程序存储擦除允许PSEE位和程序存储写允许PSWE位必须被置1,这时flash写操作被认为是擦除操作void OnchipFlashErase(unsigned char saddr){char xdata * xdptr;xdptr=saddr*0x200; // 512字节一扇区FLSCL|=0x01; //允许由用户软件写/擦除FLASHPSCTL|=0x02; //允许FLASH扇区擦除PSCTL|=0x01; //允许FLASH写* xdptr=0xff; //擦除整个扇区PSCTL&=0xfc; // 禁止Flash写擦除操作FLSCL&=0xfe; //禁止由用户软件写/擦除FLASH}3 flash读操作用MOVC指令读FLASH存储器,MOVX读操作将总是指向XRAM,与PSWE的状态无关void ReadFlash(unsigned int addr,unsigned char data){data= CBYTE[addr]; //读指定flash地址数据data= XBYTE[addr]; //读指定xram地址数据}4 读写另外128字节临时存储器扇区置位PSCTL寄存器中的SFLE位为逻辑1,该扇区不能用于存储程序代码。
C8051F020单片机初始化
C8051F020单片机初始化程序和编译步骤2011-02-15 12:20:06| 分类:默认分类| 标签:|字号大中小订阅C8051F020编程步骤一、编程步骤:1、看门狗设置2、系统初始化3、端口初始化4、对应功能初始化(如:串口,定时器,I2C,SPI,PCA,DAC/ADC,中断等等)5、功能函数或中断函数(如需要)6、包含的头文件7、项目说明二、对应功能初始化要点:1、Uart:(1)串口工作模式由SCON设定(2)定时器工作方式设定TMOD (3)波特率TH载入值设定(4)启动TR1 (5)时钟基准CKCON (6)波特率加倍设定PCON(7)开中断使能TI2、Time:(1)工作方式设定TMOD (2)定时器时钟基准CKCON (3)启动/停止TCON设定TRn3、Interrupt:(1)中断允许IE (2)触发方式设定(上下沿,电平)(3)对应控制位允许设定,如ES串口允许C8051F020单片机初始化程序; $INCLUDE (C8051F020.inc) /C8051F020单片机功能强大,初始化也比较繁杂,为了便于初始化各功能模块,我们编了此程序可看着“说明”初始化。
ORG SYS_INIT;※▲◆●◎★☆△;◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆;■-- <1> --电源管理; PCON ; POWER CONTROL;■-- <2> --系统时钟和振荡器; OSCXCN ; EXTERNAL OSCILLATOR CONTROL; OSCICN ; INTERNAL OSCILLA TOR CONTROL;■-- <3> --复位及看门狗管理; RSTSRC ; RESET SOURCE; WDTCN ; WA TCHDOG TIMER CONTROL;■-- <4> --FLASH存储器编程和安全管理; FLSCL ; FLASH MEMORY TIMING PRESCALER; PSCTL ; PROGRAM STORE R/W CONTROL; FLACL ; FLASH ACESS LIMIT;■-- <5> --中断控制; IE ; INTERRUPT ENABLE; EIE1 ; EXTERNAL INTERRUPT ENABLE 1; EIE2 ; EXTERNAL INTERRUPT ENABLE 2; IP ; INTERRUPT PRIORITY; EIP1 ; EXTERNAL INTERRUPT PRIORITY REGISTER 1; EIP2 ; EXTERNAL INTERRUPT PRIORITY REGISTER 2 ; P3IF ; PORT 3 EXTERNAL INTERRUPT FLAGS;■-- <6> --端口IO初始化及交叉开关设置; XBR0 ; DIGITAL CROSSBAR CONFIGURA TION REGISTER 0; XBR1 ; DIGITAL CROSSBAR CONFIGURA TION REGISTER 1; XBR2 ; DIGITAL CROSSBAR CONFIGURA TION REGISTER 2 ; P0MDOUT ; PORT 0 OUTPUT MODE CONFIGURATION; P1MDOUT ; PORT 1 OUTPUT MODE CONFIGURATION; P2MDOUT ; PORT 2 OUTPUT MODE CONFIGURATION; P3MDOUT ; PORT 3 OUTPUT MODE CONFIGURATION; P74OUT ; PORTS 4 - 7 OUTPUT MODE;■-- <7> --外部RAM和片内XRAM; EMI0CN ; EXTERNAL MEMORY INTERFACE CONTROL; EMI0CF ; EXTERNAL MEMORY INTERFACE (EMIF) CONFIGURA TION; EMI0TC ; EXTERNAL MEMORY;■-- <8> --定时器设置; TMOD ; TIMER MODE; TCON ; TIMER CONTROL; T2CON ; TIMER 2 CONTROL; T4CON ; TIMER 4 CONTROL; TMR3CN ; TIMER 3 CONTROL; TMR3RLL ; TIMER 3 RELOAD REGISTER - LOW BYTE; TMR3RLH ; TIMER 3 RELOAD REGISTER - HIGH BYTE; TMR3L ; TIMER 3 - LOW BYTE; TMR3H ; TIMER 3 - HIGH BYTE;■-- <9> --串行通讯; SCON0 ; SERIAL PORT 0 CONTROL; SCON1 ; SERIAL PORT 1 CONTROL; SBUF1 ; SERAIL PORT 1 DA TA; SADDR1 ; SERAIL PORT 1; PCON ; POWER CONTROL; RCAP2L ; TIMER 2 CAPTURE REGISTER - LOW BYTE; RCAP2H ; TIMER 2 CAPTURE REGISTER - HIGH BYTE; RCAP4L ; TIMER 4 CAPTURE REGISTER - LOW BYTE; RCAP4H ; TIMER 4 CAPTURE REGISTER - HIGH BYTE; SADDR0 ; SERIAL PORT 0 SLAVE ADDRESS;■-- <10> --可编程计数器阵列; PCA0CN ; PCA 0 COUNTER CONTROL; PCA0MD ; PCA 0 COUNTER MODE; PCA0CPM0 ; CONTROL REGISTER FOR PCA 0 MODULE 0; PCA0CPM1 ; CONTROL REGISTER FOR PCA 0 MODULE 1; PCA0CPM2 ; CONTROL REGISTER FOR PCA 0 MODULE 2; PCA0CPM3 ; CONTROL REGISTER FOR PCA 0 MODULE 3; PCA0CPM4 ; CONTROL REGISTER FOR PCA 0 MODULE 4;■-- <11> --SMBus通讯; SMB0CN ; SMBUS 0 CONTROL; SMB0CR ; SMBUS 0 CLOCK RA TE; SMB0STA; SMBUS 0 STA TUS; SMB0DA T ; SMBUS 0 DATA; SMB0ADR ; SMBUS 0 SLAVE ADDRESS;■-- <12> --SPI总线通讯; SPI0CKR ; SERIAL PERIPHERAL INTERFACE 0 CLOCK RA TE CONTROL ; SPI0DAT ; SERIAL PERIPHERAL INTERFACE 0 DA TA ; SPI0CFG ; SERIAL PERIPHERAL INTERFACE 0 CONFIGURATION ; SPI0CN ; SERIAL PERIPHERAL INTERFACE 0 CONTROL;-- <13> --ADC转换; AMX0CF ; ADC 0 MUX CONFIGURATION; AMX0SL ; ADC 0 MUX CHANNEL SELECTION; ADC0CF ; ADC 0 CONFIGURA TION; ADC0CN ; ADC 0 CONTROL; ADC0L ; ADC 0 DA TA - LOW BYTE; ADC0H ; ADC 0 DATA - HIGH BYTE; ADC1CF ; ADC 1 ANALOG MUX CONFIGURATION; AMX1SL ; ADC 1 ANALOG MUX CHANNEL SELECT; ADC1CN ; ADC 1 CONTROL; ADC0GTL ; ADC 0 GREA TER-THAN REGISTER - LOW BYTE; ADC0GTH ; ADC 0 GREA TER-THAN REGISTER - HIGH BYTE ; ADC0LTL ; ADC 0 LESS-THAN REGISTER - LOW BYTE; ADC0LTH ; ADC 0 LESS-THAN REGISTER - HIGH BYTE; REF0CN ; VOLTAGE REFERENCE 0 CONTROL; ADC1 ; ADC 1 DA TA;■-- <14> --DAC转换; PCA0L ; PCA 0 TIMER - LOW BYTE; PCA0H ; PCA 0 TIMER - HIGH BYTE; DAC0CN ; DAC 0 CONTROL; DAC1L ; DAC 1 REGISTER - LOW BYTE; DAC1H ; DAC 1 REGISTER - HIGH BYTE; DAC1CN ; DAC 1 CONTROL;■-- <15> --比较器设置; CPT0CN ; COMPARA TOR 0 CONTROL; CPT1CN ; COMPARA TOR 1 CONTROL; EMI0TC ; EMIF TIMING CONTROL;■-- <16> --时钟/电压基准设置; CKCON ; CLOCK CONTROL; SADEN1 ; SERIAL PORT 1 SLAVE ADDRESS MASK; SADEN0 ; SERIAL PORT 0 SLAVE ADDRESS MASK; P1MDIN ; PORT 1 INPUT MODE; PSW ; PROGRAM STATUS WORD; B ; B REGISTER; WDTCN ; WA TCHDOG TIMER CONTROL;◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆;;==================================================================== ; function: Init_CTS 定时器/计数器,中断和串行通讯初始化子程序; input: -----------------; output: -----------------; usage: -----------------;====================================================================THS0 equ 0a8hTLS0 equ 09ah; THS1 equ 0fah;0feh;0fah;-4800;0f4h; TLS1 equ 0fah;0feh;0fah;-4800;0f4h;; THS2 equ 0ffh;0feh;0fah;-4800;0f4h; TLS2 equ 0b8h;0feh;0fah;-4800;0f4hInit_TCS: ;定时器/计数器,中断和串行通讯初始化子程序;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓; ◆◆◆8051内部控制寄存器◆◆◆;************************************************************************************ ;|名称| 代号| 地址|位寻| B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | ;|--------|------|------|----|-----|------|------|------|------|------|------|------| ;|电源控制| PCON | 87H | NO |SMOD | -- | -- | -- | GF1 | GF0 | PD | IDL | ;|--------|------|------|----|-----|------|------|------|------|------|------|------| ;|计时控制| TCON | 88H | YE |TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | ;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|计时模式| TMOD | 89H | NO |1GATE| 1C/T | 1M1 | 1M0 | 0GA TE| 0C/T | 0M1 | 0M0 | ;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|串行控制| SCON | 98H | YE |SM0| SM1 | SM2 | REN | TB8 | RB8 | TI | RI | ;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|中断允许| IE | A8H | YE |EA| -- | ET2 | ES | ET1 | EX1 | ET0 | EX0 | ;|--------|------|------|----|-----|------|------|------|------|------|------|------| ;|中断优先| IP | B8H | YE |-- | -- | PT2 | PS | PT1 | PX1 | PT0 | PX0 | ;************************************************************************************;时钟频率为:11.059200MHz;;机器周期为:12/fosc=1.085069μs;;CT0定时器设定延时为:2000μs;;CT0定时器工作于模式0;;CT0溢出处理采用中断方式;;CT0选择内部时钟;;CT0启动由TR0的0/1决定;;设定波特率为:4800bps;;串口0工作于方式1--T1定时器工作于方式2;;串口1工作于模式3--T2定时器用于波特率发生器4800bpsmov TH0, #THS0mov TL0, #TLS0; mov TH1, #THS1; mov TL1, #TLS1; mov TH2, #THS2; mov TL2, #TLS2;▲■-- <1> --电源管理;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓;87H---PCON-------电源控制寄存器;复位值: 00000000;位7-2:保留。
C8051F020入门指导解读
MCU 的程序存储器包含64K 字节的FLASH。该存储器 以512 字节为一个扇区,可以在系统编程,且不需特别的 外部编程电压。
1.3 JTAG 调试和边界扫描
C8051F020系列具有片内JTAG边界扫描和调试电路, 通过4脚JTAG接口并使用安装在最终应用系统中的产品器 件就可以进行非侵入式、全速的在系统调试。 该JTAG接口完全符合IEEE1149.1规范,为生产和测试 提供完全的边界扫描功能。 Silicon Labs的调试系统支持观察和修改存储器和寄 存器,支持断点、观察点、堆栈指示器和单步执行。
在一个标准的8051 中,除MUL 和DIV 以外所有指令 都需要12 或24 个系统时钟周期,最大系统时钟频率为 12-24MHz。 而对于CIP-51 内核,70%的指令的执行时间为1 或2 个系统时钟周期,只有4 条指令的执行时间大于4 个系统 时钟周期。
1.1.3 增加的功能
扩展的中断系统向CIP-51 提供22 个中断源(标准8051 只有7 个中断源),允许大量的模拟和数字外设中断微控 制器。 MCU 可有多达7 个复位源:一个片内VDD 监视器、一 个看门狗定时器、一个时钟丢失检测器、一个由比较器0 提供的电压检测器、一个软件强制复位、CNVSTR 引脚 及/RST 引脚。 MCU 内部有一个独立运行的时钟发生器,在复位后被默 认为系统时钟。如果需要,时钟源可以在运行时切换到外 部振荡器,外部振荡器可以使用晶体、陶瓷谐振器、电容、 RC 或外部时钟源产生系统时钟。
1.4 可编程数字I/O 和交叉开关
该系列MCU具有标准8051的端口(0、1、2和3)。在 F020/2中有4个附加的端口(4、5、6和7),因此共有64 个通用端口I/O。 每个端口I/O引脚都可以被配置为推挽或漏极开路输出。 数字交叉开关。
C8051F020入门指导
DAC为电压输出方式,有灵活的输出更新机制。这一机制允许
用软件写和定时器2、定时器3及定时器4的溢出信号更新DAC输出。
C8051F020/2的DAC之电压基准由专用的VREFD输入引脚提供,而
C8051F021/3的DAC之电压基准由器件内部的电压基准提供。DAC在
作为比较器的参考电压或为ADC差分输入提供偏移电压时非常有用。
➢
真正8 位500 ksps 的ADC,带PGA 和8 通道模拟多路开关
➢
两个12 位DAC,具有可编程数据更新方式
➢
64K 字节可在系统编程的FLASH 存储器
➢
4352(4096+256)字节的片内RAM
➢
➢
可寻址64K 字节地址空间的外部数据存储器接口
硬件实现的SPI、SMBus/ I2C 和两个UART 串行接
I/O 引脚(C8051F021/3)。下面列出了一些主要特性:
➢
高速、流水线结构的8051 兼容的CIP-51 内核(可达25MIPS)
➢
全速、非侵入式的在系统调试接口(片内)
➢
真正12 位(C8051F020/1)或10 位(C8051F022/3)、 100
ksps 的8 通道ADC,带PGA和模拟多路开关
➢
端口0–3中所有未被交叉开关分配的引脚都可以作为通用I/O
(GPI/O)引脚,通过读或写相应的端口数据寄存器访问。
➢
被交叉开关分配的那些端口引脚的输出状态受使用这些引脚
的数字外设的控制。
➢
不管交叉开关是否将引脚分配给外设,读一个端口数据寄存器
(或端口位)将总是返回引脚本身的逻辑状态。
➢
C8051F020使用说明书
Precision Mixed Signal Copyright © 2007 by Silicon Laboratories11.02.2007Analog Peripherals12-Bit ADC-±1 LSB INL; no missing codes-Programmable throughput up to 100 ksps-8 external inputs; programmable as single-ended or differential -Programmable amplifier gain: 16, 8, 4, 2, 1, 0.5-Data-dependent windowed interrupt generator -Built-in temperature sensor (±3 °C)8-Bit ADC-±1 LSB INL; no missing codes-Programmable throughput up to 500 ksps -8 external inputs-Programmable amplifier gain: 4, 2, 1, 0.5Two 12-Bit DACs-Can synchronize outputs to timers for jitter-free waveform generationTwo ComparatorsInternal Voltage ReferenceV DD Monitor/Brown-out DetectorOn-Chip JTAG Debug & Boundary Scan-On-chip debug circuitry facilitates full speed, non-intrusive in-system debug (no emulator required)-Provides breakpoints, single stepping, watchpoints, stack monitor -Inspect/modify memory and registers-Superior performance to emulation systems using ICE-chips, target pods, and sockets-IEEE1149.1 compliant boundary scanHigh-Speed 8051 µC Core-Pipelined instruction architecture; executes 70% of instructions in 1 or 2 system clocks-Up to 25 MIPS throughput with 25 MHz system clock -22 vectored interrupt sourcesMemory-4352 bytes data RAM-64 kB Flash; in-system programmable in 512-byte sectors (512 bytes are reserved)-External parallel data memory interfaceDigital Peripherals-64 port I/O; all are 5 V tolerant-Hardware SMBus™ (I2C™ compatible), SPI™, and two UART serial ports available concurrently-Programmable 16-bit counter/timer array with 5 capture/compare mod-ules- 5 general-purpose 16-bit counter/timers-Dedicated watchdog timer; bidirectional reset -Real-time clock mode using Timer 3 or PCA Clock Sources-Internal programmable oscillator: 2–16 MHz -External oscillator: Crystal, RC, C, or Clock -Can switch between clock sources on-the-fly Supply Voltage: 2.7 to 3.6 V-Typical operating current: 10 mA at 25 MHz-Multiple power saving sleep and shutdown modes100-Pin TQFPTemperature Range: –40 to +85 °CPrecision Mixed Signal Copyright © 2007 by Silicon Laboratories 11.02.2007Silicon Laboratories and Silicon Labs are trademarks of Silicon Laboratories Inc.Other products or brandnames mentioned herein are trademarks or registered trademarks of their respective holdersSelected Electrical Specifications(T A = –40 to +85 C°, V DD = 2.7 V unless otherwise specified)Package InformationC8051F020DK Development Kit。
Flash存储器的在线擦写方法
除了有512个保留字节不能使用之外,还有两个字节的安全锁定字节以保护FLASH。读锁定字节的每一为控制一个大小为8K的存储区域,对应关系如图3所示。写/擦除锁定字节也一样,每一位控制一个8K的存储区域。
图3
5. 用MOVX 指令向待擦除扇区内的任何一个地址写入一个数据字节。
6. 清除PSEE 以禁止FLASH 扇区擦除。
7. 用MOVX 指令向刚擦除的扇区中所希望的地址写入数据字节。重复该步直到所有字
节பைடு நூலகம்已写入(目标扇区内)。
8. 清除PSWE 以禁止FLASH 写,使MOVX 操作指向XRAM 数据空间。
在对FLASH存储器进行写操作前,必须将其进行擦除。由于FLASH写操作是用MOVX指令实现的,所以用于写或擦除的FLASH指针必须是xdata类型
本文内容根据一下资料整理:
1.《C8051F020/1/2/3混合信号ISP FLASH维控制器数据手册》 潘琢金译
EA=1; //重新允许中断
}
void main(void)
{ WDTCN=0xde;
WDTCN=0xad;
//Add initialization code here
P1MDOUT=0xff;
ReadState();
#include<c8051f020.h>
unsigned char test; //保存输出状态
//在FLASH中保存输出状态
/*For reading*/
unsigned char code test_c _at_ 0xCF20;
/*For writing*/
unsigned char xdata test_x _at_ 0xCF20;
单片机-05_Flash
用MOVC 指令读FLASH 存储器;MOVX 读操作将总是指 向XRAM,与PSWE 的状态无关。 为保证FLASH 存储器器内容的完整性,从应用软件写/擦 除FLASH存储器的系统中使能VDD 监视器(通过将VDD 监视器使能引脚MONEN 接到VDD)
用软件对FLASH 编程的过程: 1. 禁止中断。 2. 置位FLWE(FLSCL.0),以允许由用户软件写/擦除 FLASH。 3. 置位PSEE(PSCTL.1),以允许FLASH 扇区擦除。 4. 置位PSWE(PSCTL.0),以允许FLASH 写。 5. 用MOVX 指令向待擦除扇区内的任何一个地址写入一个 数据字节。 6. 清除PSEE 以禁止FLASH 扇区擦除。 7. 用MOVX 指令向刚擦除的扇区中所希望的地址写入数据 字节。重复该步直到所有字节都已写入(目标扇区内)。 8. 清除PSWE 以禁止FLASH 写,使MOVX 操作指向 XRAM 数据空间。 9. 重新允许中断。
FLACL: FLASH 访问限制
位7-0: FLACL:FLASH 访问限制。 该寄存器保持16 位程序存储器读/写/擦除限制地址的高 字节。完整的16 位访问限制地址按0xNN00 计算,其中 NN 用FLACL 的内容替换。向该地址写将设置FLASH 访 问限制地址。在任何一次复位后只能向该寄存器写入一次。 在下一次复位之前任何后续的写操作都将被忽略。
在FLASH 正被编程或擦除期间,8051 中的程序停止执行。 在FLASH 写/擦除操作期间发生的中断被挂起,等FLASH 操作完成后按优先级顺序得到服务。
4 .2非易失性数据存储 FLASH 存储器除了用于存储程序代码之外还可以用于非易 失性数据存储。这就允许在程序运行时计算和存储类似标 定系数这样的数据。数据写入用MOVX 指令,读出用 MOVC 指令。 MCU 的FLASH 存储器中有一个附加的128 字节的扇区, 可用于非易失性数据存储。然而它较小的扇区容量使其尤 其适于作为通用的非易失性临时存储器。
C8051F的超大容量Flash存储器扩展
C8051F的超大容量Flash存储器扩展摘要:NAND结构Flash数据存储器件是超大容量数据存储的理想选择,当前被广泛应用于U 盘、MP3和数码相机的数据存储。
本文对该类型Flash的基本操作进行研究并对实际应用系统给予验证,揭示了NAND结构Flash的操作规律。
引言大容量数据存储是单片机应用系统的瓶颈,受到容量、功耗、寻址方式的约束。
突破容量限制,可以很大程度上扩展和提高应用系统的总体功能。
Sumsung公司的NAND结构Flash 存储器件是一款性价比很高的超大容量数据存储器件,在MP3、U盘、数码相机和PDA中有广泛的应用,且市场占有份额逐年加大。
用该器件作为各种单片机尤其是嵌入式系统的数据存储器,可以完美地解决容量限制,实现灵活操作,势必成为数据存储的主流方向。
1 器件介绍NAND结构Flash是Sumsung公司隆重推出并着力开发的新一代数据存储器件,电源电压1.7~3.6V,体积小,功耗低,容量最大可达1GB,按页进行读写,按块擦除,通过I/O口分时复用作为命令/地址/数据。
本次应用开发的是NAND结构16MB的K9F2808UOB,其它大容量的器件只比该型号送出的地址多了几字节,操作指令和时序相同。
具体结构说明。
由图1可知,该器件由1K个块(block)组成,每个块有32页,每页有528字节,这528字节分成A、B、C三个区。
对每一页的寻址需要通过I/O口送出三个地址,第二、三行地址(A9~A23)指明寻址到某一页,第一列地址指明寻址到页的指定区中某一字节。
对页的分区命令如表1所列。
表1 起始指针位置与区域关系对照表命令指针位置/字节区域 00H 0~255 阵列第一伴(A) 01H 256~511 阵列第二半(B) 50H 512~527 剩余阵列(C)由表1可以看出,00H、01H、50H只是选区指针。
选定区的内部寻址是由第一个列地址完成的,A0~A7可以最大寻址256字节。
C8051F020实验板使用要领.
C8051F020实验板使用要领
1.上电顺序:
注意电脑关机并将实验板上拨动开关打在关闭状态
接上电脑串口电缆(如电脑没有串口可使用高质量的USB→串口线)
连接EC5仿真器到板上的JTAG接口和电脑的空闲USB接口
连接自制的小板到对应模拟或数字端口,检查连接和电源的正确性
打开电脑,连接9v电源到实验板并打开实验板电源开关
电脑运行Keil UV2,编译自己的程序并进入调试状态
(此时可以看到EC5上的对应指示灯亮和程序在板上的执行)
运行串口调试精灵监控串口状态
2.关机顺序:
关闭串口调试精灵
停止并关闭UV2调试
关闭实验板电源
插拔自制小板
关闭电脑或断开USB虚拟串口
插拔串口电缆
3.注意事项
建议设置uv2调试结束断开仿真器EC5电源
没有关闭串口精灵的情况下切断通讯容易引起电脑串口被误占用
没有关闭uv2调试的情况下直接实验板断电会使uv2进入假死机
串口带电且无热插拔功能,串口在没有断开供电的情况下不允许插拔!
自制小板在接上实验板前后未通电情况下必须仔细检查有无短路或接错!
实验板GPIO引脚间在无特殊要求下不要短接,也不允许通过自制小板短接!
自制小板不能将电源(高压、大电流)通过连线直接接上实验板的GPIO端口!
以上2条也适合于实验板上引出的C8051F020的其他引脚(特别是模拟引脚)!
C8051F020的GPIO引脚建议禁止内部弱上拉,禁止推挽,通过510电阻连接小板。
C8051F020写128字节FLASH的程序
FLASH_ScratchRead (temp_array, 0x0000, sizeof (test_str (0x0000, test_str2, sizeof (test_str2));
while (1);
void main (void) {
char xdata temp_array[16];
char code test_str1[] = "Test String 1";
char code test_str2[] = "Test String 2";
// Disable Watchdog timer
//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------
WDTCN = 0xde;
WDTCN = 0xad;
SYSCLK_Init (); // initialize oscillator
FLASH_ScratchErase ();
FLASH_ScratchWrite (0x0000, test_str1, sizeof (test_str1));
sfr16 DAC0 = 0xd2; // DAC0 data
sfr16 DAC1 = 0xd5; // DAC1 data
//-----------------------------------------------------------------------------
C8051F020单片机初始化程序和编译步骤
C8051F020单片机初始化程序和编译步骤2011-02-15 12:20:06| 分类:默认分类| 标签:|字号大中小订阅C8051F020编程步骤一、编程步骤:1、看门狗设置2、系统初始化3、端口初始化4、对应功能初始化(如:串口,定时器,I2C,SPI,PCA,DAC/ADC,中断等等)5、功能函数或中断函数(如需要)6、包含的头文件7、项目说明二、对应功能初始化要点:1、Uart:(1)串口工作模式由SCON设定(2)定时器工作方式设定TMOD (3)波特率TH载入值设定(4)启动TR1 (5)时钟基准CKCON (6)波特率加倍设定PCON(7)开中断使能TI2、Time:(1)工作方式设定TMOD (2)定时器时钟基准CKCON (3)启动/停止TCON设定TRn3、Interrupt:(1)中断允许IE (2)触发方式设定(上下沿,电平)(3)对应控制位允许设定,如ES串口允许C8051F020单片机初始化程序; $INCLUDE (C8051F020.inc) /C8051F020单片机功能强大,初始化也比较繁杂,为了便于初始化各功能模块,我们编了此程序可看着“说明”初始化。
ORG SYS_INIT;※▲◆●◎★☆△;◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆;■-- <1> --电源管理; PCON ; POWER CONTROL;■-- <2> --系统时钟和振荡器; OSCXCN ; EXTERNAL OSCILLATOR CONTROL; OSCICN ; INTERNAL OSCILLATOR CONTROL;■-- <3> --复位及看门狗管理; RSTSRC ; RESET SOURCE; WDTCN ; WATCHDOG TIMER CONTROL;■-- <4> --FLASH存储器编程和安全管理; FLSCL ; FLASH MEMORY TIMING PRESCALER; PSCTL ; PROGRAM STORE R/W CONTROL; FLACL ; FLASH ACESS LIMIT;■-- <5> --中断控制; IE ; INTERRUPT ENABLE; EIE1 ; EXTERNAL INTERRUPT ENABLE 1; EIE2 ; EXTERNAL INTERRUPT ENABLE 2; IP ; INTERRUPT PRIORITY; EIP1 ; EXTERNAL INTERRUPT PRIORITY REGISTER 1; EIP2 ; EXTERNAL INTERRUPT PRIORITY REGISTER 2; P3IF ; PORT 3 EXTERNAL INTERRUPT FLAGS;■-- <6> --端口IO初始化及交叉开关设置; XBR0 ; DIGITAL CROSSBAR CONFIGURATION REGISTER 0; XBR1 ; DIGITAL CROSSBAR CONFIGURATION REGISTER 1; XBR2 ; DIGITAL CROSSBAR CONFIGURATION REGISTER 2 ; P0MDOUT ; PORT 0 OUTPUT MODE CONFIGURATION; P1MDOUT ; PORT 1 OUTPUT MODE CONFIGURATION; P2MDOUT ; PORT 2 OUTPUT MODE CONFIGURATION; P3MDOUT ; PORT 3 OUTPUT MODE CONFIGURATION; P74OUT ; PORTS 4 - 7 OUTPUT MODE;■-- <7> --外部RAM和片内XRAM; EMI0CN ; EXTERNAL MEMORY INTERFACE CONTROL; EMI0CF ; EXTERNAL MEMORY INTERFACE (EMIF) CONFIGURATION; EMI0TC ; EXTERNAL MEMORY;■-- <8> --定时器设置; TMOD ; TIMER MODE; TCON ; TIMER CONTROL; T2CON ; TIMER 2 CONTROL; T4CON ; TIMER 4 CONTROL; TMR3CN ; TIMER 3 CONTROL; TMR3RLL ; TIMER 3 RELOAD REGISTER - LOW BYTE; TMR3RLH ; TIMER 3 RELOAD REGISTER - HIGH BYTE; TMR3L ; TIMER 3 - LOW BYTE; TMR3H ; TIMER 3 - HIGH BYTE;■-- <9> --串行通讯; SCON0 ; SERIAL PORT 0 CONTROL; SCON1 ; SERIAL PORT 1 CONTROL; SBUF1 ; SERAIL PORT 1 DATA; SADDR1 ; SERAIL PORT 1; PCON ; POWER CONTROL; RCAP2L ; TIMER 2 CAPTURE REGISTER - LOW BYTE; RCAP2H ; TIMER 2 CAPTURE REGISTER - HIGH BYTE; RCAP4L ; TIMER 4 CAPTURE REGISTER - LOW BYTE; RCAP4H ; TIMER 4 CAPTURE REGISTER - HIGH BYTE; SADDR0 ; SERIAL PORT 0 SLAVE ADDRESS;■-- <10> --可编程计数器阵列; PCA0CN ; PCA 0 COUNTER CONTROL; PCA0MD ; PCA 0 COUNTER MODE; PCA0CPM0 ; CONTROL REGISTER FOR PCA 0 MODULE 0; PCA0CPM1 ; CONTROL REGISTER FOR PCA 0 MODULE 1; PCA0CPM2 ; CONTROL REGISTER FOR PCA 0 MODULE 2; PCA0CPM3 ; CONTROL REGISTER FOR PCA 0 MODULE 3 ; PCA0CPM4 ; CONTROL REGISTER FOR PCA 0 MODULE 4; SMB0CN ; SMBUS 0 CONTROL; SMB0CR ; SMBUS 0 CLOCK RATE; SMB0STA ; SMBUS 0 STATUS; SMB0DAT ; SMBUS 0 DATA; SMB0ADR ; SMBUS 0 SLAVE ADDRESS;■-- <12> --SPI总线通讯; SPI0CKR ; SERIAL PERIPHERAL INTERFACE 0 CLOCK RATE CONTROL ; SPI0DAT ; SERIAL PERIPHERAL INTERFACE 0 DATA ; SPI0CFG ; SERIAL PERIPHERAL INTERFACE 0 CONFIGURATION ; SPI0CN ; SERIAL PERIPHERAL INTERFACE 0 CONTROL;-- <13> --ADC转换; AMX0CF ; ADC 0 MUX CONFIGURATION; AMX0SL ; ADC 0 MUX CHANNEL SELECTION; ADC0CF ; ADC 0 CONFIGURATION; ADC0CN ; ADC 0 CONTROL; ADC0L ; ADC 0 DATA - LOW BYTE; ADC0H ; ADC 0 DATA - HIGH BYTE; ADC1CF ; ADC 1 ANALOG MUX CONFIGURATION; AMX1SL ; ADC 1 ANALOG MUX CHANNEL SELECT; ADC1CN ; ADC 1 CONTROL; ADC0GTL ; ADC 0 GREATER-THAN REGISTER - LOW BYTE; ADC0GTH ; ADC 0 GREATER-THAN REGISTER - HIGH BYTE ; ADC0LTL ; ADC 0 LESS-THAN REGISTER - LOW BYTE; ADC0LTH ; ADC 0 LESS-THAN REGISTER - HIGH BYTE; REF0CN ; VOLTAGE REFERENCE 0 CONTROL; ADC1 ; ADC 1 DATA;■-- <14> --DAC转换; PCA0L ; PCA 0 TIMER - LOW BYTE; PCA0H ; PCA 0 TIMER - HIGH BYTE; DAC0CN ; DAC 0 CONTROL; DAC1L ; DAC 1 REGISTER - LOW BYTE; DAC1H ; DAC 1 REGISTER - HIGH BYTE; DAC1CN ; DAC 1 CONTROL; CPT0CN ; COMPARATOR 0 CONTROL; CPT1CN ; COMPARATOR 1 CONTROL; EMI0TC ; EMIF TIMING CONTROL;■-- <16> --时钟/电压基准设置; CKCON ; CLOCK CONTROL; SADEN1 ; SERIAL PORT 1 SLAVE ADDRESS MASK; SADEN0 ; SERIAL PORT 0 SLAVE ADDRESS MASK; P1MDIN ; PORT 1 INPUT MODE; PSW ; PROGRAM STATUS WORD; B ; B REGISTER; WDTCN ; WATCHDOG TIMER CONTROL;◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆;;==================================================================== ; function: Init_CTS 定时器/计数器,中断和串行通讯初始化子程序; input: -----------------; output: -----------------; usage: -----------------;====================================================================THS0 equ 0a8hTLS0 equ 09ah; THS1 equ 0fah;0feh;0fah;-4800;0f4h; TLS1 equ 0fah;0feh;0fah;-4800;0f4h;; THS2 equ 0ffh;0feh;0fah;-4800;0f4h; TLS2 equ 0b8h;0feh;0fah;-4800;0f4hInit_TCS: ;定时器/计数器,中断和串行通讯初始化子程序;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓; ◆◆◆8051内部控制寄存器◆◆◆;************************************************************************************;|名称| 代号| 地址|位寻| B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |;|--------|------|------|----|-----|------|------|------|------|------|------|------| ;|电源控制| PCON | 87H | NO |SMOD | -- | -- | -- | GF1 | GF0 | PD | IDL | ;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|计时控制| TCON | 88H | YE |TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |;|--------|------|------|----|-----|------|------|------|------|------|------|------| ;|计时模式| TMOD | 89H | NO |1GATE| 1C/T | 1M1 | 1M0 | 0GATE| 0C/T | 0M1 | 0M0 | ;|--------|------|------|----|-----|------|------|------|------|------|------|------| ;|串行控制| SCON | 98H | YE |SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|中断允许| IE | A8H | YE |EA | -- | ET2 | ES | ET1 | EX1 | ET0 | EX0 | ;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|中断优先| IP | B8H | YE |-- | -- | PT2 | PS | PT1 | PX1 | PT0 | PX0 | ;************************************************************************************;时钟频率为:11.059200MHz;;机器周期为:12/fosc=1.085069μs;;CT0定时器设定延时为:2000μs;;CT0定时器工作于模式0;;CT0溢出处理采用中断方式;;CT0选择内部时钟;;CT0启动由TR0的0/1决定;;设定波特率为:4800bps;;串口0工作于方式1--T1定时器工作于方式2;;串口1工作于模式3--T2定时器用于波特率发生器4800bpsmov TH0, #THS0mov TL0, #TLS0; mov TH1, #THS1; mov TL1, #TLS1; mov TH2, #THS2; mov TL2, #TLS2;▲■-- <1> --电源管理;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓;87H---PCON-------电源控制寄存器;复位值: 00000000;位7-2:保留。
C8051F020 最小系统 实验指导手册
工程的建立及配置........................................................................................7 Configuration Wizard 2 的使用介绍............................................................9 液晶显示......................................................................................................15 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 液晶显示模块简介............................................................................15 硬件连接............................................................................................16 地址计算方法....................................................................................17 RA8835 底层驱动程序..................................................................... 18 程序示例............................................................................................19 综合程序示例....................................................................................21 行列扫描原理介绍............................................................................23 硬件连接............................................................................................23 软件流程图........................................................................................24 示例源程序........................................................................................25 示例工程............................................................................................26 硬件连接............................................................................................30 软件设计............................................................................................30 相关寄存器设置................................................................................31 程序示例............................................................................................34
C8051F如何使用UART下载程序代码至FLASH应用手册
Rev. 2.1 12/03Copyright © 2003 by Silicon LaboratoriesAN112-DS21AN112UART I N -A P P L I C A T I O N C O D E L O A D I N G E X A M P L E S Relevant Devices This application note applies to the following devices:C8051F020, C8051F021, C8051F022, C8051F023, C8051F300, C8051F301,C8051F302, and C8051F303.Introduction A UART code loader provides in-system repro-grammability of program code space (FLASH)through the serial port. This application note gives an overview of in-application code loading on Sili-con Labs devices and provides two complete exam-ples. The examples included are a selective code loader and a firmware updater. This document alsodiscusses design considerations related to in-appli-cation code loading.Key Points •FLASH memory locations must be erased before the new program code is written.•An Intel Hexadecimal Object File (“HEX” file) is an ASCII file containing a complete or par-tial image of the programmable device’s pro-gram code space (FLASH). An OMF-51 (binary linker output file) to Intel HEX con-verter is provided with the Silicon Labs IDE.• A UART code loader can be controlled by a PCrunning a terminal program or any other embedded device that has a UART.In-Application Code Loading Overview To load code into a device through the UART, the device needs to run an application that manages the transfer of code from the host to its program mem-ory. This application needs the ability to do the fol-lowing tasks:1.Configure the device for UART communica-tion at a specified baud rate.2.Erase program memory (FLASH) prior toreceiving the download.3.Download the new code and store it in programmemory. 4.Execute the newly downloaded code.Configuring the Device for UART communication When using UART to communicate between twodevices, both ends must be configured to run at the same baud rate, in 8-bit or 9-bit data mode, andwith or without parity. The examples in this docu-ment use 8-bit data with no parity at a baud rate of115200 bits per second. If a terminal program is used on the host, it should be configured as shown in the following table:Erasing and Writing to FLASH The program memory on all Silicon Labs 8051F devices is FLASH. In general, a code loader will need to erase one or more 512-byte FLASH pages Table 1. Terminal Program Configuration bits per second 115200data bits 8parity none stop bits 1flow control noneAN1122Rev. 2.1AN112Rev. 2.13Figure 2. Project MapAN1124Rev. 2.1AN112Rev. 2.15AN1126Rev. 2.1AN112Rev. 2.17AN1128Rev. 2.1AN112Rev. 2.19AN11210Rev. 2.1。
C8051F020中Flash存储器的在线擦写方法
C8051F020中Flash存储器的在线擦写方法
韩红芳;孙守昌
【期刊名称】《单片机与嵌入式系统应用》
【年(卷),期】2004(000)003
【摘要】从C8051F02x Flash存储器的结构可以知道,C8051F02x的Flash存储器中,不仅具有64KB的Flash存储器(其地址为0x0000-0xFFFF,该存储器可以用来存储程序代码和非易失性数据),还有一个附加的128B的扇区(该扇区位于0x10000~0x1007F)。
C8051F02x的Flash存储器中附加的128B的扇区在
64KB存储器中是双映射的,
【总页数】2页(P73,80)
【作者】韩红芳;孙守昌
【作者单位】哈尔滨工程大学;哈尔滨工程大学
【正文语种】中文
【中图分类】TP3
【相关文献】
1.C8051F35X单片机内部Flash存储器的擦写方法 [J], 陈富安;张莹
2.MC68HC908 FLASH存储器的在线擦写方法 [J], 涂时亮
3.MC68HC908 FLASH存储器的在线擦写方法 [J], 涂时亮
4.Freescale HCS12系列MCU的Flash存储器在线编程方法 [J], 聂章龙;张静
5.浮栅型NAND FLASH存储器擦写耐久与数据保持试验方法研究 [J], 刘振旺;刘岐;刘文宝;肖磊;李清
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C8051F020的Flash操作
C8051F020 的Flash 可以实现IAP 功能(In Application Programming),即程序可对Flash 存储区进行编程,也就是说Flash 除了可以存放程序代码,还可
以在剩下的空间内存储数据,即起到EEPROM 的功能,下图是C8051F020 的
存储组织结构图
可以看到它的结构是64K+128 字节的形式,0xfe00~0xffff 为工厂保留区,
不能进行操作,当64K 的Flash 用作存储数据时,先确定程序代码的位置,以
免覆盖程序导致出错,还有操作Flash 前必须禁止中断,否则可能会出现无法
预知的错误,下面是我写的驱动,经测试没问题:
void Flash_area_Erase(bit type,uint addr){//flash 擦除,type 为0 代表128 字节储存区,为1 代表64K 存储区(512 字节/扇区)bit
EA_S;EA_S=EA;EA=0;if(!type) PSCTL=0x07;else PSCTL=0x03;FLSCL=0x01;//允许写*(uchar xdata *)addr=0xff;PSCTL=0;FLSCL=0;EA=EA_S;}
uchar Flash_area_Read(bit type,uint addr){//flash 读取,type 为0 代表128 字节储存区,为1 代表64K 存储区(512 字节/扇区)uchar dat;bit EA_S;EA_S=EA;EA=0;if(!type) PSCTL=0x04;else PSCTL=0;dat=*(uchar code *)addr;PSCTL=0;EA=EA_S;return(dat);}
void Flash_area_Write(bit type,uint addr,uchar dat){//flash 写入,type 为0 代表128 字节储存区,为1 代表64K 存储区(512 字节/扇区)bit
EA_S;EA_S=EA;EA=0;if(!type) PSCTL=0x05;else PSCTL=0x01;FLSCL=0x01;*(uchar xdata *)addr=dat;PSCTL=0;FLSCL=0;EA=EA_S;}。