Как читать данные из USART, используя прерывание int0? - PullRequest
0 голосов
/ 30 марта 2020

Мне нужно прочитать данные из usart, используя прерывание int0, но я не понимаю, как это сделать. Это задание от моего преподавателя в университете. Я могу читать данные из usart, используя прерывание usart. Я пытался разрешить чтение из usart с помощью кнопки, но я думаю, что это странно. Усарт может читать только один байт. Можно ли прочитать несколько байтов от usart? Может быть, есть какие-то настройки в виртуальном терминале?

Мой проект в протеусе.

enter image description here

.equ bitrate=9600
.equ baud =1000000/(16*bitrate)-1
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================

      ; Reset Vector
      .org 0
      rjmp  Start
      .org 0x001
      rjmp int0_interrupt
      ;.org 0x002
      ;rjmp int1_interrupt
      .org 0x00b
      rjmp usart_rxc

;====================================================================
; CODE SEGMENT
;====================================================================

Start:
      ldi r16, low(ramend)
      out spl,r16
      ldi r16,high(ramend)
      out sph,r16

        ldi r16, high(baud)
        out ubrrh,r16
        ldi r16, low(baud)
        out ubrrl, r16

        ldi r16,0xff   
        out ddra,r16

        ldi r16,0b00000010 ;
        out portd,r16 

        ldi r16,$0a; 
        out mcucr,r16
        ldi r16,$c0; 
        out gimsk,r16

        clr r16;
        out gifr,r16

        ldi r16, 0b10010000;
        out ucsrb,r16
        ldi r16,0b10000110
        out ucsrc,r16


        ldi r16,$70
        mov xl,r16
        clr xh



        clr r18
sei;

m1:
cpi r18,3 
brne m1
rjmp k

int0_interrupt:
        cpi r17,0x00
        breq c1
        cpi r17,0xff
        breq c2


        c1:
        ldi r17, 0xff
        out porta,r17
        rjmp exit

        c2:
        ldi r17,0x00
        out porta,r17
        rjmp exit

    exit:
reti

usart_rxc:

    cpi r17, 0xff
    brne exit2

    in r20,udr
    st x+,r20

    exit2:
reti

k:
Loop:
      rjmp  Loop
...