| поискавой системы для электроныых деталей |
|
STC89C53RC датащи(PDF) 152 Page - STCmicro Technology Co,.Ltd |
|
|
|||||||||||||||||||||||||||||
STC89C53RC датащи(HTML) 152 Page - STCmicro Technology Co,.Ltd |
|
152 / 165 page ![]() Parameter Passing A macro with parameters passed from the main program has the following modified format: %*DEFINE (macro_name (parameter_list)) (macro_body) For example, if the following macro is defined, %*DEFINE (CMPA# (VALUE)) (CJNE A, #%VALUE, $ + 3 ) then the macro call %CMPA# (20H) will expand to the following instruction in the .LST file: CJNE A, #20H, $ + 3 Although the 8051 does not have a "compare accumulator" instruction, one is easily created using the CJNE instruction with "$+3" (the next instruction) as the destination for the conditional jump. The CMPA# mnemonic may be easier to remember for many programmers. Besides, use of the macro unburdens the programmer from remembering notational details, such as "$+3." Let's develop another example. It would be nice if the 8051 had instructions such as JUMP IF ACCUMULATOR GREATER THAN X JUMP IF ACCUMULATOR GREATER THAN OR EQUAL TO X JUMP IF ACCUMULATOR LESS THAN X JUMP IF ACCUMULATOR LESS THAN OR EQUAL TO X but it does not. These operations can be created using CJNE followed by JC or JNC, but the details are tricky. Suppose, for example, it is desired to jump to the label GREATER_THAN if the accumulator contains an ASCII code greater than "Z" (5AH). The following instruction sequence would work: CJNE A, #5BH, $÷3 JNC GREATER_THAN The CJNE instruction subtracts 5BH (i.e., "Z" + 1) from the content of A and sets or clears the carry flag accordingly. CJNE leaves C=1 for accumulator values 00H up to and including 5AH. (Note: 5AH-5BH<0, therefore C=1; but 5BH-5BH=0, therefore C=0.) Jumping to GREATER_THAN on the condition "not carry" correctly jumps for accumulator values 5BH, 5CH, 5DH, and so on, up to FFH. Once details such as these are worked out, they can be simplified by inventing an appropriate mnemonic, defining a macro, and using the macro instead of the corresponding instruction sequence. Here's the definition for a "jump if greater than" macro: %*DEFINE (JGT (VALUE, LABEL)) (CJNE A, #%VALUE+1, $+3 ;JGT JNC %LABEL ) To test if the accumulator contains an ASCII code greater than "Z," as just discussed,the macro would be called as %JGT ('Z', GREATER_THAN) ASM51 would expand this into CJNE A, #5BH, $+3 ;JGT JNC GREATER_THAN The JGT macro is an excellent example of a relevant and powerful use of macros. By using macros, the programmer benefits by using a meaningful mnemonic and avoiding messy and potentially bug-ridden details. 152 |
|
ссылки URL |
| Вашему бизинису помогли Аллдатащит? [ DONATE ] |
Что такое Аллдатащит | реклама | контакт | Конфиденциальность | Ссылка на техническое описание | обмен ссыками | поиск по производителю All Rights Reserved©Alldatasheet.com |
| Russian : Alldatasheetru.com | Korean : Alldatasheet.co.kr | Spanish : Alldatasheet.es | French : Alldatasheet.fr | Italian : Alldatasheetit.com Portuguese : Alldatasheetpt.com | Polish : Alldatasheet.pl | Vietnamese : Alldatasheet.vn Indian : Alldatasheet.in | Mexican : Alldatasheet.com.mx | British : Alldatasheet.co.uk | New Zealand : Alldatasheet.co.nz |
|
Family Site : ic2ic.com |
icmetro.com |