📄 rd_useled_flash_ctr.s
字号:
.module RD_UseLED_Flash_CTR.c
.area text(rom, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_UseLED_Flash_CTR.c
.dbfunc e LED_Flash_Control_INIT _LED_Flash_Control_INIT fV
; n1 -> R20
.even
_LED_Flash_Control_INIT::
st -y,R20
.dbline -1
.dbline 97
; /***********************************************************
; * 函数库说明:LED闪烁控制函数库 *
; * 版本: v1.00 *
; * 作者: 王卓然 *
; * 创建日期: 2007年4月4日 *
; * -------------------------------------------------------- *
; * [支 持 库] *
; * 支持库名称:LIB_Config.h *
; * 需要版本: ----- *
; * 支持库说明:库函数配置声明库 *
; * *
; * 支持库名称:RD_MacroAndConst.h *
; * 需要版本: v0.01 &abv *
; * 支持库说明:系统常用宏定义库 *
; * *
; * 支持库名称:RD_UseLED_Flash_CTR.h *
; * 需要版本: ----- *
; * 支持库说明:LED闪烁控制函数声明库 *
; * -------------------------------------------------------- *
; * [版本更新] *
; * 修改: *
; * -------------------------------------------------------- *
; * [版本历史] *
; * -------------------------------------------------------- *
; * [使用说明] *
; ***********************************************************/
;
; /********************
; * 头 文 件 配 置 区 *
; ********************/
; # include "LIB_Config.h"
; # include "RD_MacroAndConst.h"
; # include "RD_UseLED_Flash_CTR.h"
;
; /********************
; * 系 统 宏 定 义 *
; ********************/
;
; /*------------------*
; * 常 数 宏 定 义 *
; *------------------*/
;
; #ifndef LED_FCTR_LED_COUNT
; # error Need for the number of the LEDs: LED_FCTR_LED_COUNT
; #endif
; #ifndef LED_PORT_START
; # error Need for the start pin number of LEDs: LED_PORT_START
; #endif
; #ifndef LED_PORT
; # error Need for the port name of the LEDs: LED_PORT
; #endif
;
; /*------------------*
; * 动 作 宏 定 义 *
; *------------------*/
; #ifndef SYS_TIMER_MS_ADD_UNTILL_OVF
; #error Need for SYS_TIMER_MS_ADD_UNTILL_OVF !
; #else
; extern uint16 SYS_TIMER_MS_ADD_UNTILL_OVF;
; #endif
;
; /********************
; * 用户变量类型定义 *
; ********************/
;
; /********************
; * 结构体定义区 *
; ********************/
;
; /********************
; * 模块函数声明区 *
; ********************/
;
; /********************
; * 全局函数声明区 *
; ********************/
; void LED_Flash_Control_INIT(void);
; BOOL LED_Flash_Control_Refresh(void);
;
; /********************
; * 模块变量声明区 *
; ********************/
;
; /********************
; * 全局变量声明区 *
; ********************/
; uint8 g_cLEDs[LED_FCTR_LED_COUNT];
;
;
; /***********************************************************
; * 函数说明:LED闪烁控制初始化函数 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数:无 *
; ***********************************************************/
; void LED_Flash_Control_INIT(void)
; {
.dbline 98
; uint8 n = 0;
.dbline 100
;
; for (n = 0;n < UBOUND(g_cLEDs);n++)
clr R20
xjmp L5
L2:
.dbline 101
; {
.dbline 102
; g_cLEDs[n] = LED_OFF;
ldi R24,<_g_cLEDs
ldi R25,>_g_cLEDs
mov R30,R20
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 104
;
; LED_PORT |= BIT(LED_PORT_START+n);
mov R17,R20
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
in R2,0x15
or R2,R16
out 0x15,R2
.dbline 105
; }
L3:
.dbline 100
inc R20
L5:
.dbline 100
cpi R20,2
brlo L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ld R20,y+
ret
.dbsym r n1 20 c
.dbend
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_UseLED_Flash_CTR.c
L7:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_UseLED_Flash_CTR.c
.area text(rom, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_UseLED_Flash_CTR.c
.dbfunc e LED_Flash_Control_Refresh _LED_Flash_Control_Refresh fc
.dbsym s n L7 c
.even
_LED_Flash_Control_Refresh::
st -y,R20
.dbline -1
.dbline 115
; }
;
; /***********************************************************
; * 函数说明:LED闪烁刷新函数 *
; * 输入: 无 *
; * 输出: 是否继续执行 *
; * 调用函数:无 *
; ***********************************************************/
; BOOL LED_Flash_Control_Refresh(void)
; {
.dbline 118
; static uint8 n = 0;
;
; switch(g_cLEDs[n])
ldi R24,<_g_cLEDs
ldi R25,>_g_cLEDs
lds R30,L7
clr R31
add R30,R24
adc R31,R25
ldd R20,z+0
tst R20
brne X14
xjmp L27
X14:
X1:
cpi R20,1
breq L11
X2:
cpi R20,2
breq L12
X3:
cpi R20,3
brne X15
xjmp L15
X15:
X4:
cpi R20,4
brne X16
xjmp L18
X16:
X5:
cpi R20,5
brne X17
xjmp L21
X17:
X6:
cpi R20,6
brne X18
xjmp L24
X18:
X7:
xjmp L8
L11:
.dbline 122
; {
; case LED_ON:
; #ifdef _LED_FLASH_CTR_ANODE
; LED_PORT |= BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
in R2,0x15
or R2,R16
out 0x15,R2
.dbline 126
; #else
; LED_PORT &= ~BIT(LED_PORT_START+n);
; #endif
; break;
xjmp L9
L12:
.dbline 128
; case LED_FLASH_VERY_SLOW:
; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & 0x07ff) > 0x03ff)
ldi R24,1023
ldi R25,3
lds R30,_g_wSystemTimer
lds R31,_g_wSystemTimer+1
andi R31,7
cp R24,R30
cpc R25,R31
brsh L13
X8:
.dbline 129
; {
.dbline 130
; LED_PORT |= BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
in R2,0x15
or R2,R16
out 0x15,R2
.dbline 131
; }
xjmp L9
L13:
.dbline 133
; else
; {
.dbline 134
; LED_PORT &= ~BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
mov R2,R16
com R2
in R3,0x15
and R3,R2
out 0x15,R3
.dbline 135
; }
.dbline 136
; break;
xjmp L9
L15:
.dbline 138
; case LED_FLASH_SLOW:
; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & 0x03ff) > 0x01ff)
ldi R24,511
ldi R25,1
lds R30,_g_wSystemTimer
lds R31,_g_wSystemTimer+1
andi R31,3
cp R24,R30
cpc R25,R31
brsh L16
X9:
.dbline 139
; {
.dbline 140
; LED_PORT |= BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
in R2,0x15
or R2,R16
out 0x15,R2
.dbline 141
; }
xjmp L9
L16:
.dbline 143
; else
; {
.dbline 144
; LED_PORT &= ~BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
mov R2,R16
com R2
in R3,0x15
and R3,R2
out 0x15,R3
.dbline 145
; }
.dbline 146
; break;
xjmp L9
L18:
.dbline 148
; case LED_FLASH:
; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & 0x01ff) > 0x00ff)
ldi R24,255
ldi R25,0
lds R30,_g_wSystemTimer
lds R31,_g_wSystemTimer+1
andi R31,1
cp R24,R30
cpc R25,R31
brsh L19
X10:
.dbline 149
; {
.dbline 150
; LED_PORT |= BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
in R2,0x15
or R2,R16
out 0x15,R2
.dbline 151
; }
xjmp L9
L19:
.dbline 153
; else
; {
.dbline 154
; LED_PORT &= ~BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
mov R2,R16
com R2
in R3,0x15
and R3,R2
out 0x15,R3
.dbline 155
; }
.dbline 156
; break;
xjmp L9
L21:
.dbline 158
; case LED_FLASH_FAST:
; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & 0x00ff) > 0x007f)
ldi R24,127
ldi R25,0
lds R30,_g_wSystemTimer
lds R31,_g_wSystemTimer+1
andi R31,0
cp R24,R30
cpc R25,R31
brsh L22
X11:
.dbline 159
; {
.dbline 160
; LED_PORT |= BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
in R2,0x15
or R2,R16
out 0x15,R2
.dbline 161
; }
xjmp L9
L22:
.dbline 163
; else
; {
.dbline 164
; LED_PORT &= ~BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
mov R2,R16
com R2
in R3,0x15
and R3,R2
out 0x15,R3
.dbline 165
; }
.dbline 166
; break;
xjmp L9
L24:
.dbline 168
; case LED_FLASH_VERY_FAST:
; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & 0x003f) > 0x001f)
ldi R24,31
ldi R25,0
lds R30,_g_wSystemTimer
lds R31,_g_wSystemTimer+1
andi R30,63
andi R31,0
cp R24,R30
cpc R25,R31
brsh L25
X12:
.dbline 169
; {
.dbline 170
; LED_PORT |= BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
in R2,0x15
or R2,R16
out 0x15,R2
.dbline 171
; }
xjmp L9
L25:
.dbline 173
; else
; {
.dbline 174
; LED_PORT &= ~BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
mov R2,R16
com R2
in R3,0x15
and R3,R2
out 0x15,R3
.dbline 175
; }
.dbline 176
; break;
xjmp L9
L27:
L8:
.dbline 180
; case LED_OFF:
; default:
; #ifdef _LED_FLASH_CTR_ANODE
; LED_PORT &= ~BIT(LED_PORT_START+n);
lds R17,L7
subi R17,250 ; addi 6
ldi R16,1
xcall lsl8
mov R2,R16
com R2
in R3,0x15
and R3,R2
out 0x15,R3
.dbline 184
; #else
; LED_PORT |= BIT(LED_PORT_START+n);
; #endif
; break;
L9:
.dbline 187
; }
;
; n++;
lds R24,L7
subi R24,255 ; addi 1
sts L7,R24
.dbline 188
; if (n == LED_FCTR_LED_COUNT)
cpi R24,2
brne L28
X13:
.dbline 189
; {
.dbline 190
; n = 0;
clr R2
sts L7,R2
.dbline 191
; return FALSE;
clr R16
xjmp L6
L28:
.dbline 194
; }
;
; return TRUE;
ldi R16,1
.dbline -2
L6:
.dbline 0 ; func end
ld R20,y+
ret
.dbend
.area bss(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_UseLED_Flash_CTR.c
_g_cLEDs::
.blkb 2
.dbsym e g_cLEDs _g_cLEDs A[2:2]c
; }
;
;
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -