Member 13523184 Ответов: 0

Отправка данных (последовательный порт) в AVR


Привет, я должен сделать код для отправки данных из visual в AVR в MCU и показать их на 8 - светодиодном 7-сегментном дисплее.

Это мой код C#, прямо сейчас я не могу проверить, работает ли он, так что не могли бы вы сказать мне, можно ли отправлять такие данные?
1-й код




И если здесь есть кто-то, кто может делать ассемблер, не могли бы вы дать мне совет, как решить проблему avr? (Я должен использовать ATmega128, AVR studio 4 и ассемблер - это школьный проект) Мне нужно получить данные из последовательного порта от визуального считывания, что это такое (если 0,1...9), а затем показать его на дисплее. Я не уверен, что инициализация правильна, и я не знаю, как прочитать эти данные и поместить их в r18 для сравнения.
2-й код

Спасибо за совет.

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;


namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string a;
        private void button1_Click(object sender, EventArgs e)
        {
                       

            SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            textBox1.Text = a;

            if (a == "0")
            {
                int b = 0b00000000;
                string c;
                c = b.ToString();

                port.Open();
                port.Write(c);
                port.Close();
                textBox1.Clear();
            }

             else if (a == "1")
            {
                int b = 0b00000001;
                string c;
                c = b.ToString();

                port.Open();
                port.Write(c);
                port.Close();
                textBox1.Clear();
            }

            else if (a == "2")
            {
                int b = 0b00000010;
                string c;
                c = b.ToString();

                port.Open();
                port.Write(c);
                port.Close();
                textBox1.Clear();
            }
            else if (a == "3")
            {
                int b = 0b00000011;
                string c;
                c = b.ToString();

                port.Open();
                port.Write(c);
                port.Close();
                textBox1.Clear();
            }
            else if (a == "4")
            {
                int b = 0b00000100;
                string c;
                c = b.ToString();

                port.Open();
                port.Write(c);
                port.Close();
                textBox1.Clear();
            }
            else if (a == "5")
            {
                int b = 0b00000101;
                string c;
                c = b.ToString();

                port.Open();
                port.Write(c);
                port.Close();
                textBox1.Clear();
            }
            else if (a == "6")
            {
                int b = 0b00000110;
                string c;
                c = b.ToString();

                port.Open();
                port.Write(c);
                port.Close();
                textBox1.Clear();
            }
            else if (a == "7")
            {
                int b = 0b00000111;
                string c;
                c = b.ToString();

                port.Open();
                port.Write(c);
                port.Close();
                textBox1.Clear();
            }
            else if (a == "8")
            {
                int b = 0b0001000;
                string c;
                c = b.ToString();

                port.Open();
                port.Write(c);
                port.Close();
                textBox1.Clear();
            }
            else if (a == "9")
            {
                int b = 0b0001001;
                string c;
                c = b.ToString();

                port.Open();
                port.Write(c);
                port.Close();
                textBox1.Clear();
            }
        }
    }
}


.Nolist
.include"m128def.inc"
.LIST
.CSEG



ldi r22,LOW(RAMEND)  ;initialization atmega128 ports
out SPL,r22
ldi r22,HIGH(RAMEND)
out SPH,r22
ldi r22, 0xff
out DDRD, r22
out DDRB, r22
out PORTD, r22
out PORTB, r22

rcall uart_init                  //i am not sure, if this initialization is right

ldi r24, 'A'
loop:
    rcall uart_sendchar
    rjmp loop

uart_init:
    ldi r16, (1 << TXEN0) | (1 << RXEN0)
    out UCSR0B, r16
    ldi r16, 103
    out UBRR0L, r16; // 9600 on 16MHz
    ret

uart_sendchar:

    sbis UCSR0A, UDRE0
    rjmp uart_sendchar 
    out UDR0, r24
    ret     
// i dont know where can i read the recieved data, i would copy/move to r18 and then compare

    
           
nula:                                                 ; if data = combination -> jump to display
             cpi      R18, 0b00000000
			 brne jedna           
             jmp       A0                              
jedna:
             cpi      R18, 0b00000001
			 brne dva
             jmp       A1
dva:
             cpi       R18, 0b00000010
			 brne tri
             jmp       A2
tri:
             cpi       R18, 0b00000011
			 brne ctyri
             jmp       A3
ctyri:
             cpi       R18, 0b00000100
			 brne pet
             jmp       A4
pet:
             cpi      R18, 0b00000101
			 brne sest
             jmp       A5
 
sest:
             cpi       R18, 0b00000110
			 brne sedm
             jmp       A6
sedm:
             cpi       R18, 0b00000111
			 brne osm
             jmp       A7
osm:
             cpi       R18, 0b00001000
			 brne devet
             jmp       A8
devet:
             cpi       R18, 0b00001001
			 brne exit
             jmp       A9
exit:
           
             reti



A1:

LDI R17, 0b01100000   ;number
LDI R18, 0b11110011      ;position
OUT PORTD, R18
OUT PORTB, R17

rjmp delay1

A2:

LDI R17, 0b11011010 
LDI R18, 0b11110011
OUT PORTD, R18
OUT PORTB, R17

rjmp delay1

A3:

LDI R17, 0b11110010 
LDI R18, 0b11110011
OUT PORTD, R18
OUT PORTB, R17

rjmp delay1

A4:

LDI R17, 0b01100110 
LDI R18, 0b11110011
OUT PORTD, R18
OUT PORTB, R17

rjmp delay1

A5:

LDI R17, 0b10110110 
LDI R18, 0b11110011
OUT PORTD, R18
OUT PORTB, R17

rjmp delay1

A6:

LDI R17, 0b00111110 
LDI R18, 0b11110011
OUT PORTD, R18
OUT PORTB, R17

rjmp delay1

A7:

LDI R17, 0b11100000 
LDI R18, 0b11110011
OUT PORTD, R18
OUT PORTB, R17

rjmp delay1

A8:

LDI R17, 0b11111110 
LDI R18, 0b11110011
OUT PORTD, R18
OUT PORTB, R17

rjmp delay1

A9:

LDI R17, 0b11100110 
LDI R18, 0b11110011
OUT PORTD, R18
OUT PORTB, R17

rjmp delay1

A0:

LDI R17, 0b11111100 
LDI R18, 0b11110011
OUT PORTD, R18
OUT PORTB, R17

rjmp delay1




delay1:
 ldi  r21, 2
    ldi  r19, 160
    ldi  r20, 146
L1: dec  r20
    brne L2
    dec  r19
    brne L2
    dec  r21
    brne L2
    rjmp PC+1

0 Ответов