Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Прерывания UARTx

Сообщений 1 страница 3 из 3

1

Запустить Прерывание Uart1 получилось
1. Надо помнить о специфике буфера UART (один приём и передачу).
2. Одно прерывание на Приём символа и Передачу (буфер пуст)!!! В обработчике ручками определяем причину!
3. Самостоятельно сбрасывать в конце обработчика НУЖНЫЙ флаг (После приёма - RI, Передачи - TI)
Порт в режим Quasi (сразу уставил и не проверял в иных режимах порта)

Код:
$regfile = "STC_8H.DAT"                   ' STC registers list
$crystal = 8000000                        ' CPU clock frequence '11059200

Dim Adres_w As Word , Temp As Byte

My_led Alias P1.2

P1ie = &B1111_1111                        ' 1: Enable digital pins
P1pu = &B0000_0000                        ' 1: pull-up resistor
P1m1 = &B_0000_0000 : P1m0 = &B_1010_0110       ' 1=Push-pull output mode

P3ie = &B1111_1111                        ' 1: Enable digital pins
P3pu = &B0000_0000                        ' 1: pull-up resistor
P3m1 = &B0000_0000 : P3m0 = &B_0000_0000       ' Quasi output mode


' UART
P_sw1 = &H00                              'RXD/P3.0, TXD/P3.1
'P_sw1 = &H40                              'RXD_2/P3.6, TXD_2/P3.7
'P_sw1 = &H80                              'RXD_3/P1.6, TXD_3/P1.7

Scon = &H50                               ' 8-Bits And Variable Baudrate
Auxr = &H54                               'Timer is 1T mode, use Timer1 as baudrate generator
Tmod = Tmod And &H0F                      'Set timer work mode

'Tl1 = &HE0 : Th1 = &HFE                   'Initial timer - 9600 / 11059200
'Tl1 = &HE8 : Th1 = &HFF                   'Initial timer - 115200 / 11059200
'Tl1 = &HF3 : Th1 = &HFF                   'Initial timer - 19200 / 1MHz
'Tl1 = &HF3 : Th1 = &HFF                   'Initial timer - 38400 / 2MHz
Tl1 = &HCC : Th1 = &HFF                   'Initial timer - 38400 / 8MHz

Et1 = 0                                   'Disable Timer interrupt
Tr1 = 1                                   'Timer1 start run
Sbuf = 0                                  ' Magic ...


Waitms 50
Print " Start!"


On Serial Uart_int Nosave                 'Initialise the INT0 Interrupt
'Priority Set Serial                       'serial int highest level
Enable Serial                             'enable the interrupt
Enable Interrupts


Do
Loop

'------------------------------------
Uart_int:
 If Ri = 1 Then
   Temp = Sbuf
   Printbin Temp
   My_led = Not My_led
   'Waitms 25
   Ri = 0
 End If
Return

0

2

Александр Д. написал(а):

А вот с прерываниями UART большая проблема: старенький Баском понимает только первый (единственный) UART!
Но во всех STC8H их больше!

В даташиты не лез, потому спрошу...
А регистр ввода/вывода у один на всех или у каждого UARTа свой ?

Прерывание UART - результат заполнения или опустошения этого регистра.

0

3

регистры управления разные для каждого UART
буферы - тоже свои.

0