OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3451|回复: 2

分享一个自制编译器生成的汇编代码(九齐NY8),已经过实战检验

[复制链接]

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2018-9-8 18:16:39 | 显示全部楼层 |阅读模式
#include NY8A051B.h

;宏定义,F S 两页的变量请不要定义标志位
#define C 0
#define Z 2
#define FC STATUS,C
#define FZ STATUS,Z
#define MIN_VAR_ADDR 0X10
#define MAX_VAR_ADDR 0X3F
#define SLEEP_EN FLAG,0
#define TICK FLAG,1
#define TMR0_INIT_VAL 162
#define TMR1_INIT_VAL 250
#define T0EN PCON1,0
#define T0IE INTE,0
#define T0IF INTF,0
#define T1IF INTF,3
#define T1IE INTE,3
#define WDTEN PCON,7;看门狗使能位
#define EXTIE PCON,6;外部中断,PB0引脚中断允许位
#define PORTBIE INTE,1ORTB 电平变化中断使能位
#define WDTIE INTE,6;看门狗 中断使能位
#define INTIE INTE,2;INT 中断使能位,软中断,一般不使用,中断向量 ORG 1
#define MAXV 100
#define LEDR PORTB,0
#define LEDG PORTB,1
#define LEDB PORTB,2
;button init val
#define PB_INIT_VAL 0X00
#define PBK 4
#define PB_INPUT 1<<BK
#define GETKEY PORTB,PBK
#define WAKEUP_KEY 1<<BK
;-------------->;变量定义
;-------------->ORG 0X10
;-------------->COPYA COPYS US100 MS MS10 STATE
COPYA EQU 0X10
COPYS EQU 0X11
US100 EQU 0X12
MS EQU 0X13
MS10 EQU 0X14
STATE EQU 0X15
;-------------->FLAG TIMER TIMERA EVN
FLAG EQU 0X16
TIMER EQU 0X17
TIMERA EQU 0X18
EVN EQU 0X19
;-------------->KEY LK KN KEYS1 KEYS2 KEYSN
KEY EQU 0X1A
LK EQU 0X1B
KN EQU 0X1C
KEYS1 EQU 0X1D
KEYS2 EQU 0X1E
KEYSN EQU 0X1F
;-------------->SLEEP_TIME
SLEEP_TIME EQU 0X20
;-------------->WM PWMR PWMG PWMB PWMRR PWMGG PWMBB
PWM EQU 0X21
PWMR EQU 0X22
PWMG EQU 0X23
PWMB EQU 0X24
PWMRR EQU 0X25
PWMGG EQU 0X26
PWMBB EQU 0X27
ORG 0H
                NOP; ----------   NOP
                LGOTO RST; ----------   RST
ORG 8H
ISR:
;{
                MOVAR COPYA; ----------   COPYA = A
                SWAPR COPYA,1; ----------   SWAPR COPYA,1
                MOVR STATUS,0; ----------   COPYS = STATUS
                MOVAR COPYS
                BTRSS T0IF; ----------   IF T0IF ELSE .
        LGOTO F1RH1M0; ----------   .
;{
                BSR TICK; ----------   TICK = 1
                MOVIA TMR0_INIT_VAL; ----------   TMR0 = TMR0_INIT_VAL
                MOVAR TMR0
                BTRSC SLEEP_EN; ----------   IF SLEEP_EN = 0 ELSE .
        LGOTO F1RH2M0; ----------   .
;{
                INCR PWM,1; ----------   PWM ++
                MOVIA MAXV; ----------   IF PWM < MAXV ELSE PWM = 0
                CMPAR PWM
                BTRSC STATUS,C
        CLRR PWM; ----------   PWM = 0
;{
                MOVR PWMR,0; ----------   LEDR = PWM < PWMR
                CMPAR PWM
                BTRSC STATUS,C
                BCR LEDR
                BTRSS STATUS,C
                BSR LEDR
                MOVR PWMG,0; ----------   LEDG = PWM < PWMG
                CMPAR PWM
                BTRSC STATUS,C
                BCR LEDG
                BTRSS STATUS,C
                BSR LEDG
                MOVR PWMB,0; ----------   LEDB = PWM < PWMB
                CMPAR PWM
                BTRSC STATUS,C
                BCR LEDB
                BTRSS STATUS,C
                BSR LEDB
;}
F1RH2M0:
;}
F1RH1M0:
;}
                CLRR INTF; ----------   INTF = 0
                MOVR COPYS,0; ----------   STATUS = COPYS
                MOVAR STATUS
                SWAPR COPYA,0; ----------   SWAPR COPYA,0
                RETIE; ----------   RETIE
;}
TABR:
                DW 0X0000,0X0000,0X0000,0X0000; ----------   DW 0X0000,0X0000,0X0000,0X0000
TABG:
                DW 0X0000,0X0000,0X0000,0X0000; ----------   DW 0X0000,0X0000,0X0000,0X0000
TABB:
                DW 0X0000,0X0000,0X0000,0X0000; ----------   DW 0X0000,0X0000,0X0000,0X0000
RST:
                LCALL CLR_RAM; ----------   CALL CLR_RAM
                LCALL GPIO_INIT; ----------   CALL GPIO_INIT
                LCALL TIMER0_INIT; ----------   CALL TIMER0_INIT
                LCALL INIT; ----------   CALL INIT
                LCALL POWER_OFF; ----------   CALL POWER_OFF
                ENI; ----------   ENI
MAIN:
;{
                CLRWDT; ----------   CLRWDT
                BTRSS TICK; ----------   IF TICK ELSE .
        LGOTO F2RH1M1; ----------   .
;{
                BCR TICK; ----------   TICK = 0
                DECRSZ US100,1; ----------   IF US100 -- ELSE .
        LGOTO F2RH2M1; ----------   .
;{
                MOVIA 10; ----------   US100 = 10
                MOVAR US100
                LCALL GETKEYS; ----------   CALL GETKEYS
                LCALL MS1_EVN; ----------   CALL MS1_EVN
                LCALL POWER_OFF_AND_WAKEUP; ----------   CALL POWER_OFF_AND_WAKEUP
                DECRSZ MS,1; ----------   IF MS -- ELSE .
        LGOTO F2RH3M1; ----------   .
;{
                MOVIA 10; ----------   MS = 10
                MOVAR MS
                DECRSZ MS10,1; ----------   IF MS10 -- ELSE .
        LGOTO F2RH4M0; ----------   .
;{
                MOVIA 100; ----------   MS10 = 100
                MOVAR MS10
                LCALL ADJUST_LED; ----------   CALL ADJUST_LED
F2RH4M0:
;}
F2RH3M1:
;}
F2RH2M1:
;}
F2RH1M1:
;}
                LGOTO MAIN; ----------   MAIN
;}
INIT:
;{
                MOVIA 10; ----------   US100 = 10
                MOVAR US100
                MOVAR MS; ----------   MS = 10
                MOVIA 100; ----------   MS10 = 100
                MOVAR MS10
                BSR WDTEN; ----------   WDTEN = 1
                RET
;}
GPIO_INIT:
;{
                MOVIA PB_INIT_VAL; ----------   PORTB = PB_INIT_VAL
                MOVAR PORTB
                MOVIA PB_INPUT; ----------   IOSTB = PB_INPUT
                IOST IOSTB
                CLRR BWUCON; ----------   BWUCON = 0X00
                CLRR BPHCON; ----------   BPHCON = 0X00
                RET
;}
TIMER0_INIT:
;{
                MOVIA TMR0_INIT_VAL; ----------   TMR0 = TMR0_INIT_VAL
                MOVAR TMR0
                CLRA; ----------   T0MD = 0X00
                T0MD
                BSR T0EN; ----------   T0EN = 1
                BSR T0IE; ----------   T0IE = 1
                RET
;}
CLR_RAM:
;{
                MOVIA MAX_VAR_ADDR; ----------   FSR = MAX_VAR_ADDR
                MOVAR FSR
CLR_RAM_CL:
                CLRR INDF; ----------   INDF = 0
                DECR FSR,1; ----------   FSR --
                MOVIA MIN_VAR_ADDR; ----------   IF FSR < MIN_VAR_ADDR ELSE CLR_RAM_CL
                CMPAR FSR
                BTRSC STATUS,C
        LGOTO CLR_RAM_CL; ----------   LGOTO CLR_RAM_CL
                RET
;}
PWM123:
;{
                MOVR PWMRR,0; ----------   IF PWMR != PWMRR ELSE .
                CMPAR PWMR
                BTRSC STATUS,Z
        LGOTO F7RH1M2; ----------   .
;{
                MOVR PWMRR,0; ----------   IF PWMR < PWMRR ELSE PWMR --
                CMPAR PWMR
                BTRSC STATUS,C
        DECR PWMR,1; ----------   PWMR --
                BTRSS FC; ----------   IF FC ELSE PWMR ++
        INCR PWMR,1; ----------   PWMR ++
F7RH1M2:
;}
                MOVR PWMGG,0; ----------   IF PWMG != PWMGG ELSE .
                CMPAR PWMG
                BTRSC STATUS,Z
        LGOTO F7RH1M3; ----------   .
;{
                MOVR PWMGG,0; ----------   IF PWMG < PWMGG ELSE PWMG --
                CMPAR PWMG
                BTRSC STATUS,C
        DECR PWMG,1; ----------   PWMG --
                BTRSS FC; ----------   IF FC ELSE PWMG ++
        INCR PWMG,1; ----------   PWMG ++
F7RH1M3:
;}
                MOVR PWMBB,0; ----------   IF PWMB != PWMBB ELSE .
                CMPAR PWMB
                BTRSC STATUS,Z
        LGOTO F7RH1M4; ----------   .
;{
                MOVR PWMBB,0; ----------   IF PWMB < PWMBB ELSE PWMB --
                CMPAR PWMB
                BTRSC STATUS,C
        DECR PWMB,1; ----------   PWMB --
                BTRSS FC; ----------   IF FC ELSE PWMB ++
        INCR PWMB,1; ----------   PWMB ++
F7RH1M4:
;}
                RET
;}
ADJUST_LED:
;{
                MOVIA MAXV; ----------   IF PWMRR = MAXV ELSE A = MAXV
                CMPAR PWMRR
                BTRSS STATUS,Z
        MOVIA MAXV; ----------   A = MAXV
               
                BTRSC FZ; ----------   IF FZ = 0 ELSE A = 1
        MOVIA 1; ----------   A = 1
               
                MOVAR PWMRR; ----------   PWMRR = A
                MOVIA MAXV; ----------   IF PWMGG = MAXV ELSE A = MAXV
                CMPAR PWMGG
                BTRSS STATUS,Z
        MOVIA MAXV; ----------   A = MAXV
               
                BTRSC FZ; ----------   IF FZ = 0 ELSE A = 1
        MOVIA 1; ----------   A = 1
               
                MOVAR PWMGG; ----------   PWMGG = A
                MOVIA MAXV; ----------   IF PWMBB = MAXV ELSE A = MAXV
                CMPAR PWMBB
                BTRSS STATUS,Z
        MOVIA MAXV; ----------   A = MAXV
               
                BTRSC FZ; ----------   IF FZ = 0 ELSE A = 1
        MOVIA 1; ----------   A = 1
               
                MOVAR PWMBB; ----------   PWMBB = A
                RET
;}
GETKEYS:
;{
                CLRR KEYS1; ----------   KEYS1 = 0
                BTRSS GETKEY; ----------   IF GETKEY ELSE KEYS1 | 1
        BSR KEYS1,0; ----------   KEYS1 | 1
                MOVR KEYS2,0; ----------   IF KEYS1 != KEYS2 ELSE .
                CMPAR KEYS1
                BTRSC STATUS,Z
        LGOTO ELSEF9LH1M6; ----------   .
;{
                MOVR KEYS1,0; ----------   KEYS2 = KEYS1
                MOVAR KEYS2
                CLRR KEYSN; ----------   KEYSN = 0
;}
                LGOTO F9RH1M6; ----------   ELSE
ELSEF9LH1M6:
;{
                MOVIA 0XFF; ----------   IF KEYSN < 0XFF ELSE .
                CMPAR KEYSN
                BTRSC STATUS,C
        LGOTO F9RH2M2; ----------   .
;{
                INCR KEYSN,1; ----------   KEYSN ++
                MOVIA 15; ----------   IF KEYSN = 15 ELSE .
                CMPAR KEYSN
                BTRSS STATUS,Z
        LGOTO F9RH3M2; ----------   .
;{
                MOVR KEYS2,0; ----------   KEY = KEYS2
                MOVAR KEY
F9RH3M2:
;}
F9RH2M2:
;}
F9RH1M6:
;}
                RET
;}
SWEEP:
;{
                MOVR LK,0; ----------   IF KEY = LK ELSE .
                CMPAR KEY
                BTRSS STATUS,Z
        LGOTO ELSEF10LH1M8; ----------   .
;{
                MOVIA 0XFF; ----------   IF KN < 0XFF ELSE RET
                CMPAR KN
                BTRSC STATUS,C
        RET; ----------   RET
                INCR KN,1; ----------   KN ++
                MOVIA 4; ----------   IF KN = 4 ELSE .
                CMPAR KN
                BTRSS STATUS,Z
        LGOTO ELSEF10LH2M4; ----------   .
;{
                DECRSZ KEY,0; ----------   IF KEY = 1 ELSE .
        LGOTO ELSEF10LH3M4; ----------   .
;{
                BTRSC SLEEP_EN; ----------   IF SLEEP_EN = 0 ELSE POWER_ON
        LGOTO POWER_ON; ----------   LGOTO POWER_ON
                INCR STATE,1; ----------   STATE ++
                LCALL STATE_CHANGE; ----------   CALL STATE_CHANGE
;}
                LGOTO F10RH3M4; ----------   ELSE
ELSEF10LH3M4:
                MOVIA 2; ----------   IF KEY = 2 ELSE .
                CMPAR KEY
                BTRSS STATUS,Z
        LGOTO F10RH3M4; ----------   .
;{
F10RH3M4:
;}
;}
                LGOTO F10RH2M4; ----------   ELSE
ELSEF10LH2M4:
;{
                MOVIA 200; ----------   IF KN = 200 ELSE RET
                CMPAR KN
                BTRSS STATUS,Z
        RET; ----------   RET
                DECRSZ KEY,0; ----------   IF KEY = 1 ELSE .
        LGOTO ELSEF10LH3M6; ----------   .
;{
                NOP; ----------   NOP
;}
                LGOTO F10RH3M6; ----------   ELSE
ELSEF10LH3M6:
                MOVIA 2; ----------   IF KEY = 2 ELSE RET
                CMPAR KEY
                BTRSS STATUS,Z
        RET; ----------   RET
;{
F10RH3M6:
;}
F10RH2M4:
;}
;}
                LGOTO F10RH1M8; ----------   ELSE
ELSEF10LH1M8:
;{
                CLRR KN; ----------   KN = 0
                MOVR KEY,0; ----------   LK = KEY
                MOVAR LK
F10RH1M8:
;}
                RET
;}
POWER_OFF:
;{
                BSR SLEEP_EN; ----------   SLEEP_EN = 1
                LGOTO POWER_OFF_STATE; ----------   POWER_OFF_STATE
                RET
;}
POWER_ON:
;{
                BCR SLEEP_EN; ----------   SLEEP_EN = 0
                LGOTO STATE_CHANGE; ----------   STATE_CHANGE
                RET
;}
STATE_CHANGE:
;{
                MOVIA 7; ----------   IF STATE < 7 ELSE STATE = 0
                CMPAR STATE
                BTRSC STATUS,C
        CLRR STATE; ----------   STATE = 0
;{
                MOVIA MID(TABR); ----------   PWMR = TABR#STATE
                SFUN TBHP
                MOVIA LOW(TABR)
                ADDAR STATE,0
                TABLEA
                NOP
                MOVAR PWMR
                MOVIA MID(TABG); ----------   PWMG = TABG#STATE
                SFUN TBHP
                MOVIA LOW(TABG)
                ADDAR STATE,0
                TABLEA
                NOP
                MOVAR PWMG
                MOVIA MID(TABB); ----------   PWMB = TABB#STATE
                SFUN TBHP
                MOVIA LOW(TABB)
                ADDAR STATE,0
                TABLEA
                NOP
                MOVAR PWMB
;}
                RET
;}
POWER_OFF_AND_WAKEUP:
;{
                BTRSS SLEEP_EN; ----------   IF SLEEP_EN ELSE RET
        RET; ----------   RET
                INCRSZ SLEEP_TIME,1; ----------   IF SLEEP_TIME ++ ELSE RET
        RET; ----------   RET
                DISI; ----------   DISI
                LCALL POWER_OFF_STATE; ----------   CALL POWER_OFF_STATE
                MOVIA WAKEUP_KEY; ----------   BWUCON = WAKEUP_KEY
                MOVAR BWUCON
                BSR PORTBIE; ----------   PORTBIE = 1
                MOVR PORTB,1; ----------   PORTB = PORTB
                BCR WDTEN; ----------   WDTEN = 0
                CLRR INTF; ----------   INTF = 0
                SLEEP; ----------   SLEEP
                NOP; ----------   NOP
                NOP; ----------   NOP
                BCR PORTBIE; ----------   PORTBIE = 0
                CLRR INTF; ----------   INTF = 0
                MOVR PORTB,1; ----------   PORTB = PORTB
                CLRR BWUCON; ----------   BWUCON = 0
                BSR WDTEN; ----------   WDTEN = 1
                ENI; ----------   ENI
                RET
;}
POWER_OFF_STATE:
;{
                CLRR PORTB; ----------   PORTB = 0X00
                CLRR PWMR; ----------   PWMR = 0X00
                CLRR PWMG; ----------   PWMG = 0X00
                CLRR PWMB; ----------   PWMB = 0X00
                CLRR PWMRR; ----------   PWMRR = 0X00
                CLRR PWMGG; ----------   PWMGG = 0X00
                CLRR PWMBB; ----------   PWMBB = 0X00
                RET
;}
MS1_EVN:
;{
                INCR TIMER,1; ----------   TIMER ++
                MOVR TIMERA,0; ----------   EVN = TIMER ^ TIMERA
                XORAR TIMER,0
                MOVAR EVN
                MOVR TIMER,0; ----------   EVN & TIMER
                ANDAR EVN,1
                MOVAR TIMERA; ----------   TIMERA = TIMER
                BTRSC EVN,0; ----------   IF EVN.0 = 0 ELSE CALL MS2_EVN
        LCALL MS2_EVN; ----------   LCALL MS2_EVN
                BTRSC EVN,1; ----------   IF EVN.1 = 0 ELSE CALL MS4_EVN
        LCALL MS4_EVN; ----------   LCALL MS4_EVN
                BTRSC EVN,2; ----------   IF EVN.2 = 0 ELSE CALL PWM123
        LCALL PWM123; ----------   LCALL PWM123
                BTRSC EVN,3; ----------   IF EVN.3 = 0 ELSE CALL SWEEP
        LCALL SWEEP; ----------   LCALL SWEEP
                RET
;}
MS2_EVN:
;{
                RET; ----------   MS2_EVN()
;}
MS4_EVN:
;{
                RET; ----------   MS4_EVN()
;}
MS8_EVN:
;{
                RET; ----------   MS8_EVN()
;}
END
;    2018/9/8 星期六


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2018-9-8 22:37:23 | 显示全部楼层
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
 楼主| 发表于 2020-4-3 10:13:42 | 显示全部楼层
编译器有更新了,


#include NY8B062D.h

;宏定义,F S 两页的变量请不要定义标志位
#define C 0
#define Z 2
;BANK1 STATUS.6
;BANK0 BANK1=0
#define FC STATUS,C
#define FZ STATUS,Z
#define MIN_VAR_ADDR 0X20
#define MAX_VAR_ADDR 0X7F
;
#define SLEEP_EN FLAG,0
OWERLOW FLAG.1
;CHARGING FLAG.2
;MD_EN FLAG.3
;LED_EN FLAG.4
;DISPLAY_EN FLAG.5
;WORK_EN FLAG.6
#define TICK FLAG,7
;4M 2T 低电压复位=1.8V
#define TMR0_INIT_VAL 162
#define TMR1_INIT_VAL 99
#define T0IE INTE,0
#define T0IF INTF,0
#define T1IF INTF,3
#define T1IE INTE,3
#define CLR_T0IF INTF=0XFE
#define CLR_T1IF INTF=0XF7
#define CLR_PBIF INTF=0XFD
#define CLR_INTIF INTF=0XFB
#define ADC_START ADMD,6
#define ADC_FINISH ADMD,5
#define WDTEN PCON,7;看门狗使能位
#define EXTIE PCON,6;外部中断,PB0引脚中断允许位
#define PORTBIE INTE,1ORTB 电平变化中断使能位
#define WDTIE INTE,6;看门狗 中断使能位
#define INTIE INTE,2;INT 中断使能位,软中断,一般不使用,中断向量 ORG 1
#define MAXV 100
#define MIDV 50
#define MINV 1
;LED1 PORTA.0
;LED2 PORTA.1
;LED3 PORTA.2
;CHARGE PORTB.3
;MD PORTB.5
;RED_LED PORTA.4
;GREEN_LED PORTA.5
;BLUE_LED PORTA.7
#define LEDR PORTB,0
#define LEDG PORTB,1
#define LEDB PORTB,2
;按键初始化宏
#define PA_INPUT 00000000B
#define PB_INPUT 00000001B
#define PA_INIT_VAL 00000000B
#define PB_INIT_VAL 00000000B
#define PA_UP_RES 11111111B
#define PB_UP_RES 11111110B
#define PAB_DOWN_RES 11111111B
#define GETKEY PORTB,0
#define WAKEUP_KEYA 00000001B
#define WAKEUP_KEYB 00000001B
;------------>;变量定义
;------------>ORG 0X7E
;------------>COPYA COPYS
COPYA EQU 0X7E
COPYS EQU 0X7F
;------------>ORG 0X20
;------------>US100 MS MS10 STATE
US100 EQU 0X20
MS EQU 0X21
MS10 EQU 0X22
STATE EQU 0X23
;------------>FLAG TIMER TIMERA EVN ;MYPOWER ADCBUF SEC MINUTE
FLAG EQU 0X24
TIMER EQU 0X25
TIMERA EQU 0X26
EVN EQU 0X27
;------------>KEY LK KN KEYS1 KEYS2 KEYSN
KEY EQU 0X28
LK EQU 0X29
KN EQU 0X2A
KEYS1 EQU 0X2B
KEYS2 EQU 0X2C
KEYSN EQU 0X2D
;------------>SLEEP_TIME
SLEEP_TIME EQU 0X2E
;------------>WM PWMR PWMG PWMB PWMRR PWMGG PWMBB
PWM EQU 0X2F
PWMR EQU 0X30
PWMG EQU 0X31
PWMB EQU 0X32
PWMRR EQU 0X33
PWMGG EQU 0X34
PWMBB EQU 0X35
ORG 0H
                NOP; ----------   NOP
                LGOTO RST; ----------   RST
ORG 8H
ISR:
                MOVAR COPYA; ----------   COPYA = A
                SWAPR STATUS,0; ----------   SWAPR STATUS,0
                MOVAR COPYS; ----------   COPYS = A
                BTRSS T0IF; ----------   IF T0IF
        LGOTO F1RH1M0; ----------   .
                MOVIA 0XFE; ----------   INTF=0XFE
                MOVAR INTF
                BSR TICK; ----------   TICK = 1
                MOVIA TMR0_INIT_VAL; ----------   TMR0 = TMR0_INIT_VAL
                MOVAR TMR0
                BTRSC SLEEP_EN; ----------   IF SLEEP_EN = 0
        LGOTO F1RH2M0; ----------   .
                INCR PWM,1; ----------   PWM ++
                MOVIA MAXV; ----------   IF PWM < MAXV ELSE PWM = 0
                CMPAR PWM
                BTRSC STATUS,C
        CLRR PWM; ----------   PWM = 0
                MOVR PWMR,0; ----------   LEDR = PWM < PWMR
                CMPAR PWM
                BTRSC STATUS,C
                BCR LEDR
                BTRSS STATUS,C
                BSR LEDR
                MOVR PWMG,0; ----------   LEDG = PWM < PWMG
                CMPAR PWM
                BTRSC STATUS,C
                BCR LEDG
                BTRSS STATUS,C
                BSR LEDG
                MOVR PWMB,0; ----------   LEDB = PWM < PWMB
                CMPAR PWM
                BTRSC STATUS,C
                BCR LEDB
                BTRSS STATUS,C
                BSR LEDB
  F1RH2M0:
  F1RH1M0:
                SWAPR COPYS,0; ----------   SWAPR COPYS,0
                MOVAR STATUS; ----------   STATUS = A
                SWAPR COPYA,1; ----------   SWAPR COPYA,1
                SWAPR COPYA,0; ----------   SWAPR COPYA,0
                RETIE; ----------   RETIE
