gn="justify"> TRISA EQU 85hEQU 86hEQU 01hEQU 00000000b; слова ініціалізації
INITB EQU 00000000b; для портів введення/виводаEQU 0h; Опис прапорів службових регістров.EQU 1h; Їх імена теж стандартние.EQU 2h; Для регістра вказувалася адреса комірки ОЗУ, EQU 3h; вказується номер біта, EQU 4h; тому цифри після імені флагаEQU 5h; для деяких прапорів можуть совпадать.EQU 0Ch; Опис переменнихEQU 0Dh
Char_RS232 EQU 0Eh
ORG 0; Вектор сбросаBEGIN
; _ --------- Передача даних в СОМ-порт ---------------
# DEFINE _TxD PORTB, 5_RS232: .8 tmpdelay01_TxD; стартовий бітdelay_95mksdelay_8mks_PutChar_RS232_01:; данниеChar_RS232, fSTATUS, C_TxDSTATUS, C_TxDdelay_95mkstmpdelay01, fm_PutChar_RS232_01: _TxD; біт четностіdelay_95mksdelay_8mks_TxD; стоповий бітdelay_95mksdelay_8mksChar_RS232, f_95mks: .22 tmpdelay01tmpdelay01, f $-2_8mks:
; =========================================
ORG 100h: INITA; Налаштування портів введення/виводу як виходи
MOVWF TRISAINITBTRISB
BSF STATUS, RP0; Цією командою включається 1й банк пам'яті.
; Якщо цього не зробити - порти не будуть настроениB'00000000 '; Визначення портів АTRISAB'11001111'; Визначення портів ВTRISBSTATUS, RP0; Перехід на нульовий банк
; ----------- Основне тіло програми ------------------ PORTB, 0; Зчитування для Х з портів RB0 і RB1X1; І занесення їх у Х1
RLF X1, 0PORTB, 1X1
BTFSC X1, 1; Сортування значення 11X1, 0SX1; При очищенні Х1 від 11 отримаємо 00PORTB, 2; Зчитування для Y з портів RB2 і RB3Y1; Занесення їх до Y1
RLF Y1, 0PORTB, 3Y1
BTFSC Y1, 1; Сортування значення 11Y1, 0SY1; При очищенні Y1 від 11 отримаємо 00X1; У передавальний регістрChar_RS232; заносимо Х
RLF X1, 1Y1Char_RS232; заносимо YChar_RS232, 0PORTB, 6Char_RS232; заносимо Кн1Char_RS232, 0PORTB, 7Char_RS232; заносимо Кн2Char_RS232, 0PutChar_RS232Char_RS232BEGIN