We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello everybody, I am a new entrant in 8051 programming. I am able to set bits in assembly language. But when I tried to set bits in c using Keil IDE, the bits are not getting set even after using bitset function as preprocessor. The bits are flickering when pressed any button. Otherwise they are stable. Please have a look on my coding for setting the P1 bits. Please tell me what is wrong in the coding below to set bits?
#include <reg51.h>
#define bitset(a,b) ((a)|=(1<<(b))) #define bitclear(a,b) ((a)&= (1<<(b)))
sbit LEDtest = P1^7; sbit PB0_0 = P0^0; sbit PB0_1 = P0^1; static char bdata ibase; sbit pb00 = ibase^0; sbit pb01 = ibase^1; sbit firstscandone = ibase^2; sbit testbit1=ibase^3;
void delay1(int counts) { int i, j; for(i=0; i<1000;i++) for(j=0; j<counts; j++); }
void init1(void) { delay1(20); P0=0xff; P1=0x00; P0=0x00; P1=0x00; ibase=0; //firstscandone=1; bitset(ibase,2); testbit1=1; }
void debounce(void) { int x, y; if(PB0_0==1) { for(x=0; x<20; x++); if(PB0_0==1) { pb00=1; } else pb00=0; }
if(PB0_1==1) { for(y=0; y<20; y++); if(PB0_1==1) { pb01=1; } else pb01=0; } }
void main(void) { if(firstscandone==0) init1(); bitset(ibase,2); debounce(); if (pb00==1) { bitset(P1,4); delay1(10); bitclear(P1,5); }
if(pb01==1) { bitset(P1,5); delay1(10); bitclear(P1,4); } if(firstscandone==1) bitset(P1,7); }