Помощ необходими за 8bit да 10bit конверсия

C

comsians

Guest
Аз използвам PIC 16F877 сега искам да прехвърлите данните си, която присъства в SSPBUF на Prot паралелно начин на 10bit по такъв начин, че 8bit е пълна консумирани от пристанището 2 и да 2bit (два щифта) от пристанището три начина, по който е възможно

Използвам Masking или друга техника?PLZ ми помогне, ако маскиране Как?

 
Ако други игли на пристанището са входове, не е нужно да правите нищо друго, просто напишете до пристанището.Само на две игли, които са резултатите ще бъдат засегнати.

Ако други игли пристанище са резултатите и те са посветени на други функции, тогава вие не искате да ги наруши и актуализиране на другите два бита.Трябва да се прикрие тях.Това, което предлагаме е да съхранява копие на това, което пише в това пристанище, да речем PORT_MIRROR.Сега, когато пиша за това пристанище, актуализиране на огледалото, също.
Уверете се, че имате маска (МАСКА, е нули), който изчиства два бита, които ще дойдат от някъде другаде, казват, че идват от изходен код.
Може да се наложи втора маска, че изчиства всички битове, с изключение на тези, които трябва да се актуализира, MASK_1.Това е допълнение на маската.
Преди да кандидатствате MASK_1, можете да го завъртите няколко операции, в случай на бита не са в позицията, която искате, да кажем за бита да прочетете са в позиции, 5:4 и се нуждаете тона пишете на пристанище пина 2:1.Можете първа смяна на бита, а след това се маска на почивка, тогава да направи или и др

Не забравяйте, че трябва да пишете на огледалото, когато промените някоя от други игли пристанище, също.

Друг techique е просто тест на бита на източника и след това / изчистване на пристанище пина.Това води до изводите, не са актуализирани в същото време, но ако това е приемливо, след което можете да използвате тази техника, също.Код:movlw МАСКА; изчистете два бита в огледалото, които се нуждаят от актуализиране

andwf PORT_MIRROR, F;

movf източник, W; прочетете два бита от извора

andlw MASK_1; ясни всички останали битове, ако те могат да бъдат различни от нула, с изключение на двете ви трябва

iorwf PORT_MIRROR, W; форма байт сега

movwf PORT_MIRROR; актуализация огледало

movwf пристанище; актуализация пристанище пина

 
Тук ми е подробно изискването за моя проект

PIC ще изисква аз ˛ C да прочете CMPS03 компас модул

Ми предпочитание е за 10 пина предоставяне на 10-битов паралелно производство представлява цяло число данните, получени от компас модул.

10-изводен връзки директно ще се свърже с модул VIOM.

Имам при условие, че дадените по-долу код

Цитат:

грозен Int get_cmps03 (Void)

(

грозен Int лагер;СОП = 1; / / изпрати малко на проекта

докато (СОП); / / и го чакаме, за да изчистите

ACKDT = 0; / / потвърдя малко

SSPIF = 0;

SSPBUF = CMPS03_ADDR / / cmps03 I2C адрес

докато (! SSPIF); / / чакам за прекъсване

SSPIF = 0; / / след това ясно.

SSPBUF = 2; / / адрес на регистър за четене - висока байт на резултата

докато (! SSPIF); / /

SSPIF = 0; / /

RSEN = 1; / / изпрати повторно малко на проекта

докато (RSEN); / / и го чакаме, за да изчистите

SSPIF = 0; / /

SSPBUF = CMPS03_ADDR 1 / / cmps03 I2C адрес - с прочетете малко в стаята

докато (! SSPIF); / / чакам за прекъсване

SSPIF = 0; / / след това ясно.

RCEN = 1; / / започнете да получавате

докато (! STAT_BF); / / чакам за високо байт на лагер

лагер = SSPBUF <<8; / / и си я вземи

ACKEN = 1; / / на проекта признават последователност

докато (ACKEN); / / чакам за АСК.
последователност до края

RCEN = 1; / / започнете да получавате

докато (! STAT_BF); / / чакам за ниско байт на лагер

лагер = SSPBUF / / и си я вземи

ACKDT = 1; / / не признават за последния байт

ACKEN = 1; / / на проекта признават последователност

докато (ACKEN); / / чакам за АСК.
последователност до края

PEN = 1; / / изпрати спрете малко

докато (PEN); / /

връщане лагер;

)
 

Welcome to EDABoard.com

Sponsor

Back
Top