| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| проблем с MOVWF http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=16073 |
Страница 1 от 1 |
| Автор: | stefan63 [ Сря Авг 08, 2018 6:26 am ] | |||||||||
| Заглавие: | Re: проблем с MOVWF | |||||||||
Клетките от паметта ...слагай им по-смислени имена A1_oboroti , A2_impulsi,... На константите също - cA3_impulsizaoborot . Ти коректно си пипнал банк бита RP0, и реално програмата ще запише OPTION_REG ,а не TMR0. Обаче програмата Асемблер (на Майкрочип) иска всеки път да 'и укажеш със служебна директива в коя банка си/или искаш да си. Не си спомням дали самата директива генерира реда 'BSF STATUS,RP0' . Директивата май беше BANKSEL |
||||||||||
| Автор: | stefan63 [ Сря Авг 08, 2018 6:50 am ] | |||||||||
| Заглавие: | Re: проблем с MOVWF | |||||||||
banksel - Generate Bank Selecting Code Syntax banksel label Description This directive is an instruction to the assembler and linker to generate bank selecting code to set the bank to the bank containing the designated label. Only one label should be specified. No operations can be performed on label. This label must have been previously defined. The linker will generate the appropriate bank selecting code: For 12-bit instruction width (PIC10F, some PIC12/PIC16) devices, the appropriate bit set/clear instructions on the FSR will be generated. For 14-bit instruction width (most PIC12/PIC16) devices, bit set/clear instructions on the STATUS register will be generated. For PIC16 extended and PIC18 devices, a movlb will be generated. If the device contains only one bank of RAM, no instructions will be generated.
|
||||||||||
| Автор: | stefan63 [ Сря Авг 08, 2018 7:33 am ] |
| Заглавие: | Re: проблем с MOVWF |
Не е добре променливите да ги "обявяваш" с константи за адреси. Има си директиви за разполагане на твои променливи в регистър-файла. Ако си мислил А1 и А2 да са адреси на твои променливи - в 16Ф84 свободните клетки РАМ започват от адреси D'12'. - на адреси 2 и 7 има специални регистри; Когато утре смениш процесора, свободните клетки ще се разполагат на друго място ,от друг начален адрес и ще ти се наложи ред по ред да променяш "обявите" на променливите . Ще има недоглеждания и съответно - недоспивания. Остави асемблера да се оправя - той затова е там Та започни да четеш - поне описанието на директивите. На днешно време - рядко се почва от асемблер , но си има предимства - така по-пълно ще схванеш концепциите в контролерите. Има си и недостатъци... |
|
| Автор: | CarBeta [ Сря Авг 08, 2018 11:59 am ] | |||||||||
| Заглавие: | Re: проблем с MOVWF | |||||||||
Асемблерът си работи правилно и изпълнява точно каквото си му казал. Очевидно не си разбрал правилно какво точно изпълняват тия команди. Проблемът ти с MOVWF A2 идва от това, че ти очакваш А2 да приеме стойността на А1, което няма как да стане в твоя случай. Ако искаш това да стане трябва да декларираш адрес от паметта, на който да отговаря А2. Ти всъщност точно това си направил, но на адрес 2 е PCL, и ти няма как да го промениш това. Трябва да използваш адреси, които са свободни и са предвидени точно за тая работа. За твоя процесор тия адреси започват от 0х0C. Правилният начин е да декларираш A2 EQU Н'0С' и след това ако искаш да присвоиш някаква стойност на А2 - пишеш някъде в програмата: MOVLW "стойност някаква" MOVWF A2 |
||||||||||
| Автор: | slav4o.com [ Сря Авг 08, 2018 6:11 pm ] |
| Заглавие: | Re: проблем с MOVWF |
MOLVW A1 - вземаш А1 (неговият адрес) ако А1 е 0х20 се записва 0х20 във W MOVF A1,W - вземаш стойността записана на адрес А1 (във W се записва, каквото има на адрес 0x20) |
|
| Автор: | asen_c [ Чет Авг 09, 2018 12:14 am ] |
| Заглавие: | Re: проблем с MOVWF |
Благодаря за съдействието CarBeta е разбрал какво искам да направа и къде бъркам ( мерси). Мислех, че по начина по който ги дефиинирам А1, А2 задавам стойности на самия регистър, а не адрес на регистъра. да наистина искам да ползвам А1 и А2 като променливи. Не мога да разбера мога ли да ги дефинирам (в началото на програмата) тези променливи без да оказвам конкретна клетка от паметта. Т.е. да остава асемблера да решава. Мерси предварително. |
|
| Автор: | slav4o.com [ Чет Авг 09, 2018 12:39 am ] |
| Заглавие: | Re: проблем с MOVWF |
Точно това ти обаснявам, че ти си взел адреса на регистъра вместо неговото състояние. Тук не се работи с променливи, а само с указатели към регистри от паметта. със MOVF A1,W четеш съдържанието на регистър с адрес А1 все едно си написъл MOVF D'7',W . Това ти трябва. със MOVLW A1 четеш адреса на регистъра. Ако A1 EQU D'7' , то все едно си написъл MOVLW D'7' И отделно че на адрес 7 което е 0x07 има някакъв регистър от контролера, не свободен RAM. Трябва да видиш кои са за RAM. CarBeta ти е написал, 0x0C това е D'12'. Малко не ми се връзва по скоро 0xC0 ще да е, но ти го провери. Но това е в общи линии. edit : да 0х0С е за 16F84 |
|
| Автор: | stefan63 [ Чет Авг 09, 2018 7:09 am ] | |||||||||
| Заглавие: | Re: проблем с MOVWF | |||||||||
|
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|