Файл: Microcontroller Programming. Thi Micro Chip PIC (Julio Sanchez, 2007).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 14.06.2025

Просмотров: 8544

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

206

Chapter 10

getcode:

addwf

PC,f

; Add value in w register to program

counter

retlw

0x3f

; code for number 0

retlw

0x06

; code for number 1

retlw

0x5b

; code for number 2

...

retlw

0x6f

; code for number 9

The calling routine places in the w register the numeric value whose code is desired, and then calls the table lookup, as follows:

movlw

0x03

;

Code for number 3 desired

call

getcode

movwf

PORTB

;

Display 3 in 7-segment display

10.4 A Demonstration Board

A demonstration board, also known as a demo board, is a useful tool in mastering PIC programming. Many are available commercially; like programmers, there is a cottage industry of PIC demo boards on the internet. Constructing your own demo boards and circuits is not difficult. The components can be placed on a breadboard, or wire-wrapped onto a special circuit board, or a printed circuit board can be homemade, or ordered through the internet. These options have been previously discussed and Appendix B contains instructions on how to build your own PCBs.

Figure 10-7 shows a simple 16F84A-based demo board with a seven-segment LED, buzzer, pushbutton switch, and a bank of four toggle switches.

10.4.1 PCB Images for Demo Board

Some PCBs contain circuit etchings on both sides. In this case two circuit board images are required. In addition, most boards contain a top-side image of the components, company logos, model numbers, and other information. Commercially, this image is silk-screened onto the board.

The homemade board (see Appendix B) usually contains a single etched image and a top-side image with informational text and graphics. Both images can be created with a conventional drawing program, such as Corel Draw, Adobe Illustrator, or Windows Paint, or with a specialized application, several of which are available free and for purchase on the Web. Figure 10-7 shows the images used for making the PCB for the circuit in Figure 10-8.

Note that the top-side (text) image has been mirrored on the horizontal plane. This is necessary so that the text and graphics coincide with the circuit etchings once the images are transferred to the board. The process for making your own PCBs is described in Appendix B.


Programming Essentials: Input and Output

207

PB SW

R=10K

R=10K

1

2

3

4

5

6

7

8

9

+5v

10k R

X 4

DIP SW

Piezo

Buzzer

18

RA2

RA1

RA3

RA0

17

Osc

16

RA4/TOCKI

OSC1

15

MCLR

16F84A

OSC2

14

+5v

Vss

Vdd

13

7-segment

RB0/INT

RB7

12

LED

RB1

RB6

f

a

11

RB2

RB5

g

a

b

10

RB3

RB4

f

b

g

220 R

PWR

X 7

e

e

c

ON

d

d

c

Figure 10-7 PIC 16F87A Demo Board

Figure 10-8 Bottomand Top-side images of a PCB.


208

Chapter 10

10.4.2 TestDemo1 Program

The following program exercises some of the experiments that can be implemented on the demo boards in Figure 10-7:

;File: TestDemo1.asm

;Date: June 2, 2006

;Author: Julio Sanchez

;Processor: 16F84A

;Description:

;Program to exercise the demonstration circuit and board

;number 1

;===========================

;switches ;===========================

;Switches used in __config directive:

;

_CP_ON

Code protection ON/OFF

; *

_CP_OFF

;

*

_PWRTE_ON

Power-up timer ON/OFF

;_PWRTE_OFF

;

_WDT_ON

Watchdog timer ON/OFF

; * _WDT_OFF

;

_LP_OSC

Low power crystal

oscillator

; * _XT_OSC

External parallel

resonator/crystal

;

oscillator

;

_HS_OSC

High speed crystal resonator (8 to

10 MHz)

;

Resonator: Murate

Erie CSA8.00MG =

8 MHz

;

_RC_OSC

Resistor/capacitor oscillator

;|

;|_____ * indicates setup values

processor 16f84A

include

<p16f84A.inc>

__config

_XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

;=====================================================

;

variables in PIC RAM

;=====================================================

cblock

0x0c

; Start of block

count1

; Counter # 1

j

; counter J

k

; counter K

endc

;=======================================================

; P R O G R A M

;=======================================================

org

0

; start at address 0

goto

main

;


Programming Essentials: Input and Output

209

; Space for interrupt handlers

org

0x08

main:

; Port A (5 lob) for input

movlw

B’00011111’

; w := 00001111

binary

tris

PORTA

; Port-A (lines

0 to 4) to

input

; Port-Bit (8 lines) for output

movlw

B’00000000’

; w := 00000000

binary

tris

PORTB

; Port-B to output

;==============================

;Pushbutton switch processing ;============================== pbutton:

;Push button switch on demo board is wired to RA4

;Switch logic is active low

btfss

PORTA,4

; Test and skip if bit is set

goto

buzzit

; Buz if switch ON

; At this point Port-A bit 4 is set (switch is off)

call

buzoff

; Buzzer off

goto

readdip

; Read DIP switches

buzzit:

call

buzon

; Turn on buzzer

goto

pbutton

;==============================

;DIP switch processing ;==============================

;Read all bits of Port-A readdip:

movf

PORTA,w

; Port A bits to w

;If board uses active low then all switch bits must be negated

;This is done by XORing with 1-bits

xorlw

b’11111111’

; Invert all bits in w

; Eliminate all 4 high order bits

andlw

b’00001111’

; And with mask

; Get digit into w

call

segment

; get digit code

movwf

PORTB

; Display digit

call

delay

; Give time

; Update digit and loop counter

goto

pbutton

;******************************* ; 7-segment table of hex codes ;******************************* segment:

addwf

PCL,f

;

PCL is

program counter latch

retlw

0x3f

;

0 code


210

Chapter 10

retlw

0x06

; 1

retlw

0x5b

; 2

retlw

0x4f

; 3

retlw

0x66

; 4

retlw

0x6d

; 5

retlw

0x7d

; 6

retlw

0x07

; 7

retlw

0x7f

; 8

retlw

0x6f

; 9

retlw

0x77

; A

retlw

0x7c

; B

retlw

0x39

; C

retlw

0x5b

; D

retlw

0x79

; E

retlw

0x71

; F

retlw

0x7f

; Just in case all on

;****************************

;piezo buzzer ON ;****************************

;Routine to turn on piezo buzzer on Port-B bit 7 buzon:

bsf

PORTB,7

; Tune on bit 7, Port-B

return

;****************************

;piezo buzzer OFF ;****************************

;Routine to turn off piezo buzzer on Port-B bit 7 buzoff:

bcf

PORTB,7

; Bit 7 Port-B clear

return

;================================

;

delay subroutine

;================================

delay:

movlw

.200

; w = 200 decimal

movwf

j

; j = w

jloop:

movwf

k

; k = w

kloop:

decfsz

k,f

; k = k-1, skip next if zero

goto

kloop

decfsz

j,f

; j = j-1, skip next if zero

goto

jloop

return

end