pic 16f873

Nesta pagina queremos dedicar  material relacionado a microcontrolador começando por um projeto que desenvolvi a um  tempo passado que era criar um display de mensagens do tipo puplicitaria como na epoca nao tinha conhecimento do asunto tive bastante trabalho ,devido ao custo de se aprender uma linguagem de programaçao as pessoas que domina estas areas nao tem interese as vezes de publicar seus trabalho sem  nada em troca Motivo que me leva a escrever este assunto  tendo em vista   que o leitor tenha uma media noçao do assunto em questao para conpriender uo seja conheca ao menos um pouco de  eletronica
pic usado no meu projeto, pic 16f873 o desenho do circuito de simulaçao ficou como se ve ao lado  esta um pouco pobre de detales logico que esta faldando cristal 4mhz capacitor 33 pf fontes o desenho faz referencia dos pinos utilizador tanto do pic como ci  4017  que funciona como uma chave seletora lembrando que para testar um microcontrolador no proteus por exemplo nao é nesessario fazer nenhum circuito a nao ser caso sinais de entrada como chave temperaturas so o codigos ele roda e indica a porta que esta acionando por falar em codigos descreverei abaixo o codigo usado no meu projeto em asm ou seja assambler  liguagem de maquina a mensagem que ele deslocara da direita para esquerda esta no final do codigo  ''roberto ama jilma ''
eu montei o prototipo em uma probord que funcionou bem ,daria para tirar o ci 4017 visto que o pic tem saidas de sobra daria para usar pic 16f628 por exemplo mas na epoca do desafio era o que eu tinha em maos e nao quis comprar outro  tambem estava interesado no assunto de demultiplexar dados
este codigo esta na maneira mais basica posivel podendo ser ate simplificado pode ate acresentar botões para mudar sentido de deslocamento  logicamente o pic tem uma infinidade de opcoes para implementar
o codigo assambler foi feito no mplab da microchip
Maior dificuldade encontrada
fazer com que os configuraçao de inicio do programa do pic sejam validas na pratica ;melhor dizendo voce faz tudo simula no pc tudo ok e quando programa o pic salva na sua memoria liga e ele nao reponde
;********************************************************
PROCESSOR 16F873
INCLUDE P16F873.INC
RADIX DEC__CONFIG H'3F32' ;OSC IS HS
;RB3,RB6,RB7 ARE I/O
;BROWN-OUT DETECTION OFF
;POWER-UP TIMER ON
;CODE PROTECTION OFF
;DATA CODE PROTECTION OFF
;WATCHDOG TIMER OFF
;LVP OFF
ERRORLEVEL -302 ;codigo suprime falha Bank varing,,


;************** VARIAVEIS DO SISTEMA ********************
CBLOCK H'20'
CL_1 ;COLUNA 1
CL_2
CL_3
CL_4
CL_5
CL_6
CL_7
CL_8
CL_9
CL_10
AR33 ;ARQUIVO DE ESPAÇO
AR34 ;ARQUIVO CONTA NUMERO SCAM
TEMPO_1
TEMPO_2
ENDC
;**************** PROGRAM START ***********************
ORG 0 ;RESET VECTOR
GOTO INIT
ORG 4 ;INTERRUPT VECTOR
GOTO INT
;**************** INICIA PROCESSO *********************
INIT
;*** INICIALIZA PORTA
BSF STATUS,RP0 ;CHANGE TO BANK1
MOVLW B'00011011' ;AN0/1/3/RA4:IN RA2/5:OUT
MOVWF TRISA ;SET RA PORT MODE
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
CLRF TRISB ;SET RB PORT OUTPUT MODE
CLRF TRISC ;SET RC PORT OUTPUT MODE


;*** TIMER 0 INITIALIZATION (FOR TEMP SAMPLING : 10MS)
MOVLW B'00000101' ;PS=1:64
MOVWF OPTION_REG ;SET OPTION_REG REGISTER
BCF STATUS,RP0 ;CHANGE TO BANK0
MOVLW 100 ;256-10000US/64US=100
MOVWF TMR0 ;SET TMR0
;*** TIMER 1 INITIALIZATION (FOR HOLD TIMER : 500MS)


MOVLW B'00110001' ;PRE=1:8 TMR1=INT TMR1=ON


MOVWF T1CON ;SET T1CON REGISTER
MOVLW H'0B' ;65536-500000US/8US=3036
MOVWF TMR1H ;SET TMR1H REGISTER
MOVLW H'DC' ;3036=H'BDC'
MOVWF TMR1L ;SET TMR1L REGISTER

INT
CLRF PORTB
CLRF PORTC
GOTO RUM1
RUM1: CLRF CL_1 ; RESETA TODOS ENDEREÇO DA MEMORIA PARA INICIO
CLRF CL_2
CLRF CL_3
CLRF CL_4
CLRF CL_5
CLRF CL_6
CLRF CL_7
CLRF CL_8
CLRF CL_9
CLRF CL_10
MOVLW 00
MOVWF AR33;19h ;arquivo 19h e jamper para tabela
Run2 MOVLW 40h
MOVWF AR34;18h ;arquivo18h numero de vezes de escaner
CALL Shift ; e controle de velocidade "
INCF AR33,1;19h,1
MOVF AR33,0;19h,0 ;Ponha valor de salto em W
CALL Table1 ; pula tab1
MOVWF CL_10;CL_5;15h ;W contém dados de mesa - ponha em 15h
XORLW 0FFh ;Se valor de mesa é FF,
BTFSC 03,2 ; bit 2 do arquivo 3 seta se (=1)
GOTO RUM1 ;inicia rum1
Run3 DECFSZ AR34,1;18h,1 ;Esquadrinhe a exibição 40h vezes
GOTO Run4
GOTO Run2
Run4 CALL Scan
GOTO Run3
Scan BSF 07,1 ;Reset inicia o 4017 port C 1 do pic
NOP ; perde um ciclo
BCF 07,1 ; desliga reset
MOVF CL_1,;011h,0 ;envia dados de colunas
MOVWF 06h ; para o display via portb
CALL DelD
MOVF CL_2,0;12h,0
MOVWF 06h
CALL DelD
MOVF CL_3,0;13h,0
MOVWF 06h
CALL DelD
MOVF CL_4,0;14h,0
MOVWF 06h
CALL DelD
MOVF CL_5,0;15h,0
MOVWF 06h
CALL DelD
MOVF CL_6,0
MOVWF 06h
CALL DelD
MOVF CL_7,0
MOVWF 06h
CALL DelD
MOVF CL_8,0
MOVWF 06h
CALL DelD
MOVF CL_9,0
MOVWF 06h
CALL DelD
MOVF CL_10,0
MOVWF 06h
CALL DelD
RETURN
;SHIFT move o dado de uma coluna para a anterior dando impresao de "movemento"
Shift MOVF CL_2,0 ;MOVE ARQUIVO CL_2 PARA WORKMOVWF CL_1 ;MOVE WORK PARA CL_1
MOVF CL_3,0
MOVWF CL_2
MOVF CL_4,0
MOVWF CL_3
MOVF CL_5,0
MOVWF CL_4
MOVF CL_6,0
MOVWF CL_5
MOVF CL_7,0
MOVWF CL_6
MOVF CL_8,0
MOVWF CL_7
MOVF CL_9,0
MOVWF CL_8
MOVF CL_10,0
MOVWF CL_9
RETURN
DelD
MOVLW .20
MOVWF TEMPO_2
DENOVO2:MOVLW .1
MOVWF TEMPO_1
DENOVO: DECFSZ TEMPO_1,F
GOTO DENOVO
DECFSZ TEMPO_2,F
GOTO DENOVO2
Clk BSF 07,0 ;liga Clock do 4017 para saida nota-se que port c 0 foi acionado
NOP ;perde um ciclo
BCF 07,0 ; desliga clock
RETURN
Table1 ADDWF 02h,1 ;Add W contador banco de dados aqui serao inseridos os dados
;para gerar as letras em hexadecimal a mensagem e a seguinte
;roberto ama jilma
RETLW 00h
RETLW 00h
RETLW 00h
RETLW 00h
RETLW 7Fh ;R
RETLW 48h ;
RETLW 4Ch ;
RETLW 4Ah ;
RETLW 31h ;
RETLW 00h
RETLW 3fh ;O
RETLW 41h ;
RETLW 41h ;
RETLW 41h ;
RETLW 3fh ;
RETLW 00h
RETLW 7Fh ; B
RETLW 49h ;
RETLW 49h ;
RETLW 49h ;
RETLW 36h ;
RETLW 00h
RETLW 7Fh ;E
RETLW 49h ;
RETLW 49h ;
RETLW 49h ;
RETLW 41h ;
RETLW 00h
RETLW 7Fh ;R
RETLW 48h ;
RETLW 4Ch ;
RETLW 4Ah ;
RETLW 31h ;
RETLW 00h
RETLW 40h ;T
RETLW 40h ;
RETLW 7Fh ;
RETLW 40h ;
RETLW 40h ;
RETLW 00h
RETLW 3Fh ;O
RETLW 41h ;
RETLW 41h ;
RETLW 41h ;
RETLW 3Fh ;
RETLW 00h
RETLW 00h
RETLW 00h
RETLW 00h
RETLW 40h ;T
RETLW 40h ;
RETLW 7Fh ;
RETLW 40h ;
RETLW 40h ;
RETLW 00h
RETLW 7Fh ;E
RETLW 49h ;
RETLW 49h ;
RETLW 41h ;
RETLW 41h ;
RETLW 00h
RETLW 00h
RETLW 00h
RETLW 3Fh ;A
RETLW 48h ;
RETLW 48h ;
RETLW 48h ;
RETLW 3Fh ;
RETLW 00h
RETLW 3Fh ;M
RETLW 40h ;
RETLW 40h ;
RETLW 3Fh ;
RETLW 40h ;
RETLW 40h ;
RETLW 3Fh
RETLW 00h
RETLW 3Fh ;A
RETLW 48h ;
RETLW 48h ;
RETLW 48h ;
RETLW 3Fh ;
RETLW 00h
RETLW 00h
RETLW 06h ;J
RETLW 01h
RETLW 01h
RETLW 7Fh
RETLW 00h
RETLW 00h
RETLW 5Fh ;I
RETLW 00h
RETLW 00h
RETLW 7Fh ;L
RETLW 01h
RETLW 01h
RETLW 01h
RETLW 00h
RETLW 00h
RETLW 3Fh ;M
RETLW 40h ;
RETLW 40h ;
RETLW 3Fh ;
RETLW 40h ;
RETLW 40h ;
RETLW 3Fh
RETLW 00h
RETLW 3Fh ;A
RETLW 48h ;
RETLW 48h ;
RETLW 48h ;
RETLW 3Fh ;
RETLW 0FFh
END