📄 数码管.s
字号:
.module _数码管.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管/delay.h
.dbfunc e DelayUS _DelayUS fV
; time -> R16,R17
.even
_DelayUS::
.dbline -1
.dbline 9
; //包含所需头文件
; #include <ioM16v.h>
; #include <macros.h>
; #include"delay.h"
;
;
;
; /*------宏定义------*/
; #define uchar unsigned char
xjmp L3
L2:
.dbline 11
subi R16,1
sbci R17,0
L3:
.dbline 10
; #define uint unsigned int
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlo L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e DelayMS _DelayMS fV
; i -> R20,R21
; time -> R16,R17
.even
_DelayMS::
xcall push_gset1
.dbline -1
.dbline 20
;
; uchar led_date[]={0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/0xB0,/*3*/0x99,/*4*/0x92,/*5*/0x82,/*6*/0xF8,/*7*/0x80,/*8*/0x90,/*9*/0x88,/*A*/0x83,/*b*/0xC6,/*c*/0xA1,/*d*/0x86,/*E*/0x8E,/*F*/};
; uchar led_seg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
; //端口初始化
; void port_init(void)
; {
; PORTA = 0x00;//A口数据置0
; DDRA = 0xFF;//A口方向设为输出
; PORTB = 0xFF;//B口数据置1
; DDRB = 0xFF;//B口方向设为输出
xjmp L7
L6:
.dbline 23
; PORTC = 0x00;
; DDRC = 0x00;
; PORTD = 0x00;
.dbline 24
; DDRD = 0x00;
ldi R20,1
ldi R21,0
xjmp L12
L9:
.dbline 25
L10:
.dbline 24
subi R20,255 ; offset = 1
sbci R21,255
L12:
.dbline 24
cpi R20,141
ldi R30,0
cpc R21,R30
brlo L9
.dbline 26
L7:
.dbline 22
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L6
tst R3
brne L6
X0:
.dbline -2
L5:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r time 16 i
.dbend
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管/delay.h
_led_date::
.blkb 2
.area idata
.byte 192,249
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管/delay.h
.blkb 2
.area idata
.byte 164,176
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管/delay.h
.blkb 2
.area idata
.byte 153,146
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管/delay.h
.blkb 2
.area idata
.byte 130,248
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管/delay.h
.blkb 2
.area idata
.byte 128,144
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管/delay.h
.blkb 2
.area idata
.byte 136,131
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管/delay.h
.blkb 2
.area idata
.byte 198,161
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管/delay.h
.blkb 2
.area idata
.byte 134,142
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管/delay.h
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管\数码管.c
.dbsym e led_date _led_date A[16:16]c
_led_seg::
.blkb 2
.area idata
.byte 254,253
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管\数码管.c
.blkb 2
.area idata
.byte 251,247
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管\数码管.c
.blkb 2
.area idata
.byte 239,223
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管\数码管.c
.blkb 2
.area idata
.byte 191,127
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管\数码管.c
.dbsym e led_seg _led_seg A[8:8]c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\数码管\数码管.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 16
.dbline 17
clr R2
out 0x1b,R2
.dbline 18
ldi R24,255
out 0x1a,R24
.dbline 19
out 0x18,R24
.dbline 20
out 0x17,R24
.dbline 21
out 0x15,R2
.dbline 22
out 0x14,R2
.dbline 23
out 0x12,R2
.dbline 24
out 0x11,R2
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 29
; }
;
;
; void init_devices(void)
; {
.dbline 30
; CLI(); //禁止所有中断
cli
.dbline 31
; MCUCR = 0x00;//外部中断触发方式
clr R2
out 0x35,R2
.dbline 32
; MCUCSR = 0x80;//禁止JTAG
ldi R24,128
out 0x34,R24
.dbline 33
; GICR = 0x00;//外部中断使能
out 0x3b,R2
.dbline 34
; port_init();
xcall _port_init
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; j -> R20
; i -> R22
.even
_main::
.dbline -1
.dbline 39
; //SEI();//开全局中断
; }
; //主函数
; void main(void)
; {
.dbline 40
; uchar j=0,i=0;
clr R20
.dbline 40
clr R22
.dbline 41
; init_devices();
xcall _init_devices
xjmp L17
L16:
.dbline 43
; while(1)
; {
.dbline 44
; for(j=0;j<8;j++)
clr R20
xjmp L22
L19:
.dbline 45
; {
.dbline 46
; PORTB=led_seg[j];//设置数码管选通位段
ldi R24,<_led_seg
ldi R25,>_led_seg
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0x18,R2
.dbline 47
; for(i=0;i<16;i++)
clr R22
xjmp L26
L23:
.dbline 48
.dbline 49
ldi R24,<_led_date
ldi R25,>_led_date
mov R30,R22
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0x1b,R2
.dbline 50
ldi R16,300
ldi R17,1
xcall _DelayMS
.dbline 51
L24:
.dbline 47
inc R22
L26:
.dbline 47
cpi R22,16
brlo L23
.dbline 52
L20:
.dbline 44
inc R20
L22:
.dbline 44
cpi R20,8
brlo L19
.dbline 53
L17:
.dbline 42
xjmp L16
X1:
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 22 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -