📄 sn8p1917_test.asm
字号:
ICE_Mode EQU 1
CHIP sn8p1917
//{{SONIX_CODE_OPTION
.Code_Option High_Clk IHRC
.Code_Option Security Enable
.Code_Option Int_16K_RC Always_ON
.Code_Option Low_Power Enable
.Code_Option Watch_Dog Enable
; .Code_Option Low_Power Enable
; .Code_Option TC0_Counter 8-Bit
; .Code_Option TC1_Counter 8-Bit
; .Code_Option Noise_Filter Enable
;; .Code_Option OSG Enable
; .Code_Option High_Clk 4M_X'tal
; .Code_Option High_Clk/2 Enable
; .Code_Option Security Enable
; .Code_Option Int_16K_RC Always_ON
; .Code_Option Watch_Dog Enable
//}}SONIX_CODE_OPTION
.DATA
;===============================;
; 常量定义 ;
;===============================;
; 硬件结构 ;
;===============================;
; 寄存器定义 ;
;===============================;
ACCBUF DS 1 ;
AINCNT DS 1 ;
AINBUFF0_H DS 1 ;
AINBUFF1_H DS 1 ;
AINBUFF2_H DS 1 ;
AINBUFF3_H DS 1 ;
AINBUFF4_H DS 1 ;
AINBUFF0_L DS 1 ;
AINBUFF1_L DS 1 ;
AINBUFF2_L DS 1 ;
AINBUFF3_L DS 1 ;
AINBUFF4_L DS 1 ;
AINBUFF_H DS 1 ;
AINBUFF_L DS 1 ;
R0 DS 1 ;
R1 DS 1 ;
R2 DS 1 ;
R3 DS 1 ;
RUN5MS DS 1 ;
FLAG10H DS 1 ;
FLAG11H DS 1 ;
UPDATATIME DS 1 ;
DISBUFF0 DS 1 ;
DISBUFF1 DS 1 ;
DISBUFF2 DS 1 ;
DISBUFF3 DS 1 ;
DISBUFF4 DS 1 ;
DISBUFF5 DS 1 ;
DISBUFF6 DS 1 ;
m_AdValueLsb DS 1
m_AdValueMsb DS 1
m_AdValueHsb DS 1
m_AdScanCnt DS 1
;===============================;
; 标志寄存器定义 ;
;===============================;
PFLAGMS500 EQU FLAG11H.0;
includeSTD macro1.h
includeSTD macro2.h
includeSTD macro3.h
include 1917Ev.h
.CODE
ORG 0H
JMP START
ORG 08H
JMP INT_PROC
ORG 10
; include LCD.asm
INT_PROC:
B0XCH A,ACCBUF ;推入A
B0BTS0 FT0IRQ ;
JMP INT_T0 ;
INT_T0:
B0BCLR FT0IRQ ;
MOV A,#02H ;
XOR P1,A ;
B0BSET PFLAGMS500 ;
MOV A,#01H ;
XOR DISBUFF1,A ;
INTOUT:
B0XCH A,ACCBUF ;推出A
RETI ;
;===============================;
LEDTABLE: ;dcba egfx
DW 00FAH ;0
DW 0060H ;1
DW 00BCH ;2
DW 00F4H ;3
DW 0066H ;4
DW 00D6H ;5
DW 00DEH ;6
DW 0070H ;7
DW 00FEH ;8
DW 00F6H ;9
DW 00F6H ;A
DW 00CEH ;B
DW 009AH ;C
DW 00ECH ;D
DW 009EH ;E
DW 001EH ;F
START:
b0bset FLCDENB
call SYSINITE ;
CALL INITE ;
INIT_1917EV ;for ICE mode
MOV A,#0F4H ;
B0MOV DISBUFF0,A ;
B0MOV DISBUFF1,A ;
B0MOV DISBUFF2,A ;
; B0MOV DISBUFF3,A ;
; B0MOV DISBUFF4,A ;
; B0MOV DISBUFF5,A ;
MOV A,#04 ;
B0MOV m_AdScanCnt,A ;
clr m_AdValueHsb
clr m_AdValueMsb
clr m_AdValueLsb
MAIN:
CALL LCDUPDATA ;LCD显示
CALL ADC16BITSUB ;ADC采集
JMP MAIN ;
;===============================;
; LCD驱动 ;
;===============================;
LCDUPDATA:
MOV A,RUN5MS ;
SUB A,UPDATATIME ;
SUB A,#17 ;
B0BTS1 FC ;
JMP LCDUPDATAOUT ;
MOV A,RUN5MS ;
B0MOV UPDATATIME,A ;
; B0BCLR FP2SEG ;
B0BCLR FLCDBIAS ;1/2BIAS
B0BSET FLCDENB ;
MOV A,#15 ;
B0MOV Y,A ;
CLR Z ;
MOV A,DISBUFF0 ;
B0MOV @YZ,A ;
incms z ;
SWAP DISBUFF0 ;
AND A,#0FH ;去掉高四位,可有可无
B0MOV @YZ,A ;
INCMS Z ;
MOV A,DISBUFF1 ;
B0MOV @YZ,A ;
incms z ;
SWAP DISBUFF1 ;
AND A,#0FH ;
B0MOV @YZ,A ;
INCMS Z ;
MOV A,DISBUFF2 ;
B0MOV @YZ,A ;
incms z ;
SWAP DISBUFF2 ;
AND A,#0FH ;
B0MOV @YZ,A ;
INCMS Z ;
MOV A,DISBUFF3 ;
B0MOV @YZ,A ;
incms z ;
SWAP DISBUFF3 ;
B0MOV @YZ,A ;
INCMS Z ;
MOV A,DISBUFF4 ;
B0MOV @YZ,A ;
incms z ;
SWAP DISBUFF4 ;
B0MOV @YZ,A ;
INCMS Z ;
MOV A,DISBUFF5 ;
B0MOV @YZ,A ;
incms z ;
SWAP DISBUFF5 ;
B0MOV @YZ,A ;
CLR Y ;
LCDUPDATAOUT:
RET ;
;===============================;
; 16位ADC ;
;===============================;
ADC16BITSUB:
B0BSET FWDRST ;
B0BTS1 PFLAGMS500 ;
JMP ADC16BITSUBOUT ;
B0BCLR PFLAGMS500 ;
mov A,#04H // CHARGE PUMP ALWAYS ON
XMOV CPM,A
mov A,#156 // SET CP WORKING CLOCK = 20K AT 4M X`tal
XMOV CPCKS, A
xb0bset FCPRENB // ENABLE CPR
CALL DELAY100US ;
// mov A,#16H // DISABLE PGIA FUNCTION, SET GAIN T0 128 AND SET FDS AT ALL TIME
// mov A,#14H // DISABLE PGIA FUNCTION, SET GAIN T0 64 AND SET FDS AT ALL TIME
mov A,#12H // DISABLE PGIA FUNCTION, SET GAIN T0 32 AND SET FDS AT ALL TIME
XMOV AMPM,A
mov A,#131 // SET PGIA WORKING CLOCK TO 4KHZ AT 4M X`tal
XMOV AMPCKS,A
mov A,#01H // SELECT CHANNEL 0 (AI2+ AI2-)
XMOV AMPCHS,A
xb0bset FAMPENB // ENABLE PGIA
mov A,#04H // SELECT 2.4R+ 1.2R-
XMOV ADCM,A
mov A,#231 // SET ADC WORKING CLOCK TO 80KHZ AT 4M X`tal
XMOV ADCKS,A
mov A,#00H // ADC WORKING IN CONTINUOUS MODE AND SET OUTPUT RATE = 25HZ AT 80KHZZA
XMOV DFM,A
Xb0bclr FDRDY
xb0bset FADCENB // ENABLE ADC
@@:
Xb0bts1 FDRDY ; Check ADC output new data or not
jmp @B ; Wait for Bit DRDY = 1
Xb0bclr FDRDY
B0MOV Z,#AINBUFF0_H ;
MOV A,AINCNT ;
ADD Z,A ;
XMOV A,ADCDH ;
B0MOV @YZ,A ;
CLR Y ;
B0MOV Z,#AINBUFF0_L ;
MOV A,AINCNT ;
ADD Z,A ;
XMOV A,ADCDL ;
B0MOV @YZ,A ;
INCMS AINCNT ;
MOV A,AINCNT ;
SUB A,#05 ;
B0BTS1 FC ;
JMP ADC16BITSUBOUT ;
CLR AINCNT ;
CALL ADTAXIS ;
XMOV A,ADCDH ;
B0MOV AINBUFF_H,A ;
XMOV A,ADCDL ;
B0MOV AINBUFF_L,A ;
MOV A,#LEDTABLE$M ;
B0MOV Y,A ;
MOV A,#LEDTABLE$L ;
B0MOV Z,A ;
MOV A,AINBUFF2_H ;
ADD Z,A ;
MOVC ;
B0MOV DISBUFF0,A ;
MOV A,AINBUFF2_L ;
AND A,#0FH ;
B0MOV R0,A ;
SWAP AINBUFF2_L ;
AND A,#0FH ;
B0MOV R1,A ;
MOV A,#LEDTABLE$M ;
B0MOV Y,A ;
MOV A,#LEDTABLE$L ;
B0MOV Z,A ;
MOV A,R1 ;
ADD Z,A ;
MOVC ;
B0MOV DISBUFF1,A ;
MOV A,#LEDTABLE$M ;
B0MOV Y,A ;
MOV A,#LEDTABLE$L ;
B0MOV Z,A ;
MOV A,R0 ;
ADD Z,A ;
MOVC ;
B0MOV DISBUFF2,A ;
NOP
ADC16BITSUBOUT:
RET ;
;===============================;
DELAY100US:
MOV A,#100 ;
B0MOV R0,A ;
@@:
JMP $+1 ;
DECMS R0 ;
JMP @B ;
RET ;
;===============================;
; 数据初始化 ;
;===============================;
INITE:
RET ;
;===============================;
; 系统初始化 ;
;===============================;
SYSINITE:
clr OSCM
clr INTEN // TO DISABLE B0:INT0 B1:INT1 B3:SIO B4:T0 B5:TC0 B6:TC1
clr INTRQ // TO CLEAR ALL REQUEST FLAGS
CLR Y ;
MOV A,#127 ;
B0MOV Z,A ;
@@:
CLR @YZ ;CLEAR RAM
DECMS Z ;
JMP @B ;
CLr @YZ ;
MOV A,#15 ;CLEAR LCD RAM
B0MOV Y,A ;
MOV A,#12 ;
B0MOV Z,A ;
@@:
CLR @YZ ;
DECMS Z ;
JMP @B ;
CLR @YZ ;
NOP
CLR Y ;
CLR P1 ;
MOV A,#0FFH ;
B0MOV P1M,A ;设P1口为输出模式
; MOV A,#00H // SET P5.0~2 TO GENERAL PURPOSE PORT
; B0MOV SIOM,A
;===========T0中断==============;
; mov A,#00H // 0.5 second
; b0mov OPTION,A
mov A,#0 // real time
b0mov T0M,A
b0bset FT0IEN // TO ENABLE T0 INTERRUPT
b0bset FT0ENB // TO ENABLE T0 RUN
;===============================;
include 1917Ev.asm
endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -