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

📄 ram.asm

📁 基本完成迷控制算法
💻 ASM
字号:
;************************************************
;        Main Program Data Define               *
;************************************************
.data
;===================Pin Difinition====================
;Key
	@key1_p		equ	p2.0	;	|
	@key1m_p	equ	p2m.0	;	|
	@key2_p		equ	p2.1	;	|
	@key2m_p	equ	p2m.1	;	|
	@key3_p		equ	p2.2	;	|
	@key3m_p	equ	p2m.2	;	|
	@key4_p		equ	p2.3	;	|
	@key4m_p	equ	p2m.3	;	|
	@key5_p		equ	p2.4	;	|
	@key5m_p	equ	p2m.4	;	|
	@key6_p		equ	p2.5	;	|
	@key6m_p	equ	p2m.5	;	|
	@key7_p		equ	p2.6	;	|
	@key7m_p	equ	p2m.6	;	|
	@key8_p		equ	p2.7	;	|
	@key8m_p	equ	p2m.7	; 	|
;RF remote pin
	O_RFremote	equ	p1.0
	Om_RFremote	equ	p1m.0
;=============== Usual work register =================
ID_code_val	equ	#11000000b	;Note:bit[5..0]==000000,bit6 and bit7 can self select
remote_rambuf	ds	1
;RF remote
RF_pilot_Lval	equ	#1	;
RF_pilot_Hval	equ	#16	;
RF_bit0_Lval	equ	#2	;
RF_bit0_Hval	equ	#2	;
RF_bit1_Lval	equ	#4	;
RF_bit1_Hval	equ	#4	;
RF_stop_Lval	equ	#0	;
RF_stop_Hval	equ	#0	;
RF_databit_val	equ	#8	;

RF_remotecountH	ds	1
RF_remotecountL	ds	1
RF_remotedata_val	ds	2
RF_databit_count	ds	1
RF_remote_mode		ds	1
;	1 = remote pilot, 2 = remote data, 3 = remote stop bit
RF_flag	ds	1
	RF_remotestart_f	equ	RF_flag.0	;1==satart remote
	RF_remoteover_f		equ	RF_flag.1	;1==remote temp over
	RF_remotefinish_f	equ	RF_flag.2	;1==remote finish
	RF_remotelevel_f	equ	RF_flag.3	;control output 0/1
;Key scanning
	@key_num	equ	8	; 
	@debounce_num	equ	#5	; debounce time = xx * Systime base
	@keystate_set	equ	0	; 0: Low voltage detect ; 1: High voltage detect
	@key_power_set	equ	0	; 0: Don't care power ; 1 : care power	
@keyinbuf	ds	1	; store the temp key state when scanning
@keychkbuf 	ds	1  	; store the key state    
@keycvtbuf	ds	1
@keyoldbuf	ds	1      
@keyflag	ds	1 
	@keydown_f	equ	@keyflag.0
	have_key	equ	@keyflag.1
@keychat	ds	1
@aplcode	ds	1 
;================ Temp work register =================
wk00	ds	1	; Temp Register
;wk01	ds	1	;	X
;wk02	ds	1	;	X
;wk03	ds	1	;	X
;wk04	ds	1	;	X
;wk05	ds	1	;	X
;wk06	ds	1	;	X
;wk07	ds	1	;	X
;wk08	ds	1	;	X
;wk09	ds	1	;	X
;wk10	ds	1	;	X
;wk11	ds	1	;	X
;wk12	ds	1	; Temp Register
;============================= Clear Ram =============================
	@Rambank0	equ	1	; 0: No bank0  ; 1: Have bank0
	@Rambank1	equ	0	; 0: No bank1  ; 1: Have bank1
	@Rambank2	equ	0	; 0: No bank2  ; 1: Have bank2
	@Rambank3	equ	0	; 0: No bank3  ; 1: Have bank3
	@Rambank4	equ	0	; 0: No bank4  ; 1: Have bank4
	@Rambank15	equ	0	; 0: No bank15 ; 1: Have bank15
if @Rambank0 == 1
	@Rambank0_val	equ	#48	; xx= 2fh,3fh,7fh...
endif
if @Rambank1 == 1
	@Rambank1_val	equ	#xxh	; xx= 2fh,3fh,7fh...
endif
if @Rambank2 == 1
	@Rambank2_val	equ	#xxh	; xx= 2fh,3fh,7fh...
endif
if @Rambank3 == 1
	@Rambank3_val	equ	#xxh	; xx= 2fh,3fh,7fh...
endif
if @Rambank4 == 1
	@Rambank4_val	equ	#xxh	; xx= 2fh,3fh,7fh...
endif
if @Rambank15 == 1
	@Rambank15_val	equ	#xxh	; xx= 1fh...
endif
;============================ Application =============================
; Power down	
@Powerdown_set	equ	0	; 0: System not powerdown ; 1: System will power down
; Green mode
@GreenMode_set	equ	0	; 0: System not Greenmode ; 1: System will Greenmode
; Oscm setting
@Oscm_set	equ	#01000000b
; Pedge setting			; 0: Not use pedge register
@Pedge_set	equ	0	; 1: Wakeup by low level ; 2: Wakeup by falling edge
				; 3: Wakeup by rising edge ; 4: Wakeup by change triggle
	IF @Pedge_set != 0
		@Pedge_low_val	equ	#00000000b
		@Pedge_fall_val	equ	#10001000b
		@Pedge_rise_val	equ	#10010000b
		@Pedge_triggle_val	equ	#10011000b
	ENDIF
; A/D setting
@ADappl_set	equ	0	; 0: Not use A/D ; 1: Use A/D
 	IF @ADappl_set == 1
;		@ADM_set	equ	#xxxx1xxxb
		@ADLEN_set	equ	xx	; 0=8bit A/D ; 1=12bit A/D
		@ADCKS_set	equ	xx	; 0=Fcpu/16 ; 1=Fcpu/8 
		@AD0_setval	equ	#11011000b
		@AD1_setval	equ	#11011001b
		@AD2_setval	equ	#11011010b
		@AD3_setval	equ	#11011011b
		@AD4_setval	equ	#11011100b
		@AD5_setval	equ	#11011101b
		@AD6_setval	equ	#11011110b
		@AD7_setval	equ	#11011111b
		@AD_overval	equ	#00000000b
	  IF @ADLEN_set == 1
		@advalueH	ds	1
		@advalueL	ds	1
	  ELSE
		@advalue	ds	1
	  ENDIF
       ENDIF
; D/A setting
@DAappl_set	equ	0	; 0: Not use D/A ; 1: Use D/A
; LCD display
@Lcdappl_set	equ	0	; 0: Not use Lcd driver ; 1: Use Lcd driver
	IF @Lcdappl_set == 1
		@Lcdm_set	equ	#11x1x1xxb
;bit0: RCLK	0: crystal 32.768KHz / 1: RC
;bit1: P3LCD	0: LCD segment / 1: input and pull up registor
		@RCLK_set	equ	xx	; 0: crystal 32.768KHz / 1: RC
		@P3LCD_set	equ	xx	; 0: LCD segment / 1: input and pull up registor
	ENDIF
;============================== IO port ===============================
	@ChipP0		equ	1	; 1: P0 exist , 0: P0 not exist
	@ChipP1		equ	1	; 1: P1 exist , 0: P1 not exist
	@ChipP2		equ	1	; 1: P2 exist , 0: P2 not exist
	@ChipP3		equ	0	; 1: P3 exist , 0: P3 not exist
	@ChipP4		equ	0	; 1: P4 exist , 0: P4 not exist
	@ChipP5		equ	0	; 1: P5 exist , 0: P5 not exist
	@ChipP6		equ	0	; 1: P6 exist , 0: P6 not exist
	@ChipP7		equ	0	; 1: P7 exist , 0: P7 not exist

;Pur register Set/Port Value Set/IO direction Set
	@Purmode	equ	2	; 0=No Pur register ; 1=Bit set ; 2=Port set 
;----------------------------------------------	
 IF @Purmode == 2
 	@Pur_set	equ	00000101b       ; Ex. 00110001b --> p0UR&p4UR&p5UR=1
 ENDIF
;----------------------------------------------	
 IF @ChipP0 == 1
      IF @Purmode == 1
 	@P0ur_set	equ	#xxxxxxxxb
      ENDIF
 ENDIF	
;--------------
 IF @ChipP1 == 1
	@p1set	equ	#0	; In/Output value
	@p1Wset	equ	#0	; 0: No wakeup / 1: Wakeup
	@p1Mset	equ	#00000001b	; 0: Input     / 1: Output
      IF @Purmode == 1
 	@p1ur_set	equ	#xxxxxxxxb
      ENDIF
 ENDIF
;--------------
 IF @ChipP2 == 1
	@p2set	equ	#11111111b	; In/Output value
	@p2Mset	equ	#00000000b	; 0: Input / 1: Output
      IF @Purmode == 1
 	@p2ur_set	equ	#xxxxxxxxb
      ENDIF
 ENDIF
;--------------
 IF @ChipP3 == 1
	@p3set	equ	#xxxxxxxxb	; In/Output value
	@p3Mset	equ	#xxxxxxxxb	; 0: Input / 1: Output
      IF @Purmode == 1
 	@p3ur_set	equ	#xxxxxxxxb
      ENDIF
 ENDIF
;--------------
 IF @ChipP4 == 1
	@p4set	equ	#xxxxxxxxb	; In/Output value
	@p4Mset	equ	#xxxxxxxxb	; 0: Input / 1: Output
      IF @Purmode == 1
 	@p4ur_set	equ	#xxxxxxxxb
      ENDIF
 ENDIF
;--------------
 IF @ChipP5 == 1
	@p5set	equ	#xxxxxxxxb	; In/Output value
	@p5Mset	equ	#xxxxxxxxb	; 0: Input / 1: Output
      IF @Purmode == 1
 	@p5ur_set	equ	#xxxxxxxxb
      ENDIF
 ENDIF
;--------------
 IF @ChipP6 == 1
	@p6set	equ	#xxxxxxxxb	; In/Output value
	@p6Mset	equ	#xxxxxxxxb	; 0: Input / 1: Output
      IF @Purmode == 1
 	@p6ur_set	equ	#xxxxxxxxb
      ENDIF
 ENDIF
;--------------
 IF @ChipP7 == 1
	@p7set	equ	#xxxxxxxxb	; In/Output value
	@p7Mset	equ	#xxxxxxxxb	; 0=Input / 1=Output
      IF @Purmode == 1
 	@p7ur_set	equ	#xxxxxxxxxb
      ENDIF
 ENDIF
;===================== Interrupt data Define ======================
accbuf		ds	1
pflagbuf	ds	1
;ybuf		ds	1
;zbuf		ds	1
;rbuf		ds	1
;xbuf		ds	1
;hbuf		ds	1
;lbuf		ds	1	
intwk00		ds	1               ;interrupt work register0
;intwk01	ds	1               ;interrupt work register1
;intwk02	ds	1               ;interrupt work register2
;intwk03	ds	1               ;interrupt work register3
;intwk04	ds	1		;interrupt work register4
	@ChipP00INT	equ	0	; 1: P00INT exist , 0: P00INT don't care
	@ChipP01INT	equ	0	; 1: P00INT exist , 0: P00INT don't care
	@ChipP02INT	equ	0	; 1: P00INT exist , 0: P00INT don't care
	@ChipT0INT	equ	0	; 1: T0INT  exist , 0: T0INT  don't care
	@ChipSIOINT	equ	0	; 1: SIOINT exist , 0: SIOINT don't care
	@ChipTC0INT	equ	1	; 1: TC0INT exist , 0: TC0INT don't care
	@ChipTC1INT	equ	0	; 1: TC1INT exist , 0: TC1INT don't care
	@ChipADCINT	equ	0	; 1: ADINT  exist , 0: ADINT  don't care
;====================== Interrupt Interface data define =====================
 IF @ChipSIOINT == 1
 		@Siom_set	equ	#xxxx1xxxb
 ENDIF
	
@Systimer_set   equ   2   ;0: No system time base/1: T0 time base/2: Tc0 time base/3: Tc1 time base
	
 IF @Systimer_set != 0
	@intgnd	ds	1		;INT interface register
 ENDIF
		@SysT0	equ	0	; 1: Use T0  / 0: Not use T0
		@SysTc0	equ	1	; 1: Use Tc0 / 0: Not use Tc0
		@SysTc1	equ	0	; 1: Use Tc1 / 0: Not use Tc1	
							
 IF @SysT0==1
	@SysT0c		equ	#xxh	; set Pre-scalar=fcpu/
	@SysT0m		equ	#xxh	; set count steps
 ENDIF
 IF @SysTc0==1
 	@SysTc0c	equ	#06h	; set Pre-scalar=fcpu/
 	@SysTc0m	equ	#70h	; set count steps 250us
 	@SysTc0R_set	equ	0	; 1: Use Tc0R / 0: Not use TC0R				
 ENDIF
 IF @SysTc1==1
 	@SysTc1c	equ	#xxh	; set Pre-scalar=fcpu/
 	@SysTc1m	equ	#xxh	; set count steps
 	@SysTc1R_set	equ	0	; 1: Use Tc1R / 0: Not use TC1R	
 ENDIF
 
 IF @Systimer_set != 0
IRQ=0
	@Sys5msIRQ	equ	@intgnd.IRQ    ;IRQ 5ms flag
;IRQ=IRQ+1
	;@Sys10msIRQ	equ	@intgnd.IRQ    ;IRQ 10ms flag
IRQ=IRQ+1
	@Sys50msIRQ	equ	@intgnd.IRQ    ;IRQ 50ms flag
;IRQ=IRQ+1
	;@Sys100msIRQ	equ	@intgnd.IRQ    ;IRQ 100ms flag
;IRQ=IRQ+1
	;@Sys200msIRQ	equ	@intgnd.IRQ    ;IRQ 200ms flag
;IRQ=IRQ+1
	;@Sys300msIRQ	equ	@intgnd.IRQ    ;IRQ 300ms flag
;IRQ=IRQ+1
	;@Sys400msIRQ	equ	@intgnd.IRQ    ;IRQ 400ms flag
;IRQ=IRQ+1
	;@Sys500msIRQ	equ	@intgnd.IRQ    ;IRQ 500ms flag
;IRQ=IRQ+1
	;@Sys600msIRQQ	equ	@intgnd.IRQ    ;IRQ 600ms flag
;IRQ=IRQ+1
	;@Sys700msIRQ	equ	@intgnd.IRQ    ;IRQ 700ms flag
;IRQ=IRQ+1
	;@Sys800msIRQ	equ	@intgnd.IRQ    ;IRQ 800ms flag
;IRQ=IRQ+1
	;@Sys900msIRQ	equ	@intgnd.IRQ    ;IRQ 900ms flag
;IRQ=IRQ+1
	;@Sys1sIRQ	equ	@intgnd.IRQ    ;IRQ 1000ms flag
;IRQ=IRQ+1
	;@Sys5sIRQ	equ	@intgnd.IRQ    ;IRQ 5000ms flag
;IRQ=IRQ+1
	;@Sys10sIRQ	equ	@intgnd.IRQ    ;IRQ 10000ms flag
;IRQ=IRQ+1
	;@Sys30sIRQ	equ	@intgnd.IRQ    ;IRQ 30000ms flag
;IRQ=IRQ+1
	;@Sys60sIRQ	equ	@intgnd.IRQ    ;IRQ 60000ms flag
;IRQ=IRQ+1
	;@Sys300sIRQ	equ	@intgnd.IRQ    ;IRQ 300000ms flag

    IFDEF @Sys10msIRQ
	@Sys10msC	ds	1               ;count for 10ms INT
		@Sys10msStep	equ	#2      ;count step of 5ms INT
    ENDIF

    IFDEF @Sys50msIRQ
	@Sys50msC	ds	1               ;count for 50ms INT
		@Sys50msStep	equ	#10     ;count step of 5ms INT
    ENDIF

    IFDEF @Sys100msIRQ
	@Sys100msC       ds      1               ;count for 100ms INT
		@Sys100msStep    equ     #20     ;count step of 5ms INT
    ENDIF

    IFDEF @Sys200msIRQ
	@Sys200msC       ds      1               ;count for 200ms INT
		@Sys200msStep    equ     #40     ;count step of 5ms INT
    ENDIF

    IFDEF @Sys300msIRQ
	@Sys300msC       ds      1               ;count for 300ms INT
		@Sys300msStep    equ     #60     ;count step of 5ms INT
    ENDIF

    IFDEF @Sys400msIRQ
	@Sys400msC       ds      1               ;count for 400ms INT
		@Sys400msStep    equ     #80     ;count step of 5ms INT
    ENDIF

    IFDEF @Sys500msIRQ
	@Sys500msC       ds      1               ;count for 500ms INT
		@Sys500msStep    equ     #100    ;count step of 5ms INT
    ENDIF

    IFDEF @Sys600msIRQQ
	@Sys600msC       ds      1               ;count for 600ms INT
		@Sys600msStep    equ     #120    ;count step of 5ms INT
    ENDIF

    IFDEF @Sys700msIRQ
	@Sys700msC       ds      1               ;count for 700ms INT
		@Sys700msStep    equ     #140    ;count step of 5ms INT
    ENDIF

    IFDEF @Sys800msIRQ
	@Sys800msC       ds      1               ;count for 800ms INT
		@Sys800msStep    equ     #160    ;count step of 5ms INT
    ENDIF

    IFDEF @Sys900msIRQ
	@Sys900msC       ds      1               ;count for 900ms INT
		@Sys900msStep    equ     #180    ;count step of 5ms INT
    ENDIF

    IFDEF @Sys1sIRQ
	@Sys1sC          ds      1               ;count for 1s INT
		@Sys1sStep       equ     #200    ;count step of 5ms INT
    ENDIF

    IFDEF @Sys5sIRQ
	@Sys5sC          ds      2	        ;count for 5s INT
		@Sys5sStepH      equ     #3+1    ;count step of 1160ms INT
		@Sys5sStepL      equ     #232    ;count step of 5ms INT
    ENDIF

    IFDEF @Sys10sIRQ
	@Sys10sC         ds      2               ;count for 10s INT
		@Sys10sStepH     equ     #7+1    ;count step of 1040ms INT
		@Sys10sStepL     equ     #208    ;count step of 5ms INT
    ENDIF

    IFDEF @Sys30sIRQ
	@Sys30sC         ds      2               ;count for 30s INT
		@Sys30sStepH     equ     #23+1   ;count step of 560ms INT
		@Sys30sStepL     equ     #112    ;count step of 5ms INT
    ENDIF

    IFDEF @Sys60sIRQ
	@Sys60sC          ds      2              ;count for 60s INT
		@Sys60sStepH      equ     #46+1  ;count step of 1120ms INT
		@Sys60sStepL      equ     #224   ;count step of 5ms INT
    ENDIF

    IFDEF @Sys300sIRQ
	@Sys300sC          ds      2             ;count for 300s INT
		@Sys300sStepH      equ    #234+1 ;count step of 480ms INT
		@Sys300sStepL      equ    #96    ;count step of 5ms INT
    ENDIF
 ENDIF
;Others
bit0		equ	0
bit1		equ	1
bit2		equ	2
bit3		equ	3
bit4		equ	4
bit5		equ	5
bit6		equ	6
bit7		equ	7

⌨️ 快捷键说明

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