Specifications
CONSTRUCTION
ERRORLEVEL –302
INCLUEDE <P16C84.INC>
PCL equ 0x02 ;
STATUS equ 0x03 ;
FSR equ 0x04 ;
PORT_A equ 0x05 ;
PORT_B equ 0x06 ;
EEDATA equ 0x08 ;
EEADDR equ 0x09 ;
PCLATH equ 0x0A ;
INTCON equ 0x0B ;
INDF equ 0x00 ;
OPTION_REG equ 0x81 ;
TRISA equ 0x85 ;
TRISB equ 0x86 ;
EECON1 equ 0x88 ;
EECON2 equ 0x89 ;
;
; RAM 0x0C TO 0x2F (36 BYTES)
;
RP0 equ 0x05 ;
FN_KEY equ 0x18 ;
SQR equ 0x01 ;
TRI equ 0x02 ;
P_RAMP equ 0x04 ;
N_RAMP equ 0x08 ;
FN_STATUS equ 0x0C ;
KEY equ 0x0D ;
TEMP1 equ 0x0E ;
TEMP2 equ 0x0F ;
FN_VAL equ 0x10 ;
ON_DELAY equ 0x11 ;
OFF_DELAY equ 0x12 ;
;
;——————————————————- ;
; ORG 0x00 ;
START
CLRF STATUS ;
CLRF INTCON ;
BSF STATUS, RP0 ;
MOVLW B’10000000’ ;
MOVWF OPTION_REG ;
CLRF TRISB ;
BCF STATUS, RP0 ;
CLRF PORT_B ;
CLRF PORT_A ;
CLRF EEDATA ;
CLRF EEADDR ;
INCF FN_STATUS ;
CLRF FN_VAL ;
MOVLW 0Xff ;
;
;——————————————————- ;
;
NORMAL
CALL KEY_SEEK ;
;
SHOW_FN
BSF STATUS, RP0 ;
CLRF TRISA ;
BCF STATUS, RP0 ;
MOVF FN_STATUS,W ;
MOVWF PORT_A ;
;
MOVF FN_STATUS,W ;
XORLW SQR ;
BTFSC STATUS,Z ;
GOTO SQR_WAVE ;
;
MOVF FN_STATUS,W ;
XORLW TRI ;
BTFSC STATUS,Z ;
GOTO TRI_WAVE ;
;
MOVF FN_STATUS,W ;
XORLW P_RAMP ;
BTFSC STATUS,Z ;
GOTO PRAMP ;
;
MOVF FN_STATUS,W ;
XORLW N_RAMP ;
BTFSC STATUS,Z ;
GOTO NRAMP ;
;
GOTO NORMAL ;
;
SQR_WAVE
MOVLW 0XFF ;
MOVWF PORT_B ;
CALL DELAY_ON ;
CLRF PORT_B ;
CALL DELAY_OFF ;
GOTO NORMAL ;
;
TRI_WAVE
HI
MOVF FN_VAL,W ;
MOVWF PORT_B ;
XORLW 0xFF ;
BTFSC STATUS,Z ;
GOTO LO ;
INCF FN_VAL,F ;
GOTO HI ;
LO ;
MOVF FN_VAL,W ;
MOVWF PORT_B ;
XORLW 0 ;
BTFSC STATUS,Z ;
GOTO NORMAL ;
DECF FN_VAL,F ;
GOTO LO ;
;
PRAMP
MOVF FN_VAL,W ;
MOVWF PORT_B ;
INCF FN_VAL,F ;
GOTO NORMAL ;
;
NRAMP
MOVF FN_VAL,W ;
MOVWF PORT_B ;
DECF FN_VAL,F ;
GOTO NORMAL ;
;
;———————————————————- ;
;
KEY_SEEK
BSF STATUS,RP0 ;
MOVLW 0x1F ;
MOVWF TRISA ;
BCF STATUS,RP0 ;
MOVF PORT_A,W ;
ANDLW 0x1C ;
XORLW 0x1C ;
BTFSC STATUS,Z ;
RETLW 0 ;
;
MOVF PORT_A,W ;
ANDLW 0x1C ;
MOVWF KEY ;
;
KEY_LUP
MOVF PORT_A,W ;
ANDLW 0x1C ;
XORLW 0x1C ;
BTFSS STATUS,Z ;
GOTO KEY_LUP ;
;
CHK_FN
MOVF KEY,W ;
XORLW FN_KEY ;
BTFSC STATUS,Z ;
GOTO FN_CHANGE ;
;
RETLW 0 ;
;
FN_CHANGE
RLF FN_STATUS,F ;
MOVF FN_STATUS,W ;
BTFSS FN_STATUS,4 ;
RETLW 0 ;
CLRF FN_STATUS ;
INCF FN_STATUS,F ;
RETLW 0 ;
;
;———————————————————- ;
;
DELAY_ON
BCF STATUS,RP0 ;
MOVLW 0x1F ;
MOVWF 0N_DELAY ;
DL1
DECF ON_DELAY,F ;
MOVF ON_DELAY,W ;
BTFSC STATUS,Z ;
RETLW 0
GOTO DL1 ;
;
DELAY_OFF
BCF STATUS,RP0 ;
MOVLW 0x1F ;
MOVWF OFF_DELAY ;
DL2
DECF OFF_DELAY,F ;
MOVF OFF_DELAY,W ;
BTFSC STATUS,Z ;
RETLW 0 ;
GOTO DL2 ;
;
;———————————————————- ;
;
END ;
;
;*************************************** ;
APPENDIX ‘A’
Assembly language program for implementation of function generator using PIC16C84
covering complete 360
o
, is shown for
this purpose. The look-up table (Table III)
is to be implemented as per the flowchart
for sinewave generation as shown in
Fig. 8.
Various registers implemented in the
internal RAM area of microcontroller,
along with their addresses, are shown in
Table IV.
168