📄 display_board3.0.s
字号:
.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 + -