亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ps20317.lst

?? 104鍵PS2接口標準鍵盤程序(C語言),通過測試可以!程序簡單易懂。基于ICCAVR編譯器
?? LST
?? 第 1 頁 / 共 2 頁
字號:
__start:
__text_start:
    00B4 E5CF      LDI	R28,0x5F
    00B5 E0D4      LDI	R29,4
    00B6 BFCD      OUT	0x3D,R28
    00B7 BFDE      OUT	0x3E,R29
    00B8 51C0      SUBI	R28,0x10
    00B9 40D0      SBCI	R29,0
    00BA EA0A      LDI	R16,0xAA
    00BB 8308      STD	Y+0,R16
    00BC 2400      CLR	R0
    00BD E6E3      LDI	R30,0x63
    00BE E0F0      LDI	R31,0
    00BF E010      LDI	R17,0
    00C0 3AEB      CPI	R30,0xAB
    00C1 07F1      CPC	R31,R17
    00C2 F011      BEQ	0x00C5
    00C3 9201      ST	R0,Z+
    00C4 CFFB      RJMP	0x00C0
    00C5 8300      STD	Z+0,R16
    00C6 E6E4      LDI	R30,0x64
    00C7 E0F1      LDI	R31,1
    00C8 E6A0      LDI	R26,0x60
    00C9 E0B0      LDI	R27,0
    00CA E011      LDI	R17,1
    00CB 36E7      CPI	R30,0x67
    00CC 07F1      CPC	R31,R17
    00CD F021      BEQ	0x00D2
    00CE 95C8      LPM
    00CF 9631      ADIW	R30,1
    00D0 920D      ST	R0,X+
    00D1 CFF9      RJMP	0x00CB
    00D2 940E0271  CALL	_main
_exit:
    00D4 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\ps2\keyboard.c
(0001) /*****************************
(0002) ** low level kexboard routines                VERSION 1.0
(0003) ******************************/
(0004) //ICC-AVR application builder : 2009-3-13 23:41:54
(0005) // Target : M16
(0006) // Crystal: 11.059Mhz
(0007) 
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010) 
(0011) // "kb.h"
(0012) #include "scancode.h"
(0013) 
(0014) #define BUFF_SIZE 64
(0015) #define CLOCK   2
(0016) #define DATAPIN 3
(0017) 
(0018) #define ISC00 0
(0019) #define ISC01 1
(0020) 
(0021) // Declare your global variables here
(0022) unsigned char edge, bitcount;                // 0 = neg.  1 = pos.
(0023) 
(0024) unsigned char kb_buffer[BUFF_SIZE];
(0025) unsigned char *inpt, *outpt;
(0026) unsigned char buffcnt;
(0027) 
(0028) void port_init(void)
(0029) {
(0030)  PORTA = 0x00;
_port_init:
    00D5 2422      CLR	R2
    00D6 BA2B      OUT	0x1B,R2
(0031)  DDRA  = 0x00;
    00D7 BA2A      OUT	0x1A,R2
(0032)  PORTB = 0x00;
    00D8 BA28      OUT	0x18,R2
(0033)  DDRB  = 0x00;
    00D9 BA27      OUT	0x17,R2
(0034)  PORTC = 0x00; //m103 output only
    00DA BA25      OUT	0x15,R2
(0035)  DDRC  = 0x00;
    00DB BA24      OUT	0x14,R2
(0036)  PORTD = 0x00;
    00DC BA22      OUT	0x12,R2
(0037)  DDRD  = 0x00;
    00DD BA21      OUT	0x11,R2
    00DE 9508      RET
(0038) }
(0039) 
(0040) 
(0041) void InitKeyBoard(void)
(0042) {
(0043)     inpt =  kb_buffer;                        // Initialize buffer
_InitKeyBoard:
    00DF E689      LDI	R24,0x69
    00E0 E090      LDI	R25,0
    00E1 93900068  STS	inpt+1,R25
    00E3 93800067  STS	inpt,R24
(0044)     outpt = kb_buffer;
    00E5 93900066  STS	outpt+1,R25
    00E7 93800065  STS	outpt,R24
(0045)     buffcnt = 0;
    00E9 2422      CLR	R2
    00EA 92200064  STS	buffcnt,R2
(0046) 
(0047)     //MCUCR = 2;                                // INT0 interrupt on falling edge
(0048)     edge = 0;                                // 0 = falling edge  1 = rising edge
    00EC 922000AA  STS	edge,R2
(0049)     bitcount = 11;               
    00EE E08B      LDI	R24,0xB
    00EF 938000A9  STS	bitcount,R24
    00F1 9508      RET
(0050)     //#asm("sei")                              // interrupt enable
(0051) }
(0052) 
(0053) 
(0054) void put_kbbuff(unsigned char c)
(0055) {
(0056)     if (buffcnt<BUFF_SIZE)                        // If buffer not full
_put_kbbuff:
  c                    --> R16
    00F2 91800064  LDS	R24,buffcnt
    00F4 3480      CPI	R24,0x40
    00F5 F510      BCC	0x0118
(0057)     {
(0058)         *inpt = c;                                // Put character into buffer
    00F6 91E00067  LDS	R30,inpt
    00F8 91F00068  LDS	R31,inpt+1
    00FA 8300      STD	Z+0,R16
(0059)         inpt++;                                    // Increment pointer
    00FB 91800067  LDS	R24,inpt
    00FD 91900068  LDS	R25,inpt+1
    00FF 9601      ADIW	R24,1
    0100 93900068  STS	inpt+1,R25
    0102 93800067  STS	inpt,R24
(0060) 
(0061)         buffcnt++;
    0104 91800064  LDS	R24,buffcnt
    0106 5F8F      SUBI	R24,0xFF
    0107 93800064  STS	buffcnt,R24
(0062) 
(0063)         if (inpt >= kb_buffer + BUFF_SIZE)        // Pointer wrapping
    0109 EA89      LDI	R24,0xA9
    010A E090      LDI	R25,0
    010B 90200067  LDS	R2,inpt
    010D 90300068  LDS	R3,inpt+1
    010F 1628      CP	R2,R24
    0110 0639      CPC	R3,R25
    0111 F030      BCS	0x0118
(0064)             inpt = kb_buffer;
    0112 E689      LDI	R24,0x69
    0113 E090      LDI	R25,0
    0114 93900068  STS	inpt+1,R25
    0116 93800067  STS	inpt,R24
(0065)     }
    0118 9508      RET
(0066) }
(0067) 
(0068) int getchar_kb(void)
(0069) {
(0070)     int byte;
(0071)     while(buffcnt == 0);                        // Wait for data
_getchar_kb:
  byte                 --> R16
    0119 90200064  LDS	R2,buffcnt
    011B 2022      TST	R2
    011C F3E1      BEQ	0x0119
(0072) 
(0073)     byte = *outpt;                                // Get byte
    011D 91E00065  LDS	R30,outpt
    011F 91F00066  LDS	R31,outpt+1
    0121 8100      LDD	R16,Z+0
    0122 2711      CLR	R17
(0074)     outpt++;                                    // Increment pointer
    0123 01CF      MOVW	R24,R30
    0124 9601      ADIW	R24,1
    0125 93900066  STS	outpt+1,R25
    0127 93800065  STS	outpt,R24
(0075) 
(0076)     if (outpt >= kb_buffer + BUFF_SIZE)            // Pointer wrapping
    0129 EA89      LDI	R24,0xA9
    012A E090      LDI	R25,0
    012B 90200065  LDS	R2,outpt
    012D 90300066  LDS	R3,outpt+1
    012F 1628      CP	R2,R24
    0130 0639      CPC	R3,R25
    0131 F030      BCS	0x0138
(0077)         outpt = kb_buffer;
    0132 E689      LDI	R24,0x69
    0133 E090      LDI	R25,0
    0134 93900066  STS	outpt+1,R25
    0136 93800065  STS	outpt,R24
(0078)     
(0079)     buffcnt--;                                    // Decrement buffer count
    0138 91800064  LDS	R24,buffcnt
    013A 5081      SUBI	R24,1
    013B 93800064  STS	buffcnt,R24
(0080) 
(0081)     return byte;
    013D 9508      RET
_print_hexbyte:
  l                    --> R20
  h                    --> R22
  i                    --> R20
    013E 940E0281  CALL	push_gset2
    0140 2F40      MOV	R20,R16
(0082) }
(0083) 
(0084) void print_hexbyte(unsigned char i)   //???
(0085) {
(0086)     unsigned char h, l;
(0087)     
(0088)     h = i & 0xF0;               // High nibble
    0141 2F64      MOV	R22,R20
    0142 7F60      ANDI	R22,0xF0
(0089)     h = h>>4;
    0143 2F86      MOV	R24,R22
    0144 9582      SWAP	R24
    0145 708F      ANDI	R24,0xF
    0146 2F68      MOV	R22,R24
(0090)     h = h + '0';
    0147 5D60      SUBI	R22,0xD0
(0091)     
(0092)     if (h > '9')
    0148 E389      LDI	R24,0x39
    0149 1786      CP	R24,R22
    014A F408      BCC	0x014C
(0093)         h = h + 7;
    014B 5F69      SUBI	R22,0xF9
(0094) 
(0095)     l = (i & 0x0F)+'0';         // Low nibble
    014C 2F84      MOV	R24,R20
    014D 708F      ANDI	R24,0xF
    014E 5D80      SUBI	R24,0xD0
    014F 2F48      MOV	R20,R24
(0096)     if (l > '9')
    0150 E389      LDI	R24,0x39
    0151 1784      CP	R24,R20
    0152 F408      BCC	0x0154
(0097)         l = l + 7;
    0153 5F49      SUBI	R20,0xF9
(0098) 
(0099)     put_kbbuff(h);
    0154 2F06      MOV	R16,R22
    0155 DF9C      RCALL	_put_kbbuff
(0100)     put_kbbuff(l);
    0156 2F04      MOV	R16,R20
    0157 DF9A      RCALL	_put_kbbuff
    0158 940E0278  CALL	pop_gset2
    015A 9508      RET
_decode:
  i                    --> R22
  sc                   --> R20
    015B 940E0281  CALL	push_gset2
    015D 2F40      MOV	R20,R16
(0101) }
(0102)  
(0103) void decode(unsigned char sc)
(0104) {
(0105)     static unsigned char is_up=0, shift = 0, mode = 0;
(0106)     unsigned char i;
(0107)  
(0108)     if (!is_up)                // Last data received was the up-key identifier
    015E 90200060  LDS	R2,is_up
    0160 2022      TST	R2
    0161 F009      BEQ	0x0163
    0162 C094      RJMP	0x01F7
(0109)     {
(0110)         switch (sc)
    0163 2F64      MOV	R22,R20
    0164 2777      CLR	R23
    0165 3162      CPI	R22,0x12
    0166 E0E0      LDI	R30,0
    0167 077E      CPC	R23,R30
    0168 F0D9      BEQ	0x0184
    0169 E182      LDI	R24,0x12
    016A E090      LDI	R25,0
    016B 1786      CP	R24,R22
    016C 0797      CPC	R25,R23
    016D F02C      BLT	0x0173
    016E 3065      CPI	R22,5
    016F E0E0      LDI	R30,0
    0170 077E      CPC	R23,R30
    0171 F0D1      BEQ	0x018C
    0172 C029      RJMP	0x019C
    0173 3569      CPI	R22,0x59
    0174 E0E0      LDI	R30,0
    0175 077E      CPC	R23,R30
    0176 F089      BEQ	0x0188
    0177 3569      CPI	R22,0x59
    0178 E0E0      LDI	R30,0
    0179 077E      CPC	R23,R30
    017A F10C      BLT	0x019C
    017B 3F60      CPI	R22,0xF0
    017C E0E0      LDI	R30,0
    017D 077E      CPC	R23,R30
    017E F009      BEQ	0x0180
    017F C01C      RJMP	0x019C
(0111)         {
(0112)           case 0xF0 :        // The up-key identifier
(0113)             is_up = 1;
    0180 E081      LDI	R24,1
    0181 93800060  STS	is_up,R24
(0114)             break;
    0183 C0A4      RJMP	0x0228
(0115) 
(0116)           case 0x12 :        // Left SHIFT
(0117)             shift = 1;
    0184 E081      LDI	R24,1
    0185 93800061  STS	shift,R24
(0118)             break;
    0187 C0A0      RJMP	0x0228
(0119) 
(0120)           case 0x59 :        // Right SHIFT
(0121)             shift = 1;
    0188 E081      LDI	R24,1
    0189 93800061  STS	shift,R24
(0122)             break;
    018B C09C      RJMP	0x0228
(0123) 
(0124)           case 0x05 :        // F1
(0125)             if(mode == 0)   mode = 1;    // Enter scan code mode
    018C 90200062  LDS	R2,mode
    018E 2022      TST	R2
    018F F419      BNE	0x0193
    0190 E081      LDI	R24,1
    0191 93800062  STS	mode,R24
(0126)             if(mode == 2)   mode = 3;    // Leave scan code mode
    0193 91800062  LDS	R24,mode
    0195 3082      CPI	R24,2
    0196 F009      BEQ	0x0198
    0197 C090      RJMP	0x0228
    0198 E083      LDI	R24,3
    0199 93800062  STS	mode,R24
(0127)             break;
    019B C08C      RJMP	0x0228
(0128) 
(0129)           default:
(0130)             if(mode == 0 || mode == 3)        // If ASCII mode
    019C 90200062  LDS	R2,mode
    019E 2022      TST	R2
    019F F021      BEQ	0x01A4
    01A0 2D82      MOV	R24,R2
    01A1 3083      CPI	R24,3
    01A2 F009      BEQ	0x01A4
    01A3 C04E      RJMP	0x01F2
(0131)             {
(0132)                 if(!shift)                    // If shift is not pressed,
    01A4 90200061  LDS	R2,shift
    01A6 2022      TST	R2
    01A7 F529      BNE	0x01CD
(0133)                 {                            // do a table look-up
(0134)                     for(i = 0; unshifted[i][0]!=sc && unshifted[i][0]; i++);//???
    01A8 2766      CLR	R22
    01A9 C001      RJMP	0x01AB
    01AA 9563      INC	R22
    01AB E082      LDI	R24,2
    01AC 9F86      MUL	R24,R22
    01AD 01F0      MOVW	R30,R0
    01AE E584      LDI	R24,0x54
    01AF E090      LDI	R25,0
    01B0 0FE8      ADD	R30,R24
    01B1 1FF9      ADC	R31,R25
    01B2 9024      LPM	R2,0(Z)
    01B3 2433      CLR	R3
    01B4 1624      CP	R2,R20
    01B5 F011      BEQ	0x01B8
    01B6 2022      TST	R2
    01B7 F791      BNE	0x01AA
(0135)                     if (unshifted[i][0] == sc) {
    01B8 E082      LDI	R24,2
    01B9 9F86      MUL	R24,R22

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜三级一区二区三| 久久久亚洲精品石原莉奈 | 亚洲欧美日韩在线| 一级做a爱片久久| 日韩不卡一二三区| 国产精品1区2区3区| 色国产精品一区在线观看| 欧美日韩性生活| 久久综合国产精品| 亚洲精选视频免费看| 人人狠狠综合久久亚洲| 国产成a人亚洲精| 欧美日韩另类一区| 中文子幕无线码一区tr| 亚洲mv在线观看| 国产不卡免费视频| 欧美一区二区三区色| 国产精品久久久久影院| 热久久免费视频| 色综合一区二区| 久久久不卡网国产精品一区| 亚洲一二三级电影| 成人自拍视频在线观看| 91精品国产美女浴室洗澡无遮挡| 欧美韩国日本一区| 日韩国产精品久久久| 激情综合亚洲精品| 欧美日本乱大交xxxxx| 最新国产精品久久精品| 精彩视频一区二区| 欧美日韩和欧美的一区二区| 亚洲欧洲日产国产综合网| 久久99国产精品久久| 欧美日韩国产高清一区二区三区| 欧美韩日一区二区三区| 蜜桃在线一区二区三区| 欧洲精品在线观看| 中文字幕中文字幕中文字幕亚洲无线| 久久精品国内一区二区三区| 在线观看国产一区二区| 亚洲三级在线播放| 成人黄色777网| 久久久久青草大香线综合精品| 日日摸夜夜添夜夜添亚洲女人| 91黄视频在线| 亚洲欧美中日韩| 99精品一区二区三区| 欧美高清在线视频| 国产精品中文有码| 久久免费午夜影院| 国产在线精品一区二区不卡了| 日韩欧美专区在线| 久草这里只有精品视频| 日韩视频免费观看高清在线视频| 日韩经典一区二区| 欧美一区二区日韩一区二区| 天天综合网 天天综合色| 欧美性大战久久| 亚洲综合一区二区三区| 91国内精品野花午夜精品| 一区二区三区四区激情| 欧美在线小视频| 午夜精品在线视频一区| 91精品国产综合久久久蜜臀粉嫩| 日韩高清不卡一区二区三区| 91精品国产综合久久香蕉的特点| 麻豆精品国产91久久久久久| 精品乱人伦一区二区三区| 国产精品亚洲第一| 亚洲特级片在线| 欧美探花视频资源| 青青草一区二区三区| 精品日韩av一区二区| 国产激情一区二区三区四区| 中文字幕免费观看一区| 91免费国产视频网站| 亚洲444eee在线观看| 欧美一区二区成人6969| 国产黄人亚洲片| 成人免费一区二区三区视频| 在线精品视频小说1| 美国十次了思思久久精品导航| 亚洲精品一区二区精华| 99re这里都是精品| 日韩av电影一区| 欧美精品一区二区三区四区 | 欧美一区欧美二区| 国产综合色精品一区二区三区| 国产亚洲一区二区三区| 在线观看日韩一区| 精品亚洲porn| 一区二区三区在线播| 91精品福利在线一区二区三区 | 亚洲国产综合色| 日韩美女在线视频| av在线一区二区三区| 午夜av一区二区三区| 久久毛片高清国产| 欧美午夜在线一二页| 国产精品2024| 亚洲福利电影网| 欧美—级在线免费片| 欧美精品丝袜中出| 成人激情黄色小说| 美女视频黄a大片欧美| **性色生活片久久毛片| 精品国产伦一区二区三区观看方式 | 天天色天天操综合| 日本一区二区综合亚洲| 911精品国产一区二区在线| voyeur盗摄精品| 午夜激情综合网| 日韩久久一区二区| 国产亚洲精品久| 91精品久久久久久久91蜜桃| 91丨九色丨蝌蚪富婆spa| 久久精品国产99| 午夜电影久久久| 一区二区三区欧美在线观看| 国产精品你懂的| 久久久亚洲精品石原莉奈 | 精品1区2区在线观看| 欧美日韩另类一区| 色哟哟欧美精品| 久久99国产精品免费网站| 午夜不卡在线视频| 亚洲国产裸拍裸体视频在线观看乱了 | 成人毛片视频在线观看| 麻豆国产精品官网| 蜜桃一区二区三区在线| 天天亚洲美女在线视频| 天堂蜜桃91精品| 亚洲国产精品久久久久秋霞影院| 日韩毛片高清在线播放| 日韩国产在线一| 亚洲一区二区精品久久av| 亚洲卡通动漫在线| 亚洲欧美综合色| 国产精品久久久久久久久免费桃花 | 免费成人美女在线观看| 日本女优在线视频一区二区| 免费日韩伦理电影| 日本成人在线一区| 美女久久久精品| 国产一区二区在线观看免费| 国内成人精品2018免费看| 韩国三级在线一区| 国产乱一区二区| 成人开心网精品视频| av激情成人网| 91久久精品一区二区三区| 色菇凉天天综合网| 日本久久电影网| 欧美精品色综合| 精品国产凹凸成av人网站| 国产偷国产偷精品高清尤物| 国产精品美女久久久久高潮| 亚洲三级免费电影| 五月婷婷色综合| 极品美女销魂一区二区三区| 成人免费看的视频| 欧美在线短视频| 91精品国产欧美日韩| 国产欧美一区二区三区网站| 亚洲精品免费看| 欧美在线一区二区三区| 制服丝袜中文字幕一区| 久久久不卡影院| 夜夜嗨av一区二区三区中文字幕| 午夜精品久久久久影视| 大陆成人av片| 欧美日韩一区二区在线观看| 精品少妇一区二区三区在线播放 | 欧美男男青年gay1069videost| 精品少妇一区二区三区视频免付费| 久久精品亚洲乱码伦伦中文| 国产精品灌醉下药二区| 亚洲一区二区三区中文字幕 | 久国产精品韩国三级视频| 成人app网站| 91精品麻豆日日躁夜夜躁| 国产精品另类一区| 亚洲成人一二三| 懂色av一区二区在线播放| eeuss鲁一区二区三区| 欧美男女性生活在线直播观看| 欧美二区在线观看| 中文字幕一区二区不卡| 裸体健美xxxx欧美裸体表演| 在线观看亚洲专区| 国产精品对白交换视频| 成人免费视频视频在线观看免费| 日韩精品一区二区三区在线播放| 亚洲国产日产av| 精品视频1区2区3区| 亚洲一线二线三线视频| 97久久超碰国产精品电影| 国产精品高潮呻吟| www.日韩av| 中文字幕一区二区视频|