Разработка программной и аппаратной поддержки к методическим указаниям Программирование микроконтроллеров
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
МнемоникаОперандыОписаниеОперацияФлагиЦиклыMOVRd,RrСкопировать регистрRd = RrNone1MOVWRd,RrСкопировать пару регистровRd+1:Rd = Rr+1:Rr, r,d evenNone1LDIRd,K8Загрузить константуRd = KNone1LDSRd,kПрямая загрузкаRd = (k)None2*LDRd,XКосвенная загрузкаRd = (X)None2*LDRd,X+Косвенная загрузка с пост-инкрементомRd = (X), X=X+1None2*LDRd,-XКосвенная загрузка с пре-декрементомX=X-1, Rd = (X)None2*LDRd,YКосвенная загрузкаRd = (Y)None2*LDRd,Y+Косвенная загрузка с пост-инкрементомRd = (Y), Y=Y+1None2*LDRd,-YКосвенная загрузка с пре-декрементомY=Y-1, Rd = (Y)None2*LDDRd,Y+qКосвенная загрузка с замещениемRd = (Y+q)None2*LDRd,ZКосвенная загрузкаRd = (Z)None2*LDRd,Z+Косвенная загрузка с пост-инкрементомRd = (Z), Z=Z+1None2*LDRd,-ZКосвенная загрузка с пре-декрементомZ=Z-1, Rd = (Z)None2*LDDRd,Z+qКосвенная загрузка с замещениемRd = (Z+q)None2*STSk,RrПрямое сохранение(k) = RrNone2*STX,RrКосвенное сохранение(X) = RrNone2*STX+,RrКосвенное сохранение с пост-инкрементом(X) = Rr, X=X+1None2*ST-X,RrКосвенное сохранение с пре-декрементомX=X-1, (X)=RrNone2*STY,RrКосвенное сохранение(Y) = RrNone2*STY+,RrКосвенное сохранение с пост-инкрементом(Y) = Rr, Y=Y+1None2ST-Y,RrКосвенное сохранение с пре-декрементомY=Y-1, (Y) = RrNone2STY+q,RrКосвенное сохранение с замещением(Y+q) = RrNone2STZ,RrКосвенное сохранение(Z) = RrNone2STZ+,RrКосвенное сохранение с пост-инкрементом(Z) = Rr, Z=Z+1None2ST-Z,RrКосвенное сохранение с пре-декрементомZ=Z-1, (Z) = RrNone2STZ+q,RrКосвенное сохранение с замещением(Z+q) = RrNone2LPMНетЗагрузка из программной памятиR0 = (Z)None3LPMRd,ZЗагрузка из программной памятиRd = (Z)None3LPMRd,Z+Загрузка из программной памяти с пост-инкрементомRd = (Z), Z=Z+1None3ELPMНетРасширенная загрузка из программной памятиR0 = (RAMPZ:Z)None3ELPMRd,ZРасширенная загрузка из программной памятиRd = (RAMPZ:Z)None3ELPMRd,Z+Расширенная загрузка из программной памяти с пост-инкрементомRd = (RAMPZ:Z), Z = Z+1None3SPMНетСохранение в программной памяти(Z) = R1:R0None-ESPMНетРасширенное сохранение в программной памяти(RAMPZ:Z) = R1:R0None-INRd,PЧтение портаRd = PNone1OUTP,RrЗапись в портP = RrNone1PUSHRrЗанесение регистра в стекSTACK = RrNone2POPRdИзвлечение регистра из стекаRd = STACKNone2* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций LD, ST, LDD, STD, LDS, STS, PUSH и POP, необходимо добавить один цикл плюс по одному циклу для каждого ожидания.
Таблица А.4. Инструкции работы с битами.
МнемоникаОперандыОписаниеОперацияФлагиЦиклыLSLRdЛогический сдвиг влевоRd(n+1)=Rd(n), Rd(0)=0, C=Rd(7)Z,C,N,V,H,S1LSRRdЛогический сдвиг вправоRd(n)=Rd(n+1), Rd(7)=0, C=Rd(0)Z,C,N,V,S1ROLRdЦиклический сдвиг влево через CRd(0)=C, Rd(n+1)=Rd(n), C=Rd(7)Z,C,N,V,H,S1RORRdЦиклический сдвиг вправо через CRd(7)=C, Rd(n)=Rd(n+1), C=Rd(0)Z,C,N,V,S1ASRRdАрифметический сдвиг вправоRd(n)=Rd(n+1), n=0,...,6Z,C,N,V,S1SWAPRdПерестановка тетрадRd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0)None1BSETsУстановка флагаSREG(s) = 1SREG(s)1BCLRsОчистка флагаSREG(s) = 0SREG(s)1SBIP,bУстановить бит в портуI/O(P,b) = 1None2CBIP,bОчистить бит в портуI/O(P,b) = 0None2BSTRr,bСохранить бит из регистра в TT = Rr(b)T1BLDRd,bЗагрузить бит из T в регистрRd(b) = TNone1SECНетУстановить флаг переносаC =1C1CLCНетОчистить флаг переносаC = 0C1SENНетУстановить флаг отрицательного числаN = 1N1CLNНетОчистить флаг отрицательного числаN = 0N1SEZНетУстановить флаг нуляZ = 1Z1CLZНетОчистить флаг нуляZ = 0Z1SEIНетУстановить флаг прерыванийI = 1I1CLIНетОчистить флаг прерыванийI = 0I1SESНетУстановить флаг числа со знакомS = 1S1CLNНетОчистить флаг числа со знакомS = 0S1SEVНетУстановить флаг переполненияV = 1V1CLVНетОчистить флаг переполненияV = 0V1SETНетУстановить флаг TT = 1T1CLTНетОчистить флаг TT = 0T1SEHНетУстановить флаг внутреннего переноса H = 1H1CLHНетОчистить флаг внутреннего переноса H = 0H1NOPНетНет операцииНетNone1SLEEPНетСпать (уменьшить энергопотребление)Смотрите описание инструкцииNone1WDRНетСброс сторожевого таймераСмотрите описание инструкцииNone1
Ассемблер не различает регистр символов. Операнды могут быть таких видов:
- Rd: Результирующий (и исходный) регистр в регистровом файле
- Rr: Исходный регистр в регистровом файле
- b: Константа (3 бита), может быть константное выражение
- s: Константа (3 бита), может быть константное выражение
- P: Константа (5-6 бит), может быть константное выражение
- K6; Константа (6 бит), может быть константное выражение
- K8: Константа (8 бит), может быть константное выражение
- k: Константа (размер зависит от инструкции), может быть константное выражение
- q: Константа (6 бит), может быть константное выражение
- Rdl: R24, R26, R28, R30. Для инструкций ADIW и SBIW
- X,Y,Z: Регистры косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30)
ПРИЛОЖЕНИЕ 2.
Таблица регистров микроконтроллера AT90S1200
АдресНазваниеBit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0$3FSREGITHSVNZC$3Eз а р е з е р в и р о в а н$3Dз а р е з е р в и р о в а н$3Cз а р е з е р в и р о в а н$3BGIMSK-INT0------$3Aз а р е з е р в и р о в а н$39TIMSK------TOIE0-$38TIFR------TOV0-$37з а р е з е р в и р о в а н$36з а р е з е р в и р о в а н$35MCUCR--SESM--ISC01ISC00$34з а р е з е р в и р о в а н$33TCCR0-----CS02CS01CS00$32TCNT0Таймер / счетчик 0 (8 бит)…з а р е з е р в и р о в а н$21WDTCR----WDEWDP2WDP1WDP0…з а р е з е р в и р о в а н $1EEEARРегистр адреса энергонезависимой памяти$1DEEDRРегистр данных энергонезависимой памяти$1CEECR------EEWEEERE…з а р е з е р в и р о в а н $18PORTBPORTB7PORTB6PORTB5PORTB4PORTB3PORTB2PORTB1PORTB0 $17DDRBDDB7DDB6DDB5DDB4DDB3DDB2DDB1DDB0 $16PINBPINB7PINB6PINB5PINB4PINB3PINB2PINB1PINB0…з а р е з е р в и р о в а н $12PORTD-PORTD6PORTD5PORTD4PORTD3PORTD2PORTD1PORTD0$11DDRD-DDD6DDD5DDD4DDD3DDD2DDD1DDD0$10PIND-PIND6PIND5PIND4PIND3PIND2PIND1PIND0…з а р е з е р в и р о в а н $08ACSRACD-ACOACIACIE-ACIS1ACIS0 …з а р е з е р в и р о в а н $00з а р е з е р в и р о в а н
ПРИЛОЖЕНИЕ 3.
Программа для измерителя звуковой частоты
.include "8515def.inc"
.equ last_seg =4
.equ zero =0
.equ start_addr= 8
.def capture_l =r2
.def capture_h =r3
.def char =r5
.def char_pointer =r6
.deftemp =r16
.def temp1 =r17
.def ZerRol =r18
.def char0 =r20
.def char1 =r21
.def char2 =r22
.def char3 =r23
.def char4 =r24
.def out_char0 =r8
.def out_char1 =r9
.def out_char2 =r10
.def out_char3 =r11
.def out_char4 =r12
.def out_counter