Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не могу скомпелировать код на асме
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Bulat
У меня есть код на асме. Хочу его зашить в AT89C2051.
При компиляции следующая ошибка появл.: Fatal Error[c0000005lЉФ]: Uncontrolled termination
Может я в опциях проекта что-нибудь направильно настроил?
код:
Код
#include "ioAT89C2051.h"
;Определения:
SYS    EQU 000H ;Номер системы
CLK_KHZ = 12000 ;Тактовая частота 12 МГц
RC5_DF    EQU B.0 ;Флаг данных
RC5_PF  EQU B.1 ;Флаг периода
RC5_N  =(1+2*(CLK_KHZ/188))/2
RC5_N1 =(1+2*(CLK_KHZ/249))/2
RC5_N2 =(1+2*(CLK_KHZ/382))/2
RC5_NT =(1+2*(CLK_KHZ/135))/2
  
;Вектора:
  ORG 0000H       ;Вектор сброса
  LJMP INIT
  ORG 0003H       ;Вектор прерывания INT0
  LJMP RC5
  
;Инициализация системы прерываний:
   SETB PX0       ;Высокий приоритет INT0
   SETB IT0       ;Прерывание INT0 по переходу
   SETB EX0       ;Разрешение INT0
   SETB EA        ;Общее разрешение прерываний
  
;Основная программа:
LOOP:                  ;анализ кода в ячейке ОЗУ 1FH
        SJMP LOOP
;Подпрограмма обслуживания прерывания:
RC5:    PUSH PSW       ;Сохранение
        PSW
        PUSH ACC       ;Сохранение аккумулятора
        PUSH B         ;Сохранение регистра B
        SETB RS0       ;Включение регистрового банка 3
        SETB RS1
        MOV R6,DPH     ;Сохранение DPTR
        MOV R5,DPL
        MOV B,#2       ;Установка флагов
        MOV R2,#2      ;Инициализация байта системы для принятия 7
бит
        MOV R3,#4      ;Инициализация байта команды для принятия 6
бит
        MOV R0,#R32    ;Загруска адреса регистра R2 в банке 3
        MOV R1,#RC5_N  ;Загрузка величины тайм-аута 2362 мкс
WLOW:   JB SER,WHIGH   ;Ожидание единицы на входе
        MOV R4,#16
        DJNZ R4,$
        DJNZ R1,WLOW
        SJMP NORC5     ;Ошибка, истек тайм-аут
WHIGH:  MOV R1,#RC5_N  ;Загрузка величины тайм-аута 2362 мкс
SAMPLE: MOV R4,#8      ;Точки входа в цикл SAM1 .. SAM3 предназначены
        DJNZ R4,$      ;для выравнивания времени выполнения различных
веток
SAM1:   MOV R4,#3
        DJNZ R4,$
        MOV R4,#2
        DJNZ R4,$
SAM3:   MOV C,SER      ;Опрос входа
        MOV ACC.0,C
        XRL A,B
        JNB ACC.0,TRANS;Ожидание изменения состояния
        DJNZ R1,SAMPLE
        SJMP NORC5     ;Ошибка, истек тайм-аут
TRANS:  CPL RC5_DF     ;Изменение состояния входа обнаружено
        MOV A,R1
        ADD A,#-RC5_N1
        JC NORC5       ;Ошибка, время <577.5uS
        MOV A,R1
        ADD A,#-RC5_N2
        JC TRANS1
        JB RC5_PF,NORC5;Ошибка, время >1200uS
        SJMP STDATA
TRANS1: CPL RC5_PF     ;Инвертирование флага периода
        MOV R1,#RC5_N  ;Загрузка величины тайм-аута 2362 мкс
        JB RC5_PF,SAM1 ;Прием бита не завершен, переход на опрос
STDATA: MOV C,RC5_DF
        MOV A,@R0
        RLC A          ;Сохранение бита данных
        MOV @R0,A
        MOV R1,#RC5_N  ;Загрузка величины тайм-аута 2362 мкс
        JNC SAM2       ;Прием системы не завершен, переход на опрос
        INC R0         ;Система принята, начало приема команды
        MOV A,R0
        MOV R1,#RC5_N  ;Загрузка величины тайм-аута 2362 мкс
        JNB ACC.2,SAM3 ;Прием команды не завершен, переход на опрос
        MOV R1,#RC5_N  ;Загрузка величины тайм-аута 2362 мкс
