⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 静音琴的源码,有兴趣的拼音可以下载下来看看,这个是可以生产的程序.
💻
字号:

;************************************************
; STC89C5XRC/RD+ 系列单片机 闪存功能程序
;************************************************
;    1)  闪存到外存   MOV_EEPROM_EXRAM
;    2)  外存到闪存   MOV_EXRAM_EEPROM
;    3)  清缓存       QHC
;    4)  建立修正表   madeXZB
;    5)  修正表送外存 MOV_code_EXRAM
;------------------------------------------------
;    闪存 = 8000H--807FH
;    外存 = 0280H--02FFH
;    须有 "音量修正表(TAB_YLXZB)" 存在
;************************************************

PROC  MOV_EEPROM_EXRAM,MOV_EXRAM_EEPROM
;************************************************
;      闪存到外存
;************************************************
MOV_EEPROM_EXRAM:
       PUSH  PSW
       PUSH  ACC
       PUSH  AUXR1
       MOV   AUXR1,#0              ;选DPTR
       PUSH  DPH
       PUSH  DPL
       INC   AUXR1                 ;换DPTR
       PUSH  DPH
       PUSH  DPL
       MOV   ACC,R7
       PUSH  ACC
       ;-----------
       MOV   AUXR1,#0              ;选DPTR
       MOV   DPTR,#EEPROM_ADD      ;EEPROM
       INC   AUXR1                 ;换DPTR
       MOV   DPTR,#EXRAM_ADD       ;EXRAM
       MOV   R7,#FlashAmount       ;数量
MEEX1:
       MOV   AUXR1,#0              ;回DPTR
       LCALL byte_read             ;读字节
       INC   DPTR
       INC   AUXR1                 ;换DPTR
       MOVX  @DPTR,A
       INC   DPTR
       DJNZ  R7,MEEX1
       ;-----------
       POP   ACC
       MOV   R7,A
       MOV   AUXR1,#1              ;选DPTR
       POP   DPL
       POP   DPH
       INC   AUXR1                 ;换DPTR
       POP   DPL
       POP   DPH
       POP   AUXR1
       POP   ACC
       POP   PSW
       RET
;************************************************
;      外存到闪存
;************************************************
;EEPROM_ADD=8000H--807FH
;XRAM_ADD  =0280H--02FFH
;------------------------------------------------
MOV_EXRAM_EEPROM:
       PUSH  PSW
       PUSH  ACC
       PUSH  AUXR1
       MOV   AUXR1,#0              ;选DPTR
       PUSH  DPH
       PUSH  DPL
       INC   AUXR1                 ;换DPTR
       PUSH  DPH
       PUSH  DPL
       MOV   ACC,R7
       PUSH  ACC
       ;-----------
       MOV   AUXR1,#0              ;选DPTR
       MOV   DPTR,#EEPROM_ADD      ;EEPROM
       LCALL sector_erase          ;擦除扇区
       INC   AUXR1                 ;换DPTR
       MOV   DPTR,#EXRAM_ADD       ;EXRAM
       MOV   R7,#FlashAmount       ;数量
MEXE1:
       MOV   AUXR1,#1              ;换DPTR
       MOVX  A,@DPTR
       INC   DPTR
       INC   AUXR1                 ;回DPTR0
       LCALL byte_program          ;字节编程
       INC   DPTR
       DJNZ  R7,MEXE1
       ;-----------
       POP   ACC
       MOV   R7,A
       MOV   AUXR1,#1              ;选DPTR
       POP   DPL
       POP   DPH
       INC   AUXR1                 ;换DPTR
       POP   DPL
       POP   DPH
       POP   AUXR1
       POP   ACC
       POP   PSW
       RET
;************************************************
;     读字节
;************************************************
;入口:DPTR = 字节地址
;返回:A = 读出字节
;------------------------------------------------
byte_read:
       MOV   ISP_CONTR,#ENABLE_ISP ;打开 IAP 功能, 设置 Flash 操作等待时间
       MOV   ISP_CMD,#01           ;Select Read AP Mode
       MOV   ISP_ADDRH,DPH         ;Fill page address in ISP_ADDRH & ISP_ADDRL
       MOV   ISP_ADDRL,DPL
       CLR EA
       MOV ISP_TRIG,#46H           ;Trigger ISP processing
       MOV ISP_TRIG,#0B9H          ;Trigger ISP processing
       NOP
       MOV   A,ISP_DATA            ;数据在ISP_DATA
       SETB EA
       LCALL IAP_Disable           ;关闭 IAP 功能, 清与 ISP 有关的特殊功能寄存器
       RET
;************************************************
;      擦除扇区
;************************************************
;入口:DPTR = 扇区地址
;------------------------------------------------
sector_erase:
       MOV   ISP_CONTR,#ENABLE_ISP ;打开 IAP 功能, 设置 Flash 操作等待时间
       MOV   ISP_CMD,#03H          ;Select Page Erase Mode
       MOV   ISP_ADDRH,DPH         ;Fill page address in ISP_ADDRH & ISP_ADDRL
       MOV   ISP_ADDRL,DPL
       LCALL trigger_ISP           ;触发起动 ISP
       LCALL IAP_Disable           ;关闭 IAP 功能, 清与 ISP 有关的特殊功能寄存器
       RET
;************************************************
;      字节编程
;************************************************
;入口:DPTR = 字节地址, A= 须编程字节的数据
;------------------------------------------------
byte_program:
       MOV   ISP_CONTR,#ENABLE_ISP ;打开 IAP 功能, 设置 Flash 操作等待时间
       MOV   ISP_CMD,#02H          ;Select Byte Program Mode
       MOV   ISP_ADDRH,DPH         ;Fill page address in ISP_ADDRH & ISP_ADDRL
       MOV   ISP_ADDRL,DPL
       MOV   ISP_DATA,A            ;数据进ISP_DATA
       LCALL trigger_ISP           ;触发起动 ISP
       LCALL IAP_Disable           ;关闭 IAP 功能, 清与 ISP 有关的特殊功能寄存器
       RET
;************************************************
;      触发起动 ISP
;************************************************
trigger_ISP:
       CLR EA
       MOV ISP_TRIG,#46H           ;Trigger ISP processing
       MOV ISP_TRIG,#0B9H          ;Trigger ISP processing
       NOP
       SETB EA
       RET
;************************************************
;      关闭 IAP 功能
;************************************************
IAP_Disable:
       MOV ISP_CONTR,#0            ;清与 ISP 有关的特殊功能寄存器
       MOV ISP_CMD,#0
       MOV ISP_TRIG,#0
       RET
;************************************************
       END
;************************************************
;      清缓存
;************************************************
       PROC   QHC
QHC:
       PUSH  PSW
       PUSH  ACC
       PUSH  DPH
       PUSH  DPL
       MOV   A,R7
       PUSH  ACC
       MOV   DPTR,#EXRAM_ADD
       MOV   R7,#FlashAmount
QHC1:
       MOV   A,#0
       MOVX  @DPTR,A          ;清缓存
       INC   DPTR
       DJNZ  R7,QHC1
       POP   ACC
       MOV   R7,A
       POP   DPL
       POP   DPH
       POP   ACC
       POP   PSW
       RET
       END
;************************************************
;      建立修正表
;************************************************
       PROC   madeXZB
madeXZB:
       PUSH  PSW
       PUSH  ACC
       PUSH  DPH
       PUSH  DPL
       MOV   A,R7
       PUSH  ACC
       ;--------
       LCALL MOV_EEPROM_EXRAM ;读闪存
       MOV   DPTR,#EXRAM_ADD  ;头数据地址首
       MOV   R7,#21
madeXZBT:
       MOVX  A,@DPTR
       INC   DPTR
       CJNE  A,#60H,madeXZB1
       DJNZ  R7,madeXZBT
       ;-----------------
       MOV   DPTR,#EXRAM_END_ADD-19+1;尾数据地址首
       MOV   R7,#19
madeXZBW:
       MOVX  A,@DPTR
       INC   DPTR
       CJNE  A,#60H,madeXZB1
       DJNZ  R7,madeXZBW
       ;-----------------
       ;己经有修正表
       LJMP  madeXZB3
madeXZB1:
       ;无修正表
       LCALL MOV_code_EXRAM   ;读修正表
       LCALL MOV_EXRAM_EEPROM ;写闪存
       LCALL MOV_EEPROM_EXRAM ;读闪存
       A1234567:;???????????????????
       LCALL FWY;?????????????????????
       LJMP  A1234567;?????????????????
madeXZB3:
       ;--------
       POP   ACC
       MOV   R7,A
       POP   DPL
       POP   DPH
       POP   ACC
       POP   PSW
       RET
       END
;************************************************
;      读修正表
;************************************************
       PROC   MOV_code_EXRAM
MOV_code_EXRAM:
       PUSH  PSW
       PUSH  ACC
       PUSH  AUXR1
       MOV   AUXR1,#0              ;选DPTR
       PUSH  DPH
       PUSH  DPL
       INC   AUXR1                 ;换DPTR
       PUSH  DPH
       PUSH  DPL
       MOV   ACC,R7
       PUSH  ACC
       MOV   AUXR1,#0              ;选DPTR
       MOV   DPTR,#TAB_YLXZB       ;音量修正表
       INC   AUXR1                 ;换DPTR
       MOV   DPTR,#EXRAM_ADD       ;EXRAM
       MOV   R7,#FlashAmount       ;数量
MCEX1:
       MOV   AUXR1,#0              ;回DPTR
       MOV   A,#0
       MOVC  A,@A+DPTR             ;读音量修正表
       INC   DPTR
       INC   AUXR1                 ;换DPTR
       MOVX  @DPTR,A
       INC   DPTR
       DJNZ  R7,MCEX1
       POP   ACC
       MOV   R7,A
       MOV   AUXR1,#1              ;选DPTR
       POP   DPL
       POP   DPH
       INC   AUXR1                 ;换DPTR
       POP   DPL
       POP   DPH
       POP   AUXR1
       POP   ACC
       POP   PSW
       RET
       END
;************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -