📄 ci910cpu.asm.svn-base
字号:
;===============================================================================================;
;****| |****=;
;****| Description of this Program: |****=;
;****| ------------------------------------------- |****=;
;****| Timer0: interrupt one times when enabled,The next interrupt must be reenable |****=;
;****| Timer1: baud rate generator |****=;
;****| 1. as baud rate generator when communication |****=;
;****| 2. as WatchDog when working normally |****=;
;****| Serial interrupt: Reserve(The ISR entrance point to WorkAddress+0x23) |****=;
;****| External interrupt 0: Reserve(The ISR entrance point to WorkAddress+0x03) |****=;
;****| External interrupt 1: Reserve(The ISR entrance point to WorkAddress+0x13) |****=;
;****| Attention: program must rewrite WatchDogCounter with WatchDogValue within |****=;
;****| WatchDogValue*50ms,otherwise system will be reset when WatchDog |****=;
;****| overflow(WatchDog) |****=;
;****| |****=;
;===============================================================================================;
#ifndef IncludeHead
$include (../include/ci910cpudef.h)
#define IncludeHead
#endif
;-------------------------------;
public _StringDisplay
public _DrawLine
public _DrawRectangle
public _ReverseRectangle ;display
public _DrawPixel
public _ClearWindow
public LcdInitial
public _ClearLCD
public _WaitKeyOn ;keyboard
public _WaitKeyOff
public _GetChar
public ReadKey
public _CombFrame ;communication
public _ReceiveFrame
public _ReceiveOneByte
public _SendOneByte
public _BaudRateSet
public _ReadFlashToInterMem
public _ReadFlashToExterMem
public _InternalWriteFlash ;flash
public _ExternalWriteFlash
public _EraseBlock
public _XByteRead
public _XByteWrite
public _ReadOneXByte
public _WriteRTclock
public _ReadRTclock ;RTC
public _DelayTimes
public _EncryptorAccess
public _EncryptBusyJudg ;encrypt
public EncryptorSelfCheck
public PowerLowDec
public ShutPower ;power
public InitSystem
public BuzzerDriver
public BuzzerSelfCheck
public ChangeStatus
public ReadVersion
public _CalCheckSum ;calculate check of RAM or FLASH
public XRAM_Check
public _XromStringCompare
public _XramStringCompare
public ReadLibrary5_7
public BMP_Read
public BMP_Write
public StoreBmpHead
public _ShutPowerCheck
;========================================================================;
ORG 0000H
ljmp Start
ORG 0003h ;external interrupt 0
ljmp WorkAddress+03h
ORG 000BH ;Timer0
ljmp Timer0Server
ORG 0013H ;external interrupt 1
ljmp WorkAddress+13h
ORG 001BH ;timer 1
ljmp Timer1Server
ORG 0023H ;serial interrupt
ljmp WorkAddress+23h
ORG 002BH ;timer2 interrupt
ljmp WorkAddress+2bh
;========================================================================;
org 0030h
_StringDisplay:
ljmp _StringDisplayPro
org 0033h
_DrawLine:
ljmp _DrawLinePro
org 0036h
_DrawRectangle:
ljmp _DrawRectanglePro
org 0039h
_ReverseRectangle: ;display
ljmp _ReverseRectanglePro
org 003ch
_DrawPixel:
ljmp _DrawPixelPro
org 003fh
_ClearWindow:
ljmp _ClearWindowPro
org 0042h
LcdInitial:
ljmp LcdInitialPro
org 0045h
_WaitKeyOn: ;keyboard
ljmp _WaitKeyOnPro
org 0048h
_WaitKeyOff:
ljmp _WaitKeyOffPro
org 004bh
_GetChar:
ljmp _GetCharPro
org 004eh
ReadKey:
ljmp ReadKeyPro
org 0051h
_CombFrame: ;communication
ljmp _CombFramePro
org 0054h
_ReceiveFrame:
ljmp _ReceiveFramePro
org 0057h
_ReceiveOneByte:
ljmp _ReceiveOneBytePro
org 005ah
_SendOneByte:
ljmp _SendOneBytePro
org 005dh
_BaudRateSet:
ljmp _BaudRateSetPro
org 0060h
_ReadFlashToInterMem:
ljmp _ReadFlashToInterMemPro
org 0063h
_ReadFlashToExterMem:
ljmp _ReadFlashToExterMemPro
org 0066h
_InternalWriteFlash: ;flash
ljmp _InternalWriteFlashPro
org 0069h
_ExternalWriteFlash:
ljmp _ExternalWriteFlashPro
org 006ch
_EraseBlock:
ljmp _EraseBlockPro
org 006fh
_XByteRead:
ljmp _XByteReadPro
org 0072h
_XByteWrite:
ljmp _XByteWritePro
org 0075h
_WriteRTclock:
ljmp _WriteRTclockPro
org 0078h
_ReadRTclock: ;RTC
ljmp _ReadRTclockPro
org 007bh
_DelayTimes:
ljmp _DelayTimesPro
org 007eh
_EncryptorAccess:
ljmp _EncryptorAccessPro
org 0081h
_EncryptBusyJudg: ;encrypt
ljmp _EncryptBusyJudgPro
org 0084h
EncryptorSelfCheck:
ljmp EncryptorSelfCheckPro
org 0087h
PowerLowDec:
ljmp PowerLowDecPro
org 008ah
ShutPower: ;power
ljmp ShutPowerPro
org 008dh
InitSystem:
ljmp InitSystemPro
org 0090h
BuzzerDriver:
ljmp BuzzerDriverPro
org 0093h
BuzzerSelfCheck:
;ljmp BuzzerSelfCheckPro
org 0096h
ChangeStatus:
ljmp ChangeStatusPro
org 0099h
ReadVersion:
ljmp ReadVersionPro
org 009ch
XRAM_Check:
ljmp XRAM_CheckPro
org 009fh
_XromStringCompare:
ljmp _XromStringComparePro
org 00a2h
_XramStringCompare:
ljmp _XramStringComparePro
org 00a5h
ReadLibrary5_7:
ljmp ReadLibrary5_7Pro
org 00a8h
BMP_Read:
ljmp BMP_ReadPro
org 00abh
BMP_Write:
ljmp BMP_WritePro
org 00aeh
StoreBmpHead:
ljmp StoreBmpHeadPro
org 00b1h
_ClearLCD:
ljmp ClearLCDPro
org 00b4h
_ShutPowerCheck:
ljmp _ShutPowerCheckPro
org 00b7h
_ReadOneXByte:
ljmp _ReadOneXBytePro
org 00bah
_CalCheckSum:
ljmp _CalCheckSumPro
;========================================================================;
CPUDispVersion:
DB 97h,96h,8fh,94h,98h,80h ;[VER] ci910-V100
CPUVersion: ;CI910-V100
;DB 'C','I','9','1','0','-','V','1','0','0'
DB 8dh,90h,8ah,82h,81h,8bh,96h,82h,81h,81h
;========================================================================;
using 0 ;using bank0
;========================================================================;
Start:
mov sp,#StackPointerBot
mov ControlStatus,#ResetStatus
lcall ChangeStatusPro
lcall InitSystemPro
mov dptr,#LCD_CommandPort
mov a,#0aeh
movx @dptr,a ;LCD OFF
lcall EncryptorSelfCheckPro ;encryptor selfcheck for save power
mov r5,#50
SwitchKeyDetect:
mov r6,#0
mov r7,#10
lcall _DelayTimesPro ;delay 10ms
jb PowerSwitch,JumpToShutPower
djnz r5,SwitchKeyDetect
lcall LcdInitialPro
mov r5,#0h ;r6==data1
mov r7,#0h ;r7==Data2
lcall ClearLCDPro ;for test used
mov r5,#2
JudgEnterCPU:
clr p1.3
jb p1.1,JupmToFlash
setb p1.3
clr p1.4
jb p1.3,JupmToFlash ;branch to CPU?
orl p1,#18h
mov r6,#0
mov r7,#20
lcall _DelayTimesPro ;delay 20ms
djnz r5,JudgEnterCPU
ajmp JumpTo_CPU
JumpToShutPower:
ljmp ShutPowerPro ;shut power
JupmToFlash:
ljmp JupmToFlashPro
JumpTo_CPU:
orl p1,#1fh
mov r5,#0h ;r6==data1
mov r7,#0h ;r7==Data2
mov ie,#82h ;EA=1,ET1=0,ET0=1
orl PublicBitVal,#01h ;enable power detect
lcall ClearLCDPro
CPU_LoopIni:
mov Index,#Key1
CPU_Loop:
mov a,Index
mov b,#NoKey ;history focus
mov dptr,#MainMenu
lcall _DisplayWindow
mov Index,r7 ;save now focus
DownLoadProcess:
cjne r7,#Key1,SefCheck
mov r6,#0
mov r7,#0
lcall _WaitKeyOffPro ;WaitKeyOffPro will enable T1,So _BaudRateSetPro must after _WaitKeyOffPro
mov r7,#BaudRate57600
lcall _BaudRateSetPro
lcall Communication ;communication
lcall InitSystemPro
ljmp JumpTo_CPU ;modified 2003.01.19
SefCheck:
cjne r7,#Key2,JumpToFlashJudg
lcall SelfCheck ;self check
ljmp CPU_Loop
JumpToFlashJudg:
cjne r7,#KeyClear,CPU_Loop
mov r7,#7 ;X1
mov r5,#35 ;Y1
mov r3,#120 ;X2
mov PublicVariable1,#90 ;Y2
mov PublicVariable2,#(ColorBlack or (ColorDarkGray shl 3) or 20h) ;Display mode
lcall _DrawRectanglePro
mov b,#5
mov r5,#56 ;Y
mov r7,#37 ;X
mov dptr,#ExitSetupInf
lcall DisplayString
mov r6,#0
mov r7,#200 ;10 second limited
mov r5,#1 ;buzzer enable
lcall _GetCharPro
cjne r7,#KEYENTER,CPU_LoopIni ;key enter jump to FLASH
JupmToFlashPro:
orl p1,#18h
orl a,#1fh
mov WatchDogCounter,#1
mov tl1,#0ffh
mov th1,#0a3h ;timer1 setup for 100us(11.0592Mhz)
mov ie,#8ah ;EA=1,ET1=1,ET0=1,enable watchdog for system detect "No FLASH program errors"
ljmp WorkAddress
;========================================================================;
DisplayString:
lcall MemoryCopy
mov r2,#HIGH(ExternTempBuffer) ;pointer(MSB)
mov r3,#LOW(ExternTempBuffer) ;pointer(LSB)
mov PublicVariable1,b
mov PublicVariable2,#03h ;display color
mov PublicVariable3,#41h ;library select
lcall _StringDisplayPro ;exit setup?
ret
;========================================================================;
;void LcdInitial(void);
;-------------------------------;
;Description: Initilization LCD process
; IN: No
; OUT: No
; USE: A,R6,R7,DPTR
;-------------------------------;
LcdInitialPro:
mov dptr,#LCD_CommandPort
mov a,#0e2h
movx @dptr,a ;LCD software reset
mov a,#0abh
movx @dptr,a ;start internal oscillator
mov a,#0e0h
movx @dptr,a ;set modify-read mode
mov a,#93h
movx @dptr,a ;set PWM and FRC for gray-scale operation
mov r7,#2
mov r6,#88h
SetDarkModeLoop:
mov a,r6
inc r6
movx @dptr,a
mov a,#0ffh
movx @dptr,a ;set dark mode
djnz r7,SetDarkModeLoop
mov r7,#2
mov r6,#8ah
SetDarkGrayModeLoop:
mov a,r6
inc r6
movx @dptr,a
mov a,#0cch
movx @dptr,a ;set dark gray mode
djnz r7,SetDarkGrayModeLoop
mov r7,#2
mov r6,#8ch
SetLightGrayModeLoop:
mov a,r6
inc r6
movx @dptr,a
mov a,#058h
movx @dptr,a ;set light gray mode
djnz r7,SetLightGrayModeLoop
mov r7,#2
mov r6,#8eh
SetWhiteModeLoop:
mov a,r6
inc r6
movx @dptr,a
mov a,#11h
movx @dptr,a ;set white mode
djnz r7,SetWhiteModeLoop
mov a,#40h
movx @dptr,a ;set column MSB
mov a,#00h
movx @dptr,a ;set column LSB
mov a,#44h
movx @dptr,a
mov a,#00h
movx @dptr,a ;set COM0
mov a,#48h
movx @dptr,a
mov a,#80h
movx @dptr,a ;set multiply ratio
mov a,#4ch
movx @dptr,a
mov a,#00h
movx @dptr,a ;set N-line inversion
mov a,#0a7h
movx @dptr,a ;set normal display
mov a,#0a4h
movx @dptr,a ;set entire display off
mov a,#02fh
movx @dptr,a ;set voltage control
mov a,#065h
movx @dptr,a ;set boost level
mov a,#027h
movx @dptr,a ;set internal resistor ratio
mov a,#081h
movx @dptr,a
mov a,#02eh
movx @dptr,a ;set contrast level
mov a,#057h
movx @dptr,a ;set LCD bias
mov a,#0c8h
movx @dptr,a ;set COM scan direction
mov a,#0a1h
movx @dptr,a ;set segment re-map
mov a,#0f1h
movx @dptr,a
mov a,#0fh
movx @dptr,a ;set temperature compesation
mov a,#0afh
movx @dptr,a ;set display on
ret
;========================================================================;
;void ClearLCD(uchar Data1,uchar Data2);
;-------------------------------;
;Description: Clear LCD process
; IN: R5==Data 1
; R7==Data 2
; OUT: No
; USE: No
;-------------------------------;
ClearLCDPro:
push AR6
push AR4
mov r6,#0b0h ;page
LCD_PageLoop1:
mov dptr,#LCD_CommandPort
mov a,r6
movx @dptr,a ;write page address
clr a
movx @dptr,a ;write column address LSB
mov a,#10h
movx @dptr,a ;write column address MSB
mov r4,#128
mov dptr,#LCD_DataPort
WriteColumnLoop1:
mov a,r5
movx @dptr,a ;write data1
mov a,r7
movx @dptr,a ;write data2
djnz r4,WriteColumnLoop1
inc r6
cjne r6,#0c0h,LCD_PageLoop1
pop AR4
pop AR6
ret
;========================================================================;
DisplayConfig:
mov AddressRegL,#00h
mov AddressRegH,#00h ;external library address
mov a,PublicVariable2
jnb acc.2,NormalDispaly
xrl PublicVariable2,#03h ;reversal display color
NormalDispaly:
swap a
anl a,#0fh
mov CharInterval,a ;dispaly character interval
mov a,PublicVariable2
anl a,#03h
clr c
rlc a ;*2
mov b,a
mov dptr,#ColorGroundTab
movc a,@a+dptr
mov r3,a ;foregroud color1
mov a,b
inc a
movc a,@a+dptr
mov PublicVariable2,a ;foregroud color2
cjne r7,#0ffh,DisplayGetY ;r7==0xff x display center
mov r7,PublicVariable1 ;copy length
mov dpl,r3
mov dph,r2
mov b,#0
GetLength:
inc b
movx a,@dptr
cjne a,#0a0h,JudgCharCode
JudgCharCode:
jc GetLengthCon
inc b
GetLengthCon:
djnz r7,GetLength
mov a,#6 ;column number
mul ab
clr c
rrc a ;/2
cpl a
add a,#1
add a,#64 ;64-a
mov r7,a ;X=(128-Length*Col)/2
DisplayGetY:
clr TempBit3 ;no use background color
mov a,PublicVariable3
jnb acc.6,DisplayGetYProcess
mov a,PublicVariable3
swap a
anl a,#03h
clr c
rlc a ;*2
mov b,a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -