2011-06-30 12:49:28 Гундор Может кто-нибудь,простенькую прогу написанную на ассемблере перевести на С ?( |
2011-06-30 12:51:43 Темон Напиши сюда |
2011-06-30 12:56:58 Гундор ;************************************************** ; ПРЕОБРАЗОВАТЕЛЬ КОДА ;************************************************** ; ;тактовая частота 1 МГц ;вход разрешения приема - РА0 ;вход данных - РА1 ;вход синхронизации - PА2 ;выход данных- ПОРТ В ;выход синхронизации - РА3 ; .include "m103def.inc" ;присоединение файла описаний .list ;включение листинга ;определение переменных .def temp=r16 .def data=r17 .def count=r18 .def pausa=r19 ;начало программного кода .cseg ;выбираем сегмент программного кода .org 0 ;установка текущего адреса на ноль ;определение векторов прерываний jmp init ;переход к программе инициализации reti ;прерывание по изменению на INT0 reti ;прерывание по изменению на INT1 reti ;прерывание по изменению на INT2 reti ;прерывание по изменению на INT3 reti ;прерывание по изменению на INT4 reti ;прерывание по изменению на INT5 reti ;прерывание по изменению на INT6 reti ;прерывание по изменению на INT7 reti ;таймер Т2, совпадение reti ;таймер Т2, переполнение reti ;таймер Т1, захват reti ;таймер Т1, совпадение, канал А reti ;таймер Т1, совпадение, канал В reti ;таймер Т1, переполнение reti ;таймер Т0, совпадение reti ;таймер Т0, переполнение reti ;SPI, передача завершена reti ;UART, прием завершен reti ;UART, буфер данных пуст reti ;UART, передача завершена reti ;АЦП, преобразование завершено reti ;прерывание по готовности EEPROM reti ;срабатывание аналогового компаратора ;программа начальной инициализации init: ldi temp,RAMEND out SPH,temp ldi temp,RAMEND out SPL,temp ;указание вершины стека ldi temp,0x10 out WDTCR,temp ;отключаем сторожевой таймер ldi temp,0x08 out DDRA,temp ;все выводы порта А кроме РА3 - входы ldi temp,0xFF out DDRB,temp ;все выводы порта В - выходы cli ;глобальный запрет всех прерываний ; ;************************************************** ; ГЛАВНЫЙ ЦИКЛ ;************************************************** ; main_loop: ;прием байта данных sbis PORTA,0 ;бит РA0 установлен? jmp main_loop ;нет ;да clr temp ;обнуляем счетчик бит ldi count,0x09 ;загружаем число итераций - 9 main1: inc temp ;инкрементируем счетчик бит cpse temp,count ;temp=8? jmp main2 ;нет ;да ;передача байта данных out PORTB,data ;выводим байт данных в порт В sbi PORTA,3 ;генерируем сигнал синхронизации nop ;пауза nop ;длительностью nop ;4 мкс nop cbi PORTA,3 ;завершаем генерацию сигнала синхронизации jmp main_loop ;переходим к приему нового байта main2: sbis PORTA,2 ;бит РA2 установлен? jmp main2 ;нет ;да sbis PORTA,1 ;бит РA1 установлен? jmp main3 ;нет ;да sec ;устанавливаем флаг переноса jmp main4 main3: clc ;сбрасываем флаг переноса main4: rol data ;сдвиг data влево через перенос call pausa ;вызов подпрограммы задержки 1 мс jmp main1 ;прием очередного байта ; ; ;************************************************** ; ПОДПРОГРАММА ВРЕМЕННОЙ ЗАДЕРЖКИ 1 мс ;************************************************** ; pausa: ldi pausa,0x01 out TIFR,pausa ;сбрасываем флаг переполнения Т0 ldi pausa,0x82 out TCNT0,pausa ;загружаем в таймер Т0 число 130 pausa1: in pausa,TIFR sbrs pausa,0 ;бит TOV0 установлен? jmp pausa1 ;нет ;да ret ;выход из подпрограммы ; ;************************************************** |
2011-06-30 12:57:15 Гундор пожалуйста:((((( |
2011-06-30 13:04:23 Темон Крутяк... |
2011-06-30 13:06:15 Гундор Темон Не сможешь?:((( |