Лекция: Модуль РСА как генератор сигналов.
DSEG
PULSE EQU 2000
PAUSE EQU 8000
FLAG BIT 00h //привязывает следующую //команду жестко к памяти
CSEG
ORG 0000h
AJMP BEGIN
ORG 0033h
AJMP PCA_ISR
ORG 0100h
BEGIN: //настройка и запуск
MOV CL, #00h;
MOV CH, #00h;
MOV CMOD, #00h; //WDTE=0, //clock=fosc/12
MOV CCAPM0, #4Dh;
MOV CCAP0L, #LOW(PULSE)
MOV CCAP0H, #HIGH(PULSE)
SETB IE.6;
SETB IE.7;
SETB CCON.6; //запуск PCA массива (CR)
ORG 0200h
PCA_ISR:
CLR CCF0
PUSH ACC;
PUSH PSW;
JNB P1.3, MINUS //проверяем состояние бита
PULSE:
MOV A, CCAP0L;
ADD A, #LOW(PULSE); //при записи младшего байта
MOV CCAP0L, A; //компаратор выключается
MOV A, CCAP0H;
ADD A, #HIGH(PULSE);
MOV CCAP0H, A;
POP PSW;
POP ACC;
RETI; //иначе следующее прерывание не будет воспринято
MINUS:
MOV A, CCAP0L;
ADD A, #LOW(PAUSE); //каждый раз при прерывании
MOV CCAP0L, A; //проверяется состояние
MOV A, CCAP0H; //вывода P1.3 (программно)
ADD A, #HIGH(PAUSE); //если 1, то прибавляем
MOV CCAP0H, A; //длительность 8 мс
POP PSW; //если 0 – длительность импульса 2 мс
POP ACC;
RETI;
2. Последовательный связной адаптер. Как организовать прием и передачу данных на разных частотах одновременно?
Как организовать прием и передачу данных на разных частотах одновременно?
T2MOD = 0x00;
PCON = 0x80; //бит SMOD. Удвоение скорости обмена UART
SCON = 0x58; //настройка UART. Режим 1 — 9-бит, разрешение приема, 9-й бит=1 (0101 1000)
TH2 = RCAP2H = 0xff; //загрузка Т2 исходя из выбранной скорости обмена-115200
TL2 = RCAP2L = 0xfa; //
TH1 = …
T2CON = 0x…; //настройка Т2. Т2-задающий генератор UART (0011 0000) – T2CON.4 – бит синхронизации передатчика. Если 1, то T1 не используется. T2CON.5 – бит синхронизации приемника
RCLK | T2CON.5 | Выбор таймера/счетчика 2 для задания скорости работы приемника в режимах 1 и 3. При RCLK = 1 используется таймер/счетчик 2, при RCLK = 0 — таймер/счетчик 1 |
TCLK | Т2СОN.4 | Выбор таймера/счетчика 2 для задания скорости работы передатчика в режимах 1 и 2. При TCLK = 1 используется таймер/счетчик 2, при TCLK = 0 — таймер/счетчик 1 |
TI=RI = 0; //cброс флагов прерывания UART
TR2 = 1;
//настройка прерываний
IE = 0x90; //Общее, UART