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

📄 test8.lst

📁 hrisc cpu
💻 LST
字号:
CCS PCW C Compiler, Version 2.636, 5783

               Filename: D:\PIC_CO~1\PICC\SRC\TEST8.LST

               ROM used: 244 (24%)
                         244 (24%) including unused fragments
               RAM used: 16 (44%) at main() level
                         28 (78%) worst case
               Stack:    2 worst case (1 in main + 1 for interrupts)

0000:  MOVLW  00
0001:  MOVWF  0A
0002:  GOTO   05F
0003:  NOP
....................  // Test8 
.................... // 
.................... // This tests out the risc16f84 to see if it can service interrupts. 
.................... // In particular, the interrupts will occur during subroutines, so 
.................... // the stack will be tested beyond one level. 
.................... // Periodic interrupts increment a byte counter, which is displayed 
.................... // on the LEDs, while the colored boxes are being printed to the LCD 
.................... // panel. 
.................... // 
.................... // Author: John Clayton 
.................... // Date  : 11/25/02 
....................  
.................... #device PIC16C84 
.................... #byte stat_reg     = 0x03 
.................... #byte addr_lo      = 0x05 
.................... #byte addr_hi      = 0x06 
.................... #byte data         = 0x08 
.................... #byte w_temp       = 0x0c 
.................... #byte stat_temp    = 0x0d 
.................... #byte addr_lo_temp = 0x0e 
.................... #byte addr_hi_temp = 0x0f 
....................  
.................... // Global type variables 
.................... int int_count; 
....................  
.................... // This functions plots a single pixel at coordinates (x,y) 
.................... // color should range from 0..7. 
.................... void plot(unsigned int x, unsigned int y, unsigned int color) 
.................... { 
.................... addr_hi = (y>>1) | 0x40; 
*
002E:  MOVF   24,W
002F:  MOVWF  0C
0030:  BCF    03,0
0031:  RRF    0C,F
0032:  MOVF   0C,W
0033:  IORLW  40
0034:  MOVWF  06
.................... addr_lo = x | (y<<7); 
0035:  MOVF   24,W
0036:  MOVWF  0C
0037:  SWAPF  0C,F
0038:  RLF    0C,F
0039:  RLF    0C,F
003A:  RLF    0C,F
003B:  MOVLW  80
003C:  ANDWF  0C,F
003D:  MOVF   0C,W
003E:  IORWF  23,W
003F:  MOVWF  05
.................... data = color; 
0040:  MOVF   25,W
0041:  MOVWF  08
.................... } 
....................  
.................... void fill_block(unsigned int x1, 
....................                 unsigned int y1, 
....................                 unsigned int x2, 
....................                 unsigned int y2, 
....................                 unsigned int color) 
.................... { 
.................... int i,j; 
....................  
.................... for (i=x1;i<x2;i++) 
*
001C:  MOVF   1C,W
001D:  MOVWF  21
001E:  MOVF   1E,W
001F:  SUBWF  21,W
0020:  BTFSC  03,0
0021:  GOTO   046
....................   for (j=y1;j<y2;j++) 
0022:  MOVF   1D,W
0023:  MOVWF  22
0024:  MOVF   1F,W
0025:  SUBWF  22,W
0026:  BTFSC  03,0
0027:  GOTO   044
....................     plot (i,j,color); 
0028:  MOVF   21,W
0029:  MOVWF  23
002A:  MOVF   22,W
002B:  MOVWF  24
002C:  MOVF   20,W
002D:  MOVWF  25
*
0042:  INCF   22,F
0043:  GOTO   024
0044:  INCF   21,F
0045:  GOTO   01E
0046:  RETLW  00
.................... } 
....................  
.................... void show_leds(unsigned int value) 
.................... { 
.................... addr_hi = 0xff; 
*
000E:  MOVLW  FF
000F:  MOVWF  06
.................... addr_lo = 0x07; 
0010:  MOVLW  07
0011:  MOVWF  05
.................... data = value; 
0012:  MOVF   27,W
0013:  MOVWF  08
.................... } 
....................  
.................... // This is an interrupt service routine 
.................... // #int_default -- this directive causes the compiler to produce 
.................... // code for saving registers and "cleanup."  It is not working 
.................... // too well. 
....................  
.................... #int_global 
.................... void isr1() 
.................... { 
....................   // Save the 'w' register, so that the ISR will not destroy 
....................   // any work in progress using the 'w' register at the time 
....................   // the interrupt occurred. 
....................   // Also, save the status register 
....................   // Also, save the aux address bus values 
....................   #asm 
....................     movwf w_temp 
*
0004:  MOVWF  0C
....................     movf  stat_reg,w 
0005:  MOVF   03,W
....................     movwf stat_temp 
0006:  MOVWF  0D
....................     movf  addr_hi,w 
0007:  MOVF   06,W
....................     movwf addr_hi_temp 
0008:  MOVWF  0F
....................     movf  addr_lo,w 
0009:  MOVF   05,W
....................     movwf addr_lo_temp 
....................   #endasm 
000A:  MOVWF  0E
....................   show_leds(++int_count); 
000B:  INCF   11,F
000C:  MOVF   11,W
000D:  MOVWF  27
....................   // Restore the contents of the 'w' register and status register 
....................   #asm 
....................     movf  addr_lo_temp,w 
*
0014:  MOVF   0E,W
....................     movwf addr_lo 
0015:  MOVWF  05
....................     movf  addr_hi_temp,w 
0016:  MOVF   0F,W
....................     movwf addr_hi 
0017:  MOVWF  06
....................     movf  stat_temp,w 
0018:  MOVF   0D,W
....................     movwf stat_reg 
0019:  MOVWF  03
....................     movf  w_temp,w 
....................   #endasm 
001A:  MOVF   0C,W
001B:  RETFIE
.................... } 
....................  
.................... int pn_sequence(unsigned int value) 
.................... // Takes a PN sequence value, and produces the next value... 
.................... { 
.................... return((value << 1) + (((value>>2) ^ (value>>7))&0x01)); 
*
0047:  MOVF   1C,W
0048:  MOVWF  1D
0049:  BCF    03,0
004A:  RLF    1D,F
004B:  MOVF   1C,W
004C:  MOVWF  1E
004D:  RRF    1E,F
004E:  RRF    1E,F
004F:  MOVLW  3F
0050:  ANDWF  1E,F
0051:  MOVF   1C,W
0052:  MOVWF  0C
0053:  SWAPF  0C,F
0054:  RRF    0C,F
0055:  RRF    0C,F
0056:  RRF    0C,F
0057:  MOVLW  01
0058:  ANDWF  0C,F
0059:  MOVF   0C,W
005A:  XORWF  1E,W
005B:  ANDLW  01
005C:  ADDWF  1D,W
005D:  MOVWF  0D
005E:  RETLW  00
.................... } 
....................  
.................... main() { 
.................... int rand; 
.................... int a, x1,x2,y1,y2,color,temp; 
.................... long b; 
005F:  CLRF   04
0060:  CLRF   03
....................  
.................... // Clear the screen 
....................   fill_block(0,0,128,96,0); 
0061:  CLRF   1C
0062:  CLRF   1D
0063:  MOVLW  80
0064:  MOVWF  1E
0065:  MOVLW  60
0066:  MOVWF  1F
0067:  CLRF   20
0068:  CALL   01C
....................  
.................... // Initialize the PN generator with a seed... 
.................... rand = 0xf0; 
0069:  MOVLW  F0
006A:  MOVWF  12
....................  
.................... // Enable the interrupts 
....................   #asm 
....................  
....................     bsf 0x0b,4        // set the interrupt flag 
006B:  BSF    0B,4
....................     bsf 0x0b,7        // set the GIE 
....................   #endasm 
006C:  BSF    0B,7
....................  
.................... while (1) { 
....................   rand = pn_sequence(rand); 
006D:  MOVF   12,W
006E:  MOVWF  1C
006F:  CALL   047
0070:  MOVF   0D,W
0071:  MOVWF  12
....................   x1 = rand; 
0072:  MOVF   12,W
0073:  MOVWF  14
....................   rand = pn_sequence(rand); 
0074:  MOVF   12,W
0075:  MOVWF  1C
0076:  CALL   047
0077:  MOVF   0D,W
0078:  MOVWF  12
....................   x2 = rand; 
0079:  MOVF   12,W
007A:  MOVWF  15
....................   rand = pn_sequence(rand); 
007B:  MOVF   12,W
007C:  MOVWF  1C
007D:  CALL   047
007E:  MOVF   0D,W
007F:  MOVWF  12
....................   y1 = rand; 
0080:  MOVF   12,W
0081:  MOVWF  16
....................   rand = pn_sequence(rand); 
0082:  MOVF   12,W
0083:  MOVWF  1C
0084:  CALL   047
0085:  MOVF   0D,W
0086:  MOVWF  12
....................   y2 = rand; 
0087:  MOVF   12,W
0088:  MOVWF  17
....................   rand = pn_sequence(rand); 
0089:  MOVF   12,W
008A:  MOVWF  1C
008B:  CALL   047
008C:  MOVF   0D,W
008D:  MOVWF  12
....................   color = rand; 
008E:  MOVF   12,W
008F:  MOVWF  18
....................   x1 = x1 >> 1; 
0090:  BCF    03,0
0091:  RRF    14,F
....................   x2 = x2 >> 1; 
0092:  BCF    03,0
0093:  RRF    15,F
....................   // Implement various checks to ensure that the coordinates 
....................   // are properly sized for drawing rectangles. 
....................   if (y1 > 95) y1 = 85; 
0094:  MOVLW  60
0095:  SUBWF  16,W
0096:  BTFSS  03,0
0097:  GOTO   09A
0098:  MOVLW  55
0099:  MOVWF  16
....................   if (y2 > 95) y2 = 95; 
009A:  MOVLW  60
009B:  SUBWF  17,W
009C:  BTFSS  03,0
009D:  GOTO   0A0
009E:  MOVLW  5F
009F:  MOVWF  17
....................   if (x1 > 126) x1 = 1; 
00A0:  MOVLW  7F
00A1:  SUBWF  14,W
00A2:  BTFSS  03,0
00A3:  GOTO   0A6
00A4:  MOVLW  01
00A5:  MOVWF  14
....................   if (x2 > 126) x2 = 120; 
00A6:  MOVLW  7F
00A7:  SUBWF  15,W
00A8:  BTFSS  03,0
00A9:  GOTO   0AC
00AA:  MOVLW  78
00AB:  MOVWF  15
....................   if (x1 == x2) x2+=10; 
00AC:  MOVF   15,W
00AD:  SUBWF  14,W
00AE:  BTFSS  03,2
00AF:  GOTO   0B3
00B0:  MOVLW  0A
00B1:  ADDWF  15,F
....................   else if (x1>x2) { 
00B2:  GOTO   0BD
00B3:  MOVF   14,W
00B4:  SUBWF  15,W
00B5:  BTFSC  03,0
00B6:  GOTO   0BD
.................... 	  temp = x1; 
00B7:  MOVF   14,W
00B8:  MOVWF  19
.................... 	  x1 = x2; 
00B9:  MOVF   15,W
00BA:  MOVWF  14
.................... 	  x2 = temp; 
00BB:  MOVF   19,W
00BC:  MOVWF  15
....................   } 
....................   if (y1 == y2) y2+= 12; 
00BD:  MOVF   17,W
00BE:  SUBWF  16,W
00BF:  BTFSS  03,2
00C0:  GOTO   0C4
00C1:  MOVLW  0C
00C2:  ADDWF  17,F
....................   else if (y1>y2) { 
00C3:  GOTO   0CE
00C4:  MOVF   16,W
00C5:  SUBWF  17,W
00C6:  BTFSC  03,0
00C7:  GOTO   0CE
.................... 	  temp = y1; 
00C8:  MOVF   16,W
00C9:  MOVWF  19
.................... 	  y1 = y2; 
00CA:  MOVF   17,W
00CB:  MOVWF  16
.................... 	  y2 = temp; 
00CC:  MOVF   19,W
00CD:  MOVWF  17
....................   } 
....................   fill_block(x1,y1,x2,y2,color); 
00CE:  MOVF   14,W
00CF:  MOVWF  1C
00D0:  MOVF   16,W
00D1:  MOVWF  1D
00D2:  MOVF   15,W
00D3:  MOVWF  1E
00D4:  MOVF   17,W
00D5:  MOVWF  1F
00D6:  MOVF   18,W
00D7:  MOVWF  20
00D8:  CALL   01C
....................   // Delay for debug 
....................   for (a=0;a<8;a++) 
00D9:  CLRF   13
00DA:  MOVLW  08
00DB:  SUBWF  13,W
00DC:  BTFSC  03,0
00DD:  GOTO   0F2
....................     for (b=0;b<16000;b++) {} 
00DE:  CLRF   1B
00DF:  CLRF   1A
00E0:  MOVLW  3E
00E1:  SUBWF  1B,W
00E2:  BTFSS  03,0
00E3:  GOTO   0EC
00E4:  MOVLW  3E
00E5:  SUBWF  1B,W
00E6:  BTFSS  03,2
00E7:  GOTO   0F0
00E8:  MOVLW  80
00E9:  SUBWF  1A,W
00EA:  BTFSC  03,0
00EB:  GOTO   0F0
00EC:  INCF   1A,F
00ED:  BTFSC  03,2
00EE:  INCF   1B,F
00EF:  GOTO   0E0
00F0:  INCF   13,F
00F1:  GOTO   0DA
....................  
.................... } // End of while loop 
00F2:  GOTO   06D
....................  
.................... } // End of main() 
00F3:  SLEEP

⌨️ 快捷键说明

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