⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac_tlc5615.s

📁 基于ATMEGA16的DA转换的C程序源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
; 		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 + -