RTAR:
                ADDAR PCL,1; ----------   PCL + A
                RETIA 0X00; ----------   RET 0X00
RTAG:
                ADDAR PCL,1; ----------   PCL + A
                RETIA 0X00; ----------   RET 0X00
RTAB:
                ADDAR PCL,1; ----------   PCL + A
                RETIA 0X00; ----------   RET 0X00
RST:
                LCALL CLR_RAM; ----------   CALL CLR_RAM
                LCALL GPIO_INIT; ----------   CALL GPIO_INIT
                LCALL TIMER0_INIT; ----------   CALL TIMER0_INIT
                LCALL INIT; ----------   CALL INIT
                LCALL POWER_OFF; ----------   CALL POWER_OFF
                ENI; ----------   ENI
MAIN:
                CLRWDT; ----------   CLRWDT
                BTRSS TICK; ----------   IF TICK
        LGOTO F2RH1M1; ----------   .
                BCR TICK; ----------   TICK = 0
                DECRSZ US100,1; ----------   IF US100 --
        LGOTO F2RH2M1; ----------   .
                MOVIA 10; ----------   US100 = 10
                MOVAR US100
                LCALL GETKEYS; ----------   CALL GETKEYS
                LCALL MS1_EVN; ----------   CALL MS1_EVN
                LCALL POWER_OFF_AND_WAKEUP; ----------   CALL POWER_OFF_AND_WAKEUP
                DECRSZ MS,1; ----------   IF MS --
        LGOTO F2RH3M0; ----------   .
                MOVIA 10; ----------   MS = 10
                MOVAR MS
                DECRSZ MS10,1; ----------   IF MS10 --
        LGOTO F2RH4M0; ----------   .
                MOVIA 100; ----------   MS10 = 100
                MOVAR MS10
                LCALL ADJUST_LED; ----------   CALL ADJUST_LED
  F2RH4M0:
  F2RH3M0:
  F2RH2M1:
  F2RH1M1:
                LGOTO MAIN; ----------   MAIN
INIT:
                MOVIA 10; ----------   US100 = 10
                MOVAR US100
                MOVAR MS; ----------   MS = 10
                MOVIA 100; ----------   MS10 = 100
                MOVAR MS10
                BSR WDTEN; ----------   WDTEN = 1
                RET
GPIO_INIT:
                MOVIA PA_INIT_VAL; ----------   PORTA = PA_INIT_VAL
                MOVAR PORTA
                MOVIA PB_INIT_VAL; ----------   PORTB = PB_INIT_VAL
                MOVAR PORTB
                MOVIA PA_INPUT; ----------   IOSTA = PA_INPUT
                IOST IOSTA
                MOVIA PB_INPUT; ----------   IOSTB = PB_INPUT
                IOST IOSTB
                CLRR BWUCON; ----------   BWUCON = 0X00
                MOVIA PA_UP_RES; ----------   APHCON = PA_UP_RES
                IOST APHCON
                MOVIA PB_UP_RES; ----------   BPHCON = PB_UP_RES
                MOVAR BPHCON
                MOVIA PAB_DOWN_RES; ----------   ABPLCON = PAB_DOWN_RES
                MOVAR ABPLCON
                RET
TIMER0_INIT:
                MOVIA TMR0_INIT_VAL; ----------   TMR0 = TMR0_INIT_VAL
                MOVAR TMR0
                CLRA; ----------   T0MD = 0X00
                T0MD
                MOVIA 1; ----------   PCON1 = 1
                IOST PCON1
                BSR T0IE; ----------   T0IE = 1
                RET
CLR_RAM:
                MOVIA MAX_VAR_ADDR; ----------   FSR = MAX_VAR_ADDR
                MOVAR FSR
CLR_RAM_CL1:
                CLRR INDF; ----------   INDF = 0
                DECR FSR,1; ----------   FSR --
                MOVIA MIN_VAR_ADDR; ----------   IF FSR < MIN_VAR_ADDR ELSE CLR_RAM_CL1
                CMPAR FSR
                BTRSC STATUS,C
        LGOTO CLR_RAM_CL1; ----------   LGOTO CLR_RAM_CL1
                RET
PWM123:
                MOVR PWMRR,0; ----------   IF PWMR != PWMRR
                CMPAR PWMR
                BTRSC STATUS,Z
        LGOTO F7RH1M2; ----------   .
                MOVR PWMRR,0; ----------   IF PWMR < PWMRR ELSE PWMR --
                CMPAR PWMR
                BTRSC STATUS,C
        DECR PWMR,1; ----------   PWMR --
                BTRSS FC; ----------   IF FC ELSE PWMR ++
        INCR PWMR,1; ----------   PWMR ++
  F7RH1M2:
                MOVR PWMGG,0; ----------   IF PWMG != PWMGG
                CMPAR PWMG
                BTRSC STATUS,Z
        LGOTO F7RH1M3; ----------   .
                MOVR PWMGG,0; ----------   IF PWMG < PWMGG ELSE PWMG --
                CMPAR PWMG
                BTRSC STATUS,C
        DECR PWMG,1; ----------   PWMG --
                BTRSS FC; ----------   IF FC ELSE PWMG ++
        INCR PWMG,1; ----------   PWMG ++
  F7RH1M3:
                MOVR PWMBB,0; ----------   IF PWMB != PWMBB
                CMPAR PWMB
                BTRSC STATUS,Z
        LGOTO F7RH1M4; ----------   .
                MOVR PWMBB,0; ----------   IF PWMB < PWMBB ELSE PWMB --
                CMPAR PWMB
                BTRSC STATUS,C
        DECR PWMB,1; ----------   PWMB --
                BTRSS FC; ----------   IF FC ELSE PWMB ++
        INCR PWMB,1; ----------   PWMB ++
  F7RH1M4:
                RET
ADJUST_LED:
                MOVIA MAXV; ----------   IF PWMRR = MAXV ELSE A = MAXV
                CMPAR PWMRR
                BTRSS STATUS,Z
        MOVIA MAXV; ----------   A = MAXV
                BTRSC FZ; ----------   IF FZ = 0 ELSE A = MINV
        MOVIA MINV; ----------   A = MINV
                MOVAR PWMRR; ----------   PWMRR = A
                MOVIA MAXV; ----------   IF PWMGG = MAXV ELSE A = MAXV
                CMPAR PWMGG
                BTRSS STATUS,Z
        MOVIA MAXV; ----------   A = MAXV
                BTRSC FZ; ----------   IF FZ = 0 ELSE A = MINV
        MOVIA MINV; ----------   A = MINV
                MOVAR PWMGG; ----------   PWMGG = A
                MOVIA MAXV; ----------   IF PWMBB = MAXV ELSE A = MAXV
                CMPAR PWMBB
                BTRSS STATUS,Z
        MOVIA MAXV; ----------   A = MAXV
                BTRSC FZ; ----------   IF FZ = 0 ELSE A = MINV
        MOVIA MINV; ----------   A = MINV
                MOVAR PWMBB; ----------   PWMBB = A
                RET
GETKEYS:
                CLRR KEYS1; ----------   KEYS1 = 0
                BTRSS GETKEY; ----------   IF GETKEY ELSE KEYS1 | 1
        BSR KEYS1,0; ----------   KEYS1 | 1
                MOVR KEYS2,0; ----------   IF KEYS1 != KEYS2
                CMPAR KEYS1
                BTRSC STATUS,Z
        LGOTO ELSEF9LH1M6; ----------   .
                MOVR KEYS1,0; ----------   KEYS2 = KEYS1
                MOVAR KEYS2
                CLRR KEYSN; ----------   KEYSN = 0
                LGOTO F9RH1M6; ----------   ELSE
  ELSEF9LH1M6:
                MOVIA 0XFF; ----------   IF KEYSN < 0XFF
                CMPAR KEYSN
                BTRSC STATUS,C
        LGOTO F9RH2M2; ----------   .
                INCR KEYSN,1; ----------   KEYSN ++
                MOVIA 15; ----------   IF KEYSN = 15
                CMPAR KEYSN
                BTRSS STATUS,Z
        LGOTO F9RH3M1; ----------   .
                MOVR KEYS2,0; ----------   KEY = KEYS2
                MOVAR KEY
  F9RH3M1:
  F9RH2M2:
  F9RH1M6:
                RET
SWEEP:
                MOVR LK,0; ----------   IF KEY = LK
                CMPAR KEY
                BTRSS STATUS,Z
        LGOTO ELSEF10LH1M8; ----------   .
                MOVIA 0XFF; ----------   IF KN < 0XFF ELSE RET
                CMPAR KN
                BTRSC STATUS,C
        RET; ----------   RET
                INCR KN,1; ----------   KN ++
                MOVIA 4; ----------   IF KN = 4
                CMPAR KN
                BTRSS STATUS,Z
        LGOTO ELSEF10LH2M4; ----------   .
                DECRSZ KEY,0; ----------   IF KEY = 1
        LGOTO ELSEF10LH3M3; ----------   .
                BTRSC SLEEP_EN; ----------   IF SLEEP_EN = 0 ELSE POWER_ON
        LGOTO POWER_ON; ----------   LGOTO POWER_ON
                INCR STATE,1; ----------   STATE ++
                LCALL STATE_CHANGE; ----------   CALL STATE_CHANGE
                LGOTO F10RH3M3; ----------   ELSE
  ELSEF10LH3M3:
                MOVIA 2; ----------   IF KEY = 2
                CMPAR KEY
                BTRSS STATUS,Z
        LGOTO F10RH3M3; ----------   .
  F10RH3M3:
                LGOTO F10RH2M4; ----------   ELSE
  ELSEF10LH2M4:
                MOVIA 60; ----------   IF KN = 60
                CMPAR KN
                BTRSS STATUS,Z
        LGOTO F10RH3M4; ----------   .
                DECRSZ KEY,0; ----------   IF KEY = 1
        LGOTO ELSEF10LH4M2; ----------   .
                NOP; ----------   NOP
                LGOTO F10RH4M2; ----------   ELSE
  ELSEF10LH4M2:
                MOVIA 2; ----------   IF KEY = 2 ELSE RET
                CMPAR KEY
                BTRSS STATUS,Z
        RET; ----------   RET
  F10RH4M2:
  F10RH3M4:
  F10RH2M4:
                LGOTO F10RH1M8; ----------   ELSE
  ELSEF10LH1M8:
                CLRR KN; ----------   KN = 0
                MOVR KEY,0; ----------   LK = KEY
                MOVAR LK
  F10RH1M8:
                RET
POWER_OFF:
                BSR SLEEP_EN; ----------   SLEEP_EN = 1
                LGOTO POWER_OFF_STATE; ----------   POWER_OFF_STATE
                RET
POWER_ON:
                BCR SLEEP_EN; ----------   SLEEP_EN = 0
                LGOTO STATE_CHANGE; ----------   STATE_CHANGE
                RET
STATE_CHANGE:
                MOVIA 7; ----------   IF STATE < 7 ELSE STATE = 0
                CMPAR STATE
                BTRSC STATUS,C
        CLRR STATE; ----------   STATE = 0
                MOVIA MID(RTAR); ----------   PWMR = RTAR#STATE
                MOVAR PCHBUF
                MOVR STATE,0
                LCALL  RTAR
                MOVAR PWMR
                MOVIA MID(RTAG); ----------   PWMG = RTAG#STATE
                MOVAR PCHBUF
                MOVR STATE,0
                LCALL  RTAG
                MOVAR PWMG
                MOVIA MID(RTAB); ----------   PWMB = RTAB#STATE
                MOVAR PCHBUF
                MOVR STATE,0
                LCALL  RTAB
                MOVAR PWMB
                RET
POWER_OFF_AND_WAKEUP:
                BTRSS SLEEP_EN; ----------   IF SLEEP_EN ELSE RET
        RET; ----------   RET
                INCRSZ SLEEP_TIME,1; ----------   IF SLEEP_TIME ++ ELSE RET
        RET; ----------   RET
                DISI; ----------   DISI
                LCALL POWER_OFF_STATE; ----------   CALL POWER_OFF_STATE
                MOVIA WAKEUP_KEYB; ----------   BWUCON = WAKEUP_KEYB
                MOVAR BWUCON
                BSR PORTBIE; ----------   PORTBIE = 1
                MOVR PORTB,1; ----------   PORTB = PORTB
                BCR WDTEN; ----------   WDTEN = 0
                CLRR INTF; ----------   INTF = 0
                SLEEP; ----------   SLEEP
                NOP; ----------   NOP
                NOP; ----------   NOP
                BCR PORTBIE; ----------   PORTBIE = 0
                CLRR INTF; ----------   INTF = 0
                MOVR PORTB,1; ----------   PORTB = PORTB
                CLRR BWUCON; ----------   BWUCON = 0
                BSR WDTEN; ----------   WDTEN = 1
                ENI; ----------   ENI
                RET
POWER_OFF_STATE:
                MOVIA PA_INIT_VAL; ----------   PORTA = PA_INIT_VAL
                MOVAR PORTA
                MOVIA PB_INIT_VAL; ----------   PORTB = PB_INIT_VAL
                MOVAR PORTB
                CLRR PWMR; ----------   PWMR = 0X00
                CLRR PWMG; ----------   PWMG = 0X00
                CLRR PWMB; ----------   PWMB = 0X00
                CLRR PWMRR; ----------   PWMRR = 0X00
                CLRR PWMGG; ----------   PWMGG = 0X00
                CLRR PWMBB; ----------   PWMBB = 0X00
                RET
MS1_EVN:
                INCR TIMER,1; ----------   TIMER ++
                MOVR TIMERA,0; ----------   EVN = TIMER ^ TIMERA
                XORAR TIMER,0
                MOVAR EVN
                MOVR TIMER,0; ----------   EVN & TIMER
                ANDAR EVN,1
                MOVAR TIMERA; ----------   TIMERA = TIMER
                BTRSC EVN,2; ----------   IF EVN.2 = 0 ELSE CALL PWM123
        LCALL PWM123; ----------   LCALL PWM123
                BTRSC EVN,3; ----------   IF EVN.3 = 0 ELSE CALL SWEEP
        LCALL SWEEP; ----------   LCALL SWEEP
                RET
;// CONST DEFINE
END
;    2020/4/3 星期五

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 17:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表