WLW:    JB SER,TRM     ;Последний бит, ожидание единицы на входе
        MOV R4,#16
        DJNZ R4,$
        DJNZ R1,WLW
        SJMP NORC5     ;Ошибка, истек тайм-аут
TRM:    MOV R1,#RC5_NT ;Загрузка величины тайм-аута 3000 мкс
TERM:   JNB SER,NORC5  ;Ошибка, если на входе обнаружен низкий уровень
        MOV R4,#16
        DJNZ R4,$
        DJNZ R1,TERM
        MOV A,R2       ;Номер системы и бит управления в R2
        ANL A,#1FH     ;Выделение номера системы
        CJNE A,#SYS,NORC5;Проверка номера системы
        MOV DPTR,#RCTAB;Загрузка адреса таблицы
        MOV A,R3       ;Загрузка кода команды
        MOVC A,@A+DPTR ;Перекодировка
        MOV R3,A       ;Сохранение нового кода
        MOV A,R2       ;Номер системы и бит управления в R2
        ANL A,#20H     ;Выделение бита управления
        RL A
        RL A           ;Сдвиг бита управления в разряд D7
        ORL A,R3       ;Совмещение кода команды и бита управления
        MOV R3,A       ;Сохранение результата
        MOV A,R7
        ANL A,#40H     ;Выделение бита управления местной клавиатуры
        ORL A,R3       ;Совмещение кода команды и битов управление
        MOV R7,A       ;Сохранение результата
NORC5:  CLR IE0        ;Очистка флага прерывания
        MOV DPL,R5     ;Восстановление DPTR
        MOV DPH,R6
        POP B          ;Восстановление регистра B
        POP ACC        ;Восстановление аккумулятора
        POP PSW        ;Восстановление PSW
        RETI           ;Возврат из обработчика прерывания
        
        END
Kolia
Цитата(Bulat @ Apr 4 2008, 12:09) *
Код
#include "ioAT89C2051.h"


Надо записать так $include (ioAT89C2051.INC)

При использовании Keil убрать галочку "Define 8051 SFR Names"

!! Большой код лучше прикреплять файлом !!
Bulat
Цитата(Kolia @ Apr 4 2008, 16:13) *
Надо записать так $include (ioAT89C2051.INC)

При использовании Keil убрать галочку "Define 8051 SFR Names"

!! Большой код лучше прикреплять файлом !!

Я сделал, как Вы сказали и у меня следующая ошибка:
Error[2]: Failed to open #include file 'include'

У меня же IAR for MCS-51 и там надо именно #include "ioAT89C2051.h"
OLEG_BOS
Цитата(Bulat @ Apr 4 2008, 13:22) *
Я сделал, как Вы сказали и у меня следующая ошибка:
Error[2]: Failed to open #include file 'include'

У меня же IAR for MCS-51 и там надо именно #include "ioAT89C2051.h"

Укажите #include <ioAT89C2051.h> - файл находится в системной папке компилятора.

А если вы хотите использовать запись : #include "ioAT89C2051.h" , то в таком случае перенесите сам файл ioAT89C2051.h из папки компилятора в папку проекта wink.gif
Bulat
Цитата(OLEG_BOS @ Apr 4 2008, 16:41) *
Укажите #include <ioAT89C2051.h> - файл находится в системной папке компилятора.

А если вы хотите использовать запись : #include "ioAT89C2051.h" , то в таком случае перенесите сам файл ioAT89C2051.h из папки компилятора в папку проекта wink.gif


Я попробовал и так, и так, но это эффетка не дало, ошибка тажа(см. первый пост).
Т.е. при компиляции вылазит следующее сообщение об ошибке(см. приложение) Я жму "ок" и затем уже ИАР в окне сообщений выдает ошибку:
Fatal Error[c0000005E]: Uncontrolled termination
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.