This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

8051 C complier

Hello all,

I have been programming the 8051 chip using assembly for small programs and applications such as A to D converter, alarm clock, etc. In which I have learned that it is a great pain to do more complicated projects with assembly, as the number of lines of codes get larger and harder to track.

I have downloaded the uVision 4 C complier to try to replace assembly, but I'm having difficulties learning how to use it. I have had C/C++ programming before, but I must admit it has been a while since I used it.

Are there any tutorials on programming the 8051 using C?

Also, I have been trying to duplicate my counter project (counting from 0 to 99 using assembly code) with C. I have it count from 0 to 9, but I could not figure out how to do decimal adjust using C. Any idea? In assembly the code is simply DA

Thanks all,
Woozie

Parents
  • First step.

    Learn the operators.

    Then you would know that x % 10 would perform a modulo operation, and extract the least significant decimal value from a number. And you would know that x / 10 would perform (in this case) an integer divide, and throw away the least significant decimal digit - which (if your number is strictly within the 0..99 range) would extract the most significant decimal digit.

    And combining the above knowledge, you would then understand that ((x / 10) % 10) would support numbers larger than 99, and extract the second least significant digit, so if you had the number 12345 (given that x has a data type that can store this, i.e. a 16-bit or larger type and not an 8-bit type) it would first cut away the digit (5) giving 1234 and then extract that last decimal digit (4).

    And you would then also know the meaning of << and understand that (expr) << 4 would multiply that value by 16 by moving the value four steps to the left in the variable, leaving the four lowest bits zero.

    And you would also know that | is a bit-and, so it will merge the bit patterns from the expression to the left, and the expression to the right.

    So suddenly, you would see of the expression takes a numeric value x, splits out the two least significant decimal digits from it, and place them in the high and low nibble of the P1 port.

    The code would be a bit simpler if it could assume that the number is already from the start in the 0..99 range, but as written it allows values larger than 99, by throwing away higher-valued decimal digits.

    C isn't black magic. There are few operators. There are few reserved keywords. Programs are just formed by combining these few LEGO pieces into larger and larger constructs, until you get a program that performs the task at hand.

    So your goal must be to learn what LEGO pieces you have access to. And then figure out how to subdivide your task into smaller pieces until each piece is small enough that you are able to convert that little subtask into individual C statements.

Reply
  • First step.

    Learn the operators.

    Then you would know that x % 10 would perform a modulo operation, and extract the least significant decimal value from a number. And you would know that x / 10 would perform (in this case) an integer divide, and throw away the least significant decimal digit - which (if your number is strictly within the 0..99 range) would extract the most significant decimal digit.

    And combining the above knowledge, you would then understand that ((x / 10) % 10) would support numbers larger than 99, and extract the second least significant digit, so if you had the number 12345 (given that x has a data type that can store this, i.e. a 16-bit or larger type and not an 8-bit type) it would first cut away the digit (5) giving 1234 and then extract that last decimal digit (4).

    And you would then also know the meaning of << and understand that (expr) << 4 would multiply that value by 16 by moving the value four steps to the left in the variable, leaving the four lowest bits zero.

    And you would also know that | is a bit-and, so it will merge the bit patterns from the expression to the left, and the expression to the right.

    So suddenly, you would see of the expression takes a numeric value x, splits out the two least significant decimal digits from it, and place them in the high and low nibble of the P1 port.

    The code would be a bit simpler if it could assume that the number is already from the start in the 0..99 range, but as written it allows values larger than 99, by throwing away higher-valued decimal digits.

    C isn't black magic. There are few operators. There are few reserved keywords. Programs are just formed by combining these few LEGO pieces into larger and larger constructs, until you get a program that performs the task at hand.

    So your goal must be to learn what LEGO pieces you have access to. And then figure out how to subdivide your task into smaller pieces until each piece is small enough that you are able to convert that little subtask into individual C statements.

Children