Академический Документы
Профессиональный Документы
Культура Документы
OBJETIVOS
TRABAJO PREPARATORIO
1. Consultar los comandos que permiten manejar el puerto de
comunicacin serial asincrnico de un PC, usando Visual
Studio, Matlab y LabView.
Visual Studio:
Asncrono significa que no una seal de sincronizacin o de reloj. Cada
carcter est enmarcado entre seales de inicio y parada. Un solo bit 0,
denominado bit de inicio, precede a cada carcter para indicar al sistema
que los siguientes 8 bits constituyen un byte de datos. Uno o dos bits en
alto siguen al carcter para sealar que dicho carcter ha sido enviado.
Trama en una transmisin asncrona:
Para escribir datos en visual studio se usa:
Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
com1.WriteLine(data)
com1.Close()
End Using
End Sub
Para leer datos en visual studio se usa:
Function ReceiveSerialData() As String
' Receive strings from a serial port.
Dim returnStr As String = ""
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
Do
Dim Incoming As String = com1.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
com1.Close()
End Using
Return returnStr
End Function
Labview:
Para el caso de LabView se usa librera Visa con el fin de realizar la
comunicacin serial, posee muchas opciones para enviar y recibir datos.
Para leer datos:
2. Se
desea
implementar
dos
contadores
de
8
bits
ascendente/descendente, el primer contador se visualizara en
displays 7 segmentos conectados al microcontrolador, el
modo de funcionamiento (ascendente/ descendente) ser
controlado desde el HMI mediante comunicacin serial; el
segundo contador se visualizara en el HMI y su modo de
funcionamiento se controlara desde un interruptor conectado
al microcontrolador. El programa para el microcontrolador
debe ser desarrollado en Assembler y para el HMI emplear
uno de los softwares del numeral anterior.
Se usar el micro Atmega 164P, ya que posee todos los pines que necesito,
e inclusive sobran pines:
Entradas:
1 Pin:
Salidas:
11 pines:
pin 34 al 40
Usart:
Comunicacin serial Rx pin 14 (PD0)
inicio
fin
Cdigo
/*
* Preparatorio1.asm
*
* Created: 02/10/2015 9:59:10
* Author: Bryan
*/
.include "m164pdef.inc"
.equ F_c=8000000
.equ bauds=9600
.def tempo=r21
.def contar=r22
.dseg
ldi tempo,0b0000_0110
sts ucsr0c,tempo
sei
BINARIO: .byte 1
BCD0: .byte 1
BCD1: .byte 1
BCD2: .byte 1
DIG0: .byte 1
DIG1: .byte 1
DIG2: .byte 1
//Programa
.cseg
call espero
in tempo, pinb
sts udr0,tempo
ldi r19,0
ldi r23,0
lazo:
cp contar,r19
brne descendente
//call barrido_retardo1
inc r23
//ldi r23,222
sts BINARIO,r23
call BIN_BCD
call BCD_7SEG
call barrido
.org 0x00
rjmp inicio
.org 0x28
rjmp comunica
inicio:
//configuracion de puertos
ldi tempo,0b00000111
out ddrc,tempo
ldi tempo,0b11111000
out portc,tempo
ldi tempo,255
out ddra,tempo
ldi tempo,0
out porta,tempo
ldi tempo,0
out ddrb,tempo
ldi tempo,1
out portb,tempo
//Habilito el MCRUCR
in tempo,mcucr
andi tempo,0b11101111
out mcucr,tempo
// Configuro el stack:
ldi tempo, high(ramend)
out sph,tempo
ldi tempo, low(ramend)
out spl,tempo
rjmp lazo
descendente:
//call barrido_retardo1
dec r23
sts BINARIO,r23
call BIN_BCD
call BCD_7SEG
call barrido
rjmp lazo
espero:
lds tempo,ucsr0a
sbrs tempo,5
rjmp espero
ret
comunica:
push tempo
in tempo,sreg
push tempo
lds contar,udr0
call espero
in tempo,pinb
sts udr0,tempo
//serial
clr tempo
sts ucsr0a,tempo
ldi tempo,0b1001_1000
sts ucsr0b,tempo
pop tempo
out sreg,tempo
pop tempo
reti
BIN_BCD:
ldi r17,3
push r16
in r16,sreg
push r16
push r17
push xh
push xl
BCD_7SEG_1:
ldi
zh,high(tabla_7seg<<1)
ldi
zl,low(tabla_7seg<<1)
lds r16,BINARIO
clr r17
ld r16,x+
add zl,r16
clr r16
adc zh,r16
lpm r16,z
st y+,r16
BIN_BCD_CENTENAS:
subi r16,100
brcs BIN_BCD_DECENAS
inc r17
rjmp BIN_BCD_CENTENAS
dec r17
brne BCD_7SEG_1
BIN_BCD_DECENAS:
sts BCD2,r17
subi r16,-100
clr r17
pop yl
pop yh
pop xl
pop xh
pop r17
pop zl
pop zh
pop r16
out sreg,r16
pop r16
BIN_BCD_DECENAS1:
subi r16,10
brcs BIN_BCD_UNIDADES
inc r17
rjmp BIN_BCD_DECENAS1
BIN_BCD_UNIDADES:
sts BCD1,r17
subi r16,-10
sts BCD0,R16
ret
barrido:
push r16
in r16,sreg
push r16
push r17
push xh
push xl
push r18
pop xl
pop xh
pop r17
pop r16
out sreg,r16
pop r16
ldi
ldi
ldi
ldi
ret
BCD_7SEG:
push r16
in r16,sreg
push r16
push zh
push zl
push r17
push xh
push xl
push yh
push yl
ldi
ldi
ldi
ldi
xh,high(BCD0)
xl,low(BCD0)
yh,high(DIG0)
yl,low(DIG0)
r18,0b00000001
xh,high(dig0)
xl,low(dig0)
r17,3
barrido_salto1:
ldi
r16,0b00000000
out portc,r16
ld r16,x+
out porta,r16
out portc,r18
call
barrido_retardo1
clc
rol
r18
dec
r17
brne barrido_salto1
ldi
r16,0b00000000
out portc,r16
pop r18
pop xl
pop xh
pop r17
pop r16
out sreg,r16
pop r16
ret
barrido_retardo:
push r16
ldi r16,255
retardo:
dec r16
brne retardo
pop r16
ret
barrido_retardo1:
push r16
push r17
push r18
push r19
ldi R17, $97
WGLOOP0: ldi R18, $06
WGLOOP1: ldi R19, $92
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; ----------------------------; delaying 1 cycle:
nop
pop
pop
pop
pop
r19
r18
r17
r16
ret
Tabla_7seg:
.db 0b11000000,0b11111001
.db 0b10100100,0b10110000
.db 0b10011001,0b10010010
.db 0b10000010,0b11111000
.db 0b10000000,0b10011000
Simulacin en Proteus:
U1
40
41
42
43
44
1
2
3
P1
1
6
2
7
3
8
4
9
DCD
DSR
RXD
RTS
TXD
CTS
DTR
RI
9
10
11
12
13
14
15
16
29
27
4
PB0/XCK0/T0/PCINT8
PB1/T1/CLKO/PCINT9
PB2/AIN0/INT2/PCINT10
PB3/AIN1/OC0A/PCINT11
PB4/SS/OC0B/PCINT12
PB5/MOSI/PCINT13
PB6/MISO/PCINT14
PB7/SCK/PCINT15
PD0/RXD0/PCINT24
PD1/TXD0/PCINT25
PD2/INT0/RXD1/PCINT26
PD3/INT1/TXD1/PCINT27
PD4/OC1B/XCK1/PCINT28
PD5/OC1A/PCINT29
PD6/ICP/OC2B/PCINT30
PD7/OC2A/PCINT31
AREF
AVCC
RESET
ATMEGA164P
ERROR
COMPIM
Simulacin en LabVIew:
PA0/ADC0/PCINT0
PA1/ADC1/PCINT1
PA2/ADC2/PCINT2
PA3/ADC3/PCINT3
PA4/ADC4/PCINT4
PA5/ADC5/PCINT5
PA6/ADC6/PCINT6
PA7/ADC7/PCINT7
PC0/SCL/PCINT16
PC1/SDA/PCINT17
PC2/TCK/PCINT18
PC3/TMS/PCINT19
PC4/TDO/PCINT20
PC5/TDI/PCINT21
PC6/TOSC1/PCINT22
PC7/TOSC2/PCINT23
XTAL1
XTAL2
37
36
35
34
33
32
31
30
19
20
21
22
23
24
25
26
8
7
Bibliografa: