TIMER com 8051

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

TIMER com 8051

Mensagempor alessandro » 10 Jun 2008 15:56

Pessoal precisava de um exemplo simples de uso de um timer somente para pisacar um LED em assembler.

Na realidade nunca mexi com 8051, é para um trabalho da faculdade. Uma outra dúvida é sobre o compilador, arrumei um tal de PEqui.

Precisava somente desse exemplo compilar e ver se roda no em algum simulador como o PROTEUS.


Alessandro
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor Iran » 10 Jun 2008 23:50

Ai um exemplo que pisca um LED usando uma sub-rotina de atraso
Um bom simulador que uso é uma versão demo do PDS-51 www.phyton.com com ele vc pode integrar o sdcc e compilar código em assembly ou C.

; Exemplo - Pisca um LED conectado a porta P2.0
; Freq de Clock = 19.5 MHz

.include '89s8252.inc'

;-------------------------------------------------
; Seguimento de jump
;-------------------------------------------------

.aseg jump_seg, code

.org 0000h

ajmp inicio ; Salta pro início do programa

;-------------------------------------------------
; Programa principal
;-------------------------------------------------

.rseg programa,code

inicio: clr P2.0 ; Acende o LED
acall delay ; Atraso de ~ meio segundo
sjmp segue ; Torna os tempos acesos e apagados iguais
segue: setb P2.0 ; Apaga o LED
acall delay ; Atraso de ~ meio segundo
sjmp inicio ; Repete

;-------------------------------------------------
; Sub rotina de atraso
;-------------------------------------------------

delay: mov r2,#00dh ; Inicializa r2
volta1: mov r3,#07ah ; Inicializa r3
volta2: mov r4,#0ffh ; Inicializa r4
loop: djnz r4,loop ; Repete ate zerar r4
djnz r3,volta2 ; Repete até zerar r4 e r3
djnz r2,volta1 ; Repete até zerar r4, r3 e r2
ret ; Retorna da subrotina

.end ; Fim do programa
Avatar do usuário
Iran
Word
 
Mensagens: 558
Registrado em: 16 Out 2006 18:10
Localização: Imperatriz - MA

Mensagempor alessandro » 11 Jun 2008 07:48

Iran muto obrigado pelo exemplo e atenção.

Nunca tinha mexido com esse uC até hoje e como não tem como correr agora que tenho um trabalho a entregar não vai ter jeito, vou ter que aprender ao menos piscar um LED.

O pior que tenho que fazer isso em assembler, coisa que há anos não trabalho. Bom o jeito é tirar o pó dos livros aqui, mas um exemplo acelera muito o aprendizado.

Alessandro
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor alessandro » 11 Jun 2008 08:10

Da problemas quando compilado o código acima em outro compilador assembler?

Ao tentar compilar o codigo no PEqui apresentou essas falhas:

1 $mod51
2 ;-------------------------------------------------
3 ; Seguimento de jump
4 ;-------------------------------------------------
5
6 aseg jump_seg, code
****-----------------------------^
****ERROR #23: Illegal or missing directive
7
0000 8 org 0000h
9
0000 0102 10 ajmp inicio ; Salta pro início do programa
11
12 ;-------------------------------------------------
13 ; Programa principal
14 ;-------------------------------------------------
15
16 rseg programa,code
****-----------------------------^
****ERROR #23: Illegal or missing directive
17
0002 C2A0 18 inicio: clr P2.0 ; Acende o LED
0004 110E 19 acall delay ; Atraso de ~ meio segundo
0006 8000 20 sjmp segue ; Torna os tempos acesos e apagados iguais
0008 D2A0 21 segue: setb P2.0 ; Apaga o LED
000A 110E 22 acall delay ; Atraso de ~ meio segundo
000C 80F4 23 sjmp inicio ; Repete
24
25 ;-------------------------------------------------
26 ; Sub rotina de atraso
27 ;-------------------------------------------------
28
000E 7A0D 29 delay: mov r2,#00dh ; Inicializa r2
0010 7B7A 30 volta1: mov r3,#07ah ; Inicializa r3
0012 7CFF 31 volta2: mov r4,#0ffh ; Inicializa r4
0014 DCFE 32 loop: djnz r4,loop ; Repete ate zerar r4
0016 DBFA 33 djnz r3,volta2 ; Repete até zerar r4 e r3
0018 DAF6 34 djnz r2,volta1 ; Repete até zerar r4, r3 e r2
001A 22 35 ret ; Retorna da subrotina
36
37 end ; Fim do programa

VERSION 1.2h ASSEMBLY COMPLETE, 2 ERRORS FOUND

ERROR SUMMARY:
Line #6, ERROR #23: Illegal or missing directive
Line #16, ERROR #23: Illegal or missing directive
6 PAGE 2

ASEG . . . . . . . . . . . . . . UNDEFINED NOT USED
DELAY. . . . . . . . . . . . . . C ADDR 000EH
INICIO . . . . . . . . . . . . . C ADDR 0002H
JUMP_SEG . . . . . . . . . . . . UNDEFINED NOT USED
LOOP . . . . . . . . . . . . . . C ADDR 0014H
P2 . . . . . . . . . . . . . . . D ADDR 00A0H PREDEFINED
PROGRAMA . . . . . . . . . . . . UNDEFINED NOT USED
RSEG . . . . . . . . . . . . . . UNDEFINED NOT USED
SEGUE. . . . . . . . . . . . . . C ADDR 0008H
VOLTA1 . . . . . . . . . . . . . C ADDR 0010H
VOLTA2 . . . . . . . . . . . . . C ADDR 0012H
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor Iran » 11 Jun 2008 08:18

Seu assembler não está reconhecendo as diretivas aseg e rseg, retira-las acho que não dará problema, eu sugiro vc usar o PDS51 demo acho ele um excelente simulador.

Zé Iran.
Avatar do usuário
Iran
Word
 
Mensagens: 558
Registrado em: 16 Out 2006 18:10
Localização: Imperatriz - MA

Mensagempor alessandro » 11 Jun 2008 08:40

Iran o nome é esse mesmo PDS51? Estou prcurando no site phynton mas não estou encontrando.
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor Ander_sil » 11 Jun 2008 09:29

Porque não usa o Keil uVision, na minha opnião é o melhor compilador para familia 8051, assembly é free e simula tambem.
Outra coisa porque tem que ser em assembly e não em C logo, que é muito melhor.

Em C no Keil eu posso ajudar mais.

at.
Anderson Chrispim da Silva
chrispimdasilva@gmail.com
Ander_sil
Byte
 
Mensagens: 368
Registrado em: 30 Out 2006 09:58
Localização: Campinas - SP

Mensagempor Maurício » 11 Jun 2008 13:20

Em C realmente é mais prático.

Alessandro. Uma referência em publicação pro 8051 em ASM, é o livro do Denys:

Microcontrolador 8051 - Detalhado
Autor(es): Denys Emílio Campion Nicolosi

Editora Érica.

http://www.editoraerica.com.br/buscafinal.asp?cod=721X

Esse programa tb poderia ser feito através de interrupção dos timers.
Veja o livro!

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor alessandro » 11 Jun 2008 13:58

É verdade pessoal,

Na realidade programa atualmente somente em C. Mas não conheço nada de 8051. O pior é que vou entregar esse trabalho e dificilmente (para nao dizer nunca mais) vou ver issonovamente.

O Profº pediu o trabalho logo em 8051 e linguagem assembler...ai me ferrei.

São dois exercícios: 1 - usando o TIMER e outro armazenar valor de 10 teclas e no final enviar para o PC via serial.

Se fosse em alguma família que conhecesse serial tranquilo, mas justo na que não conheço....
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor Iran » 11 Jun 2008 19:02

O nome é Project-51 Demo

Zé Iran.
Avatar do usuário
Iran
Word
 
Mensagens: 558
Registrado em: 16 Out 2006 18:10
Localização: Imperatriz - MA

Mensagempor Silvio51 » 12 Jun 2008 07:05

Ander_sil escreveu: Outra coisa porque tem que ser em assembly e não em C logo, que é muito melhor.

Em C no Keil eu posso ajudar mais.

at.

Há controvérsias... assembly é muito mais "mió de bom"...
Silvio51
Byte
 
Mensagens: 383
Registrado em: 02 Nov 2006 14:04
Localização: Brasil

Mensagempor Ander_sil » 12 Jun 2008 09:14

A algum tempo atras eu tambem concordava que assembly erá melhor que C, mas agora com os avanços dos compiladores eu não acho mais.
Em C voce pode fazer um programa bem complexo e se voce gerenciar bem o programa o compilador se encarrega de gerar o assembly otimizado e com muito menos chance de erro se fosse feito o assembly por uma pessoa por mais conhecedor da CPU que seja.

Eu lembro que nos meus primeiros programinhas em assembly acontecia coisas estranhas com o programa e não era culpa do assembly e nem do micro, a culpa era minha que não sabia gerenciar bem, quando passei a usar C isso não aconteceu mais, pois o compilador se encarregou da parte chata de "escovar os bits".

Mas se o cara domina o assembly, então sorte pra ele hehehe.
Anderson Chrispim da Silva
chrispimdasilva@gmail.com
Ander_sil
Byte
 
Mensagens: 368
Registrado em: 30 Out 2006 09:58
Localização: Campinas - SP

Mensagempor alessandro » 12 Jun 2008 11:02

Realmente, linguagens de programação é melhor a que você entende melhor...

Também uso linguagem C, nas trocas de fabricantes e famílias fica menos traumático. Até mesmo no 8051, se pudesse fazer o tal trabalho em C não estaria apanhando tanto...

Mas cada um com seu gosto ou linguagem,

Alessandro
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x