sci

alvaro luiz stendardi fontes

Monday, April 19, 2004

 

PROTOCOLO LSX_9600_COM1

SCI
COMUNICAÇÃO SERIAL
COM O
AT90S2313.


Álvaro Luiz Stendardi Fontes

(rs232c)


====================================
EXEMPLO DE COMO FAZER O SOFTWARE ASSEMBLER
PARA O AT90S2313
ESTE É UMA COMUNICAÇÃO ENTRE AVR E O SEU PC
====================================
; ENSAIO COM serie AT90S2313
; alvaro luiz 14 abril 2001
; alvaroluiz2008-site@yahoo.com.br
; ==================================================
; serie.ASM
; 9600 bps pode ser RS234 ou RS485
; foi inicialmente desenvolvido para Motorola HC11 e
; agora modificado para o AT90Sxxxx
; opera com o software serie.com feito em assembler para o PC
; Este programa opera todo em interrupt
; Protocolo X,S,L não tem check todo em ASCII
; PC AT90S
; S 31 30 3a 41 byte(ASCII) Pc pergunta data no address $100a
; AT90S responde com o valor do address
; o address é armazenado em rs para futuro
; L 31 42 Armazenar o valor $1b no address indicado em rs
;
; X Pergunta qual o valor no address rs
; obs: se o address for > $1000 será eeprom
; ==================================================

.nolist
.device AT90S2313
.include "c:\asm\system\2313def.inc
.list

.cseg
.org 0
.def p=r0
.def a=r16
.def b=r17
.def c=r18

.equ ram = 0x0060

.equ sram=$60
.equ rs=sram+2 ;2 address para consulta serial

;========================
.org $0000
rjmp reset

.org $0007
rjmp scii

;========================
RESET:
ldi a,$df
out spl,a ;stack pointer
ldi zh,high(ram)
ldi zl,low(ram)

sei ;hab global interrupt

rcall ini_sci

ldi result,$fc ;ff
out ddrb,result

;=================================
loop:
; seu progrma
;
; "
; "
; "

rjmp loop

;======================================================
ini_sci:
ldi r26,0x9f ;hab tx/rx e int rx interrupt
out ucr,r26
ldi a,51 ; 8 Mhz baud 9600 ubrr=(f/16*bps)-1
out ubrr,a
ret

;========================================================
scii:
push a
push b
push c
push xl
push xh
lds xl,rs
lds xh,rs+1
in a,sreg
push a

sci:
in a,udr
cpi a,'S'
breq sciia
cpi a,'X'
breq sciib
cpi a,'L'
breq sciic

scif:
pop a
out sreg,a
sts rs,xl
sts rs+1,xh
pop xh
pop xl
pop c
pop b
pop a
reti
;================================================
sciia:
rcall address
sciib:
cpi xh,$10
brcc e2pr
ld a,x
sciib1:
mov b,a
swap a
rcall saia
mov a,b
rcall saia
rjmp scif

sciic:
rcall pga1
cpi xh,$10
brcc e2pw
st x,a
rjmp sciib
;======================================================

e2pr:
out eearl,xl
sbi eecr,0
nop
nop
in a,eedr ;get data
rjmp sciib1
;==================================================
e2pw:
sbic eecr,eewe ;eewe
rjmp e2pw
out eear,xl
out eedr,a
sbi eecr,eemwe
sbi eecr,eewe
nop
nop
rjmp e2pr

;===================================================
pga1:
rcall capta
rcall monta
swap a
mov b,a
rcall capta
rcall monta
add a,b
ret
;===================================================
monta:
ldi c,$30
sub a,c

cpi a,$11
brcs mon1
ldi c,7
sub a,c
mon1:
andi a,0x0f
clc
ret
;====================================================

capta:
in c,usr
andi c,0x80
breq capta
in a,udr
ret
;====================================================
saia:
andi a,$0f
ldi c,$30
add a,c
cpi a,$3a
brcs sa1
ldi c,7
add a,c

sa1:
in c,usr
andi c,0x20
breq sa1
out udr,a
ret

;====================================================
address:
rcall pga1
mov xh,a
rcall pga1
mov xl,a
ret
;===================================================

; -------MACROS------------

.macro outa ; outa spl,0x5f
ldi a,@1
out @0,a
.endmacro

.macro ldiy ;ldy 0x1234
ldi yh,high(@0)
ldi yl,low (@0)
.endmacro

.macro ldiz ;ldz 0x1234
ldi zh,high(@0)
ldi zl,low (@0)
.endmacro

.equ b0 = 0b00000001
.equ b1 = 0b00000010
.equ b2 = 0b00000100
.equ b3 = 0b00001000
.equ b4 = 0b00010000
.equ b5 = 0b00100000
.equ b6 = 0b01000000
.equ b7 = 0b10000000

Aqui o programa executável para correr no PC (win98, 2000, xt ou vista)fazendo comunicação com o software apresentado aqui.






Archives

04/01/2004 - 05/01/2004  

This page is powered by Blogger. Isn't yours?

Subscribe to Posts [Atom]