CR EQU 0DH ;Код возврата каретки (ASCII) LF EQU 0AH ;Код перевода строки ESC EQU 1BH ;Код операции ESC ORG 0000h JMP start ORG 0023h RETI ORG 0100h ; Инициализация UART тут: start: MOV P2,#255 ; Все выводы на высокий уровень MOV IE,#0 ; Прерывания отключаем нафиг, чтобы не мешались (далеко не везде и не всегда надо так!!!) CLR EA ; До кучи вообще запрещаем все прерывания. SETB ES ; Но оставляем прерывание от UART (на всякий, один фиг оно пока не работает - EA Сброшен) MOV PCON,#80h ; Устанавливаем бит удвоенной скорости, он расположен в регистре PCON CLR TR1 ; Сбрасываем флаг таймера = таймер готов к работе MOV TMOD,#20h ; Настраиваем таймер 1 в режим 2 (автоперезагрузка значеня. Регистр TMOD определяет параметры таймера) MOV TH1,#0F5h ; 9600 @ 20MHz Прескалер таймера, определяющий, что порт будет выдавать 9600 бод на 20мгцовом тактовом кварце SETB TR1 ; Установили бит TR1 = запустили таймер MOV SCON,#52h ; Uart Init and UART Ready - инициализация параметров UART ; тут мы тупо крутимся обрабатывая кнопочки. LOOP: JB P1.0,nxt1 ; Проверяем наличие бита на ноге 1.0. Если бита нет, значит эта нога кнопкой прижата к земле = 0 MOV A,#'1' ; Кидаем код 1ки в аккумулятор и CALL UART ; вызываем процедуру выдачи в уарт, которая отрыгнет этот код по порту. JNB P1.0,$ ; а тут мы торчим до тех пор пока не отпустят кнопку. nxt1: JB P1.2,nxt2 ; аналогично, но для другой ножки порта. MOV A,#'2' CALL UART JNB P1.2,$ nxt2: JB P1.4,nxt3 MOV A,#'3' CALL UART JNB P1.4,$ nxt3: JB P1.6,LOOP MOV A,#'4' CALL UART JNB P1.6,$ JMP LOOP ;======= Proc ======================================== ; Out Byte in UART UART: JNB TI,$ ;Ожидание готовности CLR TI ; сброс флага готовности MOV SBUF,A ;Выдача символа в буффер UART CALL DELAY ; вызов задержки CALL DELAY ; вызов задержки RET ;====================================================== ; Stupid Delay Тупая регистровая задержка на куче вложенных циклов пустых. Лень было таймер загружать такой ботвой. DELAY: MOV R7,#255 ZD0: MOV R6,#255 MOV R5,#255 ZD1: DJNZ R6,ZD1 ZD2: DJNZ R5,ZD2 DJNZ R7,ZD0 RET END