Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Нужно запрограммировать контроллер 8051.


Автор: Alexeyka 14.4.2004, 15:30
Есть контроллер 8051 - Atmel AT89C51, подключенный к 2-м буферам. От него требуется:

- при возникновении прерывания INT0 считать с этих двух буферов (с первого - с трех портов, со второго - с одного порта) четыре байта.
- выдать эти четыре байта через последовательный порт.

Буфер выбирается сигналами на P2.2 и P2.3 , порт выбирается сигналами P2.0 и P2.1. Байты приходят на P0. При необходимости вышлю схему.

Если можно, на ассемблере.
sad.gif


Автор: PILOT 14.4.2004, 19:59
Без схемы я могу написать только приблизительно...
лучше с ней.
Запости ее сюда.

СУВ.

Автор: Alexeyka 15.4.2004, 17:04
А как? Я её отсканирую, а потом надо её куда-то выложить?

Автор: PILOT 15.4.2004, 19:25
http://forum.vingrad.ru/index.php?act=Post&CODE=02&f=36&t=21386
внизу увидишь кнопочку добавить файл, если это будет картинка то она автоматом присоединится к сообщению.

СУВ.

Автор: Alexeyka 16.4.2004, 12:57
Нет тут такой кнопочки, есть только "отправить" и "предварительный просмотр". Картинки вставляются как url, а мне ее положить негде. Может, я ее по почте пришлю?

Автор: Alexeyka 16.4.2004, 14:10
http://abashkin1.narod.ru/scheme.jpg

Автор: PILOT 16.4.2004, 21:29
Вот тут отмечено как можно файлы присоединять...
хотя я могу и ошибаться, а вдруг это только для тех кто уже много сообщении отправил на форум...

СУВ.
ЗЫ. Схему твою качаю, ооочень долго почему-то...

Автор: PILOT 16.4.2004, 22:02
Схема не скачалась...

Автор: Sardar 17.4.2004, 15:24
PILOTIK добавлять файлы к постам могут только модераторы и участники клуба.
Alexeyka выложи схему на www.nm.ru, а то так и не докачал....

Автор: Alexeyka 19.4.2004, 11:50
http://www.alexeyka.nm.ru/scheme.jpg

Автор: PILOT 21.4.2004, 22:35
Схему получил...
я все помню, завтра послезавтра напишу твой кусок.

СУВ.

Автор: PILOT 22.4.2004, 22:45
Я не знаю ни скоростей передачи ни режимов поэтому отсавил соотв байты пустыми (помечено [!]) ;)
Код

;*****************************************************************************
;*                              ver.04.04.22                                 *
;*****************************************************************************
         NAME      Port_To_RS232;                                  Имя модуля
;********************************* Переменные ********************************
;---------------------------------- Исп. Биты --------------------------------
ReadyToSend EQU    0;
;-------------------------------- Образы портов ------------------------------
_Byte0    EQU       30h;                               0-ой байт для пересылки
_Byte1    EQU       31h;                               1-ый байт для пересылки
_Byte2    EQU       32h;                               2-ой байт для пересылки
_Byte3    EQU       33h;                               3-ий байт для пересылки
_Byte4    EQU       34h;                               4-ый байт для пересылки

;********************************* Константы *********************************
;-------------------------------- Обозначения --------------------------------
Pin_A0    EQU       0
Pin_A1    EQU       1
Pin_C0    EQU       2
Pin_C1    EQU       3
;-----------------------------------------------------------------------------
SerMode   EQU       00000000b;[!]
TimerMode EQU       00000000b;[!]
TimerCTRL EQU       00000000b;[!]
;-----------------------------------------------------------------------------
         CSEG      AT 0;                          Сегмент кода, нулевой адрес
MainStart:
         LJmp      MainP;      При вкл питания или при сбросе в основной цикл

         ORG       03h;
         LJmp      ExtInt0;              По внешнему прерыванию INT0 на метку

         ORG       0Bh;
         RetI;                                         По прерыванию Tаймера0

         ORG       13h;
         RetI;                                    По внешнему прерыванию INT1

         ORG       1Bh;
         RetI;                                         По прерыванию Tаймера1

         org       23h
         RetI;
;********************************* Процедуры *********************************
;-------------------------- Процедура чтения из порта ------------------------
ReadPort:
         Clr       C
         Mov       B,A;
         Subb      A,3;
         JNC       RdPort_L0;
         Mov       A,B
         AnL       A,#3;
         OrL       A,#(1 SHL Pin_C1);
         Jmp       ReadData;
RdPort_L0:
         Mov       A,B
         Add       A,#1;
         AnL       A,#3;
         OrL       A,#(1 SHL Pin_C0);
ReadData:
         Mov       DPH,A;
         MovX      A,@DPTR;
         Ret;
;**************************** Сбор данных с регистров ***********************
ExtInt0:  
         Push      Acc;
         Mov       A,PSW
         Push      Acc;
         Push      0;
         Push      DPL;
         Push      DPH;
         
         JB        ReadyToSend,OutExtInt;

         Mov       R0,#_Byte0;
ExInt_L0:
         Mov       A,R0;
         Clr       C;
         Subb      A,#_Byte0;
         Call      ReadPort;
         Mov       @R0,A;
         Inc       R0;
         CJNE      R0,#(_Byte0+5),ExInt_L0;          

         SetB      ReadyToSend;

OutExtInt:
         Pop       DPH
         Pop       DPL;
         Pop       0;
         Pop       Acc;
         Mov       PSW,Acc;
         Pop       Acc;
         Ret;
;******************************** Инициализация *****************************
Init:    
         Mov       SCON,#SerMode;
         Mov       TCON,#TimerCTRL;
         Mov       TMOD,#TimerMode;
         SetB      EX0;
         SetB      EA;
;******************************** Основной цикл *****************************
MainP:    
         JNB       ReadyToSend,MainP_L0;

         Mov       R0,#_Byte0;
MainP_L1:
         Mov       A,R0;
         Clr       C;
         Subb      A,#_Byte0;
         Call      ReadPort;
         Mov       @R0,A;
         Mov       SBUF,A;
         Nop;
WaitForRS232:
         JNB       TI,WaitForRS232;            
         Inc       R0;
         CJNE      R0,#(_Byte0+5),MainP_L1;
         Clr       ReadyToSend;

MainP_L0:
         Jmp       MainP;
         END

Добавлено @ 22:48
На версию не обращай внимания - это дата наоборот smile.gif Очень удобно.

СУВ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)