Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глюк с AT89C51
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
AntonBDV88
Здравстуйте!!!
Такая проблема : значит написал простейшую программу динамической
индикации, и она не работает, т.е. пишет постоянно во всех индикаторах
один и тот же знак. Вооюще не понимаю где здесь может быть ошибка :
( Код знака выдается через P0, катоды индикаторов переключаются с помощью
P2.6, P2.7 )

Код
Org 0000h
  sjmp START

;Вектор прерывания Int0
Org 0003h  
reti
  
;Вектор прерывания Int1
Org 0013h
reti

;Вектор прерывания таймера T0
Org 000Bh  
reti

;Вектор прерывания таймера T1
Org 001Bh  
reti

;=========================================
; Начало программы
Org 0040h
START:
;----------
;----------  
; начальные установки
mov P0,#00h
mov P1,#00h
mov P2,#00h
mov SP,#45h
mov TMOD,#00010001b
mov TCON,#00h
mov IP,#00h
mov IE,#10001011b

mov PSW,#00001000b; 1 банк регистров
mov R7,#00h; признак - какой индикатор надо включать
l:
mov P2,#00h
cjne R7,#00h,ind1
mov A,#02h
acall indis
setb P2.6
mov R7,#01h
sjmp ind4
ind1:
mov A,#05h
acall indis
setb P2.7
mov R7,#00h
ind4:
sjmp l

indis:
add A,#03h
movc A,@A+PC
mov P0,A
ret
; Таблица символов для индикации
db 01111101b; "0"
db 01100000b; "1"
db 00111110b; "2"
db 01111010b; "3"
db 01101011b; "4"
db 01011011b; "5"
db 01011111b; "6"
db 01110000b; "7"
db 01111111b; "8"
db 01111011b; "9"
db 01111101b; "0"
;-------------------------------------
END


Если не сложно подскажите пожалуйста или подкиньте работающий пример.
Заранее спасибо
volkanaft
1.Непонятно зачем такая дикая частота мультипликации (~100кГц)
поди транзистор в катоде стоит - может не успевать перекл. на такой частоте.

2. Вообще полезно осц. двухлучевым посмотреть - сразу многое станет понятно.( это если симулятора нет - в нем понятно и без осц.)

3. Если смотр. этот пример - выкинуть
mov P2,#00h
а перед setb P2.6 встав. clb P2.7
соотв. перед setb P2.7 clb P2.6
(и все равно время индикации каждой цифры будет неодинаковое) -
лучше использовать прер. любого таймера (~100Гц) и в процедуре прер. перключать катоды и выставлять знач. кода
AntonBDV88
volkanaft

Цитата
1.Непонятно зачем такая дикая частота мультипликации (~100кГц)
поди транзистор в катоде стоит - может не успевать перекл. на такой частоте.


У меня как раз процедура и вызывается от прерывания таймера(~20мс), это я просто здесь так
"влоб" написал.
Просто самое непонятное то, что в когда прогоняю в симуляторе все работает как надо, а
прошитый контроллер врет. Может мне контроллер попался брачный(паленый) или я его уже
подпалил слегка(напряжение записи случайно 13В поставил) smile.gif))

А можно подкинуть примерчик рабочий чтоб записать его (для опытов) пжл ?
DimG
Проверь печать и схему. Программа ни при чем.
AntonBDV88
DimG
Ты был прав. Была ошибка в плате.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.