📄 salve.s
字号:
ldi R18,10
ldi R19,0
movw R16,R10
xcall mod16u
movw R2,R16
movw R16,R10
sub R16,R2
sbc R17,R3
ldi R18,10
ldi R19,0
xcall div16u
movw R10,R16
.dbline 124
; i--;
dec R12
.dbline 125
; }while(number>=1);
L27:
.dbline 125
movw R24,R10
cpi R24,1
ldi R30,0
cpc R25,R30
brsh L26
X7:
.dbline 126
; }
L25:
.dbline -2
L23:
.dbline 0 ; func end
xjmp pop_xgset003C
.dbsym r i 12 c
.dbsym r number 10 i
.dbend
.dbfunc e SEG_R _SEG_R fV
; i -> R12
; number -> R10,R11
.even
_SEG_R::
xcall push_xgset003C
movw R10,R16
.dbline -1
.dbline 132
; }
; //=====================================
;
; //=============SEG右四显示数字==============
; void SEG_R(unsigned int number)
; {
.dbline 133
; unsigned char i=8;
ldi R24,8
mov R12,R24
.dbline 135
;
; SEND(0x05,0x0f); //先清除右四位,右四位黑屏
ldi R18,15
ldi R16,5
xcall _SEND
.dbline 136
; SEND(0x06,0x0f);
ldi R18,15
ldi R16,6
xcall _SEND
.dbline 137
; SEND(0x07,0x0f);
ldi R18,15
ldi R16,7
xcall _SEND
.dbline 138
; SEND(0x08,0x0f);
ldi R18,15
ldi R16,8
xcall _SEND
.dbline 140
;
; if(number>9999)//要显示的数值超过4位,则显示4个H
ldi R24,9999
ldi R25,39
cp R24,R10
cpc R25,R11
brsh L30
X8:
.dbline 141
; {
.dbline 142
; SEND(0x05,0x0c);
ldi R18,12
ldi R16,5
xcall _SEND
.dbline 143
; SEND(0x06,0x0c);
ldi R18,12
ldi R16,6
xcall _SEND
.dbline 144
; SEND(0x07,0x0c);
ldi R18,12
ldi R16,7
xcall _SEND
.dbline 145
; SEND(0x08,0x0c);
ldi R18,12
ldi R16,8
xcall _SEND
.dbline 146
; }
xjmp L31
L30:
.dbline 148
; else//小于四位可以显示
; {
L32:
.dbline 156
; /* for(i=8;i>4;i--)
; {
; SEND(i,number%10);
; number=(number-number%10)/10;
; } */
;
; do
; {
.dbline 157
; SEND(i,number%10);
ldi R18,10
ldi R19,0
movw R16,R10
xcall mod16u
mov R18,R16
mov R16,R12
xcall _SEND
.dbline 158
; number=(number-number%10)/10;
ldi R18,10
ldi R19,0
movw R16,R10
xcall mod16u
movw R2,R16
movw R16,R10
sub R16,R2
sbc R17,R3
ldi R18,10
ldi R19,0
xcall div16u
movw R10,R16
.dbline 159
; i--;
dec R12
.dbline 160
; }while(number>=1);
L33:
.dbline 160
movw R24,R10
cpi R24,1
ldi R30,0
cpc R25,R30
brsh L32
X9:
.dbline 161
; }
L31:
.dbline -2
L29:
.dbline 0 ; func end
xjmp pop_xgset003C
.dbsym r i 12 c
.dbsym r number 10 i
.dbend
.area data(ram, con, rel)
.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\display.c
_k::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\display.c
.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\salve.c
.dbsym e k _k c
.area text(rom, con, rel)
.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\salve.c
.dbfunc e delay _delay fV
; i -> R10,R11
; j -> R12,R13
; z -> R16,R17
.even
_delay::
xcall push_xgset003C
.dbline -1
.dbline 20
; //包含所需头文件
; #include <ioM16v.h>
; #include <macros.h>
; #include "display.c"
;
;
;
; /*------宏定义------*/
; #define uchar unsigned char
; #define uint unsigned int
;
; uchar k=0;
;
; /*------函数定义------*/
; //SPI函数
; void spi_write(uchar sData);
; uchar spi_read(void);
;
; void delay(uint z)
; {
.dbline 22
; uint i,j;
; for(i=0;i<z;i++)
clr R10
clr R11
xjmp L39
L36:
.dbline 23
; for(j=0;j<1000;j++);
clr R12
clr R13
xjmp L43
L40:
.dbline 23
L41:
.dbline 23
movw R24,R12
adiw R24,1
movw R12,R24
L43:
.dbline 23
movw R24,R12
cpi R24,232
ldi R30,3
cpc R25,R30
brlo L40
X10:
L37:
.dbline 22
movw R24,R10
adiw R24,1
movw R10,R24
L39:
.dbline 22
cp R10,R16
cpc R11,R17
brlo L36
X11:
.dbline -2
L35:
.dbline 0 ; func end
xjmp pop_xgset003C
.dbsym r i 10 i
.dbsym r j 12 i
.dbsym r z 16 i
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 29
; }
;
;
; //端口初始化
; void port_init(void)
; {
.dbline 30
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 31
; DDRA = 0x00;
out 0x1a,R2
.dbline 32
; PORTB = 0x00;
out 0x18,R2
.dbline 33
; DDRB = 0x00;
out 0x17,R2
.dbline 34
; PORTC = 0x00;
out 0x15,R2
.dbline 35
; DDRC = 0x00;
out 0x14,R2
.dbline 36
; PORTD = 0x00;
out 0x12,R2
.dbline 37
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L44:
.dbline 0 ; func end
ret
.dbend
.dbfunc e spi_init _spi_init fV
.even
_spi_init::
.dbline -1
.dbline 42
; }
;
;
; void spi_init(void)
; {
.dbline 44
; //spi初始化
; DDRB|=BIT(PB6);
sbi 0x17,6
.dbline 45
; SPCR = 0x40;
ldi R24,64
out 0xd,R24
.dbline 46
; SPSR = 0x00;
clr R2
out 0xe,R2
.dbline -2
L45:
.dbline 0 ; func end
ret
.dbend
.dbfunc e spi_write _spi_write fV
; sData -> R16
.even
_spi_write::
.dbline -1
.dbline 52
; }
;
;
; //功能:使用SPI发送一个字节
; void spi_write(uchar sData)
; {
.dbline 53
; SPDR = sData;
out 0xf,R16
L47:
.dbline 54
; while(!(SPSR & BIT(SPIF)));
L48:
.dbline 54
sbis 0xe,7
rjmp L47
X12:
.dbline -2
L46:
.dbline 0 ; func end
ret
.dbsym r sData 16 c
.dbend
.dbfunc e spi_read _spi_read fc
.even
_spi_read::
.dbline -1
.dbline 61
; //sData=SPDR;//读从机发回来的数据
; }
;
;
; //功能:使用SPI接收一个字节
; uchar spi_read(void)
; {
.dbline 62
; SPDR = 0x00;
clr R2
out 0xf,R2
L51:
.dbline 63
; while(!(SPSR & BIT(SPIF)));
L52:
.dbline 63
sbis 0xe,7
rjmp L51
X13:
.dbline 64
; k++;
lds R24,_k
subi R24,255 ; addi 1
sts _k,R24
.dbline 65
; return SPDR;
in R16,0xf
.dbline -2
L50:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 71
;
; }
;
;
; void init_devices(void)
; {
.dbline 72
; CLI(); //禁止所有中断
cli
.dbline 73
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 74
; MCUCSR = 0x80;//禁止JTAG
ldi R24,128
out 0x34,R24
.dbline 75
; GICR = 0x00;
out 0x3b,R2
.dbline 76
; port_init();
xcall _port_init
.dbline 77
; spi_init();
xcall _spi_init
.dbline 78
; SEI();//开全局中断
sei
.dbline -2
L54:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 82
; }
; //主函数
; void main(void)
; {
.dbline 83
; init_devices();
xcall _init_devices
.dbline 84
; SEG_INIT();
xcall _SEG_INIT
.dbline 85
; delay(100);
ldi R16,100
ldi R17,0
xcall _delay
xjmp L57
L56:
.dbline 87
; while(!(k==8))
; {
.dbline 88
; SEG_R(spi_read());
xcall _spi_read
clr R17
xcall _SEG_R
.dbline 89
; delay(100);
ldi R16,100
ldi R17,0
xcall _delay
.dbline 90
; SEG_L(spi_read());
xcall _spi_read
clr R17
xcall _SEG_L
.dbline 91
; }
L57:
.dbline 86
lds R24,_k
cpi R24,8
brne L56
X14:
.dbline 92
; spi_write(255);
ldi R16,255
xcall _spi_write
L59:
.dbline 94
; while(1)
; {
.dbline 95
; ;
.dbline 96
; }
L60:
.dbline 93
xjmp L59
X15:
.dbline -2
L55:
.dbline 0 ; func end
ret
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -