📄 spi_tlc5615.lis
字号:
.module spi_tlc5615.c
.area text(rom, con, rel)
0000 .dbfile spi_tlc5615.c
0000 .dbfile F:\file\数控电源3\ad_da\text\spi_tlc5615.c
0000 .dbfunc e spi_init _spi_init fV
.even
0000 _spi_init::
0000 .dbline -1
0000 .dbline 4
0000 ; #define SPI_TLC5615_C
0000 ; #include "includes.h"
0000 ; void spi_init(void)//SPI初始化
0000 ; {
0000 .dbline 5
0000 ; SPCR=0X50; //使能SPI,MSB先发,主模式,CPOL为0,默认4分频
0000 80E5 ldi R24,80
0002 8DB9 out 0xd,R24
0004 .dbline -2
0004 L1:
0004 .dbline 0 ; func end
0004 0895 ret
0006 .dbend
0006 .dbfunc e spi_io_init _spi_io_init fV
.even
0006 _spi_io_init::
0006 .dbline -1
0006 .dbline 9
0006 ;
0006 ; }
0006 ; void spi_io_init(void)
0006 ; {
0006 .dbline 10
0006 ; DDRB|=(1<<PB4)|(1<<PB5)|(1<<PB7); //PB4-SS,PB5-MOSI,PB7-SCK
0006 87B3 in R24,0x17
0008 806B ori R24,176
000A 87BB out 0x17,R24
000C .dbline 11
000C ; PORTB|=(1<<PB4)|(1<<PB5)|(1<<PB7);//PB4拉高TLC5615不使能;MOSI,SCK为高电平
000C 88B3 in R24,0x18
000E 806B ori R24,176
0010 88BB out 0x18,R24
0012 .dbline -2
0012 L2:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbend
0014 .dbfunc e spi_tlc5615 _spi_tlc5615 fV
0014 ; temp -> R22,R23
0014 ; temp2 -> R10
0014 ; temp1 -> R12
0014 ; status -> R20
0014 ; idata -> R20,R21
.even
0014 _spi_tlc5615::
0014 00D0 rcall push_xgsetF03C
0016 A801 movw R20,R16
0018 .dbline -1
0018 .dbline 14
0018 ; }
0018 ; void spi_tlc5615(unsigned int idata)//0000 00(78 8765 4321)
0018 ; {
0018 .dbline 16
0018 ; unsigned int temp;
0018 ; unsigned char temp1=0,temp2=0,status;
0018 .dbline 16
0018 .dbline 17
0018 ; temp=idata<<2;//0000 7887 6543 2100
0018 BA01 movw R22,R20
001A 660F lsl R22
001C 771F rol R23
001E 660F lsl R22
0020 771F rol R23
0022 .dbline 18
0022 ; temp1=(temp&0xff00)>>8;//0000 0000 (0000 7887)
0022 CB01 movw R24,R22
0024 8070 andi R24,0
0026 6C01 movw R12,R24
0028 CD2C mov R12,R13
002A DD24 clr R13
002C .dbline 19
002C ; temp2=(idata&0x00ff);//0000 0000 (6543 2100)
002C CA01 movw R24,R20
002E 9070 andi R25,0
0030 A82E mov R10,R24
0032 .dbline 21
0032 ;
0032 ; PORTB&=~(1<<PB4);//使能TLC5615
0032 C498 cbi 0x18,4
0034 .dbline 22
0034 ; SPDR=temp1;//传送数据高二位
0034 CFB8 out 0xf,R12
0036 L4:
0036 .dbline 24
0036 ; do
0036 ; {
0036 .dbline 25
0036 ; status=SPSR;
0036 4EB1 in R20,0xe
0038 .dbline 26
0038 ; }while(!(status&=0X80));
0038 L5:
0038 .dbline 26
0038 842F mov R24,R20
003A 8078 andi R24,128
003C 482F mov R20,R24
003E 8823 tst R24
0040 D1F3 breq L4
0042 X0:
0042 .dbline 28
0042 ;
0042 ; delay_nms(10);
0042 0AE0 ldi R16,10
0044 10E0 ldi R17,0
0046 00D0 rcall _delay_nms
0048 .dbline 30
0048 ;
0048 ; SPSR=0;
0048 2224 clr R2
004A 2EB8 out 0xe,R2
004C .dbline 31
004C ; SPDR=temp2;//传送数据低八位
004C AFB8 out 0xf,R10
004E L7:
004E .dbline 33
004E ; do
004E ; {
004E .dbline 34
004E ; status=SPSR;
004E 4EB1 in R20,0xe
0050 .dbline 35
0050 ; }while(!(status&=0X80));
0050 L8:
0050 .dbline 35
0050 842F mov R24,R20
0052 8078 andi R24,128
0054 482F mov R20,R24
0056 8823 tst R24
0058 D1F3 breq L7
005A X1:
005A .dbline 36
005A ; SPSR=0;
005A 2224 clr R2
005C 2EB8 out 0xe,R2
005E .dbline 37
005E ; delay_nms(10);
005E 0AE0 ldi R16,10
0060 10E0 ldi R17,0
0062 00D0 rcall _delay_nms
0064 .dbline 38
0064 ; PORTB|=(1<<PB4);//TLC5615不使能
0064 C49A sbi 0x18,4
0066 .dbline -2
0066 L3:
0066 .dbline 0 ; func end
0066 00C0 rjmp pop_xgsetF03C
0068 .dbsym r temp 22 i
0068 .dbsym r temp2 10 c
0068 .dbsym r temp1 12 c
0068 .dbsym r status 20 c
0068 .dbsym r idata 20 i
0068 .dbend
0068 ; }
0068 ;
0068 ;
0068 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -