Контроллер управления PIC16F876A для программы BPEG v0.2 (с

Программа доступна по адресу:
Проект открыт для применения МК Microchip. Прошу присоединится к проекту разработчиков схем с МК иных производителей.

Устройство разработано по типовым схемам. Представляет связку из 2-х микросхем МК PIC16F876A и MAX232CPE (MAX232) Рис.1. Необходимо использовать MAX232 для согласования уровней, так как модуль USART микроконтроллера не соответствует TTL используемые в портах ввода/вывода RS-232 компьютеров.


Рис.1

Существуют несколько видов кабеля (Рис.2, a),но для соединения COM-порта компьютера и девайса можно использовать следующий тип кабеля.

Рис.2
Tx и Rx подключены кроссом. При использовании кабеля, который соединяет напрямую (без кроссирования) нужно внести изменения в схему согласно подключениям Rx, Tx каналов.

Для полноценной работы разработал исходный код программы МК. В коде была ошибка, после исправления HEX весит 870 байтов:

; Контроллер управления для программы Baby-peg v0.2
; Система слайд-шоу (slide show system) на 256 слайдов
; (с)2008.Art!P email: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
; Условия распространения программы: Freeware
; программа
; контроллер
; разрешена любая модификация исходного кода программы контроллера
; Контроллер инциализирует соединение с программой через COM-port на скорости 9600 baud

PROCESSOR 16f876a
#include "p16f876a.inc"
; Обязательно отключить таймер WatchDog! WDT = off
; Тактовый генератор = HS. Power Up Timer = 0ff. Brown Out Detect = off

radix dec
#define Button1 PORTA,0 ; ">" кнопка для установки слайд в самое начало отсылается байт 255
#define Button3 PORTA,2 ; ">" кнопка один слайд вперед
#define Button4 PORTA,3 ; "", ">" установим значение 255
bcf STATUS, RP1;
bcf STATUS, RP0;
CLRF PORTA;Режим управления
bsf STATUS, RP0;
movlw 0x06;
movwf ADCON1; Определяем порты как цифровой вход
movlw 0xff;
movwf TRISA; Инициализация портов А
bcf STATUS, RP1;
bcf STATUS, RP0; выбран 0-ой банк

Port_cycle: ; В портах использованы подтягивающие резисторы, они устанавливают напряжение и подтягивают значение до логической 1
        btfss   Button1 ; Если button1 = 1, то пропускаем следующую команду.
        goto    Press1; кнопка нажата (лог. 0), вызываем подпрограмму Press1
        btfss   Button2;
        goto    Press2;
        btfss   Button3;
        goto    Press3;
        btfss   Button4;
        goto    Press4;
        goto    Port_cycle;
; Обработка нажатия кнопки Button1:

Press1:
        call    Pause; сделаем небольшую паузе в несколько мс для устранения эффекта дребезжания кнопки
        btfsc   Button1;
        goto    Port_cycle; кнопка "дребезнула" возвращаемся в основной цикл
        call    Pressed1; иначе вызываем подпрограмму Pressed1
        movlw 0x9;
        call sl; установим задержку перед началом повтора
press_cycle1:
         btfsc   Button1; если внопка нажата
         goto    Port_cycle;       
        call    Pressed1; то вызываем Pressed1
        call    Pause; пауза между нажатиями
        call    Pause;
        goto    press_cycle1;

Press2:
        call    Pause;
        btfsc   Button2;
        goto    Port_cycle;
        call    Pressed2; 
         movlw 0x9;
         call sl;
press_cycle2:
        btfsc   Button2;
         goto    Port_cycle;       
        call    Pressed2; 
        call    Pause;
         call    Pause;
         goto    press_cycle2;

Press3:
        call    Pause;
        btfsc   Button3;
        goto    Port_cycle;
             call    Pressed3;
             movlw 0x9;
             call sl;
  press_cycle3:
             btfsc   Button3;
             goto    Port_cycle;       
        call    Pressed3; 
        call    Pause;
             call    Pause;
             goto    press_cycle3;

Press4:
        call    Pause;
        btfsc   Button4;
        goto    Port_cycle;
        call    Pressed4; 
             movlw 0x9;
             call sl;
  press_cycle4:
             btfsc   Button4;
             goto    Port_cycle;       
        call    Pressed4; 
        call    Pause;
             call    Pause;
             goto    press_cycle4;

Pressed1: ; кнопка ">" = 255
movf b1,0;
call send;
return;

Pressed3: ; кнопка ">"
incf temp,1; Используется временная переменная для 2-х разных кнопок
movf temp,0; Значение temp меняется от 0 до 255 в цикле по кругу
call send; после 255 идет 0,1,2 и т.д.
return;

Pressed4: ; кнопка "" "






Рекомендуемый контент




Copyright © 2010-2019 housea.ru. Контакты: info@housea.ru При использовании материалов веб-сайта Домашнее Радио, гиперссылка на источник обязательна.