OpenEdv-开源电子网

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

这样子的汇编,是什么软件生成 的

[复制链接]

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

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

;-------------->;工程文件名,
;-------------->;日期:
;-------------->;程序员:
;-------------->;变量定义
;-------------->ORG 0X10
;-------------->COPYA COPYS US100 MS10 STATE
COPYA EQU 0X10
COPYS EQU 0X11
US100 EQU 0X12
MS10 EQU 0X13
STATE EQU 0X14

;-------------->FLAG TIMER TIMERA I
FLAG EQU 0X15
TIMER EQU 0X16
TIMERA EQU 0X17
I EQU 0X18

;-------------->KEY LK KN
KEY EQU 0X19
LK EQU 0X1A
KN EQU 0X1B

;-------------->SLEEP_TIME
SLEEP_TIME EQU 0X1C

;-------------->WM PWMR PWMG PWMB PWMRR PWMGG PWMBB
PWM EQU 0X1D
PWMR EQU 0X1E
PWMG EQU 0X1F
PWMB EQU 0X20
PWMRR EQU 0X21
PWMGG EQU 0X22
PWMBB EQU 0X23

;宏定义,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 WDTEN PCON,7;看门狗使能位
#define EXTIE PCON,6;外部中断,PB0引脚中断允许位
#define PORTBIE INTE,1ORTB 电平变化中断使能位
#define T1IE INTE,3;T1 中断使能位
#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 << PBK
#define GETKEY PORTB,PBK
#define WAKEUP_KEY 1 << PBK
ORG 0H; ----------   ORG 0H
                LGOTO RESET; ----------   . RESET
ORG 8H; ----------   ORG 8H
;{
                MOVAR COPYA; ----------   COPYA = A
                SWAPR COPYA,1; ----------   SWAPR COPYA,1
                MOVR STATUS,0; ----------   COPYS STATUS
                MOVAR COPYS
                BTRSS T0IF; ----------   IF T0IF ELSE .NEXT_ISR
        LGOTO NEXT_ISR; ----------   .NEXT_ISR
                BSR TICK; ----------   TICK 1
                MOVIA TMR0_INIT_VAL; ----------   TMR0 TMR0_INIT_VAL
                MOVAR TMR0
                INCR PWM,1; ----------   PWM ++
                MOVIA MAXV; ----------   IF PWM < MAXV
                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
NEXT_ISR:
EXIT_ISR:
                CLRR INTF; ----------   INTF = 0
                MOVR COPYS,0; ----------   STATUS COPYS
                MOVAR STATUS
                SWAPR COPYA,0; ----------   SWAPR COPYA,0
                RETIE; ----------   RETIE
;}
RESET:
                LCALL CLR_RAM; ----------   CALL CLR_RAM
                LCALL GPIO_INIT; ----------   CALL GPIO_INIT
                LCALL TIMER0_INIT; ----------   CALL TIMER0_INIT
                LCALL INIT; ----------   CALL INIT
                BSR SLEEP_EN; ----------   SLEEP_EN = 1
                ENI; ----------   ENI
MAIN:
;{
                CLRWDT; ----------   CLRWDT
                BTRSC TICK; ----------   IF TICK = 0 ELSE CALL PROCESS_TICK
        LCALL PROCESS_TICK; ----------   LCALL PROCESS_TICK
                LGOTO MAIN; ----------   JMP MAIN
;}
PROCESS_TICK:
                BCR TICK; ----------   TICK = 0
                DECRSZ US100,1; ----------   IF US100 -- ELSE RET
        RET; ----------   RET
                MOVIA 10; ----------   US100 10
                MOVAR US100
                LCALL MS1_EVN; ----------   CALL MS1_EVN
                LCALL POWER_OFF; ----------   CALL POWER_OFF
                DECRSZ MS10,1; ----------   IF MS10 -- ELSE RET
        RET; ----------   RET
                MOVIA 10; ----------   MS10 10
                MOVAR MS10
                RET; ----------   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; ----------   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; ----------   RET
;}
TIMER1_INIT:
;{
                MOVIA TMR1_INIT_VAL; ----------   TMR1 TMR1_INIT_VAL
                SFUN TMR1
                MOVIA 0X83; ----------   T1CR1 0X83
                SFUN T1CR1
                CLRA; ----------   T1CR2 0X00
                SFUN T1CR2
                BSR T1IE; ----------   T1IE 1
                RET; ----------   RET
;}
INIT:
;{
                MOVIA 10; ----------   US100 10
                MOVAR US100
                MOVAR MS10; ----------   MS10 10
                BSR WDTEN; ----------   WDTEN 1
                RET; ----------   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
                CMPAR FSR
                BTRSC STATUS,C
                LGOTO CLR_RAM_CL; ----------   .CLR_RAM_CL
                RET; ----------   RET
;}
PWM123:
PP1:
                MOVR PWMRR,0; ----------   IF PWMR != PWMRR ELSE PP2
                CMPAR PWMR
                BTRSC STATUS,Z
        LGOTO PP2; ----------   LGOTO PP2
                MOVR PWMRR,0; ----------   IF PWMR < PWMRR
                CMPAR PWMR
                BTRSC STATUS,C
                DECR PWMR,1; ----------   PWMR --
                BTRSS STATUS,C; ----------   IF STATUS,C
                INCR PWMR,1; ----------   PWMR ++
PP2:
                MOVR PWMGG,0; ----------   IF PWMG != PWMGG ELSE PP3
                CMPAR PWMG
                BTRSC STATUS,Z
        LGOTO PP3; ----------   LGOTO PP3
                MOVR PWMGG,0; ----------   IF PWMG < PWMGG
                CMPAR PWMG
                BTRSC STATUS,C
                DECR PWMG,1; ----------   PWMG --
                BTRSS STATUS,C; ----------   IF STATUS,C
                INCR PWMG,1; ----------   PWMG ++
PP3:
                MOVR PWMBB,0; ----------   IF PWMB != PWMBB ELSE RET
                CMPAR PWMB
                BTRSC STATUS,Z
        RET; ----------   RET
                MOVR PWMBB,0; ----------   IF PWMB < PWMBB
                CMPAR PWMB
                BTRSC STATUS,C
                DECR PWMB,1; ----------   PWMB --
                BTRSS STATUS,C; ----------   IF STATUS,C
                INCR PWMB,1; ----------   PWMB ++
                RET; ----------   RET
SWEEP:
;{
                CLRR KEY; ----------   KEY = 0
                BTRSS GETKEY; ----------   IF GETKEY
                BSR KEY,0; ----------   KEY | 1
                MOVR LK,0; ----------   IF KEY = LK ELSE . NEQ
                CMPAR KEY
                BTRSS STATUS,Z
        LGOTO NEQ; ----------   . NEQ
                MOVIA 0XFF; ----------   IF KN < 0XFF ELSE RET
                CMPAR KN
                BTRSC STATUS,C
        RET; ----------   RET
                INCR KN,1; ----------   KN ++
                MOVIA 4; ----------   IF KN = 4 ELSE .CHECK_KN_200
                CMPAR KN
                BTRSS STATUS,Z
        LGOTO CHECK_KN_200; ----------   .CHECK_KN_200
                DECRSZ KEY,0; ----------   IF KEY = 1 ELSE .CHECK_KEY2
        LGOTO CHECK_KEY2; ----------   .CHECK_KEY2
                BTRSC SLEEP_EN; ----------   IF SLEEP_EN = 0 ELSE .POWER_ON
        LGOTO POWER_ON; ----------   .POWER_ON
                INCR STATE,1; ----------   STATE ++
                MOVIA 7; ----------   IF STATE < 7
                CMPAR STATE
                BTRSC STATUS,C
                CLRR STATE; ----------   STATE = 0
                LGOTO STATE_CHANGE; ----------   JMP STATE_CHANGE
                RET; ----------   RET
CHECK_KEY2:
                MOVIA 2; ----------   IF KEY = 2 ELSE RET
                CMPAR KEY
                BTRSS STATUS,Z
        RET; ----------   RET
                NOP; ----------   NOP
                RET; ----------   RET
CHECK_KN_200:
                MOVIA 200; ----------   IF KN = 200 ELSE RET
                CMPAR KN
                BTRSS STATUS,Z
        RET; ----------   RET
                DECRSZ KEY,0; ----------   IF KEY = 1 ELSE .LONG_KEY2
        LGOTO LONG_KEY2; ----------   .LONG_KEY2
                NOP; ----------   NOP
                RET; ----------   RET
LONG_KEY2:
                MOVIA 2; ----------   IF KEY = 2 ELSE RET
                CMPAR KEY
                BTRSS STATUS,Z
        RET; ----------   RET
                NOP; ----------   NOP
                RET; ----------   RET
NEQ:
                CLRR KN; ----------   KN = 0
                MOVR KEY,0; ----------   LK KEY
                MOVAR LK
                RET; ----------   RET
;}
POWER_ON:
;{
                BCR SLEEP_EN; ----------   SLEEP_EN = 0
                LGOTO STATE_CHANGE; ----------   .STATE_CHANGE
                RET; ----------   RET
;}
STATE_CHANGE:
;{
                MOVIA MID(TABR); ----------   PWMR = TABR#STATE
                SFUN TBHP
                MOVIA LOW(TABR)
                ADDAR STATE,0
                TABLEA
                NOP
                MOVAR PWMR
                SFUNR TBHD; ----------   PWMRR = TBHD
                MOVAR PWMRR
                MOVIA MID(TABG); ----------   PWMG = TABG#STATE
                SFUN TBHP
                MOVIA LOW(TABG)
                ADDAR STATE,0
                TABLEA
                NOP
                MOVAR PWMG
                SFUNR TBHD; ----------   PWMGG = TBHD
                MOVAR PWMGG
                MOVIA MID(TABB); ----------   PWMB = TABB#STATE
                SFUN TBHP
                MOVIA LOW(TABB)
                ADDAR STATE,0
                TABLEA
                NOP
                MOVAR PWMB
                SFUNR TBHD; ----------   PWMBB = TBHD
                MOVAR PWMBB
                RET; ----------   RET
;}
POWER_OFF_STATE:
                CLRR PORTB; ----------   PORTB = 0X00
                RET; ----------   RET
POWER_OFF:
;{
                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; ----------   MOVR PORTB,1
                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; ----------   MOVR PORTB,1
                CLRR BWUCON; ----------   BWUCON = 0
                ENI; ----------   ENI
                RET; ----------   RET
;}
;}
MS1_EVN:
;{
                INCR TIMER,1; ----------   TIMER ++
                MOVR TIMERA,0; ----------   I = TIMER ^ TIMERA
                XORAR TIMER,0
                MOVAR I
                MOVR TIMER,0; ----------   I & TIMER
                ANDAR I,1
                MOVAR TIMERA; ----------   TIMERA = TIMER
                BTRSC I,1; ----------   IF I.1 = 0
                LCALL MS2_EVN; ----------   CALL MS2_EVN
                BTRSC I,2; ----------   IF I.2 = 0
                LCALL MS4_EVN; ----------   CALL MS4_EVN
                BTRSS I,3; ----------   IF I.3 ELSE RET
        RET; ----------   RET
                LCALL SWEEP; ----------   CALL SWEEP
                LCALL MS8_EVN; ----------   CALL MS8_EVN
                RET; ----------   RET
;}
MS2_EVN:
                RET; ----------   RET
MS4_EVN:
                RET; ----------   RET
MS8_EVN:
                RET; ----------   RET
                ORG 1024 - 128; ----------   ORG 1024 - 128
TABR:
                DW 0X0064,0X3F00,0X3F00,0X0064; ----------   DW 0X0064,0X3F00,0X3F00,0X0064
TABG:
                DW 0X0032,0X0000,0X3200,0X0032; ----------   DW 0X0032,0X0000,0X3200,0X0032
TABB:
                DW 0X3264,0X0064,0X3200,0X0032; ----------   DW 0X3264,0X0064,0X3200,0X0032
END
;    2018/5/27 星期日


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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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