📄 ps2test.lis
字号:
01AA .dbend
01AA .dbfunc e init_USART _init_USART fV
.even
01AA _init_USART::
01AA .dbline -1
01AA .dbline 142
01AA ; }
01AA ; }
01AA ;
01AA ; /*-------------------------------------------------------------------
01AA ; function: initialize uart
01AA ; --------------------------------------------------------------------*/
01AA ; void init_USART(void)//USART 初始化
01AA ; {
01AA .dbline 145
01AA ;
01AA ; //USART 9600 8, n,1 PC上位机软件(超级终端等)也要设成同样的设置才能通讯
01AA ; UCSRC = (1<<URSEL) | 0x06;
01AA 86E8 ldi R24,134
01AC 80BD out 0x20,R24
01AE .dbline 161
01AE ; //异步,8位数据,无奇偶校验,一个停止位,无倍速
01AE ; /*
01AE ; UBRRH与UCSRC共用I/O 地址。因此访问该地址时需注意以下问题。
01AE ; 写访问
01AE ; 当在该地址执行写访问时, USART 寄存器选择位(URSEL)控制被写入的寄存器。
01AE ; 若URSEL为0,对UBRRH值更新;若URSEL为1,对UCSRC设置更新
01AE ;
01AE ; 读访问
01AE ; 对UBRRH 或UCSRC 寄存器的读访问则较为复杂。但在大多数应用中,基本不需要读这些寄存器
01AE ;
01AE ;
01AE ; 没有UBRR这个16位寄存器,因为UBRRL(0x09)/UBRRH(0x20)的地址不连续,而且UBRRH跟UCSRC共用地址
01AE ; */
01AE ;
01AE ; //U2X=0时的公式计算
01AE ; UBRRL= (F_CPU/BAUDRATE/16-1)%256;
01AE 83E3 ldi R24,51
01B0 89B9 out 0x9,R24
01B2 .dbline 162
01B2 ; UBRRH= (F_CPU/BAUDRATE/16-1)/256;
01B2 2224 clr R2
01B4 20BC out 0x20,R2
01B6 .dbline 169
01B6 ; //U2X=1时的公式计算
01B6 ; //UBRRL= (F_CPU/BAUDRATE/8-1)%256;
01B6 ; //UBRRH= (F_CPU/BAUDRATE/8-1)/256;
01B6 ; //也可根据数据手册的[波特率设置的例子]查得
01B6 ; //UBRRL = 0x2F; //set baud rate lo
01B6 ; //UBRRH = 0x00; //set baud rate hi
01B6 ; UCSRA = 0x00; //无倍速
01B6 2BB8 out 0xb,R2
01B8 .dbline 170
01B8 ; UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
01B8 88E9 ldi R24,152
01BA 8AB9 out 0xa,R24
01BC .dbline -2
01BC L69:
01BC .dbline 0 ; func end
01BC 0895 ret
01BE .dbend
.area data(ram, con, rel)
0001 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
0001 L71:
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
0002 L72:
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
0003 L73:
0003 .blkb 1
.area idata
0003 00 .byte 0
.area data(ram, con, rel)
0004 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
.area text(rom, con, rel)
01BE .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
01BE .dbfunc e decode _decode fc
01BE .dbsym s shiftup L73 c
01BE .dbsym s up L72 c
01BE .dbsym s shift L71 c
01BE ; i -> R20
01BE ; sc -> R16
.even
01BE _decode::
01BE 0E940000 xcall push_gset2
01C2 .dbline -1
01C2 .dbline 180
01C2 ; //使能接收中断,使能接收,使能发送
01C2 ; }
01C2 ;
01C2 ; /*--------------------------------------------------------------------------
01C2 ; function: decode the ps2 code to ASCII
01C2 ; para: sr----ps2 code
01C2 ; return ASCII code
01C2 ; --------------------------------------------------------------------------*/
01C2 ; unsigned char decode(unsigned char sc)
01C2 ; {
01C2 .dbline 183
01C2 ; static unsigned char shift=0,up=0,shiftup=0;
01C2 ; unsigned char i;
01C2 ; if (sc==0xf0)
01C2 003F cpi R16,240
01C4 29F4 brne L74
01C6 .dbline 184
01C6 ; {
01C6 .dbline 185
01C6 ; up=1;
01C6 81E0 ldi R24,1
01C8 80930200 sts L72,R24
01CC .dbline 186
01CC ; return 0;
01CC 0027 clr R16
01CE 86C0 xjmp L70
01D0 L74:
01D0 .dbline 188
01D0 ; }
01D0 ; if (up==1)
01D0 80910200 lds R24,L72
01D4 8130 cpi R24,1
01D6 E9F4 brne L76
01D8 .dbline 189
01D8 ; {
01D8 .dbline 190
01D8 ; up=0;
01D8 2224 clr R2
01DA 20920200 sts L72,R2
01DE .dbline 191
01DE ; if ((sc==0x12)|(sc==0x59)) shift=0;
01DE 0231 cpi R16,18
01E0 19F4 brne L80
01E2 61E0 ldi R22,1
01E4 70E0 ldi R23,0
01E6 02C0 xjmp L81
01E8 L80:
01E8 6627 clr R22
01EA 7727 clr R23
01EC L81:
01EC 0935 cpi R16,89
01EE 19F4 brne L82
01F0 41E0 ldi R20,1
01F2 50E0 ldi R21,0
01F4 02C0 xjmp L83
01F6 L82:
01F6 4427 clr R20
01F8 5527 clr R21
01FA L83:
01FA 1B01 movw R2,R22
01FC 242A or R2,R20
01FE 352A or R3,R21
0200 2220 tst R2
0202 11F4 brne X2
0204 3320 tst R3
0206 19F0 breq L78
0208 X2:
0208 .dbline 191
0208 2224 clr R2
020A 20920100 sts L71,R2
020E L78:
020E .dbline 192
020E ; return 0;
020E 0027 clr R16
0210 65C0 xjmp L70
0212 L76:
0212 .dbline 194
0212 ; }
0212 ; switch (sc)
0212 402F mov R20,R16
0214 5527 clr R21
0216 4231 cpi R20,18
0218 E0E0 ldi R30,0
021A 5E07 cpc R21,R30
021C 49F0 breq L87
021E 4231 cpi R20,18
0220 E0E0 ldi R30,0
0222 5E07 cpc R21,R30
0224 7CF0 brlt L84
0226 L107:
0226 4935 cpi R20,89
0228 E0E0 ldi R30,0
022A 5E07 cpc R21,R30
022C 31F0 breq L88
022E 0AC0 xjmp L84
0230 X3:
0230 .dbline 195
0230 ; {
0230 L87:
0230 .dbline 196
0230 ; case 0x12:{
0230 .dbline 197
0230 ; shift=1;
0230 81E0 ldi R24,1
0232 80930100 sts L71,R24
0236 .dbline 198
0236 ; shiftup=1;
0236 80930300 sts L73,R24
023A .dbline 199
023A ; }
023A L88:
023A .dbline 200
023A ; case 0x59:{
023A .dbline 201
023A ; shift=1;
023A 81E0 ldi R24,1
023C 80930100 sts L71,R24
0240 .dbline 202
0240 ; shiftup=1;
0240 80930300 sts L73,R24
0244 .dbline 203
0244 ; }
0244 L84:
0244 .dbline 204
0244 ; default:{
0244 .dbline 205
0244 ; if (shift==0)
0244 20900100 lds R2,L71
0248 2220 tst R2
024A 21F5 brne L89
024C .dbline 206
024C ; {
024C .dbline 207
024C 4427 clr R20
024E 01C0 xjmp L94
0250 L91:
0250 .dbline 207
0250 L92:
0250 .dbline 207
0250 4395 inc R20
0252 L94:
0252 .dbline 207
0252 ; for(i = 0;unshifted[i][0]!=sc && unshifted[i][0]; i++);
0252 82E0 ldi R24,2
0254 849F mul R24,R20
0256 F001 movw R30,R0
0258 80E0 ldi R24,<_unshifted
025A 90E0 ldi R25,>_unshifted
025C E80F add R30,R24
025E F91F adc R31,R25
0260 2490 lpm R2,Z
0262 3324 clr R3
0264 2016 cp R2,R16
0266 11F0 breq L95
0268 2220 tst R2
026A 91F7 brne L91
026C L95:
026C .dbline 208
026C ; if (unshifted[i][0] == sc)
026C 82E0 ldi R24,2
026E 849F mul R24,R20
0270 F001 movw R30,R0
0272 80E0 ldi R24,<_unshifted
0274 90E0 ldi R25,>_unshifted
0276 E80F add R30,R24
0278 F91F adc R31,R25
027A E491 lpm R30,Z
027C E017 cp R30,R16
027E 09F0 breq X5
0280 2CC0 xjmp L90
0282 X5:
0282 .dbline 209
0282 ; return unshifted[i][1];
0282 82E0 ldi R24,2
0284 849F mul R24,R20
0286 F001 movw R30,R0
0288 80E0 ldi R24,<_unshifted+1
028A 90E0 ldi R25,>_unshifted+1
028C E80F add R30,R24
028E F91F adc R31,R25
0290 0491 lpm R16,Z
0292 24C0 xjmp L70
0294 X4:
0294 .dbline 210
0294 ; }
0294 L89:
0294 .dbline 212
0294 ; else
0294 ; {
0294 .dbline 213
0294 4427 clr R20
0296 01C0 xjmp L102
0298 L99:
0298 .dbline 213
0298 L100:
0298 .dbline 213
0298 4395 inc R20
029A L102:
029A .dbline 213
029A ; for(i = 0;shifted[i][0]!=sc && shifted[i][0]; i++);
029A 82E0 ldi R24,2
029C 849F mul R24,R20
029E F001 movw R30,R0
02A0 80E0 ldi R24,<_shifted
02A2 90E0 ldi R25,>_shifted
02A4 E80F add R30,R24
02A6 F91F adc R31,R25
02A8 2490 lpm R2,Z
02AA 3324 clr R3
02AC 2016 cp R2,R16
02AE 11F0 breq L103
02B0 2220 tst R2
02B2 91F7 brne L99
02B4 L103:
02B4 .dbline 214
02B4 ; if (shifted[i][0] == sc)
02B4 82E0 ldi R24,2
02B6 849F mul R24,R20
02B8 F001 movw R30,R0
02BA 80E0 ldi R24,<_shifted
02BC 90E0 ldi R25,>_shifted
02BE E80F add R30,R24
02C0 F91F adc R31,R25
02C2 E491 lpm R30,Z
02C4 E017 cp R30,R16
02C6 49F4 brne L104
02C8 .dbline 215
02C8 ; {
02C8 .dbline 216
02C8 ; return shifted[i][1];
02C8 82E0 ldi R24,2
02CA 849F mul R24,R20
02CC F001 movw R30,R0
02CE 80E0 ldi R24,<_shifted+1
02D0 90E0 ldi R25,>_shifted+1
02D2 E80F add R30,R24
02D4 F91F adc R31,R25
02D6 0491 lpm R16,Z
02D8 01C0 xjmp L70
02DA L104:
02DA .dbline 218
02DA ; }
02DA ; }
02DA L90:
02DA .dbline 219
02DA ; }
02DA .dbline 220
02DA ; return 0;
02DA 0027 clr R16
02DC .dbline -2
02DC L70:
02DC 0E940000 xcall pop_gset2
02E0 .dbline 0 ; func end
02E0 0895 ret
02E2 .dbsym r i 20 c
02E2 .dbsym r sc 16 c
02E2 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
0000 _bitcount::
0000 .blkb 1
0001 .dbsym e bitcount _bitcount c
.area data(ram, con, rel)
0004 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
0004 L32:
0004 .blkb 18
.area idata
0004 64757368696269616F403132362E636F .byte 'd,'u,'s,'h,'i,'b,'i,'a,'o,64,49,50,54,46,'c,'o
0014 6D00 .byte 'm,0
.area data(ram, con, rel)
0016 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
0016 L31:
0016 .blkb 10
.area idata
0016 64757368696269616F00 .byte 'd,'u,'s,'h,'i,'b,'i,'a,'o,0
.area data(ram, con, rel)
0020 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
0020 L30:
0020 .blkb 18
.area idata
0020 5053322D2D4B45594F41524420746573 .byte 'P,'S,50,45,45,'K,'E,'Y,'O,'A,'R,'D,32,'t,'e,'s
0030 7400 .byte 't,0
.area data(ram, con, rel)
0032 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -