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

📄 display_board3.0.s

📁 一个LED特效显示程序
💻 S
📖 第 1 页 / 共 4 页
字号:
	.area data(ram, con, rel)
	.dbfile C:\Documents and Settings\hu123\桌面\广告屏程序\写字库程序/disp_key.h
	.dbfile display_board3.0.c
	.dbsym e sys_cont _sys_cont I
_PDataY::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e PDataY _PDataY I
_PDataYMax::
	.blkb 2
	.area idata
	.word 152
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e PDataYMax _PDataYMax I
_PDataYMin::
	.blkb 2
	.area idata
	.word 2
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e PDataYMin _PDataYMin I
_FileEnd::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e FileEnd _FileEnd c
_HeadLoad::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e HeadLoad _HeadLoad c
_HeadEN::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e HeadEN _HeadEN c
_DataIndex::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e DataIndex _DataIndex I
_FileLength::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e FileLength _FileLength I
_time_out_ms::
	.blkb 2
	.area idata
	.word 1
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e time_out_ms _time_out_ms i
_time_out_s::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e time_out_s _time_out_s c
_I2C_TIME_OUT::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e I2C_TIME_OUT _I2C_TIME_OUT i
_DispModel::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e DispModel _DispModel c
_ModelDelayTime::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e ModelDelayTime _ModelDelayTime I
_ModelContJuge::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile display_board3.0.c
	.dbsym e ModelContJuge _ModelContJuge c
	.area text(rom, con, rel)
	.dbfile display_board3.0.c
	.dbfunc e port_int _port_int fV
	.even
_port_int::
	.dbline -1
	.dbline 144
; void uart_TX(unsigned char data);    
; void uart_time_out(void);
; 
; //中断函数
; void exi_int0(void);
; void timer1_vof(void);
; void usart_rcx(void);
; /************************************************
; *
; *             子函数区                           
; *                                                
; *************************************************/
; 
; /****************************************
;           端口定义
; ****************************************/
; void port_int(void)
; {
	.dbline 145
;      DDRA =0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 146
; 	 PORTA =0XFF;
	out 0x1b,R24
	.dbline 147
; 	 DDRB =0B11111110;
	ldi R24,254
	out 0x17,R24
	.dbline 148
; 	 PORTB =0XFF;
	ldi R24,255
	out 0x18,R24
	.dbline 149
; 	 DDRC =0XFC;
	ldi R24,252
	out 0x14,R24
	.dbline 150
; 	 PORTC =0XFF;
	ldi R24,255
	out 0x15,R24
	.dbline 151
; 	 DDRD  = 0xF8;	        //
	ldi R24,248
	out 0x11,R24
	.dbline 152
;  	 PORTD = 0XFF;
	ldi R24,255
	out 0x12,R24
	.dbline -2
	.dbline 153
; }
L40:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer_int _timer_int fV
	.even
_timer_int::
	.dbline -1
	.dbline 158
; /****************************************
;           定时器
; ****************************************/
; void timer_int(void)
; { 
	.dbline 159
;      TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 160
;  	 TCNT1H = 0xd4; //setup
	ldi R24,212
	out 0x2d,R24
	.dbline 161
;  	 TCNT1L = 0xce;
	ldi R24,206
	out 0x2c,R24
	.dbline 162
;  	 TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 163
;  	 TCCR1B = 0x01; //start Timer
	ldi R24,1
	out 0x2e,R24
	.dbline 164
;      TIMSK = 0x04;
	ldi R24,4
	out 0x39,R24
	.dbline -2
	.dbline 165
; }
L41:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e exit_int _exit_int fV
	.even
_exit_int::
	.dbline -1
	.dbline 170
; /****************************************
;           外中断
; ****************************************/
; void exit_int(void)
; {
	.dbline 171
;      GICR  = 0x40; 
	ldi R24,64
	out 0x3b,R24
	.dbline 172
;   	 MCUCR = 0x02;
	ldi R24,2
	out 0x35,R24
	.dbline -2
	.dbline 173
; }
L42:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_int _uart_int fV
	.even
_uart_int::
	.dbline -1
	.dbline 178
