📄 dac_tlc5615.lis
字号:
022E .dbline 207
022E ; i=SPSR;
022E 0EB1 in R16,0xe
0230 .dbline 208
0230 ; i=SPDR; //清空SPI,和中断标志,使SPI空闲
0230 0FB1 in R16,0xf
0232 .dbline -2
0232 L49:
0232 .dbline 0 ; func end
0232 0895 ret
0234 .dbsym r i 16 c
0234 .dbend
0234 .dbfunc e PutSPIchar _PutSPIchar fV
0234 ; data -> R16
.even
0234 _PutSPIchar::
0234 .dbline -1
0234 .dbline 217
0234 ; }
0234 ; /*******************************************************/
0234 ; /****** 函数名称: PutSPIchar() ******/
0234 ; /****** 功 能: 用SPI发送数据 ******/
0234 ; /****** 参 数: data--待发的数据 ******/
0234 ; /****** 返回值 : 无 ******/
0234 ; /*******************************************************/
0234 ; void PutSPIchar(char data)
0234 ; {
0234 .dbline 218
0234 ; SPDR=data;
0234 0FB9 out 0xf,R16
0236 L51:
0236 .dbline 219
0236 ; while(!(SPSR&(1<<SPIF))); //等待发送完毕
0236 L52:
0236 .dbline 219
0236 779B sbis 0xe,7
0238 FECF rjmp L51
023A X34:
023A .dbline -2
023A L50:
023A .dbline 0 ; func end
023A 0895 ret
023C .dbsym r data 16 c
023C .dbend
023C .dbfunc e CPU_Init _CPU_Init fV
.even
023C _CPU_Init::
023C .dbline -1
023C .dbline 228
023C ; }
023C ; /*******************************************************/
023C ; /****** 函数名称: CPU_Init() ******/
023C ; /****** 功 能: 初始化CPU端口 ******/
023C ; /****** 参 数: 无 ******/
023C ; /****** 返回值 : 无 ******/
023C ; /*******************************************************/
023C ; void CPU_Init(void)
023C ; {
023C .dbline 229
023C ; PORTB=0xff;
023C 8FEF ldi R24,255
023E 88BB out 0x18,R24
0240 .dbline 230
0240 ; DDRB=0xff;
0240 87BB out 0x17,R24
0242 .dbline 231
0242 ; PORTA=0x80;
0242 80E8 ldi R24,128
0244 8BBB out 0x1b,R24
0246 .dbline 232
0246 ; DDRA=0xdc;
0246 8CED ldi R24,220
0248 8ABB out 0x1a,R24
024A .dbline 233
024A ; DDRB=0x00;
024A 2224 clr R2
024C 27BA out 0x17,R2
024E .dbline 234
024E ; PORTC=0xff;
024E 8FEF ldi R24,255
0250 85BB out 0x15,R24
0252 .dbline 235
0252 ; DDRC=0x00;
0252 24BA out 0x14,R2
0254 .dbline 236
0254 ; PORTD=0xff;
0254 82BB out 0x12,R24
0256 .dbline 237
0256 ; DDRD=0x00;
0256 21BA out 0x11,R2
0258 .dbline 238
0258 ; Un_Led();
0258 D2DF xcall _Un_Led
025A .dbline 239
025A ; Clear_SMG();
025A D7DF xcall _Clear_SMG
025C .dbline -2
025C L54:
025C .dbline 0 ; func end
025C 0895 ret
025E .dbend
025E .dbfile D:\8_DAC_TLC5615\DAC_TLC5615.c
025E .dbfunc e main _main fV
025E ; i -> R20,R21
.even
025E _main::
025E .dbline -1
025E .dbline 21
025E ; /////////////////////////////////////////////////////////////
025E ; // 文件:DAC_TLC5615.C //
025E ; // 环境:编译为ICC AVR6.31A,仿真为AVR Studio4.12sp4 //
025E ; // 硬件:ATMEGA16芯片 //
025E ; // 日期:2007年5月28日 //
025E ; // 功能:DA输出模拟电压控制LED亮度渐变 //
025E ; // 备注: //
025E ; /////////////////////////////////////////////////////////////
025E ; #include <iom16v.h> //包含单片机型号头文件
025E ; #include <macros.h> //包含"位"操作头文件
025E ; #include "delay.h" //包含延时头文件
025E ; #include "AVR_XQV12.h" //包含通用函数及宏定义头文件
025E ;
025E ; /*******************************************************/
025E ; /****** 函数名称: main() ******/
025E ; /****** 功 能: DA输出模拟电压控制LED亮度渐变 ******/
025E ; /****** 参 数: 无 ******/
025E ; /****** 返回值 : 无 ******/
025E ; /*******************************************************/
025E ; void main(void)
025E ; {
025E .dbline 23
025E ; unsigned int i;
025E ; CPU_Init(); //初始化单片机
025E EEDF xcall _CPU_Init
0260 .dbline 24
0260 ; Spi_Init(); //初始化SPI接口
0260 DDDF xcall _Spi_Init
0262 3DC0 xjmp L57
0264 L56:
0264 .dbline 26
0264 ; while(1) //无限循环
0264 ; {
0264 .dbline 27
0264 ; for(i=280;i<1024;i++) //电压逐渐变高
0264 48E1 ldi R20,280
0266 51E0 ldi R21,1
0268 17C0 xjmp L62
026A L59:
026A .dbline 28
026A ; {
026A .dbline 29
026A ; Clr_CS5615; //片选TLC5615
026A DF98 cbi 0x1b,7
026C .dbline 30
026C ; PutSPIchar((unsigned char)((i&0x03c0)>>6));//发送数据
026C 26E0 ldi R18,6
026E 30E0 ldi R19,0
0270 8A01 movw R16,R20
0272 007C andi R16,192
0274 1370 andi R17,3
0276 0E940000 xcall lsr16
027A DCDF xcall _PutSPIchar
027C .dbline 31
027C ; PutSPIchar((unsigned char)((i&0x003f)<<2));
027C 042F mov R16,R20
027E 0F73 andi R16,63
0280 1070 andi R17,0
0282 000F lsl R16
0284 111F rol R17
0286 000F lsl R16
0288 111F rol R17
028A D4DF xcall _PutSPIchar
028C .dbline 32
028C ; Set_CS5615; //释放TLC5615
028C DF9A sbi 0x1b,7
028E .dbline 33
028E ; delay_nms(2); //延时
028E 02E0 ldi R16,2
0290 10E0 ldi R17,0
0292 C4DE xcall _delay_nms
0294 .dbline 34
0294 ; }
0294 L60:
0294 .dbline 27
0294 4F5F subi R20,255 ; offset = 1
0296 5F4F sbci R21,255
0298 L62:
0298 .dbline 27
0298 4030 cpi R20,0
029A E4E0 ldi R30,4
029C 5E07 cpc R21,R30
029E 28F3 brlo L59
02A0 X35:
02A0 .dbline 35
02A0 ; for(i=1023;i>280;i--) //电压逐渐变低
02A0 4FEF ldi R20,1023
02A2 53E0 ldi R21,3
02A4 17C0 xjmp L66
02A6 L63:
02A6 .dbline 36
02A6 ; {
02A6 .dbline 37
02A6 ; Clr_CS5615; //片选TLC5615
02A6 DF98 cbi 0x1b,7
02A8 .dbline 38
02A8 ; PutSPIchar((unsigned char)((i&0x03c0)>>6));//发送数据
02A8 26E0 ldi R18,6
02AA 30E0 ldi R19,0
02AC 8A01 movw R16,R20
02AE 007C andi R16,192
02B0 1370 andi R17,3
02B2 0E940000 xcall lsr16
02B6 BEDF xcall _PutSPIchar
02B8 .dbline 39
02B8 ; PutSPIchar((unsigned char)((i&0x003f)<<2));
02B8 042F mov R16,R20
02BA 0F73 andi R16,63
02BC 1070 andi R17,0
02BE 000F lsl R16
02C0 111F rol R17
02C2 000F lsl R16
02C4 111F rol R17
02C6 B6DF xcall _PutSPIchar
02C8 .dbline 40
02C8 ; Set_CS5615; //释放TLC5615
02C8 DF9A sbi 0x1b,7
02CA .dbline 41
02CA ; delay_nms(2); //延时
02CA 02E0 ldi R16,2
02CC 10E0 ldi R17,0
02CE A6DE xcall _delay_nms
02D0 .dbline 42
02D0 ; }
02D0 L64:
02D0 .dbline 35
02D0 4150 subi R20,1
02D2 5040 sbci R21,0
02D4 L66:
02D4 .dbline 35
02D4 88E1 ldi R24,280
02D6 91E0 ldi R25,1
02D8 8417 cp R24,R20
02DA 9507 cpc R25,R21
02DC 20F3 brlo L63
02DE X36:
02DE .dbline 43
02DE ; }
02DE L57:
02DE .dbline 25
02DE C2CF xjmp L56
02E0 X37:
02E0 .dbline -2
02E0 L55:
02E0 .dbline 0 ; func end
02E0 0895 ret
02E2 .dbsym r i 20 i
02E2 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\8_DAC_TLC5615\DAC_TLC5615.c
0000 _temprter::
0000 .blkb 2
0002 .dbfile D:\8_DAC_TLC5615\AVR_XQV12.h
0002 .dbsym e temprter _temprter i
0002 _Key_Number::
0002 .blkb 1
0003 .dbsym e Key_Number _Key_Number c
0003 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -