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

📄 dac_tlc5615.s

📁 基于ATMEGA16的DA转换的C程序源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module DAC_TLC5615.c
	.area text(rom, con, rel)
	.dbfile D:\垃圾站\5615\DAC_TLC5615.c
	.dbfile D:\垃圾站\5615\delay.h
	.dbfunc e delay_nus _delay_nus fV
;           time -> R16,R17
	.even
_delay_nus::
	.dbline -1
	.dbline 33
; //#define 	F_CPU 		12000000
; #define 	F_CPU 		11059200
; //#define 	F_CPU 			8000000
; //#define 	F_CPU 			7372800
; //#define 	F_CPU 			4000000
; /*************************************************************************
; 通用延时头文件:
; 			   delay_nus(n)延时n微秒
; 			   delay_nms(n)延时n毫秒
; *************************************************************************/
; #if F_CPU == 12000000
; 	void delay_nus(unsigned int time)
; 	{
; 	 	while (time!=0)
; 		{
; 		 	NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
; 			time--;
; 		}
; 	}
; 	void delay_nms(unsigned int time)
; 	{
;  	 	unsigned int i;
; 		while (time!=0)
; 		{
; 		 	for(i=0;i<1740;i++);
; 			time--;
; 		}
; 	}
; #endif
; 
; #if F_CPU == 11059200
; 	void delay_nus(unsigned int time)
; 	{
	xjmp L3
L2:
	.dbline 35
; 	 	while (time!=0)
; 		{
	.dbline 36
; 		 	NOP();NOP();NOP();NOP();NOP();NOP();NOP();
	nop
	.dbline 36
	nop
	.dbline 36
	nop
	.dbline 36
	nop
	.dbline 36
	nop
	.dbline 36
	nop
	.dbline 36
	nop
	.dbline 37
; 			time--;
	subi R16,1
	sbci R17,0
	.dbline 38
; 		}
L3:
	.dbline 34
	cpi R16,0
	cpc R16,R17
	brne L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 i
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R20,R21
;           time -> R16,R17
	.even
_delay_nms::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 41
; 	}
; 	void delay_nms(unsigned int time)
; 	{
	xjmp L7
L6:
	.dbline 44
;  	 	unsigned int i;
; 		while (time!=0)
; 		{
	.dbline 45
; 		 	for(i=0;i<1580;i++);	
	clr R20
	clr R21
	xjmp L12
L9:
	.dbline 45
L10:
	.dbline 45
	subi R20,255  ; offset = 1
	sbci R21,255
L12:
	.dbline 45
	cpi R20,44
	ldi R30,6
	cpc R21,R30
	brlo L9
X1:
	.dbline 46
; 			time--;
	subi R16,1
	sbci R17,0
	.dbline 47
; 		}
L7:
	.dbline 43
	cpi R16,0
	cpc R16,R17
	brne L6
X2:
	.dbline -2
L5:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 i
	.dbsym r time 16 i
	.dbend
	.area code(ram, con, rel)
	.dbfile D:\垃圾站\5615\delay.h
	.area lit(rom, con, rel)
_SMG_Conver::
	.byte 63,6
	.byte 91,'O
	.byte 'f,'m
	.byte 125,7
	.byte 127,'o
	.byte 'w,124
	.byte 57,94
	.byte 'y,'q
	.byte 0,64
	.dbfile D:\垃圾站\5615\AVR_XQV12.h
	.dbsym e SMG_Conver _SMG_Conver A[18:18]kc
	.area data(ram, con, rel)
	.dbfile D:\垃圾站\5615\AVR_XQV12.h
	.area text(rom, con, rel)
	.dbfile D:\垃圾站\5615\AVR_XQV12.h
	.dbfunc e Scan_Key _Scan_Key fc
;              i -> R20
	.even
_Scan_Key::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 69
; 
; #define		TRUE			0xff					//真
; #define		FALSE			0x00					//假
; #define		null			0x00					//空
; #define 	Open_LED		PORTA|=0x10				//使能LED
; #define 	Close_LED		PORTA&=~0x10			//关闭LED
; #define		LED				PORTB					//LED端口
; #define		SMG				PORTB					//数码管端口
; #define 	Open_SMG_DATA	PORTA|=0x08				//使能数码管数据
; #define 	Close_SMG_DATA	PORTA&=~0x08			//关闭数码管数据
; #define 	Open_SMG_BIT	PORTA|=0x04				//使能数码管位选择
; #define 	Close_SMG_BIT	PORTA&=~0x04			//关闭数码管位选择
; #define		KEY0			(PIND&0x04)				//INT0
; #define		KEY1			(PIND&0x08)				//INT1
; #define 	SetSclk			(PORTC|=0x80)			//LCD12864 CLK
; #define 	ClrSclk			(PORTC&=~0x80)
; #define 	SetRs			(PORTD|=0x40) 			//LCD12864 CS
; #define 	ClrRs			(PORTD&=~0x40)
; #define 	SetSid			(PORTC|=0x40) 			//LCD12864 DATA
; #define 	ClrSid			(PORTC&=~0x40)
; #define 	D0 				0x20		  			//18B20 DATA
; #define 	port 			PORTA
; #define 	ddrt 			DDRA
; #define 	pin 			PINA
; #define 	Set_CS5615 		(PORTA|=0x10)			//片选5615
; #define 	Clr_CS5615 		(PORTA&=~0x10)			//释放
; #define 	Period 			0x6bfe					//PWM脉冲周期20ms
; #define 	rd_device_add 	0xa3					//定义器件读地址
; #define 	wr_device_add 	0xa2					//定义器件写地址
; #define 	START 		   	0x08					//起始信号
; #define 	MT_SLA_ACK 	   	0x18
; #define 	MT_DATA_ACK    	0x28
; #define 	RE_START 	   	0x10
; #define 	MR_SLA_ACK 	   	0x40
; #define 	MR_DATA_NOACK  	0x58
; #define 	START 			0x08
; #define 	MT_SLA_ACK 		0x18
; #define 	MT_DATA_ACK 	0x28
; #define 	RE_START 		0x10
; #define 	MR_SLA_ACK 		0x40
; #define 	MR_DATA_NOACK 	0x58
; #define 	MR_DATA_ACK 	0x50
; 
; #if AD==TRUE					//条件编译指令
; unsigned char Adc_Mux=0;
; unsigned int Adc0_Rel=0;
; unsigned int Adc1_Rel=0;
; unsigned int Adc0_Catch=0;
; unsigned int Adc1_Catch=0;
; unsigned int Adc0_Conver[20];
; unsigned int Adc1_Conver[20];
; unsigned char Adc0_F;
; unsigned char Adc1_F;
; #endif	 	  		 		 	//条件编译结束
; unsigned char Key_Number;			   	   	//全局变量:按键标志
; unsigned int temprter;
; #pragma data:code 
; const unsigned char SMG_Conver[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
; 		                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
; 				   							//数码管译码数组
; #pragma data:data
; /*******************************************************/
; /******   函数名称: Scan_Key()                    ******/
; /******   功    能: 键盘扫描                      ******/
; /******   参    数: 无                            ******/
; /******   返回值  : 按键的键值,无按键时返回null  ******/
; /*******************************************************/
; unsigned char Scan_Key(void)
; {
	.dbline 71
;  	unsigned char i;
; 	PORTC=0x00;
	clr R2
	out 0x15,R2
	.dbline 72
; 	DDRC =0xf0;	  						//设置端口高4位输出,低四位输入
	ldi R24,240
	out 0x14,R24
	.dbline 73
; 	PORTC=0x0f;							//低四位内部上拉
	ldi R24,15
	out 0x15,R24
	.dbline 74
; 	delay_nus(1);						//短暂延时
	ldi R16,1
	ldi R17,0
	xcall _delay_nus
	.dbline 75
; 	i=PINC&0x0f;						//读取端口电平
	in R20,0x13
	andi R20,15
	.dbline 76
; 	if(i!=0x0f)							//判断是否有键按下
	cpi R20,15
	breq L14
X3:
	.dbline 77
; 	{
	.dbline 78
; 	 	PORTC=0x00;
	clr R2
	out 0x15,R2
	.dbline 79
; 		DDRC =0x0f;						//设置端口低4位输出,高四位输入
	ldi R24,15
	out 0x14,R24
	.dbline 80
; 		PORTC=0xf0;						//高四位内部上拉
	ldi R24,240
	out 0x15,R24
	.dbline 81
; 		delay_nus(10);					//短暂延时,去抖
	ldi R16,10
	ldi R17,0
	xcall _delay_nus
	.dbline 82
; 		if((PINC&0xf0)!=0xf0)			//再次判断是否有键按下
	in R24,0x13
	andi R24,240
	cpi R24,240
	breq L16
X4:
	.dbline 83
; 		{
	.dbline 84
; 		 	i+=(PINC&0xf0);				//读取端口电平
	in R24,0x13
	andi R24,240
	add R20,R24
L18:
	.dbline 85
; 			while((PINC&0xf0)!=0xf0);	//等待按键释放
L19:
	.dbline 85
	in R24,0x13
	andi R24,240
	cpi R24,240
	brne L18
X5:
	.dbline 86
; 			return i;					//返回键值
	mov R16,R20
	xjmp L13
L16:
	.dbline 88
; 		}
; 	}
L14:
	.dbline 89
; 	return null;   						//无按键按下返回null
	clr R16
	.dbline -2
L13:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e Key_Num _Key_Num fc
;            key -> R16
	.even
_Key_Num::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 99
; }
; 
; /*******************************************************/
; /******   函数名称: Key_Num()                     ******/
; /******   功    能: 转换键值为0-f十六进制数       ******/
; /******   参    数: key--键值                     ******/
; /******   返回值  : 0-f                           ******/
; /*******************************************************/
; unsigned char Key_Num(unsigned char key)
; {
	.dbline 100
;  	switch(key)
	mov R20,R16
	clr R21
	cpi R20,183
	ldi R30,0
	cpc R21,R30
	brne X24
	xjmp L27
X24:
X6:
	cpi R20,187
	ldi R30,0
	cpc R21,R30
	brne X25
	xjmp L31
X25:
X7:
	cpi R20,189
	ldi R30,0
	cpc R21,R30
	brne X26
	xjmp L35
X26:
X8:
	cpi R20,190
	ldi R30,0
	cpc R21,R30
	brne X27
	xjmp L39
X27:
X9:
	ldi R24,190
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L42
X10:
L41:
	cpi R20,119
	ldi R30,0
	cpc R21,R30
	brne X28
	xjmp L28
X28:
X11:
	cpi R20,123
	ldi R30,0
	cpc R21,R30
	brne X29
	xjmp L32
X29:
X12:
	cpi R20,125
	ldi R30,0
	cpc R21,R30
	brne X30
	xjmp L36
X30:
X13:
	cpi R20,126
	ldi R30,0
	cpc R21,R30
	brne X31
	xjmp L40
X31:
X14:
	xjmp L22
L42:
	cpi R20,215
	ldi R30,0
	cpc R21,R30
	breq L26
X15:
	cpi R20,219
	ldi R30,0
	cpc R21,R30
	breq L30
X16:
	cpi R20,221
	ldi R30,0
	cpc R21,R30
	breq L34
X17:
	cpi R20,222
	ldi R30,0
	cpc R21,R30
	brne X32
	xjmp L38
X32:
X18:
	cpi R20,215
	ldi R30,0
	cpc R21,R30
	brge X33
	xjmp L22
X33:
X19:
L43:
	cpi R20,231
	ldi R30,0
	cpc R21,R30
	breq L25
X20:
	cpi R20,235
	ldi R30,0
	cpc R21,R30
	breq L29
X21:
	cpi R20,237
	ldi R30,0
	cpc R21,R30
	breq L33
X22:
	cpi R20,238
	ldi R30,0
	cpc R21,R30
	breq L37
X23:
	xjmp L22
L25:
	.dbline 102
; 	{
; 	 	case 0xe7:return 0;	   			//按键0
	clr R16
	xjmp L21
L26:
	.dbline 103
; 		case 0xd7:return 1;				//按键1
	ldi R16,1
	xjmp L21
L27:
	.dbline 104
; 		case 0xb7:return 2;				//按键2
	ldi R16,2
	xjmp L21
L28:
	.dbline 105
; 		case 0x77:return 3;				//按键3
	ldi R16,3
	xjmp L21
L29:
	.dbline 106
; 		case 0xeb:return 4;				//按键4
	ldi R16,4
	xjmp L21
L30:
	.dbline 107
; 		case 0xdb:return 5;				//按键5
	ldi R16,5
	xjmp L21
L31:
	.dbline 108
; 		case 0xbb:return 6;				//按键6
	ldi R16,6
	xjmp L21
L32:
	.dbline 109
; 		case 0x7b:return 7;				//按键7
	ldi R16,7
	xjmp L21
L33:
	.dbline 110
; 		case 0xed:return 8;				//按键8
	ldi R16,8
	xjmp L21
L34:
	.dbline 111

⌨️ 快捷键说明

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