⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.lst

📁 基于PIC16F877A PORTB端口高低电平变化的键盘中断程序
💻 LST
📖 第 1 页 / 共 2 页
字号:


HI-TECH Software PICC Macro Assembler V8.05PL2
                                                      Fri Feb 20 23:38:31 2009


     1                           	processor	16F877A
     2                           	opt	pw 79
     3                           	psect	__Z49231UD_,global,delta=1
     4                           	psect	strings,global,class=STRING,delta=2
     5                           	psect	const1,local,class=CONST,delta=2
     6                           	psect	text3,local,class=CODE,delta=2
     7                           	psect	text7,local,class=CODE,delta=2
     8                           	psect	text9,local,class=CODE,delta=2
     9                           	psect	intcode,global,class=CODE,delta=2
    10                           	psect	intsave_0,global,ovrld,class=COMBANK,spa
      +                          ce=1,delta=1
    11                           	psect	intret,global,class=CODE,delta=2
    12                           	psect	intentry,global,class=CODE,delta=2
    13                           	psect	intsave,global,class=BANK0,space=1,delta
      +                          =1
    14                           	psect	rbss_0,global,class=BANK0,space=1,delta=
      +                          1
    15                           	psect	temp,global,ovrld,class=BANK0,space=1,de
      +                          lta=1
    16  0000                     
    17  0000                     
    18  0000                     
    19  0000                     
    20  0000                     
    21  0000                     
    22  0000                     
    23  0000                     
    24  0000                     
    25  0000                     
    26                           
    27                           	psect	const1
    28  0032  0782               	addwf	2
    29  0033                     _table
    30  0033  3430               	retlw	48
    31  0034  3431               	retlw	49
    32  0035  3432               	retlw	50
    33  0036  3433               	retlw	51
    34  0037  3434               	retlw	52
    35  0038  3435               	retlw	53
    36  0039  3436               	retlw	54
    37  003A  3437               	retlw	55
    38  003B  3438               	retlw	56
    39  003C  3439               	retlw	57
    40                           
    41                           	psect	text3
    42  077D                     _lcd_disp
    43                           ;	_address assigned to ?a_lcd_disp+0
    44  0000                     _lcd_disp$address	set	?a_lcd_disp
    45                           ;_address stored from w
    46  077D  0183               	clrf	3	;select bank 0
    47  077E  00A3               	movwf	?a_lcd_disp
    48                           ;KEY.C: 62: lcd_command_writedata(0x00,address)
      +                          ;
    49  077F  00A4               	movwf	?_lcd_command_writedata
    50  0780  3000               	movlw	0
    51  0781  2797               	fcall	_lcd_command_writedata
    52                           ;KEY.C: 63: lcd_command_writedata(0xff,disp_dat
      +                          a);
    53  0782  0822               	movf	?_lcd_disp,w
    54  0783  00A4               	movwf	?_lcd_command_writedata
    55  0784  30FF               	movlw	-1
    56  0785  2F97               	ljmp	_lcd_command_writedata
    57                           ;KEY.C: 28: unsigned char lcd_busy(void)
    58                           ;KEY.C: 29: {
    59  0786                     _lcd_busy
    60                           ;	_temp assigned to ?a_lcd_busy+0
    61  0000                     _lcd_busy$temp	set	?a_lcd_busy
    62                           ;KEY.C: 30: unsigned char temp;
    63  0786  30FF               	movlw	-1
    64  0787  0183               	clrf	3	;select bank 0
    65  0788  0087               	movwf	7	;volatile
    66                           ;KEY.C: 33: RS = 0;
    67  0789  1009               	bcf	9,0
    68                           ;KEY.C: 34: RW = 1;
    69  078A  1489               	bsf	9,1
    70                           ;KEY.C: 35: E = 1;
    71  078B  1509               	bsf	9,2
    72                           ;KEY.C: 36: TRISC = 0xff;
    73  078C  1683               	bsf	3,5
    74  078D  0087               	movwf	7	;volatile
    75                           ;KEY.C: 37: temp = PORTC;
    76  078E  1283               	bcf	3,5
    77  078F  0807               	movf	7,w	;volatile
    78  0790  00A6               	movwf	?a_lcd_busy
    79                           ;KEY.C: 38: TRISC = 0x00;
    80  0791  1683               	bsf	3,5
    81  0792  0187               	clrf	7	;volatile
    82                           ;KEY.C: 39: E = 0;
    83  0793  1283               	bcf	3,5
    84  0794  1109               	bcf	9,2
    85                           ;KEY.C: 40: return (temp);
    86  0795  0826               	movf	?a_lcd_busy,w
    87                           ;KEY.C: 41: }
    88  0796  0008               	return
    89                           ;KEY.C: 43: void lcd_command_writedata(unsigned
      +                           char check,unsigned char data)
    90                           ;KEY.C: 44: {
    91                           ;       param _data assigned to ?_lcd_command_w
      +                          ritedata+0
    92  0000                     _lcd_command_writedata$data	set	?_lcd_command_w
      +                          ritedata
    93  0797                     _lcd_command_writedata
    94                           ;	_check assigned to ?a_lcd_command_writedata+0
    95  0000                     _lcd_command_writedata$check	set	?a_lcd_command
      +                          _writedata
    96                           ;_check stored from w
    97  0797  0183               	clrf	3	;select bank 0
    98  0798  00A5               	movwf	?a_lcd_command_writedata
    99                           ;KEY.C: 45: if (check == 0x00)
   100  0799  08A5               	movf	?a_lcd_command_writedata
   101  079A  1D03               	btfss	3,2
   102  079B  2F9E               	goto	l8
   103                           ;KEY.C: 46: {
   104  079C  1009               	bcf	9,0
   105                           ;KEY.C: 48: }
   106  079D  2F9F               	goto	l9
   107  079E                     l8
   108                           ;KEY.C: 50: {
   109  079E  1409               	bsf	9,0
   110  079F                     l9
   111                           ;KEY.C: 52: }
   112                           ;KEY.C: 53: RW = 0;
   113  079F  1089               	bcf	9,1
   114                           ;KEY.C: 54: PORTC = data;
   115  07A0  0824               	movf	?_lcd_command_writedata,w
   116  07A1  0087               	movwf	7	;volatile
   117                           ;KEY.C: 55: E = 1;
   118  07A2  1509               	bsf	9,2
   119                           ;KEY.C: 56: E = 0;
   120  07A3  1109               	bcf	9,2
   121                           ;KEY.C: 57: while (lcd_busy() & 0x80);
   122  07A4                     l10
   123  07A4  2786               	fcall	_lcd_busy
   124  07A5  00F0               	movwf	btemp
   125  07A6  1FF0               	btfss	btemp,7
   126  07A7  0008               	return
   127  07A8  2FA4               	goto	l10
   128                           ;KEY.C: 66: void lcd_init(void)
   129                           ;KEY.C: 67: {
   130  07A9                     _lcd_init
   131                           ;KEY.C: 68: lcd_command_writedata(0x00,0x01);
   132  07A9  0183               	clrf	3	;select bank 0
   133  07AA  01A4               	clrf	?_lcd_command_writedata
   134  07AB  0AA4               	incf	?_lcd_command_writedata
   135  07AC  3000               	movlw	0
   136  07AD  2797               	fcall	_lcd_command_writedata
   137                           ;KEY.C: 69: lcd_command_writedata(0x00,0x38);
   138  07AE  3038               	movlw	56
   139  07AF  00A4               	movwf	?_lcd_command_writedata
   140  07B0  3000               	movlw	0
   141  07B1  2797               	fcall	_lcd_command_writedata
   142                           ;KEY.C: 70: lcd_command_writedata(0x00,0x0e);
   143  07B2  300E               	movlw	14
   144  07B3  00A4               	movwf	?_lcd_command_writedata
   145  07B4  3000               	movlw	0
   146  07B5  2797               	fcall	_lcd_command_writedata
   147                           ;KEY.C: 71: lcd_command_writedata(0x00,0x06);
   148  07B6  3006               	movlw	6
   149  07B7  00A4               	movwf	?_lcd_command_writedata
   150  07B8  3000               	movlw	0
   151  07B9  2F97               	ljmp	_lcd_command_writedata
   152                           ;KEY.C: 83: void rb_init(void)
   153                           ;KEY.C: 84: {
   154  07BA                     _rb_init
   155                           ;KEY.C: 85: TRISB = 0xf0;
   156  07BA  30F0               	movlw	-16
   157  07BB  1683               	bsf	3,5
   158  07BC  1303               	bcf	3,6	;carry unused
   159  07BD  0086               	movwf	6	;volatile
   160                           ;KEY.C: 86: OPTION = 0x7f;
   161  07BE  307F               	movlw	127
   162  07BF  0081               	movwf	1
   163                           ;KEY.C: 87: RBIF = 0;
   164  07C0  100B               	bcf	11,0
   165                           ;KEY.C: 88: PORTB = 0x00;
   166  07C1  1283               	bcf	3,5
   167  07C2  0186               	clrf	6	;volatile
   168                           ;KEY.C: 89: RBIE = 1;
   169  07C3  158B               	bsf	11,3
   170                           ;KEY.C: 90: PORTB = PORTB;
   171  07C4  0806               	movf	6,w	;volatile
   172  07C5  0086               	movwf	6	;volatile
   173                           ;KEY.C: 91: }
   174  07C6  0008               	return
   175  07C7                     _delay
   176                           ;	_i assigned to ?a_delay+0
   177  0000                     _delay$i	set	?a_delay
   178                           ;KEY.C: 22: unsigned int i;
   179  07C7  3099               	movlw	153
   180  07C8  0183               	clrf	3	;select bank 0
   181  07C9  00A7               	movwf	?a_delay
   182  07CA  3019               	movlw	25
   183  07CB  00A8               	movwf	?a_delay+1
   184  07CC                     l5
   185                           ;KEY.C: 25: }
   186  07CC  30FF               	movlw	-1
   187  07CD  07A7               	addwf	?a_delay
   188  07CE  1C03               	btfss	3,0
   189  07CF  03A8               	decf	?a_delay+1
   190  07D0  0828               	movf	?a_delay+1,w
   191  07D1  0427               	iorwf	?a_delay,w
   192  07D2  1903               	btfsc	3,2
   193  07D3  0008               	return
   194  07D4  2FCC               	goto	l5
   195                           ;KEY.C: 74: void system_init(void)
   196                           ;KEY.C: 75: {
   197  07D5                     _system_init
   198                           ;KEY.C: 76: delay();
   199  07D5  27C7               	fcall	_delay
   200                           ;KEY.C: 77: INTCON = 0x00;
   201  07D6  018B               	clrf	11	;volatile
   202                           ;KEY.C: 78: ADCON1 = 0x07;
   203  07D7  3007               	movlw	7
   204  07D8  1683               	bsf	3,5
   205  07D9  009F               	movwf	31	;volatile
   206                           ;KEY.C: 79: TRISC = 0x00;
   207  07DA  0187               	clrf	7	;volatile
   208                           ;KEY.C: 80: TRISE = 0x00;
   209  07DB  0189               	clrf	9	;volatile
   210                           ;KEY.C: 81: }
   211  07DC  1283               	bcf	3,5
   212  07DD  0008               	return
   213                           ;KEY.C: 106: void main(void)
   214                           ;KEY.C: 107: {
   215  07DE                     _main
   216                           ;KEY.C: 108: delay();
   217  07DE  27C7               	fcall	_delay
   218                           ;KEY.C: 109: system_init();
   219  07DF  27D5  120A  118A   	fcall	_system_init
   220                           ;KEY.C: 110: rb_init();
   221  07E2  27BA               	fcall	_rb_init
   222                           ;KEY.C: 111: lcd_init();
   223  07E3  27A9  120A  118A   	fcall	_lcd_init
   224                           ;KEY.C: 112: TMR2ON = 1;
   225  07E6  1512               	bsf	18,2
   226                           ;KEY.C: 113: (GIE = 1);
   227  07E7  178B               	bsf	11,7
   228  07E8                     l24
   229                           ;KEY.C: 114: while(1)
   230                           ;KEY.C: 115: {
   231  07E8  0821               	movf	_temp,w	;volatile
   232  07E9  1903               	btfsc	3,2
   233  07EA  2FE8               	goto	l24
   234                           ;KEY.C: 117: {
   235  07EB  3000               	movlw	_table shr (0+8)
   236  07EC  008A               	movwf	10
   237  07ED  0821               	movf	_temp,w	;volatile
   238  07EE  2032               	call	((_table+-1)& (0+2047))| (($)& (0+-2048))
   239  07EF  00A0               	movwf	_data	;volatile
   240                           ;KEY.C: 119: lcd_disp(0x85,data);
   241  07F0  0820               	movf	_data,w	;volatile
   242  07F1  00A2               	movwf	?_lcd_disp
   243  07F2  3085               	movlw	-123
   244  07F3  120A  118A  277D   	fcall	_lcd_disp
      +       120A  118A         
   245                           ;KEY.C: 120: lcd_disp(0xcf,0xfe);
   246  07F8  30FE               	movlw	-2
   247  07F9  00A2               	movwf	?_lcd_disp
   248  07FA  30CF               	movlw	-49
   249  07FB  277D  120A  118A   	fcall	_lcd_disp
   250                           ;KEY.C: 121: temp = 0;
   251  07FE  01A1               	clrf	_temp	;volatile
   252                           ;KEY.C: 122: }
   253  07FF  2FE8               	goto	l24
   254                           
   255                           	psect	text7
   256                           ;KEY.C: 93: void key_serve(void)
   257                           ;KEY.C: 94: {
   258  0766                     _key_serve
   259                           ;KEY.C: 95: PORTB = 0xfb;
   260  0766  30FB               	movlw	-5
   261  0767  0183               	clrf	3	;select bank 0
   262  0768  0086               	movwf	6	;volatile
   263                           ;KEY.C: 96: if (RB4 == 0) temp = 5;
   264  0769  1A06               	btfsc	6,4
   265  076A  2F6D               	goto	l18
   266  076B  3005               	movlw	5
   267  076C  00A1               	movwf	_temp	;volatile
   268  076D                     l18
   269                           ;KEY.C: 97: if (RB5 == 0) temp = 6;
   270  076D  1A86               	btfsc	6,5
   271  076E  2F71               	goto	l19
   272  076F  3006               	movlw	6
   273  0770  00A1               	movwf	_temp	;volatile
   274  0771                     l19
   275                           ;KEY.C: 98: PORTB = 0xf7;
   276  0771  30F7               	movlw	-9
   277  0772  0086               	movwf	6	;volatile
   278                           ;KEY.C: 99: if (RB4 == 0) temp = 7;
   279  0773  1A06               	btfsc	6,4
   280  0774  2F77               	goto	l20
   281  0775  3007               	movlw	7
   282  0776  00A1               	movwf	_temp	;volatile
   283  0777                     l20
   284                           ;KEY.C: 100: if (RB5 == 0) temp = 8;
   285  0777  1A86               	btfsc	6,5
   286  0778  2F7B               	goto	l21
   287  0779  3008               	movlw	8
   288  077A  00A1               	movwf	_temp	;volatile
   289  077B                     l21
   290                           ;KEY.C: 101: PORTB = 0x00;
   291  077B  0186               	clrf	6	;volatile
   292                           ;KEY.C: 102: }
   293  077C  0008               	return
   294                           
   295                           	psect	intcode
   296                           ;KEY.C: 127: void interrupt rb_interrupt(void)
   297                           ;KEY.C: 128: {
   298  000B                     _rb_interrupt
   299  000B                     int_func
   300                           ;KEY.C: 129: delay();
   301  000B  120A  118A  27C7   	fcall	_delay
      +       120A  118A         
   302                           ;KEY.C: 130: if((RB4 == 0) || (RB5 == 0))
   303  0010  1E06               	btfss	6,4
   304  0011  2814               	goto	u110
   305  0012  1A86               	btfsc	6,5
   306  0013  2819               	goto	l28
   307  0014                     u110
   308                           ;KEY.C: 131: {
   309  0014  120A  118A  2766   	fcall	_key_serve
      +       120A  118A         
   310  0019                     l28
   311                           ;KEY.C: 133: }
   312  0019  0806               	movf	6,w	;volatile
   313  001A  0086               	movwf	6	;volatile
   314                           ;KEY.C: 135: RBIF = 0;
   315  001B  100B               	bcf	11,0
   316                           
   317                           	psect	intsave_0
   318  0071                     saved_w
   319  0071                     	ds	1
   320                           
   321                           	psect	intret
   322  001C  082A               	movf	saved_pclath,w
   323  001D  008A               	movwf	10

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -