📄 ps2test.lis
字号:
00B4 E491 lpm R30,Z
00B6 EBBB out 0x1b,R30
00B8 .dbline 42
00B8 ; para: the char to be send
00B8 05E0 ldi R16,5
00BA 10E0 ldi R17,0
00BC BCDF xcall _delay_nms
00BE .dbline 43
00BE ; -----------------------------------------------------------------*/
00BE C09A sbi 0x18,0
00C0 .dbline 45
00C0 ; void put_c(unsigned char c) //发送采用查询方式
00C0 ; {
00C0 C198 cbi 0x18,1
00C2 .dbline 46
00C2 ; while( !(UCSRA & (1<<UDRE)) ); //wait until the uart is empty
00C2 E0E0 ldi R30,<_discode+16
00C4 F0E0 ldi R31,>_discode+16
00C6 E491 lpm R30,Z
00C8 EBBB out 0x1b,R30
00CA .dbline 47
00CA ; UDR=c; //write data to uart
00CA 05E0 ldi R16,5
00CC 10E0 ldi R17,0
00CE B3DF xcall _delay_nms
00D0 .dbline 48
00D0 ; }
00D0 C19A sbi 0x18,1
00D2 .dbline -2
00D2 L18:
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbend
.area data(ram, con, rel)
0000 .dbfile D:\M16开发板实验教程\icc-avr\ps2test/shumaguan.h
0000 _origialcode::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\M16开发板实验教程\icc-avr\ps2test/shumaguan.h
0001 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
0001 .dbsym e origialcode _origialcode c
.area text(rom, con, rel)
00D4 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
00D4 .dbfunc e put_c _put_c fV
00D4 ; c -> R16
.even
00D4 _put_c::
00D4 .dbline -1
00D4 .dbline 45
00D4 L22:
00D4 .dbline 46
00D4 L23:
00D4 .dbline 46
00D4 5D9B sbis 0xb,5
00D6 FECF rjmp L22
00D8 .dbline 47
00D8 0CB9 out 0xc,R16
00DA .dbline -2
00DA L21:
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbsym r c 16 c
00DC .dbend
00DC .dbfunc e put_s _put_s fV
00DC ; ptr -> R20,R21
.even
00DC _put_s::
00DC 0E940000 xcall push_gset1
00E0 A801 movw R20,R16
00E2 .dbline -1
00E2 .dbline 54
00E2 ; /*-----------------------------------------------------------------
00E2 ; function: send a string to the uart
00E2 ; para: ptr---the pointer point to the string
00E2 ; ------------------------------------------------------------------*/
00E2 ; void put_s(unsigned char *ptr)
00E2 ; {
00E2 04C0 xjmp L27
00E4 L26:
00E4 .dbline 56
00E4 .dbline 57
00E4 FA01 movw R30,R20
00E6 0191 ld R16,Z+
00E8 AF01 movw R20,R30
00EA F4DF xcall _put_c
00EC .dbline 58
00EC L27:
00EC .dbline 55
00EC ; while (*ptr)
00EC FA01 movw R30,R20
00EE 2080 ldd R2,z+0
00F0 2220 tst R2
00F2 C1F7 brne L26
00F4 .dbline 59
00F4 ; {
00F4 ; put_c(*ptr++);
00F4 ; }
00F4 ; put_c(0x0D);
00F4 0DE0 ldi R16,13
00F6 EEDF xcall _put_c
00F8 .dbline 60
00F8 ; put_c(0x0A); //结尾发送回车换行
00F8 0AE0 ldi R16,10
00FA ECDF xcall _put_c
00FC .dbline -2
00FC L25:
00FC 0E940000 xcall pop_gset1
0100 .dbline 0 ; func end
0100 0895 ret
0102 .dbsym r ptr 20 pc
0102 .dbend
0102 .dbfunc e main _main fV
.even
0102 _main::
0102 .dbline -1
0102 .dbline 64
0102 ; }
0102 ;
0102 ; void main(void)
0102 ; {
0102 .dbline 65
0102 ; portinitial();
0102 16D0 xcall _portinitial
0104 .dbline 66
0104 ; intinitial();
0104 1FD0 xcall _intinitial
0106 .dbline 67
0106 ; init_USART();
0106 51D0 xcall _init_USART
0108 .dbline 70
0108 ;
0108 ;
0108 ; put_s("PS2--KEYOARD test");
0108 00E0 ldi R16,<L30
010A 10E0 ldi R17,>L30
010C E7DF xcall _put_s
010E .dbline 71
010E ; put_s("dushibiao");
010E 00E0 ldi R16,<L31
0110 10E0 ldi R17,>L31
0112 E4DF xcall _put_s
0114 .dbline 72
0114 ; put_s("dushibiao@126.com");
0114 00E0 ldi R16,<L32
0116 10E0 ldi R17,>L32
0118 E1DF xcall _put_s
011A .dbline 73
011A ; put_c(0x0a);
011A 0AE0 ldi R16,10
011C DBDF xcall _put_c
011E .dbline 74
011E ; put_c(0x0d);//换行
011E 0DE0 ldi R16,13
0120 D9DF xcall _put_c
0122 .dbline 76
0122 ;
0122 ; SEI(); //enable interrupt ,this was predefined in MACROS.h
0122 7894 sei
0124 03C0 xjmp L34
0126 L33:
0126 .dbline 79
0126 .dbline 80
0126 00910000 lds R16,_origialcode
012A 94DF xcall _display
012C .dbline 81
012C L34:
012C .dbline 78
012C FCCF xjmp L33
012E X0:
012E .dbline -2
012E L29:
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbend
0130 .dbfunc e portinitial _portinitial fV
.even
0130 _portinitial::
0130 .dbline -1
0130 .dbline 88
0130 ;
0130 ; while(1)
0130 ; {
0130 ; display(origialcode);
0130 ; }
0130 ;
0130 ; }
0130 ; /*********************************************************************
0130 ; fuction: ports initialize
0130 ; **********************************************************************/
0130 ; void portinitial(void)
0130 ; {
0130 .dbline 89
0130 ; PORTA=0XFF;
0130 8FEF ldi R24,255
0132 8BBB out 0x1b,R24
0134 .dbline 90
0134 ; DDRA=0XFF; //OUT
0134 8ABB out 0x1a,R24
0136 .dbline 91
0136 ; PORTB=0XFF;
0136 88BB out 0x18,R24
0138 .dbline 92
0138 ; DDRB=0X0F; //high fout bit in , low four bits out
0138 8FE0 ldi R24,15
013A 87BB out 0x17,R24
013C .dbline 93
013C ; PORTC=0XFF; //pull up
013C 8FEF ldi R24,255
013E 85BB out 0x15,R24
0140 .dbline 94
0140 ; PORTD=0XFF; //pull up
0140 82BB out 0x12,R24
0142 .dbline -2
0142 L36:
0142 .dbline 0 ; func end
0142 0895 ret
0144 .dbend
0144 .dbfunc e intinitial _intinitial fV
.even
0144 _intinitial::
0144 .dbline -1
0144 .dbline 101
0144 ; }
0144 ;
0144 ; /*********************************************************************
0144 ; fuction: ext interrupt initialize
0144 ; **********************************************************************/
0144 ; void intinitial(void) //int1 ,int0下降沿中断
0144 ; {
0144 .dbline 102
0144 ; MCUCR=(1<<ISC10); //falling edge interrup
0144 84E0 ldi R24,4
0146 85BF out 0x35,R24
0148 .dbline 103
0148 ; GICR |=(1<<INT1); //enable ext0,ext1 interrupt
0148 8BB7 in R24,0x3b
014A 8068 ori R24,128
014C 8BBF out 0x3b,R24
014E .dbline 104
014E ; bitcount = 11;
014E 8BE0 ldi R24,11
0150 80930000 sts _bitcount,R24
0154 .dbline -2
0154 L37:
0154 .dbline 0 ; func end
0154 0895 ret
0156 .dbend
.area vector(rom, abs)
.org 8
0008 0C94AB00 jmp _int1pro
.area text(rom, con, rel)
0156 .dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
0156 .dbfunc e int1pro _int1pro fV
0156 ; code -> R20
0156 ; i -> R22
.even
0156 _int1pro::
0156 0E940000 xcall push_lset
015A 0E940000 xcall push_gset2
015E .dbline -1
015E .dbline 112
015E ; }
015E ;
015E ; /*********************************************************************
015E ; fuction: ext1 interrupt service routine
015E ; **********************************************************************/
015E ; #pragma interrupt_handler int1pro: iv_INT1
015E ; void int1pro(void)
015E ; {
015E .dbline 114
015E ; unsigned char i,code;
015E ; if ((PIN_KB&(1<<DATAPIN))==0)
015E 8299 sbic 0x10,2
0160 1FC0 rjmp L39
0162 .dbline 115
0162 ; {
0162 L41:
0162 .dbline 116
0162 L42:
0162 .dbline 116
0162 ; while((PIN_KB&(1<<CLOCK))==0);
0162 839B sbis 0x10,3
0164 FECF rjmp L41
0166 .dbline 117
0166 ; for(i=0;i<8;i++)
0166 6627 clr R22
0168 09C0 xjmp L47
016A X1:
016A .dbline 118
016A ; {
016A L48:
016A .dbline 119
016A L49:
016A .dbline 119
016A ; while(PIN_KB&(1<<CLOCK));
016A 8399 sbic 0x10,3
016C FECF rjmp L48
016E .dbline 120
016E ; code>>=1;
016E 4695 lsr R20
0170 .dbline 121
0170 ; if ((PIN_KB&(1<<DATAPIN))!=0)
0170 829B sbis 0x10,2
0172 01C0 rjmp L54
0174 .dbline 122
0174 ; code|=0x80;
0174 4068 ori R20,128
0176 L53:
0176 .dbline 123
0176 L54:
0176 .dbline 123
0176 839B sbis 0x10,3
0178 FECF rjmp L53
017A .dbline 124
017A L45:
017A .dbline 117
017A 6395 inc R22
017C L47:
017C .dbline 117
017C 6830 cpi R22,8
017E A8F3 brlo L49
0180 L56:
0180 .dbline 125
0180 L57:
0180 .dbline 125
0180 ; while((PIN_KB&(1<<CLOCK))==0);
0180 ; }
0180 ; while(PIN_KB&(1<<CLOCK));
0180 8399 sbic 0x10,3
0182 FECF rjmp L56
0184 L59:
0184 .dbline 126
0184 L60:
0184 .dbline 126
0184 ; while((PIN_KB&(1<<CLOCK))==0);
0184 839B sbis 0x10,3
0186 FECF rjmp L59
0188 L62:
0188 .dbline 127
0188 L63:
0188 .dbline 127
0188 ; while(PIN_KB&(1<<CLOCK));
0188 8399 sbic 0x10,3
018A FECF rjmp L62
018C .dbline 128
018C ; if ((PIN_KB&(1<<DATAPIN))!=0)
018C 829B sbis 0x10,2
018E 08C0 rjmp L65
0190 .dbline 129
0190 ; {
0190 .dbline 130
0190 ; origialcode=code;
0190 40930000 sts _origialcode,R20
0194 .dbline 131
0194 ; code=decode(code);
0194 042F mov R16,R20
0196 13D0 xcall _decode
0198 402F mov R20,R16
019A .dbline 132
019A ; if(code!=0)
019A 0023 tst R16
019C 09F0 breq L67
019E .dbline 133
019E ; put_c(code);
019E 9ADF xcall _put_c
01A0 L67:
01A0 .dbline 134
01A0 ; }
01A0 L65:
01A0 .dbline 135
01A0 L39:
01A0 .dbline -2
01A0 L38:
01A0 0E940000 xcall pop_gset2
01A4 0E940000 xcall pop_lset
01A8 .dbline 0 ; func end
01A8 1895 reti
01AA .dbsym r code 20 c
01AA .dbsym r i 22 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -