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

📄 display_board3.0.s

📁 一个LED特效显示程序
💻 S
📖 第 1 页 / 共 3 页
字号:
;      DDRA =0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 130
; 	 PORTA =0XFF;
	out 0x1b,R24
	.dbline 131
; 	 DDRB =0B00001110;
	ldi R24,14
	out 0x17,R24
	.dbline 132
; 	 PORTB =0XFF;
	ldi R24,255
	out 0x18,R24
	.dbline 133
; 	 DDRC =0XFF;
	out 0x14,R24
	.dbline 134
; 	 PORTC =0XFF;
	out 0x15,R24
	.dbline 135
; 	 DDRD  = 0xF8;	        //
	ldi R24,248
	out 0x11,R24
	.dbline 136
;  	 PORTD = 0XFF;
	ldi R24,255
	out 0x12,R24
	.dbline -2
L40:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer_int _timer_int fV
	.even
_timer_int::
	.dbline -1
	.dbline 143
; }
; 
; /****************************************
;           定时器
; ****************************************/
; void timer_int(void)
; { 
	.dbline 144
;      TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 145
;  	 TCNT1H = 0xd4; //setup
	ldi R24,212
	out 0x2d,R24
	.dbline 146
;  	 TCNT1L = 0xce;
	ldi R24,206
	out 0x2c,R24
	.dbline 147
;  	 TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 148
;  	 TCCR1B = 0x01; //start Timer
	ldi R24,1
	out 0x2e,R24
	.dbline 149
;      TIMSK = 0x04;
	ldi R24,4
	out 0x39,R24
	.dbline -2
L41:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e exit_int _exit_int fV
	.even
_exit_int::
	.dbline -1
	.dbline 157
; 
; }
; 
; /****************************************
;           外中断
; ****************************************/
; void exit_int(void)
; {
	.dbline 158
;      GICR  = 0x40; 
	ldi R24,64
	out 0x3b,R24
	.dbline 159
;   	 MCUCR = 0x02;
	ldi R24,2
	out 0x35,R24
	.dbline -2
L42:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_int _uart_int fV
	.even
_uart_int::
	.dbline -1
	.dbline 167
; 
; }
; 
; /****************************************
;           串口通讯
; ****************************************/
; void uart_int(void)
; {
	.dbline 168
;       UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 169
;       UCSRA = 0x00;
	out 0xb,R2
	.dbline 170
;       UCSRC = 0x00;
	out 0x20,R2
	.dbline 171
;       UBRR =5;      //设置波特率115200
	ldi R24,5
	out 0x9,R24
	.dbline 172
;       UCSRB = 0x98; //接受中断允许,接受允许,发送允许
	ldi R24,152
	out 0xa,R24
	.dbline 173
;       UCSRC = 0xAe; //8BIT, 奇校验,2停止位
	ldi R24,174
	out 0x20,R24
	.dbline -2
L43:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e device_int _device_int fV
	.even
_device_int::
	.dbline -1
	.dbline 180
; }
; 
; /****************************************
;           器件初始化函数
; ****************************************/
; void device_int(void)
; {
	.dbline 181
;      CLI();
	cli
	.dbline 182
;    	 port_int();
	xcall _port_int
	.dbline 183
;    	 timer_int();
	xcall _timer_int
	.dbline 184
;    	 exit_int();
	xcall _exit_int
	.dbline 185
;    	 uart_int();
	xcall _uart_int
	.dbline 186
; 	 SEI(); 
	sei
	.dbline -2
L44:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_TX _uart_TX fV
;           data -> R16
	.even
_uart_TX::
	.dbline -1
	.dbline 193
; }
; 
; /****************************************
;           串口收发数据
; ****************************************/
; void uart_TX(unsigned char data)
; {
	.dbline 194
;     UCSRA |=0X40;         //标志清零
	sbi 0xb,6
	.dbline 195
; 	UDR =data;
	out 0xc,R16
	.dbline -2
L45:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.dbfunc e uart_time_out _uart_time_out fV
	.even
_uart_time_out::
	.dbline -1
	.dbline 201
; }
; //***************
; //传输超时处理,当time_out_ms大于设定值的时候,等待等待20S,并且
; //一直发送标志符号,超过20S以后,进行错误处理	 
; void uart_time_out(void)
; {
	.dbline 202
; 	 time_out_ms++;
	lds R24,_time_out_ms
	lds R25,_time_out_ms+1
	adiw R24,1
	sts _time_out_ms+1,R25
	sts _time_out_ms,R24
	.dbline 203
; 	 if (HeadEN ==0 && FileEnd ==0 && time_out_ms >=800 )
	lds R2,_HeadEN
	tst R2
	brne L47
	lds R2,_FileEnd
	tst R2
	brne L47
	cpi R24,32
	ldi R30,3
	cpc R25,R30
	brlo L47
	.dbline 204
; 	 {
	.dbline 205
; 		if(sys_cont ==0)		 //秒记时 
	lds R2,_sys_cont
	lds R3,_sys_cont+1
	tst R2
	brne L49
	tst R3
	brne L49
X1:
	.dbline 206
; 		{
	.dbline 207
; 		   time_out_s++;
	lds R24,_time_out_s
	subi R24,255    ; addi 1
	sts _time_out_s,R24
	.dbline 208
; 		   if (time_out_s ==20)	 //结束标志
	cpi R24,20
	brne L51
	.dbline 209
; 		   {
	.dbline 210
; 			  time_out_ms=1;	 //闲置标志
	ldi R24,1
	ldi R25,0
	sts _time_out_ms+1,R25
	sts _time_out_ms,R24
	.dbline 211
; 			  HeadEN=1;
	sts _HeadEN,R24
	.dbline 212
; 			  FileEnd=1;
	sts _FileEnd,R24
	.dbline 214
; 			  //进行错误处理,并要跳出此结构体
; 			  {/**********/}
	.dbline 214
	.dbline 215
; 		   }
L51:
	.dbline 216
; 		}
L49:
	.dbline 217
; 		uart_TX(0xAA);			 //重复发送标志位
	ldi R16,170
	xcall _uart_TX
	.dbline 218
; 		time_out_ms--;   
	lds R24,_time_out_ms
	lds R25,_time_out_ms+1
	sbiw R24,1
	sts _time_out_ms+1,R25
	sts _time_out_ms,R24
	.dbline 219
; 	 }
L47:
	.dbline 220
	lds R24,_time_out_ms
	lds R25,_time_out_ms+1
	cpi R24,232
	ldi R30,3
	cpc R25,R30
	brne L53
	.dbline 221
	ldi R24,1
	ldi R25,0
	sts _time_out_ms+1,R25
	sts _time_out_ms,R24
L53:
	.dbline -2
L46:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SPI_data_send _SPI_data_send fV
;          count -> R20
;      send_data -> R22
	.even
_SPI_data_send::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 228
; 	 if (time_out_ms ==1000)
; 	 	time_out_ms=1;	   	 //1 表示空闲状态
; }
; /***************************************************
;                向显示屏送数据
; ***************************************************/
; 
; void SPI_data_send(unsigned char send_data)       //向595送数据串
; {  
	.dbline 230
;    unsigned char count;
;    for(count =0;count<8;count++)
	clr R20
	xjmp L59
L56:
	.dbline 231
;    {
	.dbline 232
;       if(((send_data >>count)&0x01 )==0)
	mov R16,R22
	mov R17,R20
	xcall lsr8
	mov R24,R16
	andi R24,1
	brne L60
	.dbline 233
; 	     PORTC &= 0b01111111;      	   			   //送 data
	in R24,0x15
	andi R24,127
	out 0x15,R24
	xjmp L61
L60:
	.dbline 235
;       else
; 	     PORTC |= 0b10000000;
	sbi 0x15,7
L61:
	.dbline 236
	sbi 0x12,3
	.dbline 237
	in R24,0x12
	andi R24,247
	out 0x12,R24
	.dbline 238
L57:
	.dbline 230
	inc R20
L59:
	.dbline 230
	cpi R20,8
	brlo L56
	.dbline -2
L55:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r count 20 c
	.dbsym r send_data 22 c
	.dbend
	.dbfunc e Screen_send _Screen_send fV
;              i -> R20
	.even
_Screen_send::
	xcall push_gset1
	.dbline -1
	.dbline 241
; 	  PORTD |=0b00001000;        				   //送SCK信号
;       PORTD &=0b11110111;
;    }
; }
; void Screen_send(void)
; {
	.dbline 242
;     char i =8;
	ldi R20,8
	.dbline 243
; 	PORTD &= 0b11101111;       //送RCK信号,底电平                
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 244
; 	for(;i >0;)
	xjmp L66
L63:
	.dbline 245
	.dbline 246
	dec R20
	.dbline 247
	ldi R24,<_DispTemp
	ldi R25,>_DispTemp
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI_data_send
	.dbline 248
L64:
	.dbline 244
L66:
	.dbline 244
	clr R2
	cp R2,R20
	brlo L63
	.dbline 249
; 	{   
; 	    i--;
; 	    SPI_data_send(DispTemp[i]);
;     }
; 	PORTD |= 0b00010000;       //关闭RCK信号,高电平
	sbi 0x12,4
	.dbline -2
L62:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e RAM_Write _RAM_Write fV
;           data -> R18
;         adress -> R16,R17
	.even
_RAM_Write::
	.dbline -1
	.dbline 256
; }
; /**************************************************
; 			 数据接受,外部RAM读写
; ****************************************************/
; //写外部RAM
; void RAM_Write(int adress,char data)
; {
	.dbline 257
;    PORTD |=0B11100000;           //关ALE  读关闭  写关闭
	in R24,0x12
	ori R24,224
	out 0x12,R24
	.dbline 258
;    DDRA =0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 259
;    PORTA =adress;
	out 0x1b,R16
	.dbline 260
;    PORTC =(adress >>8);
	movw R2,R16
	mov R2,R3
	clr R3
	sbrc R2,7
	com R3
	out 0x15,R2
	.dbline 261
;    PORTD &=0b01111111;                         
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 262
;    PORTA =data;
	out 0x1b,R18
	.dbline 263
;    PORTD &=0b10111111;
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline -2
L67:
	.dbline 0 ; func end
	ret
	.dbsym r data 18 c
	.dbsym r adress 16 I
	.dbend
	.dbfunc e RAM_Read _RAM_Read fc
;         adress -> R16,R17
	.even
_RAM_Read::
	.dbline -1
	.dbline 268
;    //PORTD |=0B01100000;           //关ALE  读关闭  写关闭
; }
; //读外部RAM
; char RAM_Read(int adress)
; {
	.dbline 269
;    PORTD |=0B11100000;           //关ALE  读关闭  写关闭
	in R24,0x12
	ori R24,224
	out 0x12,R24
	.dbline 270
;    DDRA =0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 271
;    PORTA =adress;
	out 0x1b,R16
	.dbline 272
;    PORTC =adress >>8;
	movw R2,R16
	mov R2,R3
	clr R3
	sbrc R2,7
	com R3
	out 0x15,R2
	.dbline 273
;    PORTD &=0b01111111;                         
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 274
;    PORTD &=0b11011111;
	in R24,0x12
	andi R24,223
	out 0x12,R24
	.dbline 275
;    DDRA =0;
	clr R2
	out 0x1a,R2
	.dbline 276
;    PORTA =0XFF;
	ldi R24,255
	out 0x1b,R24
	.dbline 277
;    return PINA;
	in R16,0x19
	.dbline -2
L68:
	.dbline 0 ; func end
	ret
	.dbsym r adress 16 I
	.dbend
	.dbfunc e data_store _data_store fV
;           data -> R20
	.even
_data_store::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 282
; }
; //存储数据到外部RAM
; 
; void data_store(char data)
; {
	.dbline 283
;    if((data ==76) &&(FileEnd ==1))     //数据起始位检测
	cpi R20,76
	brne L70
	lds R24,_FileEnd
	cpi R24,1
	brne L70
	.dbline 284
;    {
	.dbline 285
;        HeadEN =1;                           //开启头文件数据传输
	ldi R24,1
	sts _HeadEN,R24
	.dbline 286
; 	   HeadLoad =0;                         //头文件指针清零
	clr R2
	sts _HeadLoad,R2
	.dbline 287
; 	   DataIndex =0;                        //存储数据指针清零
	clr R3
	sts _DataIndex+1,R3
	sts _DataIndex,R2
	.dbline 288
;    }
L70:
	.dbline 289
;    if((HeadEN ==0) &&(FileEnd ==0))
	lds R2,_HeadEN
	tst R2
	breq X2
	xjmp L72
X2:
	lds R2,_FileEnd
	tst R2
	breq X3
	xjmp L72
X3:
	.dbline 290
;    {
	.dbline 291
; 	   RAM_Write(DataIndex,data);            //数组送数
	mov R18,R20
	lds R16,_DataIndex
	lds R17,_DataIndex+1
	xcall _RAM_Write
	.dbline 292
; 	   DataIndex++;
	lds R24,_DataIndex
	lds R25,_DataIndex+1
	adiw R24,1
	sts _DataIndex+1,R25
	sts _DataIndex,R24
	.dbline 293
; 	   if(DataIndex <2)                      //送文件长度数据到变量
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brge L74
	.dbline 294
; 	   {
	.dbline 296
; 	       //FileLength =data;    
; 	       FileLength =1216;
	ldi R24,1216
	ldi R25,4
	sts _FileLength+1,R25
	sts _FileLength,R24
	.dbline 297
; 	   }
L74:
	.dbline 298
; 	   if(DataIndex ==1)                      //送文件长度数据到变量
	lds R24,_DataIndex
	lds R25,_DataIndex+1
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brne L76
	.dbline 299
; 	   {
	.dbline 301
; 	       //FileLength =data |(FileLength<<8);    
; 	   }                                     //数据指针
L76:
	.dbline 302
; 	   if(((DataIndex >=FileLength)||(DataIndex >=1216))&& (DataIndex >16))
	lds R2,_FileLength
	lds R3,_FileLength+1
	lds R4,_DataIndex
	lds R5,_DataIndex+1
	cp R4,R2
	cpc R5,R3
	brge L80
	movw R24,R4
	cpi R24,192
	ldi R30,4
	cpc R25,R30
	brlt L78
L80:
	ldi R24,16
	ldi R25,0
	lds R2,_DataIndex
	lds R3,_DataIndex+1
	cp R24,R2
	cpc R25,R3
	brge L78
	.dbline 303
; 	   {
	.dbline 304
; 		   HeadEN =1;
	ldi R24,1
	sts _HeadEN,R24
	.dbline 305
; 		   FileEnd =1;
	sts _FileEnd,R24
	.dbline 306
; 	   }
L78:
	.dbline 307
;    }
L72:
	.dbline 308
;    if(HeadEN ==1)                            //循环检测文件起始标志
	lds R24,_HeadEN
	cpi R24,1
	brne L81
	.dbline 309
;    {
	.dbline 310
;       Head[HeadLoad] =data;
	ldi R24,<_Head
	ldi R25,>_Head
	lds R30,_HeadLoad
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R20
	.dbline 311
;       HeadLoad++;
	lds R24,_HeadLoad
	subi R24,255    ; addi 1
	sts _HeadLoad,R24
	.dbline 312
; 	  if(HeadLoad ==3)
	cpi R24,3
	brne L83
	.dbline 313
; 	  { 
	.dbline 314
; 	     if((Head[0] ==76) && (Head[1] ==69) &&(Head[2] ==68))//文件起始表示吻合
	lds R24,_Head
	cpi R24,76
	brne L85
	lds R24,_Head+1
	cpi R24,69
	brne L85
	lds R24,_Head+2
	cpi R24,68
	brne L85
	.dbline 315
; 		 {
	.dbline 316
; 		     HeadEN =0;
	clr R2
	sts _HeadEN,R2
	.dbline 317

⌨️ 快捷键说明

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