; /****************************************
;           串口通讯
; ****************************************/
; void uart_int(void)
; {
	.dbline 179
;       UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 180
;       UCSRA = 0x00;
	out 0xb,R2
	.dbline 181
;       UCSRC = 0x00;
	out 0x20,R2
	.dbline 182
;       UBRR =5;      //设置波特率115200
	ldi R24,5
	out 0x9,R24
	.dbline 183
;       UCSRB = 0x98; //接受中断允许,接受允许,发送允许
	ldi R24,152
	out 0xa,R24
	.dbline 184
;       UCSRC = 0xAe; //8BIT, 奇校验,2停止位
	ldi R24,174
	out 0x20,R24
	.dbline -2
	.dbline 185
; }
L43:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SPI_MasterInit _SPI_MasterInit fV
	.even
_SPI_MasterInit::
	.dbline -1
	.dbline 190
; /****************************************
;           硬件SPI通讯
; ****************************************/
; void SPI_MasterInit(void)
; {
	.dbline 191
; 	 SPCR = 0B01111100; //setup SPI
	ldi R24,124
	out 0xd,R24
	.dbline 192
;      SPSR = 0B00000001; //setup SPI
	ldi R24,1
	out 0xe,R24
	.dbline -2
	.dbline 193
; }
L44:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e twi_init _twi_init fV
	.even
_twi_init::
	.dbline -1
	.dbline 199
; /****************************************
;           硬件i2c通讯
; ****************************************/
; // bit rate:1
; void twi_init(void)
; {
	.dbline 200
;  TWCR= 0X00; //disable twi
	clr R2
	out 0x36,R2
	.dbline 201
;  TWBR= 16 ; //set bit rate
	ldi R24,16
	out 0x0,R24
	.dbline 202
;  TWSR= 2; //set prescale
	ldi R24,2
	out 0x1,R24
	.dbline 203
;  TWAR= 0x04; //set slave address
	ldi R24,4
	out 0x2,R24
	.dbline 204
;  TWCR= 0x44; //enable twi
	ldi R24,68
	out 0x36,R24
	.dbline -2
	.dbline 205
; }
L45:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e device_int _device_int fV
	.even
_device_int::
	.dbline -1
	.dbline 211
; 
; /****************************************
;           器件初始化函数
; ****************************************/
; void device_int(void)
; {
	.dbline 212
;      CLI();
	cli
	.dbline 213
;    	 port_int();
	xcall _port_int
	.dbline 214
;    	 timer_int();
	xcall _timer_int
	.dbline 215
;    	 exit_int();
	xcall _exit_int
	.dbline 216
;    	 uart_int();
	xcall _uart_int
	.dbline 217
; 	 SPI_MasterInit();
	xcall _SPI_MasterInit
	.dbline 218
; 	 twi_init();
	xcall _twi_init
	.dbline 219
; 	 SEI(); 
	sei
	.dbline -2
	.dbline 220
; }
L46:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_TX _uart_TX fV
;           data -> R16
	.even
_uart_TX::
	.dbline -1
	.dbline 225
; /****************************************
;           串口收发数据
; ****************************************/
; void uart_TX(unsigned char data)
; {
	.dbline 226
;     UCSRA |=0X40;         //标志清零
	sbi 0xb,6
	.dbline 227
; 	UDR =data;
	out 0xc,R16
	.dbline -2
	.dbline 228
; }
L47:
	.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 233
; //***************
; //传输超时处理,当time_out_ms大于设定值的时候,等待等待20S,并且
; //一直发送标志符号,超过20S以后,进行错误处理	 
; void uart_time_out(void)
; {
	.dbline 234
; 	 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 235
; 	 if (HeadEN ==0 && FileEnd ==0 && time_out_ms >=800 )
	lds R2,_HeadEN
	tst R2
	brne L49
	lds R2,_FileEnd
	tst R2
	brne L49
	cpi R24,32
	ldi R30,3
	cpc R25,R30
	brlo L49
	.dbline 236
; 	 {
	.dbline 237
; 		if(sys_cont ==0)		 //秒记时 
	lds R2,_sys_cont
	lds R3,_sys_cont+1
	tst R2
	brne L51
	tst R3
	brne L51
X1:
	.dbline 238
; 		{
	.dbline 239
; 		   time_out_s++;
	lds R24,_time_out_s
	subi R24,255    ; addi 1
	sts _time_out_s,R24
	.dbline 240
; 		   if (time_out_s ==20)	 //结束标志
	cpi R24,20
	brne L53
	.dbline 241
; 		   {
	.dbline 242
; 			  time_out_ms=1;	 //闲置标志
	ldi R24,1
	ldi R25,0
	sts _time_out_ms+1,R25
	sts _time_out_ms,R24
	.dbline 243
; 			  HeadEN=1;
	sts _HeadEN,R24
	.dbline 244
; 			  FileEnd=1;
	sts _FileEnd,R24
	.dbline 246
; 			  //进行错误处理,并要跳出此结构体
; 			  {/**********/}
	.dbline 246
	.dbline 247
; 		   }
L53:
	.dbline 248
; 		}
L51:
	.dbline 249
; 		uart_TX(0xAA);			 //重复发送标志位
	ldi R16,170
	xcall _uart_TX
	.dbline 250
; 		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 251
; 	 }
L49:
	.dbline 252
	lds R24,_time_out_ms
	lds R25,_time_out_ms+1
	cpi R24,232
	ldi R30,3
	cpc R25,R30
	brne L55
	.dbline 253
	ldi R24,1
	ldi R25,0
	sts _time_out_ms+1,R25
	sts _time_out_ms,R24
L55:
	.dbline -2
	.dbline 254
; 	 if (time_out_ms ==1000)
; 	 	time_out_ms=1;	   	 //1 表示空闲状态
; }
L48:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e twi_send _twi_send fV
;           data -> R20
	.even
_twi_send::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 259
; /***************************************************
;                I2C送数据
; ***************************************************/
; void twi_send(char data)
; {  
L58:
	.dbline 261
; start:
;    I2C_TIME_OUT =0;
	clr R2
	clr R3
	sts _I2C_TIME_OUT+1,R3
	sts _I2C_TIME_OUT,R2
	.dbline 262
;    TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
	ldi R24,164
	out 0x36,R24
	xjmp L60
L59:
	.dbline 264
;    while (!(TWCR & (1<<TWINT)))
;    {
	.dbline 265
;        if(I2C_TIME_OUT >1000)
	ldi R24,1000
	ldi R25,3
	lds R2,_I2C_TIME_OUT
	lds R3,_I2C_TIME_OUT+1
	cp R24,R2
	cpc R25,R3
	brsh L62
	.dbline 266
; 	   {
	.dbline 267
; 	       TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
	ldi R24,148
	out 0x36,R24
	.dbline 268
; 		   goto start;
	xjmp L58
L62:
	.dbline 270
L60:
	.dbline 263
	in R2,0x36
	sbrs R2,7
	rjmp L59
	.dbline 271
; 	   }   
;    }
;    Disp_Buff[7] ++;
	lds R24,_Disp_Buff+7
	subi R24,255    ; addi 1
	sts _Disp_Buff+7,R24
	.dbline 272
;    if ((TWSR & 0xF8) != START)
	in R24,0x1
	andi R24,248
	cpi R24,8
	breq L65
	.dbline 273
;    {
	.dbline 274
;        TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
	ldi R24,148
	out 0x36,R24
	.dbline 275
; 	   delay(2);
	ldi R16,2
	ldi R17,0
	xcall _delay
	.dbline 276
; 	   goto start;
	xjmp L58
L65:
	.dbline 278
;    }
;    TWDR = 0x02;       		          //送地址1.主机发送模式
	ldi R24,2
	out 0x3,R24
	.dbline 279
;    TWCR = (1<<TWINT) | (1<<TWEN);
	ldi R24,132
	out 0x36,R24
	xjmp L68
L67:
	.dbline 281
;    while (!(TWCR & (1<<TWINT)))
;    {
	.dbline 282
;       if(I2C_TIME_OUT >1000)
	ldi R24,1000
	ldi R25,3
	lds R2,_I2C_TIME_OUT
	lds R3,_I2C_TIME_OUT+1
	cp R24,R2
	cpc R25,R3
	brsh L70
	.dbline 283
; 	  {   
	.dbline 284
; 		  TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
	ldi R24,148
	out 0x36,R24
	.dbline 285
; 		  goto start;
	xjmp L58
L70:

⌨️ 快捷键说明

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