📄 display_board2.0.s
字号:
.dbline 129
; 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 = 0xBc; //8BIT, 奇校验,2停止位
ldi R24,188
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 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 203
; }
;
; /***************************************************
; 向显示屏送数据
; ***************************************************/
;
; void SPI_data_send(unsigned char send_data) //向595送数据串
; {
.dbline 205
; unsigned char count;
; for(count =0;count<8;count++)
clr R20
xjmp L50
L47:
.dbline 206
; {
.dbline 207
; if(((send_data<<count)&0x80 )==0)
mov R16,R22
mov R17,R20
xcall lsl8
mov R24,R16
andi R24,128
brne L51
.dbline 208
; PORTC &= 0b01111111; //送 data
in R24,0x15
andi R24,127
out 0x15,R24
xjmp L52
L51:
.dbline 210
; else
; PORTC |= 0b10000000;
sbi 0x15,7
L52:
.dbline 211
sbi 0x12,3
.dbline 212
in R24,0x12
andi R24,247
out 0x12,R24
.dbline 213
L48:
.dbline 205
inc R20
L50:
.dbline 205
cpi R20,8
brlo L47
.dbline -2
L46:
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 216
; PORTD |=0b00001000; //送SCK信号
; PORTD &=0b11110111;
; }
; }
; void Screen_send(void)
; {
.dbline 218
; char i;
; PORTD &= 0b11101111; //送RCK信号,底电平
in R24,0x12
andi R24,239
out 0x12,R24
.dbline 219
; for(i =0;i <8;i++)
clr R20
xjmp L57
L54:
.dbline 220
.dbline 221
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 222
L55:
.dbline 219
inc R20
L57:
.dbline 219
cpi R20,8
brlo L54
.dbline 223
; {
; SPI_data_send(DispTemp[i]);
; }
; PORTD |= 0b00010000; //关闭RCK信号,高电平
sbi 0x12,4
.dbline -2
L53:
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 231
;
; }
; /**************************************************
; 数据接受,外部RAM读写
; ****************************************************/
; //写外部RAM
; void RAM_Write(int adress,char data)
; {
.dbline 232
; PORTD |=0B11100000; //关ALE 读关闭 写关闭
in R24,0x12
ori R24,224
out 0x12,R24
.dbline 233
; DDRA =0XFF;
ldi R24,255
out 0x1a,R24
.dbline 234
; PORTA =adress&0xff;
movw R24,R16
andi R25,0
out 0x1b,R24
.dbline 235
; PORTC =(adress >>8)&0xff;
movw R24,R16
mov R24,R25
clr R25
sbrc R24,7
com R25
andi R25,0
out 0x15,R24
.dbline 236
; PORTD &=0b01111111;
in R24,0x12
andi R24,127
out 0x12,R24
.dbline 237
; PORTA =data;
out 0x1b,R18
.dbline 238
; PORTD &=0b10111111;
in R24,0x12
andi R24,191
out 0x12,R24
.dbline -2
L58:
.dbline 0 ; func end
ret
.dbsym r data 18 c
.dbsym r adress 16 I
.dbend
.dbfunc e RAM_Read _RAM_Read fc
; temp -> R20
; adress -> R16,R17
.even
_RAM_Read::
xcall push_gset1
.dbline -1
.dbline 243
; //PORTD |=0B01100000; //关ALE 读关闭 写关闭
; }
; //读外部RAM
; char RAM_Read(int adress)
; {
.dbline 245
; char temp;
; PORTD |=0B11100000; //关ALE 读关闭 写关闭
in R24,0x12
ori R24,224
out 0x12,R24
.dbline 246
; DDRA =0XFF;
ldi R24,255
out 0x1a,R24
.dbline 247
; PORTA =adress&0xff;
movw R24,R16
andi R25,0
out 0x1b,R24
.dbline 248
; PORTC =(adress >>8)&0xff;
movw R24,R16
mov R24,R25
clr R25
sbrc R24,7
com R25
andi R25,0
out 0x15,R24
.dbline 249
; PORTD &=0b01111111;
in R24,0x12
andi R24,127
out 0x12,R24
.dbline 250
; PORTD &=0b11011111;
in R24,0x12
andi R24,223
out 0x12,R24
.dbline 251
; DDRA =0;
clr R2
out 0x1a,R2
.dbline 252
; PORTA =0XFF;
ldi R24,255
out 0x1b,R24
.dbline 253
; temp =PINA;
in R20,0x19
.dbline 254
; return temp;
mov R16,R20
.dbline -2
L59:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.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 259
; }
; //存储数据到外部RAM
;
; void data_store(char data)
; {
.dbline 260
; if((data ==76) &&(FileEnd ==1)) //数据起始位检测
cpi R20,76
brne L61
lds R24,_FileEnd
cpi R24,1
brne L61
.dbline 261
; {
.dbline 262
; HeadEN =1; //开启头文件数据传输
ldi R24,1
sts _HeadEN,R24
.dbline 263
; HeadLoad =0; //头文件指针清零
clr R2
sts _HeadLoad,R2
.dbline 264
; DataIndex =0; //存储数据指针清零
clr R3
sts _DataIndex+1,R3
sts _DataIndex,R2
.dbline 265
; }
L61:
.dbline 266
; if((HeadEN ==0) &&(FileEnd ==0))
lds R2,_HeadEN
tst R2
brne L63
lds R2,_FileEnd
tst R2
brne L63
.dbline 267
; {
.dbline 268
; RAM_Write(DataIndex,data); //数组送数
mov R18,R20
lds R16,_DataIndex
lds R17,_DataIndex+1
xcall _RAM_Write
.dbline 269
; DataIndex++;
lds R24,_DataIndex
lds R25,_DataIndex+1
adiw R24,1
sts _DataIndex+1,R25
sts _DataIndex,R24
.dbline 270
; if(DataIndex <2) //送文件长度数据到变量
cpi R24,2
ldi R30,0
cpc R25,R30
brge L65
.dbline 271
; {
.dbline 272
; FileLength |=data <<DataIndex;
movw R18,R24
mov R16,R20
clr R17
xcall lsl16
lds R2,_FileLength
lds R3,_FileLength+1
or R2,R16
or R3,R17
sts _FileLength+1,R3
sts _FileLength,R2
.dbline 274
; //FileLength =316;
; } //数据指针
L65:
.dbline 275
; if((DataIndex >=FileLength)&& (DataIndex >16))
lds R2,_FileLength
lds R3,_FileLength+1
lds R4,_DataIndex
lds R5,_DataIndex+1
cp R4,R2
cpc R5,R3
brlt L67
ldi R24,16
ldi R25,0
cp R24,R4
cpc R25,R5
brge L67
.dbline 276
; {
.dbline 277
; HeadEN =1;
ldi R24,1
sts _HeadEN,R24
.dbline 278
; FileEnd =1;
sts _FileEnd,R24
.dbline 279
; }
L67:
.dbline 280
; }
L63:
.dbline 281
; if(HeadEN ==1) //循环检测文件起始标志
lds R24,_HeadEN
cpi R24,1
brne L69
.dbline 282
; {
.dbline 283
; 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 284
; HeadLoad++;
lds R24,_HeadLoad
subi R24,255 ; addi 1
sts _HeadLoad,R24
.dbline 285
; if(HeadLoad ==3)
cpi R24,3
brne L71
.dbline 286
; {
.dbline 287
; if((Head[0] ==76) && (Head[1] ==69) &&(Head[2] ==68))//文件起始表示吻合
lds R24,_Head
cpi R24,76
brne L73
lds R24,_Head+1
cpi R24,69
brne L73
lds R24,_Head+2
cpi R24,68
brne L73
.dbline 288
; {
.dbline 289
; HeadEN =0;
clr R2
sts _HeadEN,R2
.dbline 290
; FileEnd =0;
sts _FileEnd,R2
.dbline 291
; }
L73:
.dbline 292
; }
L71:
.dbline 293
L69:
.dbline -2
L60:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbend
.dbfunc e Disp_Model _Disp_Model fV
; PFileMax -> R20,R21
; file_length -> R22,R23
.even
_Disp_Model::
xcall push_gset2
.dbline -1
.dbline 301
; }
; }
; /**************************************************
;
; 显示效果处理
;
; ****************************************************/
; void Disp_Model(void)
; {
.dbline 302
; unsigned int file_length =0;
clr R22
clr R23
.dbline 306
; int PFileMax;
; //DispModel =RAM_Read(2) & (RAM_Read(3)<<8); //model控制字节
; //PFileMax =(RAM_Read(0) & RAM_Read(1)<<8)>>3; //计算缓冲区域的最大列数
; if(ModelDelayTime ==0)
lds R2,_ModelDelayTime
lds R3,_ModelDelayTime+1
tst R2
breq X5
xjmp L78
X5:
tst R3
breq X6
xjmp L78
X6:
X1:
.dbline 307
; {
.dbline 308
; switch(DispModel)
lds R22,_DispModel
clr R23
cpi R22,0
cpc R22,R23
breq L83
X2:
cpi R22,1
ldi R30,0
cpc R23,R30
breq L84
cpi R22,2
ldi R30,0
cpc R23,R30
breq L85
cpi R22,3
ldi R30,0
cpc R23,R30
brne X7
xjmp L81
X7:
cpi R22,4
ldi R30,0
cpc R23,R30
breq L87
cpi R22,5
ldi R30,0
cpc R23,R30
brne X8
xjmp L81
X8:
xjmp L80
X3:
.dbline 309
; {
L83:
.dbline 311
; case 0:
; { //基本显示
.dbline 312
; PDataYMin =4;
ldi R24,4
ldi R25,0
sts _PDataYMin+1,R25
sts _PDataYMin,R24
.dbline 313
; PDataYMax =154;
ldi R24,154
sts _PDataYMax+1,R25
sts _PDataYMax,R24
.dbline 314
; break;
xjmp L81
L84:
.dbline 317
; }
; case 1:
; { //滚屏
.dbline 318
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -