?? test6.lst
字號:
CCS PCW C Compiler, Version 2.636, 5783
Filename: D:\PIC_CO~1\PICC\SRC\TEST6.LST
ROM used: 229 (22%)
229 (22%) including unused fragments
RAM used: 15 (42%) at main() level
26 (72%) worst case
Stack: 1 locations
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 04F
0003: NOP
0004: NOP
.................... // Test6
.................... //
.................... // This tests out the risc16f84 to see if it can perform calls to subroutines.
.................... // It is supposed to print boxes of random colors and sizes to the LCD screen.
.................... // Author: John Clayton
.................... // Date : 05/01/02
....................
.................... #device PIC16C84
.................... #byte addr_lo = 0x05
.................... #byte addr_hi = 0x06
.................... #byte data = 0x08
....................
.................... // 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;
*
0017: MOVF 23,W
0018: MOVWF 0C
0019: BCF 03,0
001A: RRF 0C,F
001B: MOVF 0C,W
001C: IORLW 40
001D: MOVWF 06
.................... addr_lo = x | (y<<7);
001E: MOVF 23,W
001F: MOVWF 0C
0020: SWAPF 0C,F
0021: RLF 0C,F
0022: RLF 0C,F
0023: RLF 0C,F
0024: MOVLW 80
0025: ANDWF 0C,F
0026: MOVF 0C,W
0027: IORWF 22,W
0028: MOVWF 05
.................... data = color;
0029: MOVF 24,W
002A: 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++)
*
0005: MOVF 1B,W
0006: MOVWF 20
0007: MOVF 1D,W
0008: SUBWF 20,W
0009: BTFSC 03,0
000A: GOTO 02F
.................... for (j=y1;j<y2;j++)
000B: MOVF 1C,W
000C: MOVWF 21
000D: MOVF 1E,W
000E: SUBWF 21,W
000F: BTFSC 03,0
0010: GOTO 02D
.................... plot (i,j,color);
0011: MOVF 20,W
0012: MOVWF 22
0013: MOVF 21,W
0014: MOVWF 23
0015: MOVF 1F,W
0016: MOVWF 24
*
002B: INCF 21,F
002C: GOTO 00D
002D: INCF 20,F
002E: GOTO 007
002F: RETLW 00
.................... }
....................
.................... void show_leds(unsigned int value)
.................... {
.................... addr_hi = 0xff;
*
0048: MOVLW FF
0049: MOVWF 06
.................... addr_lo = 0x07;
004A: MOVLW 07
004B: MOVWF 05
.................... data = value;
004C: MOVF 1B,W
004D: MOVWF 08
004E: GOTO 0E3
.................... }
....................
.................... int pn_sequence(unsigned int value)
.................... // Takes a PN sequence value, and produces the next value...
.................... {
.................... return((value << 1) + (((value>>2) ^ (value>>7))&0x01));
*
0030: MOVF 1B,W
0031: MOVWF 1C
0032: BCF 03,0
0033: RLF 1C,F
0034: MOVF 1B,W
0035: MOVWF 1D
0036: RRF 1D,F
0037: RRF 1D,F
0038: MOVLW 3F
0039: ANDWF 1D,F
003A: MOVF 1B,W
003B: MOVWF 0C
003C: SWAPF 0C,F
003D: RRF 0C,F
003E: RRF 0C,F
003F: RRF 0C,F
0040: MOVLW 01
0041: ANDWF 0C,F
0042: MOVF 0C,W
0043: XORWF 1D,W
0044: ANDLW 01
0045: ADDWF 1C,W
0046: MOVWF 0D
0047: RETLW 00
.................... }
....................
.................... main() {
.................... int rand;
.................... int a, x1,x2,y1,y2,color,temp;
.................... long b;
*
004F: CLRF 04
0050: CLRF 03
....................
.................... // Clear the screen
.................... fill_block(0,0,128,96,0);
0051: CLRF 1B
0052: CLRF 1C
0053: MOVLW 80
0054: MOVWF 1D
0055: MOVLW 60
0056: MOVWF 1E
0057: CLRF 1F
0058: CALL 005
....................
.................... // Try to make a PN generator...
.................... rand = 0xf0;
0059: MOVLW F0
005A: MOVWF 11
....................
.................... while (1) {
.................... rand = pn_sequence(rand);
005B: MOVF 11,W
005C: MOVWF 1B
005D: CALL 030
005E: MOVF 0D,W
005F: MOVWF 11
.................... x1 = rand;
0060: MOVF 11,W
0061: MOVWF 13
.................... rand = pn_sequence(rand);
0062: MOVF 11,W
0063: MOVWF 1B
0064: CALL 030
0065: MOVF 0D,W
0066: MOVWF 11
.................... x2 = rand;
0067: MOVF 11,W
0068: MOVWF 14
.................... rand = pn_sequence(rand);
0069: MOVF 11,W
006A: MOVWF 1B
006B: CALL 030
006C: MOVF 0D,W
006D: MOVWF 11
.................... y1 = rand;
006E: MOVF 11,W
006F: MOVWF 15
.................... rand = pn_sequence(rand);
0070: MOVF 11,W
0071: MOVWF 1B
0072: CALL 030
0073: MOVF 0D,W
0074: MOVWF 11
.................... y2 = rand;
0075: MOVF 11,W
0076: MOVWF 16
.................... rand = pn_sequence(rand);
0077: MOVF 11,W
0078: MOVWF 1B
0079: CALL 030
007A: MOVF 0D,W
007B: MOVWF 11
.................... color = rand;
007C: MOVF 11,W
007D: MOVWF 17
.................... x1 = x1 >> 1;
007E: BCF 03,0
007F: RRF 13,F
.................... x2 = x2 >> 1;
0080: BCF 03,0
0081: RRF 14,F
.................... // Implement various checks to ensure that the coordinates
.................... // are properly sized for drawing rectangles.
.................... if (y1 > 95) y1 = 85;
0082: MOVLW 60
0083: SUBWF 15,W
0084: BTFSS 03,0
0085: GOTO 088
0086: MOVLW 55
0087: MOVWF 15
.................... if (y2 > 95) y2 = 95;
0088: MOVLW 60
0089: SUBWF 16,W
008A: BTFSS 03,0
008B: GOTO 08E
008C: MOVLW 5F
008D: MOVWF 16
.................... if (x1 > 126) x1 = 1;
008E: MOVLW 7F
008F: SUBWF 13,W
0090: BTFSS 03,0
0091: GOTO 094
0092: MOVLW 01
0093: MOVWF 13
.................... if (x2 > 126) x2 = 120;
0094: MOVLW 7F
0095: SUBWF 14,W
0096: BTFSS 03,0
0097: GOTO 09A
0098: MOVLW 78
0099: MOVWF 14
.................... if (x1 == x2) x2+=10;
009A: MOVF 14,W
009B: SUBWF 13,W
009C: BTFSS 03,2
009D: GOTO 0A1
009E: MOVLW 0A
009F: ADDWF 14,F
.................... else if (x1>x2) {
00A0: GOTO 0AB
00A1: MOVF 13,W
00A2: SUBWF 14,W
00A3: BTFSC 03,0
00A4: GOTO 0AB
.................... temp = x1;
00A5: MOVF 13,W
00A6: MOVWF 18
.................... x1 = x2;
00A7: MOVF 14,W
00A8: MOVWF 13
.................... x2 = temp;
00A9: MOVF 18,W
00AA: MOVWF 14
.................... }
.................... if (y1 == y2) y2+= 12;
00AB: MOVF 16,W
00AC: SUBWF 15,W
00AD: BTFSS 03,2
00AE: GOTO 0B2
00AF: MOVLW 0C
00B0: ADDWF 16,F
.................... else if (y1>y2) {
00B1: GOTO 0BC
00B2: MOVF 15,W
00B3: SUBWF 16,W
00B4: BTFSC 03,0
00B5: GOTO 0BC
.................... temp = y1;
00B6: MOVF 15,W
00B7: MOVWF 18
.................... y1 = y2;
00B8: MOVF 16,W
00B9: MOVWF 15
.................... y2 = temp;
00BA: MOVF 18,W
00BB: MOVWF 16
.................... }
.................... fill_block(x1,y1,x2,y2,color);
00BC: MOVF 13,W
00BD: MOVWF 1B
00BE: MOVF 15,W
00BF: MOVWF 1C
00C0: MOVF 14,W
00C1: MOVWF 1D
00C2: MOVF 16,W
00C3: MOVWF 1E
00C4: MOVF 17,W
00C5: MOVWF 1F
00C6: CALL 005
.................... // Delay for debug
.................... for (a=0;a<8;a++)
00C7: CLRF 12
00C8: MOVLW 08
00C9: SUBWF 12,W
00CA: BTFSC 03,0
00CB: GOTO 0E0
.................... for (b=0;b<16000;b++) {}
00CC: CLRF 1A
00CD: CLRF 19
00CE: MOVLW 3E
00CF: SUBWF 1A,W
00D0: BTFSS 03,0
00D1: GOTO 0DA
00D2: MOVLW 3E
00D3: SUBWF 1A,W
00D4: BTFSS 03,2
00D5: GOTO 0DE
00D6: MOVLW 80
00D7: SUBWF 19,W
00D8: BTFSC 03,0
00D9: GOTO 0DE
00DA: INCF 19,F
00DB: BTFSC 03,2
00DC: INCF 1A,F
00DD: GOTO 0CE
00DE: INCF 12,F
00DF: GOTO 0C8
.................... show_leds(rand);
00E0: MOVF 11,W
00E1: MOVWF 1B
00E2: GOTO 048
.................... } // End of while loop
00E3: GOTO 05B
....................
.................... }
00E4: SLEEP
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -