📄 dac_tlc5615.s
字号:
; case 0xdd:return 9; //按键9
ldi R16,9
xjmp L21
L35:
.dbline 112
; case 0xbd:return 10; //按键A
ldi R16,10
xjmp L21
L36:
.dbline 113
; case 0x7d:return 11; //按键B
ldi R16,11
xjmp L21
L37:
.dbline 114
; case 0xee:return 12; //按键C
ldi R16,12
xjmp L21
L38:
.dbline 115
; case 0xde:return 13; //按键D
ldi R16,13
xjmp L21
L39:
.dbline 116
; case 0xbe:return 14; //按键E
ldi R16,14
xjmp L21
L40:
.dbline 117
; case 0x7e:return 15; //按键F
ldi R16,15
xjmp L21
L22:
.dbline 118
; default: return 16; //无按键按下
ldi R16,16
.dbline -2
L21:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r key 16 c
.dbend
.dbfunc e Display_One_SMG _Display_One_SMG fV
; data -> R12
; bit -> R10
.even
_Display_One_SMG::
xcall push_xgset003C
mov R12,R18
mov R10,R16
.dbline -1
.dbline 129
; }
; }
; /*******************************************************/
; /****** 函数名称: Display_One_SMG() ******/
; /****** 功 能: 显示指定内容在指定位 ******/
; /****** 参 数: bit--位(1-8), ******/
; /****** data--显示内容(0-15,16为全灭)****/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void Display_One_SMG(unsigned char bit,unsigned char data)
; {
.dbline 130
; SMG=SMG_Conver[data]; //送显示数据
ldi R24,<_SMG_Conver
ldi R25,>_SMG_Conver
mov R30,R12
clr R31
add R30,R24
adc R31,R25
lpm R2,Z
out 0x18,R2
.dbline 131
; Open_SMG_DATA; //锁存数据
sbi 0x1b,3
.dbline 132
; Close_SMG_DATA;
cbi 0x1b,3
.dbline 133
; SMG=~BIT(bit); //送位数据
ldi R16,1
mov R17,R10
xcall lsl8
mov R2,R16
com R2
out 0x18,R2
.dbline 134
; Open_SMG_BIT; //锁存数据
sbi 0x1b,2
.dbline 135
; Close_SMG_BIT;
cbi 0x1b,2
.dbline 136
; delay_nms(2);
ldi R16,2
ldi R17,0
xcall _delay_nms
.dbline -2
L44:
.dbline 0 ; func end
xjmp pop_xgset003C
.dbsym r data 12 c
.dbsym r bit 10 c
.dbend
.dbfunc e Display_One_SMG_Point _Display_One_SMG_Point fV
; bit -> R10
.even
_Display_One_SMG_Point::
st -y,R10
st -y,R11
mov R10,R16
.dbline -1
.dbline 144
; }
; /*******************************************************/
; /****** 函数名称: Display_One_SMG_Point() ******/
; /****** 功 能: 显示小数点在指定位 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void Display_One_SMG_Point(unsigned char bit)
; {
.dbline 145
; SMG=0x80; //送显示数据
ldi R24,128
out 0x18,R24
.dbline 146
; Open_SMG_DATA; //锁存数据
sbi 0x1b,3
.dbline 147
; Close_SMG_DATA;
cbi 0x1b,3
.dbline 148
; SMG=~BIT(bit); //送位数据
ldi R16,1
mov R17,R10
xcall lsl8
mov R2,R16
com R2
out 0x18,R2
.dbline 149
; Open_SMG_BIT; //锁存数据
sbi 0x1b,2
.dbline 150
; Close_SMG_BIT;
cbi 0x1b,2
.dbline 151
; delay_nms(2);
ldi R16,2
ldi R17,0
xcall _delay_nms
.dbline -2
L45:
.dbline 0 ; func end
ld R11,y+
ld R10,y+
ret
.dbsym r bit 10 c
.dbend
.dbfunc e En_Led _En_Led fV
.even
_En_Led::
.dbline -1
.dbline 160
; }
; /*******************************************************/
; /****** 函数名称: En_Led() ******/
; /****** 功 能: 使能LED功能 ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void En_Led(void)
; {
.dbline 161
; DDRB=0xff; //设置输出
ldi R24,255
out 0x17,R24
.dbline 162
; PORTB=0xff; //输出高电平
out 0x18,R24
.dbline 163
; Open_LED; //打开LED功能
sbi 0x1b,4
.dbline -2
L46:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Un_Led _Un_Led fV
.even
_Un_Led::
.dbline -1
.dbline 172
; }
; /*******************************************************/
; /****** 函数名称: Un_Led() ******/
; /****** 功 能: 关闭LED功能 ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void Un_Led(void)
; {
.dbline 173
; DDRB=0xff; //设置输出
ldi R24,255
out 0x17,R24
.dbline 174
; PORTB=0xff; //输出高电平
out 0x18,R24
.dbline 175
; Open_LED; //打开LED功能
sbi 0x1b,4
.dbline 176
; Close_LED; //关闭LED功能
cbi 0x1b,4
.dbline -2
L47:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Clear_SMG _Clear_SMG fV
.even
_Clear_SMG::
.dbline -1
.dbline 185
; }
; /*******************************************************/
; /****** 函数名称: Clear_SMG() ******/
; /****** 功 能: 关闭数码管功能 ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void Clear_SMG(void)
; {
.dbline 186
; DDRB=0xff; //设置输出
ldi R24,255
out 0x17,R24
.dbline 187
; PORTB=0x00; //输出高电平
clr R2
out 0x18,R2
.dbline 188
; Open_SMG_DATA; //锁存数据
sbi 0x1b,3
.dbline 189
; Close_SMG_DATA;
cbi 0x1b,3
.dbline 190
; Open_SMG_BIT;
sbi 0x1b,2
.dbline 191
; Close_SMG_BIT;
cbi 0x1b,2
.dbline -2
L48:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Spi_Init _Spi_Init fV
; i -> R16
.even
_Spi_Init::
.dbline -1
.dbline 200
; }
; /*******************************************************/
; /****** 函数名称: Spi_Init() ******/
; /****** 功 能: 初始化SPI接口 ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void Spi_Init(void)
; {
.dbline 202
; unsigned char i;
; DDRB|=0xb0; //MISO输入MOSI,SCK,SS输出
in R24,0x17
ori R24,176
out 0x17,R24
.dbline 203
; DDRB&=~0x40;
cbi 0x17,6
.dbline 204
; PORTB|=0x40; //MISO上拉有效
sbi 0x18,6
.dbline 205
; SPSR=0x01; //SPI允许,主机模式,高位在先,极性00,1/2系统时钟速率
ldi R24,1
out 0xe,R24
.dbline 206
; SPCR=0x50;
ldi R24,80
out 0xd,R24
.dbline 207
; i=SPSR;
in R16,0xe
.dbline 208
; i=SPDR; //清空SPI,和中断标志,使SPI空闲
in R16,0xf
.dbline -2
L49:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e PutSPIchar _PutSPIchar fV
; data -> R16
.even
_PutSPIchar::
.dbline -1
.dbline 217
; }
; /*******************************************************/
; /****** 函数名称: PutSPIchar() ******/
; /****** 功 能: 用SPI发送数据 ******/
; /****** 参 数: data--待发的数据 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void PutSPIchar(char data)
; {
.dbline 218
; SPDR=data;
out 0xf,R16
L51:
.dbline 219
; while(!(SPSR&(1<<SPIF))); //等待发送完毕
L52:
.dbline 219
sbis 0xe,7
rjmp L51
X34:
.dbline -2
L50:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.dbfunc e CPU_Init _CPU_Init fV
.even
_CPU_Init::
.dbline -1
.dbline 228
; }
; /*******************************************************/
; /****** 函数名称: CPU_Init() ******/
; /****** 功 能: 初始化CPU端口 ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void CPU_Init(void)
; {
.dbline 229
; PORTB=0xff;
ldi R24,255
out 0x18,R24
.dbline 230
; DDRB=0xff;
out 0x17,R24
.dbline 231
; PORTA=0x80;
ldi R24,128
out 0x1b,R24
.dbline 232
; DDRA=0xdc;
ldi R24,220
out 0x1a,R24
.dbline 233
; DDRB=0x00;
clr R2
out 0x17,R2
.dbline 234
; PORTC=0xff;
ldi R24,255
out 0x15,R24
.dbline 235
; DDRC=0x00;
out 0x14,R2
.dbline 236
; PORTD=0xff;
out 0x12,R24
.dbline 237
; DDRD=0x00;
out 0x11,R2
.dbline 238
; Un_Led();
xcall _Un_Led
.dbline 239
; Clear_SMG();
xcall _Clear_SMG
.dbline -2
L54:
.dbline 0 ; func end
ret
.dbend
.dbfile D:\垃圾站\5615\DAC_TLC5615.c
.dbfunc e main _main fV
; i -> R20,R21
.even
_main::
.dbline -1
.dbline 21
; /////////////////////////////////////////////////////////////
; // 文件:DAC_TLC5615.C //
; // 环境:编译为ICC AVR6.31A,仿真为AVR Studio4.12sp4 //
; // 硬件:ATMEGA16芯片 //
; // 日期:2007年5月28日 //
; // 功能:DA输出模拟电压控制LED亮度渐变 //
; // 备注: //
; /////////////////////////////////////////////////////////////
; #include <iom16v.h> //包含单片机型号头文件
; #include <macros.h> //包含"位"操作头文件
; #include "delay.h" //包含延时头文件
; #include "AVR_XQV12.h" //包含通用函数及宏定义头文件
;
; /*******************************************************/
; /****** 函数名称: main() ******/
; /****** 功 能: DA输出模拟电压控制LED亮度渐变 ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void main(void)
; {
.dbline 23
; unsigned int i;
; CPU_Init(); //初始化单片机
xcall _CPU_Init
.dbline 24
; Spi_Init(); //初始化SPI接口
xcall _Spi_Init
xjmp L57
L56:
.dbline 26
; while(1) //无限循环
; {
.dbline 28
;
; i=256;
.dbline 29
; Clr_CS5615; //片选TLC5615 ((i&0x03c0)>>6)
cbi 0x1b,4
.dbline 30
; PutSPIchar((unsigned char) 0x00);//发送数据)((i&0x003f)<<2)
clr R16
xcall _PutSPIchar
.dbline 31
; PutSPIchar((unsigned char) 0x00);
clr R16
xcall _PutSPIchar
.dbline 32
; Set_CS5615; //释放TLC5615
sbi 0x1b,4
.dbline 33
; delay_nms(5); //延时
ldi R16,5
ldi R17,0
xcall _delay_nms
.dbline 36
;
;
; i=1023;
ldi R20,1023
ldi R21,3
.dbline 37
; Clr_CS5615; //片选TLC5615
cbi 0x1b,4
.dbline 38
; PutSPIchar((unsigned char) 0xff);//发送数据((i&0x03c0)>>6)
ldi R16,255
xcall _PutSPIchar
.dbline 39
; PutSPIchar((unsigned char) 0xff);
ldi R16,255
xcall _PutSPIchar
.dbline 40
; Set_CS5615; //释放TLC5615)((i&0x003f)<<2)
sbi 0x1b,4
.dbline 41
; delay_nms(5); //延时
ldi R16,5
ldi R17,0
xcall _delay_nms
.dbline 43
;
; }
L57:
.dbline 25
xjmp L56
X35:
.dbline -2
L55:
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbend
.area bss(ram, con, rel)
.dbfile D:\垃圾站\5615\DAC_TLC5615.c
_temprter::
.blkb 2
.dbfile D:\垃圾站\5615\AVR_XQV12.h
.dbsym e temprter _temprter i
_Key_Number::
.blkb 1
.dbsym e Key_Number _Key_Number c
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -