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

📄 dac_tlc5615.lst

📁 ATmega16-TLC5615
💻 LST
📖 第 1 页 / 共 2 页
字号:
     111 C007      RJMP	0x0119
(0115) 		case 0xde:return 13;			//按键D
     112 E00D      LDI	R16,0xD
     113 C005      RJMP	0x0119
(0116) 		case 0xbe:return 14;			//按键E
     114 E00E      LDI	R16,0xE
     115 C003      RJMP	0x0119
(0117) 		case 0x7e:return 15;			//按键F
     116 E00F      LDI	R16,0xF
     117 C001      RJMP	0x0119
(0118) 		default: return 16;				//无按键按下
     118 E100      LDI	R16,0x10
     119 9159      LD	R21,Y+
     11A 9149      LD	R20,Y+
     11B 9508      RET
_Display_One_SMG:
  data                 --> R12
  bit                  --> R10
     11C 940E 01D0 CALL	push_xgset003C
     11E 2EC2      MOV	R12,R18
     11F 2EA0      MOV	R10,R16
(0119) 	}
(0120) }		
(0121) /*******************************************************/
(0122) /******   函数名称: Display_One_SMG()             ******/
(0123) /******   功    能: 显示指定内容在指定位          ******/
(0124) /******   参    数: bit--位(1-8),              ******/
(0125) /******             data--显示内容(0-15,16为全灭)****/
(0126) /******   返回值  : 无                            ******/
(0127) /*******************************************************/
(0128) void Display_One_SMG(unsigned char bit,unsigned char data)
(0129) {
(0130) 	SMG=SMG_Conver[data];	  	   		//送显示数据
     120 E584      LDI	R24,0x54
     121 E090      LDI	R25,0
     122 2DEC      MOV	R30,R12
     123 27FF      CLR	R31
     124 0FE8      ADD	R30,R24
     125 1FF9      ADC	R31,R25
     126 9024      LPM	R2,0(Z)
     127 BA28      OUT	0x18,R2
(0131) 	Open_SMG_DATA;						//锁存数据
     128 9ADB      SBI	0x1B,3
(0132) 	Close_SMG_DATA;					
     129 98DB      CBI	0x1B,3
(0133) 	SMG=~BIT(bit);						//送位数据
     12A E001      LDI	R16,1
     12B 2D1A      MOV	R17,R10
     12C 940E 01D5 CALL	lsl8
     12E 2E20      MOV	R2,R16
     12F 9420      COM	R2
     130 BA28      OUT	0x18,R2
(0134) 	Open_SMG_BIT;						//锁存数据
     131 9ADA      SBI	0x1B,2
(0135) 	Close_SMG_BIT;
     132 98DA      CBI	0x1B,2
(0136) 	delay_nms(2);
     133 E002      LDI	R16,2
     134 E010      LDI	R17,0
     135 DF2C      RCALL	_delay_nms
     136 940C 01C5 JMP	pop_xgset003C
_Display_One_SMG_Point:
  bit                  --> R10
     138 92AA      ST	R10,-Y
     139 92BA      ST	R11,-Y
     13A 2EA0      MOV	R10,R16
(0137) }
(0138) /*******************************************************/
(0139) /******   函数名称: Display_One_SMG_Point()       ******/
(0140) /******   功    能: 显示小数点在指定位            ******/
(0141) /******   返回值  : 无                            ******/
(0142) /*******************************************************/
(0143) void Display_One_SMG_Point(unsigned char bit)
(0144) {
(0145) 	SMG=0x80;	  	   		  	   	   	//送显示数据
     13B E880      LDI	R24,0x80
     13C BB88      OUT	0x18,R24
(0146) 	Open_SMG_DATA;						//锁存数据
     13D 9ADB      SBI	0x1B,3
(0147) 	Close_SMG_DATA;					
     13E 98DB      CBI	0x1B,3
(0148) 	SMG=~BIT(bit);						//送位数据
     13F E001      LDI	R16,1
     140 2D1A      MOV	R17,R10
     141 940E 01D5 CALL	lsl8
     143 2E20      MOV	R2,R16
     144 9420      COM	R2
     145 BA28      OUT	0x18,R2
(0149) 	Open_SMG_BIT;						//锁存数据
     146 9ADA      SBI	0x1B,2
(0150) 	Close_SMG_BIT;
     147 98DA      CBI	0x1B,2
(0151) 	delay_nms(2);
     148 E002      LDI	R16,2
     149 E010      LDI	R17,0
     14A DF17      RCALL	_delay_nms
     14B 90B9      LD	R11,Y+
     14C 90A9      LD	R10,Y+
     14D 9508      RET
(0152) }
(0153) /*******************************************************/
(0154) /******   函数名称: En_Led()                      ******/
(0155) /******   功    能: 使能LED功能                   ******/
(0156) /******   参    数: 无                            ******/
(0157) /******   返回值  : 无                            ******/
(0158) /*******************************************************/
(0159) void En_Led(void)
(0160) {
(0161)  	DDRB=0xff;	 				//设置输出
_En_Led:
     14E EF8F      LDI	R24,0xFF
     14F BB87      OUT	0x17,R24
(0162) 	PORTB=0xff;					//输出高电平
     150 BB88      OUT	0x18,R24
(0163) 	Open_LED;					//打开LED功能
     151 9ADC      SBI	0x1B,4
     152 9508      RET
(0164) }
(0165) /*******************************************************/
(0166) /******   函数名称: Un_Led()                      ******/
(0167) /******   功    能: 关闭LED功能                   ******/
(0168) /******   参    数: 无                            ******/
(0169) /******   返回值  : 无                            ******/
(0170) /*******************************************************/
(0171) void Un_Led(void)
(0172) {
(0173)  	DDRB=0xff;	 				//设置输出
_Un_Led:
     153 EF8F      LDI	R24,0xFF
     154 BB87      OUT	0x17,R24
(0174) 	PORTB=0xff;					//输出高电平
     155 BB88      OUT	0x18,R24
(0175) 	Open_LED;					//打开LED功能
     156 9ADC      SBI	0x1B,4
(0176) 	Close_LED;					//关闭LED功能
     157 98DC      CBI	0x1B,4
     158 9508      RET
(0177) }
(0178) /*******************************************************/
(0179) /******   函数名称: Clear_SMG()                   ******/
(0180) /******   功    能: 关闭数码管功能                ******/
(0181) /******   参    数: 无                            ******/
(0182) /******   返回值  : 无                            ******/
(0183) /*******************************************************/
(0184) void Clear_SMG(void)
(0185) {
(0186)  	DDRB=0xff;	 				//设置输出
_Clear_SMG:
     159 EF8F      LDI	R24,0xFF
     15A BB87      OUT	0x17,R24
(0187) 	PORTB=0x00;					//输出高电平
     15B 2422      CLR	R2
     15C BA28      OUT	0x18,R2
(0188) 	Open_SMG_DATA;				//锁存数据
     15D 9ADB      SBI	0x1B,3
(0189) 	Close_SMG_DATA;
     15E 98DB      CBI	0x1B,3
(0190) 	Open_SMG_BIT;
     15F 9ADA      SBI	0x1B,2
(0191) 	Close_SMG_BIT;
     160 98DA      CBI	0x1B,2
     161 9508      RET
(0192) }
(0193) /*******************************************************/
(0194) /******   函数名称: Spi_Init()                    ******/
(0195) /******   功    能: 初始化SPI接口                 ******/
(0196) /******   参    数: 无                            ******/
(0197) /******   返回值  : 无                            ******/
(0198) /*******************************************************/
(0199) void Spi_Init(void)
(0200) {
(0201)  	unsigned char i;
(0202) 	DDRB|=0xb0;	  	   			//MISO输入MOSI,SCK,SS输出
_Spi_Init:
  i                    --> R16
     162 B387      IN	R24,0x17
     163 6B80      ORI	R24,0xB0
     164 BB87      OUT	0x17,R24
(0203) 	DDRB&=~0x40;				
     165 98BE      CBI	0x17,6
(0204) 	PORTB|=0x40;				//MISO上拉有效
     166 9AC6      SBI	0x18,6
(0205) 	SPSR=0x01;					//SPI允许,主机模式,高位在先,极性00,1/2系统时钟速率
     167 E081      LDI	R24,1
     168 B98E      OUT	0x0E,R24
(0206) 	SPCR=0x50;
     169 E580      LDI	R24,0x50
     16A B98D      OUT	0x0D,R24
(0207) 	i=SPSR;
     16B B10E      IN	R16,0x0E
(0208) 	i=SPDR;						//清空SPI,和中断标志,使SPI空闲
     16C B10F      IN	R16,0x0F
     16D 9508      RET
(0209) }
(0210) /*******************************************************/
(0211) /******   函数名称: PutSPIchar()                  ******/
(0212) /******   功    能: 用SPI发送数据                 ******/
(0213) /******   参    数: data--待发的数据              ******/
(0214) /******   返回值  : 无                            ******/
(0215) /*******************************************************/
(0216) void PutSPIchar(char data)
(0217) {
(0218)  	SPDR=data;
_PutSPIchar:
  data                 --> R16
     16E B90F      OUT	0x0F,R16
(0219) 	while(!(SPSR&(1<<SPIF)));	//等待发送完毕
     16F 9B77      SBIS	0x0E,7
     170 CFFE      RJMP	0x016F
     171 9508      RET
(0220) }
(0221) /*******************************************************/
(0222) /******   函数名称: CPU_Init()                    ******/
(0223) /******   功    能: 初始化CPU端口                 ******/
(0224) /******   参    数: 无                            ******/
(0225) /******   返回值  : 无                            ******/
(0226) /*******************************************************/
(0227) void CPU_Init(void)
(0228) {
(0229)  	PORTB=0xff;
_CPU_Init:
     172 EF8F      LDI	R24,0xFF
     173 BB88      OUT	0x18,R24
(0230) 	DDRB=0xff;
     174 BB87      OUT	0x17,R24
(0231) 	PORTA=0x80;				 		
     175 E880      LDI	R24,0x80
     176 BB8B      OUT	0x1B,R24
(0232) 	DDRA=0xdc;
     177 ED8C      LDI	R24,0xDC
     178 BB8A      OUT	0x1A,R24
(0233) 	DDRB=0x00;
     179 2422      CLR	R2
     17A BA27      OUT	0x17,R2
(0234) 	PORTC=0xff;
     17B EF8F      LDI	R24,0xFF
     17C BB85      OUT	0x15,R24
(0235) 	DDRC=0x00;
     17D BA24      OUT	0x14,R2
(0236) 	PORTD=0xff;
     17E BB82      OUT	0x12,R24
(0237) 	DDRD=0x00;
     17F BA21      OUT	0x11,R2
(0238) 	Un_Led();
     180 DFD2      RCALL	_Un_Led
(0239) 	Clear_SMG();	
     181 DFD7      RCALL	_Clear_SMG
     182 9508      RET
FILE: D:\8_DAC_TLC5615\DAC_TLC5615.c
(0001) /////////////////////////////////////////////////////////////
(0002) //  文件:DAC_TLC5615.C                                    //
(0003) //  环境:编译为ICC AVR6.31A,仿真为AVR Studio4.12sp4      //
(0004) //  硬件:ATMEGA16芯片                                     //
(0005) //  日期:2007年5月28日                                    //
(0006) //  功能:DA输出模拟电压控制LED亮度渐变                    //
(0007) //  备注:                                                 //
(0008) /////////////////////////////////////////////////////////////
(0009) #include <iom16v.h>				//包含单片机型号头文件
(0010) #include <macros.h>				//包含"位"操作头文件
(0011) #include "delay.h"				//包含延时头文件
(0012) #include "AVR_XQV12.h"			//包含通用函数及宏定义头文件
(0013) 
(0014) /*******************************************************/
(0015) /******   函数名称: main()                        ******/
(0016) /******   功    能: DA输出模拟电压控制LED亮度渐变 ******/
(0017) /******   参    数: 无                            ******/
(0018) /******   返回值  : 无                            ******/
(0019) /*******************************************************/
(0020) void main(void)
(0021) {
(0022) 	unsigned int i;
(0023) 	CPU_Init();	  							//初始化单片机
_main:
  i                    --> R20
     183 DFEE      RCALL	_CPU_Init
(0024) 	Spi_Init();								//初始化SPI接口
     184 DFDD      RCALL	_Spi_Init
     185 C03D      RJMP	0x01C3
(0025) 	while(1)								//无限循环
(0026) 	{
(0027) 		for(i=280;i<1024;i++)				//电压逐渐变高
     186 E148      LDI	R20,0x18
     187 E051      LDI	R21,1
     188 C017      RJMP	0x01A0
(0028) 		{
(0029) 			Clr_CS5615;						//片选TLC5615
     189 98DF      CBI	0x1B,7
(0030) 			PutSPIchar((unsigned char)((i&0x03c0)>>6));//发送数据
     18A E026      LDI	R18,6
     18B E030      LDI	R19,0
     18C 018A      MOVW	R16,R20
     18D 7C00      ANDI	R16,0xC0
     18E 7013      ANDI	R17,3
     18F 940E 01DB CALL	lsr16
     191 DFDC      RCALL	_PutSPIchar
(0031) 			PutSPIchar((unsigned char)((i&0x003f)<<2));
     192 2F04      MOV	R16,R20
     193 730F      ANDI	R16,0x3F
     194 7010      ANDI	R17,0
     195 0F00      LSL	R16
     196 1F11      ROL	R17
     197 0F00      LSL	R16
     198 1F11      ROL	R17
     199 DFD4      RCALL	_PutSPIchar
(0032) 			Set_CS5615;  		 			//释放TLC5615
     19A 9ADF      SBI	0x1B,7
(0033) 			delay_nms(2);					//延时
     19B E002      LDI	R16,2
     19C E010      LDI	R17,0
     19D DEC4      RCALL	_delay_nms
     19E 5F4F      SUBI	R20,0xFF
     19F 4F5F      SBCI	R21,0xFF
     1A0 3040      CPI	R20,0
     1A1 E0E4      LDI	R30,4
     1A2 075E      CPC	R21,R30
     1A3 F328      BCS	0x0189
(0034) 		}
(0035) 		for(i=1023;i>280;i--)				//电压逐渐变低
     1A4 EF4F      LDI	R20,0xFF
     1A5 E053      LDI	R21,3
     1A6 C017      RJMP	0x01BE
(0036) 		{
(0037) 			Clr_CS5615;						//片选TLC5615
     1A7 98DF      CBI	0x1B,7
(0038) 			PutSPIchar((unsigned char)((i&0x03c0)>>6));//发送数据
     1A8 E026      LDI	R18,6
     1A9 E030      LDI	R19,0
     1AA 018A      MOVW	R16,R20
     1AB 7C00      ANDI	R16,0xC0
     1AC 7013      ANDI	R17,3
     1AD 940E 01DB CALL	lsr16
     1AF DFBE      RCALL	_PutSPIchar
(0039) 			PutSPIchar((unsigned char)((i&0x003f)<<2));
     1B0 2F04      MOV	R16,R20
     1B1 730F      ANDI	R16,0x3F
     1B2 7010      ANDI	R17,0
     1B3 0F00      LSL	R16
     1B4 1F11      ROL	R17
     1B5 0F00      LSL	R16
     1B6 1F11      ROL	R17
     1B7 DFB6      RCALL	_PutSPIchar
(0040) 			Set_CS5615;  		 			//释放TLC5615
     1B8 9ADF      SBI	0x1B,7
(0041) 			delay_nms(2);					//延时
FILE: <library>
     1B9 E002      LDI	R16,2
     1BA E010      LDI	R17,0
     1BB DEA6      RCALL	_delay_nms
     1BC 5041      SUBI	R20,1
     1BD 4050      SBCI	R21,0
     1BE E188      LDI	R24,0x18
     1BF E091      LDI	R25,1
     1C0 1784      CP	R24,R20
     1C1 0795      CPC	R25,R21
     1C2 F320      BCS	0x01A7
     1C3 CFC2      RJMP	0x0186
     1C4 9508      RET
pop_xgset003C:
     1C5 90A9      LD	R10,Y+
     1C6 90B9      LD	R11,Y+
     1C7 90C9      LD	R12,Y+
     1C8 90D9      LD	R13,Y+
     1C9 9508      RET
push_xgsetF0FC:
     1CA 937A      ST	R23,-Y
     1CB 936A      ST	R22,-Y
push_xgset30FC:
     1CC 935A      ST	R21,-Y
     1CD 934A      ST	R20,-Y
push_xgset00FC:
     1CE 92FA      ST	R15,-Y
     1CF 92EA      ST	R14,-Y
push_xgset003C:
     1D0 92DA      ST	R13,-Y
     1D1 92CA      ST	R12,-Y
     1D2 92BA      ST	R11,-Y
     1D3 92AA      ST	R10,-Y
     1D4 9508      RET
lsl8:
     1D5 2311      TST	R17
     1D6 F019      BEQ	0x01DA
     1D7 0F00      LSL	R16
     1D8 951A      DEC	R17
     1D9 CFFB      RJMP	lsl8
     1DA 9508      RET
lsr16:
     1DB 2322      TST	R18
     1DC F021      BEQ	0x01E1
     1DD 9516      LSR	R17
     1DE 9507      ROR	R16
     1DF 952A      DEC	R18
     1E0 CFFA      RJMP	lsr16
     1E1 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -