论坛元老
 
- 积分
- 6662
- 金钱
- 6662
- 注册时间
- 2016-5-29
- 在线时间
- 910 小时
|
#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,1 ORTB 电平变化中断使能位
#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 星期六
|
|