This TEST ROUTINE is supplied in the chip when you buy a kit. It is removed when any other program is “burnt” into the chip. You may need to use it (or some of the sub-routines), at a later date. That’s why it has been presented here. It is included in All PicLab-1.hex
Click on “All PicLab-1.hex” and a window will open with all the .hex files. Locate Notepad.exe in the window and click on it. Notepad will open. Click on the file you want to open and slide it across to the Notepad window. The .hex values will appear!
To use the TEST ROUTINE, build the PIC LAB-1 and go over the construction, making sure all the components have been fitted and all connections are soldered perfectly.
Fit the 4 cells to the battery holder.
Fit the pre-programmed PIC16F84 chip to an 18 pin IC socket, supplied in the kit as a spare IC socket (to make the chip easier to fit and remove from the Multi Chip Programmer) and the project is ready for testing.
There is one slight problem with the Test Routine. Some constructors find it difficult to get past the AUdiO loop of the program and into the POt loop.
The best thing to do is fit the microphone and pot to the board before turning the project on.
You are now ready to perform the Test Routine:
Turn the project ON and the row of 8 LEDs will scan across and back. The individual segments of the 7-segment display will also turn ON. Push button “A.”
The letters “Pb” will show on the 7-segment display - for “Push button.”
Push button “A” again and the top 4 LEDs will blink, followed by the lower 4 LEDs. Push button “A” again. The letters “AUdiO” will show on the display. Push button “A” again.
The microphone will already be fitted to the 2-pin plug marked “MIC.” Talk or whistle into the microphone. The lowest LED will turn ON to indicate audio. While whistling into the microphone, push button “A” again. It is important to whistle while pushing button “A” to get the micro to enter the next loop.
The letters POt will flash on the 7-segment display. Push button “A” again.
The pot will already be fitted into the 2-pin plug labelled “Pot.” Rotate it in both directions. The 7-segment display will indicate rotation.
All the input and output devices are now tested.
Push button “A” to repeat the sequence.
Many of the sub-routines in the Test Routine will be very handy when you are designing your own program.
At the moment they are too complex to understand. The Experiments in this course start with very simple routines and carry out a single function.
After testing the project, go to the start of the experiments: Experiments - Page 2 The TEST ROUTINE is an example of linear programming. This is very simple programming where the microcontroller advances down the program into self-contained sections. You don’t have the problem of jumping up and down the program looking for faulty instructions. When writing the program, each section is written and tested before going to the next section. This will make the program longer, but much easier to diagnose.
;Test1.asm ;Project: TEST ROUTINE List P = 16F84 #include <p16F84.inc> __CONFIG 1Fh ;_CP_OFF & _PWRTE_ON & _WDT_ON & _RC_OSC ORG 0 ;This is the start of memory for the program. SetUp BSF 03,5 ;Go to Bank 1 CLRF 06 ;Make all port B output MOVLW 1F ;Load W with 0001 1111 MOVWF 05 ;All Port A input BCF 03,5 ;Go to Bank 0 - the program memory area. BCF 03,0 ;Clear the carry flag CLRF 1F ;Clear the flag file GOTO Sect1a Delay NOP ;Create 250mS delay DECFSZ 1A,1 GOTO Delay BTFSC 05,0 ;Look at input GOTO Sect2a ;Go to next section DECFSZ 1B,1 GOTO Delay RETURN ;Return Sect1a MOVLW 01 ;Put 0000 0001 into W Sect1b MOVWF 06 ;Illuminate the lowest LED Sect1c RLF 06,1 ;Shift to the left so that end LED shows equal time RLF 06,1 ;Shift LED to the left. BTFSC 03,0 ;Has LED reached end of display? GOTO Sect1d ;Yes CALL Delay ;No. Illuminate LED Sect1d GOTO Sect1c ;Loop shift-left instructions. Sect1e RRF 06,1 ;Shift to the right so that end LED shows equal time RRF 06,1 ;Shift LED to the right. BTFSC 03,0 ;Has LED reached end of display? GOTO Sect1b ;Yes. CALL Delay ;No. Illuminate LED GOTO Sect1e ;Loop shift-right instructions. Delay2 NOP ;Create 250mS delay DECFSZ 1A,1 GOTO Delay2 DECFSZ 1B,1 GOTO Delay2 RETURN ;Return Sect2a MOVLW 02 ;2 loops of "Pb" Sect2b MOVWF 1Eh ;The 2-loop file MOVLW 73h MOVWF 06 ;Output "P" CALL Delay2 CALL Delay2 CLRF 06 CALL Delay2 MOVLW 7Ch MOVWF 06 ;Output "b" CALL Delay2 CALL Delay2 CLRF 06 ;Blank display CALL Delay2 DECFSZ 1E,1 ;Decrement the 2-loop file GOTO Sect2b GOTO Sect3a ;Go to next section Sect3a CLRF 06 BTFSS 05,0 ;Button pressed? GOTO Sect3a MOVLW 02 ;2 loops of "4-LEDs flashing" Sect3b MOVWF 1Eh ;The 2-loop file MOVLW 0Fh MOVWF 06 CALL Delay2 CALL Delay2 MOVLW 0F0h MOVWF 06 CALL Delay2 CALL Delay2 DECFSZ 1E,1 ;Decrement the 2-loop file GOTO Sect3b GOTO Sect4a ;Go to next section Table1 ADDWF 02h,1 ;Add W to the Program Counter to create a jump. RETLW 77h ;A format= gfedcba RETLW 3Eh ;U If any table value has a leading letter, it must be RETLW 5Eh ;d preceded with a "0." E.g: 0A3h, 0FFh, 0CCh RETLW 06h ;I RETLW 3Fh ;O Sect4a CLRF 06 BTFSS 05,0 ;Button pressed? GOTO Sect4a Sect4b Sect4c CLRF 1Dh MOVF 1D,0 ;Copy file 1D to W CALL Table1 MOVWF 06 ;Output a letter CALL Delay2 CALL Delay2 CLRF 06 CALL Delay2 INCF 1D,1 MOVLW 05 XORWF 1Dh,0 BTFSS 03,2 ;Check zero bit in Status GOTO Sect4c GOTO Sect5a ;Go to next section Delay5 NOP ;Create 1mS delay DECFSZ 1A,1 GOTO Delay5 RETURN Sect5a BTFSS 05,1 ;Test the input line on port A GOTO Sect5b ;LOW detected BTFSC 1F,0 ;HIGH detected. First pass of routine? GOTO Sect5a ;HIGH already detected BSF 06,0 ;Turn on LED CALL Delay5 BCF 06,0 ;Turn off LED BSF 1F,0 ;Set the detection flag Sect5b GOTO Sect5a BCF 1F,0 ;Clear the detection flag CLRF 06 BTFSS 05,0 ;Button pressed? GOTO Sect5a GOTO Sect6a Table2 ADDWF 02h,1 ;Add W to the Program Counter to create a jump. RETLW 73h ;P format= gfedcba RETLW 3Fh ;O If any table value has a leading letter, it must be RETLW 78h ;t preceded with a "0." E.g: 0A3h, 0FFh, 0CCh Sect6a Sect6b CLRF 1Dh MOVF 1D,0 ;Copy file 1D to W CALL Table2 MOVWF 06 ;Output a letter CALL Delay2 CALL Delay2 CLRF 06 CALL Delay2 INCF 1D,1 MOVLW 03 XORWF 1Dh,0 BTFSS 03,2 ;Check zero bit in Status GOTO Sect6b GOTO Sect7a ;Go to next section Table7 ADDWF 02h,1 ;Add W to the Program Counter to create a jump. RETLW 3Fh ;0 format= gfedcba RETLW 06h ;1 If any table value has a leading letter, it must be RETLW 5Bh ;2 preceded with a "0." E.g: 0A3h, 0FFh, 0CCh RETLW 4Fh ;3 RETLW 66h ;4 RETLW 6Dh ;5 RETLW 7Dh ;6 RETLW 07h ;7 RETLW 7Fh ;8 RETLW 6Fh ;9 RETLW 40h ;"-" overflow Delay7 MOVLW 80h ;Create 100mS delay Delay7A MOVWF 1B DECFSZ 1A,1 GOTO Delay7A DECFSZ 1B,1 GOTO Delay7A RETURN Delay8 ;Create "Look" delay MOVLW 20h Delay8B MOVWF 1A DECFSZ 1A,1 GOTO Delay8B RETURN Look ;Count-down file CLRF 0C ;Take cap HIGH Look2 BSF 06,7 CALL Delay8 ;Is input LOW? BTFSS 05,4 GOTO Look3 INCF 0C,1 Look3 GOTO Look2 ;Put file 0C into W MOVF 0C,0 CALL Table7 MOVWF 06 ;Output to 7-Segment display CALL Delay7 BCF 06,7 ;Take cap low CALL Delay7 ;100mS delay RETURN Sect7a CALL Look BTFSC 05,0 ;Button pressed? GOTO Sect8 GOTO Sect7a Sect8 CALL Delay2 BTFSC 05,0 ;Button released? GOTO Sect8 CALL Delay2 GOTO Sect1a ;Repeat tests END ;Tells assembler end of program
Quick Links
Legal Stuff
Social Media