Cov txheej txheem:

AVR Assembler Tutorial 2: 4 Cov Kauj Ruam
AVR Assembler Tutorial 2: 4 Cov Kauj Ruam

Video: AVR Assembler Tutorial 2: 4 Cov Kauj Ruam

Video: AVR Assembler Tutorial 2: 4 Cov Kauj Ruam
Video: AVR Ассемблер. Урок 1. Вводный. AVR Assembler. Lesson 1. Promo. 2024, Hlis ntuj nqeg
Anonim
AVR Assembler Tutorial 2
AVR Assembler Tutorial 2

Cov ntawv qhia no yog txuas ntxiv ntawm "AVR Assembler Tutorial 1"

Yog tias koj tsis tau hla Tutorial 1 koj yuav tsum nres tam sim no thiab ua qhov ntawd ua ntej.

Hauv qhov kev qhia no peb yuav txuas ntxiv peb txoj kev kawm ntawm cov lus sib dhos ntawm lub atmega328p siv hauv Arduino's.

Koj yuav xav tau:

  1. breadboard Arduino lossis tsuas yog ib txwm Arduino zoo li hauv Tutorial 1
  2. ib LED
  3. ib tug 220 ohm resistor
  4. laub khawm
  5. txuas cov xov hlau rau kev ua hluav taws xob ntawm koj lub khob cij
  6. Instuction Set Manual: www.atmel.com/images/atmel-0856-avr-instruction-s…
  7. Cov ntaub ntawv: www.atmel.com/images/Atmel-8271-8-bit-AVR-Microco…

Kev sau ua tiav ntawm kuv cov lus qhia tuaj yeem pom ntawm no:

Kauj Ruam 1: Tsim Circuit Court

Tsim lub Circuit
Tsim lub Circuit

Ua ntej koj yuav tsum tsim lub Circuit Court uas peb yuav kawm hauv qhov kev qhia no.

Nov yog txoj hauv kev nws txuas nrog:

PB0 (tus pin digital 8) - LED - R (220 ohm) - 5V

PD0 (tus lej digital 0) - khawm -GND

Koj tuaj yeem tshawb xyuas tias koj lub LED tau taw qhia kom raug los ntawm kev txuas nws mus rau GND tsis yog PB0. Yog tias tsis muaj dab tsi tshwm sim ces thim qhov kev taw qhia thiab lub teeb yuav tsum tuaj. Tom qab ntawd txuas nws dua rau PB0 thiab txuas ntxiv. Daim duab qhia pom yuav ua li cas kuv daim ntawv qhia zaub mov txuas nrog arduino.

Kauj Ruam 2: Sau Txoj Cai Los Ua Ke

Sau Txoj Cai Los Ua Ke
Sau Txoj Cai Los Ua Ke

Sau cov cai hauv qab no hauv kab ntawv hu ua pushbutton.asm thiab suav nrog avra zoo li koj tau ua hauv Tutorial 1.

Pom zoo tias hauv txoj cai no peb muaj ntau cov lus pom. Txhua lub sijhawm tus neeg sib sau pom tus lej cim nws yuav hla kab ntxiv thiab mus rau kab tom ntej. Nws yog qhov kev xyaum ua haujlwm zoo (tshwj xeeb tshaj yog cov lus sib dhos!) Kom hnyav tawm tswv yim koj cov cai kom thaum koj rov qab los rau yav tom ntej koj yuav paub tias koj tau ua dab tsi. Kuv yuav tawm tswv yim ntau yam hauv thawj ob peb qhov kev qhia kom peb paub tseeb tias yog dab tsi mus thiab yog vim li cas. Tom qab ntawd, thaum peb dhau los ua qhov zoo me ntsis ntawm kev sib sau ua ke Kuv yuav tawm tswv yim yam tsis meej me ntsis.

;************************************

; sau los ntawm: 1o_o7; hnub tim: Oct 23, 2014; ************************************

.nolist

.include "m328Pdef.inc".list.def temp = r16; xaiv npe ua haujlwm r16 raws li qhov rjmp Init; thawj kab ua tiav

Thawj:

txias txias; teev tag nrho cov khoom hauv qhov kub txog 1's. tawm DDRB, temp; teeb tsa me ntsis li 1 ntawm Cov Ntaub Ntawv Qhia I/O; rau npe rau PortB, uas yog DDRB, teev qhov ntawd; tus pin raws li cov zis, tus 0 yuav teeb tus pin li cov tswv yim; yog li ntawm no, txhua tus PortB pins tau tawm (teeb tsa rau 1) ldi temp, 0b11111110; thauj tus lej 'tam sim ntawd' rau lub sijhawm teev npe; yog tias nws tsuas yog ld ces qhov kev sib cav zaum ob; yuav tsum yog qhov chaw nco hloov tawm DDRD, qhov kub; mv temp rau DDRD, qhov tshwm sim yog PD0 yog cov tswv yim; thiab tus so yog cov zis clr temp; tag nrho cov khoom hauv qhov kub tau teem rau 0's tawm PortB, temp; teeb tag nrho cov khoom (piv txwv li pins) hauv PortB mus rau 0V ldi temp, 0b00000001; thauj tus lej tam sim ntawd mus rau qhov kub tawm PortD, qhov kub; txav sijhawm mus rau PortD. PD0 muaj qhov rub tawm tus neeg tawm tsam; (piv txwv li teeb tsa rau 5V) txij li nws muaj 1 hauv qhov me ntsis; tus so yog 0V txij li 0's.

Lub ntsiab:

hauv qhov kub, PinD; PinD tuav lub xeev PortD, luam qhov no mus rau qhov kub; yog tias khawm txuas nrog PD0 qhov no yuav yog; 0 thaum khawm raug thawb, 1 txwv tsis pub txij li; PD0 muaj qhov rub tawm tus neeg tawm tsam nws ib txwm nyob ntawm 5V tawm PortB, qhov kub; xa 0's thiab 1's nyeem saum toj no mus rau PortB; qhov no txhais tau tias peb xav kom LED txuas nrog PB0,; thaum PD0 yog LOW, nws teeb PB0 rau LOW thiab tig; ntawm LED (txij li sab nraud ntawm LED yog; txuas nrog 5V thiab qhov no yuav teeb PB0 txog 0V yog li; tam sim no yuav ntws) rjmp Main; rov qab mus rau qhov pib ntawm Main

Daim ntawv ceeb toom tias lub sijhawm no peb tsis tsuas yog muaj ntau cov lus pom hauv peb cov cai, tab sis peb kuj muaj ntu ntu uas muab qee cov ntaub ntawv hais txog leej twg sau nws thiab thaum nws tau sau. Tus so ntawm txoj cai tseem raug cais ua ntu.

Tom qab koj tau suav sau cov cai saum toj no koj yuav tsum thauj nws mus rau lub microcontroller thiab pom tias nws ua haujlwm. LED yuav tsum qhib thaum koj tab tom thawb lub pob thiab tom qab ntawd kaw dua thaum koj tso tseg. Kuv tau qhia tias nws zoo li cas hauv daim duab.

Kauj Ruam 3: Kab-los-kab Kev Ntsuam Xyuas ntawm Txoj Cai

Kuv yuav hla cov kab uas tsuas yog cov lus pom raws li lawv lub hom phiaj yog qhov pom tseeb.

.nolist

.include "m328Pdef.inc".list

Peb kab ntawv no suav nrog cov ntawv uas muaj Kev Sau Npe thiab Cov ntsiab lus me me rau ATmega328P uas peb tab tom ua haujlwm. Cov lus hais.nolist qhia rau cov neeg sib sau ua ke kom tsis txhob suav cov ntawv no hauv cov ntawv pushbutton.lst uas nws tsim tawm thaum koj sib sau ua ke. Nws tua cov npe xaiv. Tom qab suav nrog cov ntawv peb tig cov npe xaiv rov qab nrog cov npe.list hais kom ua. Qhov laj thawj peb ua qhov no yog vim tias cov ntaub ntawv m328Pdef.inc ntev heev thiab peb tsis tas yuav xav pom nws hauv daim ntawv teev npe. Peb cov neeg sib sau ua ke, avra, tsis tuaj yeem tsim cov npe cov ntaub ntawv thiab yog tias peb xav tau ib qho peb yuav sib sau ua ke siv cov lus txib hauv qab no:

avra -l pushbutton.lst pushbutton.asm

Yog tias koj ua qhov no nws yuav tsim cov ntaub ntawv hu ua pushbutton.lst thiab yog tias koj tshuaj xyuas cov ntawv no koj yuav pom tias nws qhia koj cov lej program nrog rau cov ntaub ntawv ntxiv. Yog tias koj saib cov ntaub ntawv ntxiv koj yuav pom tias cov kab pib nrog C: ua raws los ntawm tus txheeb ze qhov chaw nyob hauv hex ntawm qhov chaws tau muab tso rau hauv lub cim xeeb. Qhov tseem ceeb nws pib ntawm 000000 nrog thawj lo lus txib thiab nce los ntawm qhov ntawd nrog txhua qhov lus txib tom ntej. Kab ntawv thib ob tom qab qhov chaw txheeb ze hauv cim xeeb yog tus lej hex rau cov lus txib ua raws los ntawm tus lej hex rau kev sib cav ntawm qhov hais kom ua. Peb yuav tham txog cov npe cov ntaub ntawv ntxiv hauv cov lus qhia yav tom ntej.

.def ntsuas = r16; xaiv lub npe ua haujlwm r16 ua ntu zus

Hauv kab no peb siv cov lus sib dhos ".def" txhawm rau txheeb xyuas qhov sib txawv "temp" raws li sib npaug rau r16 "ua haujlwm rau npe." Peb yuav siv npe r16 ua tus khaws cov lej uas peb xav tau luam rau ntau qhov chaw nres nkoj thiab sau npe (uas tsis tuaj yeem sau ncaj qha).

Qoj 1: Sim luam tus lej binary ncaj qha rau hauv chaw nres nkoj lossis tshwj xeeb sau npe xws li DDRB thiab pom dab tsi tshwm sim thaum koj sim sib sau ua ke.

Ib daim ntawv sau npe muaj ib byte (8 khoom) ntawm cov ntaub ntawv. Qhov tseem ceeb nws feem ntau yog sau los ntawm SR-Latches txhua tus yog "me ntsis" thiab muaj 1 lossis 0. Peb tuaj yeem tham txog qhov no (thiab txawm tsim ib qho!) Tej zaum koj yuav xav tsis thoob dab tsi yog "ua haujlwm rau npe" thiab vim li cas peb thiaj xaiv r16. Peb yuav tham txog qhov kev qhia yav tom ntej thaum peb dhia mus rau hauv quagmire ntawm sab hauv ntawm cov nti. Txog tam sim no kuv xav kom koj nkag siab yuav ua dab tsi xws li sau code thiab program lub cev khoos phis tawj. Tom qab ntawd koj yuav muaj cov kab ke siv los ntawm qhov kev paub dhau los uas yuav ua rau lub cim xeeb thiab sau npe cov khoom ntawm lub microcontroller nkag siab yooj yim dua. Kuv paub tias feem ntau phau ntawv qhia thiab kev sib tham ua qhov no nyob ib puag ncig tab sis kuv tau pom tias ua yeeb yaj kiab game ib pliag ua ntej kom tau txais kev pom thoob ntiaj teb ua ntej nyeem phau ntawv qhia yog yooj yim dua li nyeem phau ntawv qhia ua ntej.

rjmp Init; thawj kab ua tiav

Kab ntawv no yog "txheeb ze dhia" rau daim ntawv lo "Init" thiab tsis tsim nyog tiag ntawm no txij li cov lus txib tom ntej twb muaj hauv Init tab sis peb suav nrog nws rau yav tom ntej siv.

Thawj:

txias txias; teev tag nrho cov khoom hauv qhov kub txog 1's.

Tom qab Init daim ntawv lo peb ua tiav qhov "teeb tsa sau npe" cov lus txib. Qhov no teeb tsa tag nrho ntawm 8 qhov khoom hauv npe "temp" (uas koj nco qab yog r16) rau 1's. Yog li qhov ntsuas tam sim no muaj 0b11111111.

tawm DDRB, temp; teeb tsa me ntsis li 1 ntawm Cov Ntawv Qhia Cov Ntaub Ntawv I/O sau npe

; rau PortB, uas yog DDRB, teeb tsa tus pin li tso tawm; a 0 yuav teeb tus pin ntawd ua tswv yim; yog li ntawm no, txhua tus PortB pins yog cov txiaj ntsig (teeb rau 1)

Sau npe DDRB (Cov Ntaub Ntawv Taw Qhia rau PortB) qhia cov pins ntawm PortB (piv txwv li PB0 txog PB7) raug xaiv los ua tswv yim thiab uas raug xaiv los ua cov khoom tawm. Txij li thaum peb muaj tus pin PB0 txuas nrog peb LED thiab tus so tsis txuas nrog txhua yam peb yuav teeb tsa txhua qhov khoom rau 1 lub ntsiab lus lawv yog txhua qhov txiaj ntsig.

ldi kub, 0b11111110; thauj tus lej 'tam sim ntawd' rau lub sijhawm teev npe

; yog tias nws tsuas yog ld ces qhov kev sib cav zaum thib ob yuav; yuav tsum yog qhov chaw nco

Kab no thauj tus lej binary 0b11111110 rau hauv qhov ntsuas kub.

tawm DDRD, qhov kub; mv temp rau DDRD, qhov tshwm sim yog PD0 yog cov tswv yim thiab

; tas yog cov zis

Tam sim no peb teeb tsa Cov Ntaub Ntawv Taw Qhia rau PortD los ntawm qhov kub, txij li lub sijhawm tseem muaj 0b11111110 peb pom tias PD0 yuav raug xaiv los ua tus pin nkag (vim tias muaj 0 nyob rau qhov chaw sab xis) thiab qhov seem raug xaiv raws li qhov tshwm sim vim muaj 1 nyob hauv cov chaw ntawd.

clr kub; tag nrho cov khoom hauv qhov kub tau teem rau 0's

tawm PortB, qhov kub; teeb tag nrho cov khoom (piv txwv li pins) hauv PortB rau 0V

Ua ntej peb "tshem tawm" lub sijhawm teev npe uas txhais tau tias teeb tsa tag nrho cov khoom rau xoom. Tom qab ntawd peb luam qhov ntawd rau PortB sau npe uas teev 0V ntawm txhua tus pin ntawd. Xoom ntawm PortB ntsis txhais tau tias tus txheej txheem yuav khaws tus pin ntawm 0V, ib qho ntawm qhov me ntsis yuav ua rau tus pin teeb tsa rau 5V.

Kev tawm dag zog 2: Siv lub ntsuas ntsuas los ntsuas seb txhua tus pins ntawm PortB yog qhov tseeb. Puas muaj qee yam txawv mus nrog PB1? Ib lub tswv yim vim li cas qhov ntawd yuav yog? (zoo ib yam li Nqe Lus 4 hauv qab no ua raws cov cai…) Qoj 3: Tshem ob kab saum toj no los ntawm koj cov cai. Puas yog txoj haujlwm tseem ua haujlwm raug? Vim li cas?

ldi kub, 0b00000001; thauj tus lej tam sim ntawd mus rau qhov kub

tawm PortD, qhov kub; txav sijhawm mus rau PortD. PD0 yog ntawm 5V (muaj lub zog rub tawm); vim nws muaj 1 hauv qhov me ntsis qhov seem yog 0V. Qoj 4: Tshem ob kab saum toj no los ntawm koj cov cai. Puas yog txoj haujlwm tseem ua haujlwm raug? Vim li cas? (Qhov no txawv ntawm Kev Ua Haujlwm 3 saum toj no. Saib tus pin tawm daim duab. Dab tsi yog DDRD qhov teeb tsa ua ntej rau PD0? (Saib nplooj ntawv 90 ntawm cov ntawv xov xwm.

Ua ntej peb "thauj tam sim" tus lej 0b00000001 mus rau qhov kub. Ib feem "tam sim ntawd" nyob ntawd vim tias peb tab tom thauj tus lej ncaj qha mus rau qhov ntsuas ntau dua li tus taw qhia rau qhov chaw nco uas muaj tus lej kom thauj khoom. Hauv qhov xwm txheej ntawd peb tsuas yog siv "ld" ntau dua li "ldi". Tom qab ntawd peb xa tus lej no mus rau PortD uas teev PD0 txog 5V thiab tas rau 0V.

Tam sim no peb tau teeb tsa tus pin raws li kev tawm tswv yim lossis tso tawm thiab peb tau teeb tsa lawv lub xeev thawj zaug xws li 0V lossis 5V (LOW lossis HIGH) thiab yog li tam sim no peb nkag mus rau peb qhov program "voj".

Qhov tseem ceeb: hauv qhov kub, PinD; PinD tuav lub xeev PortD, luam qhov no mus rau qhov ntsuas

; yog tias khawm txuas nrog PD0 ces qhov no yuav yog; a 0 thaum khawm raug thawb, 1 txwv tsis pub txij li; PD0 muaj qhov rub tawm tus neeg tawm tsam nws ib txwm nyob ntawm 5V

Sau npe PinD muaj lub xeev tam sim no ntawm PortD pins. Piv txwv li, yog tias koj txuas 5V xaim rau PD3, tom qab ntawd lub voj voog tom ntej (uas tshwm sim 16 lab zaus ib pliag txij li peb muaj lub microcontroller txuas mus txog 16MHz moos teeb liab) PinD3 ntsis (los ntawm lub xeev tam sim no ntawm PD3) yuav dhau los ua 1 tsis yog 0. Yog li hauv kab no peb luam lub xeev tam sim no ntawm tus pin rau qhov ntsuas.

tawm PortB, qhov kub; xa 0's thiab 1's nyeem saum toj no mus rau PortB

; qhov no txhais tau tias peb xav kom LED txuas nrog PB0, yog li; thaum PD0 yog LOW, nws yuav teeb PB0 rau LOW thiab tig; ntawm LED (lwm sab ntawm LED txuas nrog; rau 5V thiab qhov no yuav teeb PB0 txog 0V yog li tam sim no ntws)

Tam sim no peb xa lub xeev tus pin hauv PinD mus rau PortB cov zis. Ua tau zoo, qhov no txhais tau tias PD0 yuav xa 1 mus rau PortD0 tshwj tsis yog lub pob nyem. Qhov ntawd vim tias khawm tau txuas nrog hauv av uas tus pin yuav nyob ntawm 0V thiab nws yuav xa 0 mus rau PortB0. Tam sim no, yog tias koj saib daim duab kos duab, 0V ntawm PB0 txhais tau tias LED yuav ci vim tias sab nraud ntawm nws yog 5V. Yog tias peb tsis nias lub pob, yog li 1 xa mus rau PB0, qhov ntawd txhais tau tias peb muaj 5V ntawm PB0 thiab tseem 5V ntawm lwm sab ntawm LED thiab yog li tsis muaj qhov sib txawv thiab tsis muaj tam sim no yuav ntws thiab yog li LED yuav tsis ci (qhov no nws yog LED uas yog diode thiab yog li tam sim no tsuas yog ntws ib qho kev coj ua tsis hais qhov twg tab sis xijpeem).

rjmp Qhov tseem ceeb; loops rov qab rau Pib

Cov txheeb ze no dhia loo peb rov mus rau peb Qhov Tseem Ceeb: daim ntawv lo thiab peb tshawb xyuas PinD dua thiab ntxiv rau. Txheeb xyuas txhua txhua 16 lab tus thib ob seb lub pob raug thawb thiab teeb tsa PB0 raws li.

Qoj 5: Hloov kho koj cov cai kom koj LED txuas nrog PB3 hloov PB0 thiab pom tias nws ua haujlwm. Qhov 6: Txuas koj lub LED rau hauv GND hloov 5V thiab hloov kho koj cov cai kom raug.

Kauj Ruam 4: Xaus

Hauv qhov kev qhia no peb tau tshawb nrhiav ntxiv cov lus sib dhos rau ATmega328p thiab kawm paub yuav ua li cas thiaj tswj tau LED nrog lub laub khawm. Tshwj xeeb peb tau kawm cov lus txib hauv qab no:

ser sau npe teev tag nrho cov khoom ntawm kev sau npe rau 1's

clr sau npe teev tag nrho cov khoom ntawm kev tso npe rau 0's

hauv kev sau npe, i/o sau npe tus lej los ntawm i/o rau npe rau npe ua haujlwm

Hauv qhov kev qhia tom ntej peb yuav tshuaj xyuas tus qauv ntawm ATmega328p thiab ntau yam kev sau npe, kev ua haujlwm, thiab cov peev txheej muaj nyob rau ntawd.

Ua ntej kuv txuas ntxiv nrog cov kev qhia no kuv yuav tos thiab pom qib kev txaus siab. Yog tias muaj coob tus neeg uas tau txaus siab kawm paub yuav ua li cas rau cov program rau microprocessor hauv cov lus sib dhos ces kuv yuav txuas ntxiv thiab tsim cov kab ke nyuaj dua thiab siv cov lej muaj zog ntau dua.

Pom zoo: