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